I don’t think you’re doing anything wrong other than trying to do something in Pix4d that really needs to happen in a different piece of software. The reason that I don’t generate DTMs in Pix4d is because it always includes data I don’t want, or removes data that I do want. (I don’t consider this a flaw. Building surfaces like this should be done in other software anyways).
As an example (and even when manually classifying points in the raycloud editor), a large building that’s square-shaped will show up as a dome / bubble in the DTM and a stockpile or TOP grade break will round off the top. The way that Pix4d interpolates gaps in data (which would be created by classifying points as something non-ground during DTM generation) always caused me to scratch my head, but I saw a post from P4D Support in this forum last week that kind of answered the question. She said that even deleted/disabled points are included in DTM generation, they’re just weighted much lower. I assume that’s why these issues are always present, even when manually classifying points before DTM generation.
Either way, cliffs themselves create some unique challenges when you’re creating a surface and they usually require the digitization of breaklines (which you can actually do in Pix4d, just not with the option to include in the surface). The other issue is that most surface formats are 2.5D, not true 3D. So if your cliffs have overhangs in them, you’re really not going to be able to have them reflected in the surface when using the formats that most professionals are using.
If this is a regular process for you, I would highly recommend checking out Cloud Compare (free) and/or Global Mapper + Lidar Module (Relatively cheap, compared to alternatives) and working on becoming proficient in those. Sadly, nothing renders the point cloud as well as Pix4d, so it can be a little painful to navigate around in 3d in those other programs compared to Pix4d.