Most plateaus get misdiagnosed the same way. A model stops improving, and the team treats it as an optimisation problem: swap the optimiser, reshape the learning-rate schedule, add regularisation, train longer, throw more data at it. Sometimes that works. Often it burns weeks against a ceiling that no optimiser setting can move, because the ceiling was welded in by how the problem was stated, not by how hard it was trained. This piece is about a cheap test that tells the two cases apart before you spend the weeks. The test is to read the model's precision-recall signature and let its shape name the problem type for you.
We arrived at the test the expensive way, on a raster-log segmentation head that would not push. We have written that episode up in full elsewhere, as the account of a binary framing that plateaued and a switch to a single multiclass target that broke the ceiling. Here we do not re-run that story. We extract the general method it taught us, state it so any practitioner can apply it to their own stalled model, and use our own numbers only as a single worked example of what one signature looks like on the plane.
The signature is a fingerprint, not a score
Precision and recall are usually collapsed into one number, an F1 or an average, and then that number is maximised. Collapsing them throws away the one thing that carries the diagnosis: their relative position. A model with recall near total and precision near random has a different disease from a model with both near the floor, even when the two land at the same F1. The single number hides that. The pair does not.
So the first move is to refuse the collapse. Plot the head on a plane with precision on one axis and recall on the other, and look at which corner it sits in. The corner is the fingerprint. Four corners, four different problems, four different correct responses, and the whole value of the read is that it points you at the right lever before you have touched a wrong one.
- Both low. The model finds few of the true positives and is wrong about the ones it does call. This is an under-fit fingerprint, and it points at capacity or data: a stronger backbone, cleaner labels, a larger or better-balanced training set.
- High precision, low recall. The model is right when it commits but commits too rarely. This is a cautious model, and it points at the operating point: a threshold or a class weight, moved to trade some precision for the recall you are missing.
- Both high. There is nothing to chase. The head is doing its job.
- High recall, low precision. The model finds nearly everything and is wrong about most of what it calls. This is the corner that gets misread, and it is the subject of the rest of this piece.
Why high-recall, low-precision is not a tuning bug
The recall-high, precision-low corner looks like a knob problem because a knob puts you there. Reweight the loss so a missed positive costs far more than a false alarm, or push a class weight up, and the model rationally over-predicts the positive class: recall climbs to its ceiling, precision falls through the floor. Focal loss and its relatives were built precisely to manage that trade under scarcity [4]. Having arrived in that corner by turning a knob, the instinct is to turn it back or turn it further. Neither works, and the reason it neither works is what makes the signature diagnostic.
When recall is pinned near total and precision is on the floor, the loss has no term that charges the model for a false positive in the way the task needs. That is not a value you can dial in. In a target built as a stack of independent yes-or-no decisions, nothing says a pixel claimed by one class cannot also be claimed by another; each decision competes only against its own background, never against the other classes it is colliding with. There is no shared rule for who owns a pixel, so there is no gradient that separates two things that overlap. You can reweight forever inside that framing and only move where along the recall axis you sit. The precision ceiling stays because the constraint that would raise it was never in the objective. This lineage of dense-prediction work assumes a target shaped as one mutually exclusive assignment per pixel [1] [2], and the fix, when the signature says target-shape, is to adopt that shape rather than to keep tuning the one you have.
That is the whole tell. A missing constraint reads on the plane as a precision ceiling that no weight can lift. A merely under-trained model reads as both metrics low together. The two are different corners, and the corner is legible at a glance.
The worked example, in one datapoint
Our own case is one point in the recall-high, precision-low corner. On the raster-log head, the best binary curve mask sat at recall 0.97 and F1 0.55, which the harmonic-mean identity pins to a precision near 0.38. We had reached that point by pushing a class weight hard to rescue the thin foreground, and every further notch of weight bought recall we already had and cost precision we could not spare. The full account of how we redefined the target, from three independent binary masks to one three-class assignment, and what that reformulation cost to train, is the companion piece; the two-sentence version is that once every pixel belonged to exactly one class the boundary between two curves became something the loss owned, and the head came off the wall. What matters for the method is only where that point landed on the plane, and what its landing told us to do: stop tuning, restate the target.
The exhibit below is the map, not the story. It shows the four regimes and the lever each one names, with our best binary mask dropped in as a single labelled marker so you can see where a target-shape signature falls. The marker is one illustrative point; the quadrant logic is the general claim.
Running the test on your own model
The method fits on an index card. When a head plateaus, do not reach for the optimiser first. Read the signature, then match the lever.
Pull precision and recall out separately, per class, and never look only at the averaged number, because the average is exactly where an easy majority class hides a failing minority one. Place each class on the precision-recall plane and read its corner. If both are low, you are under-fit and the levers are capacity and data. If precision is high and recall is low, you are cautious and the lever is the operating point. If both are high, stop. And if recall is high while precision is low, treat it as a target-shape hypothesis, not a tuning task: before you touch the schedule or the regulariser, ask whether the classes are truly mutually exclusive in your target, whether the interesting behaviour lives at the boundaries between classes, and whether the loss has any term that charges the model for getting a boundary wrong. If the answer is that the target lets two classes claim the same thing for free, no optimiser setting will fix it, and the cheap read just saved you the weeks.
The corner does not tell you the fix in full. It tells you the family the fix belongs to, which is enough to stop you spending optimisation effort on a target-shape bug. That redirection, from tuning to restating, is the entire return on reading the signature first.
Limitations
The four-corner reading is a heuristic for pointing at a lever family, not a proof. Real heads land near boundaries or drift between corners across training, and a signature can be ambiguous when precision and recall are both middling rather than clearly pinned. The mapping assumes you are looking at per-class precision and recall on a held-out set that is not leaking, since a contaminated split can manufacture a both-high fingerprint that does not survive deployment. The single datapoint in the exhibit is from one raster-log engagement: the recall of 0.97 is a logged figure for the best binary mask under a heavy class weight, and the precision near 0.38 is derived from that recall and the logged F1 of 0.55 through the harmonic-mean identity, not separately measured, so it should be read as an illustration of where a target-shape signature falls and not as a benchmark. Finally, target-shape is one cause of a recall-high, precision-low signature and the most commonly missed one, but it is not the only one; a badly chosen decision threshold on a well-shaped target can imitate it, which is why the method ends in a question about the target rather than a verdict.
References
-
Long, J., Shelhamer, E., and Darrell, T. (2015). Fully Convolutional Networks for Semantic Segmentation. CVPR 2015. https://arxiv.org/abs/1411.4038
-
Ronneberger, O., Fischer, P., and Brox, T. (2015). U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI 2015. https://arxiv.org/abs/1505.04597
-
Milletari, F., Navab, N., and Ahmadi, S. (2016). V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation. 3DV 2016. https://arxiv.org/abs/1606.04797
-
Lin, T., Goyal, P., Girshick, R., He, K., and Dollar, P. (2017). Focal Loss for Dense Object Detection. ICCV 2017. https://arxiv.org/abs/1708.02002