“Our model hits 0.9 mAP50.” It sounds like a pass. On an inspection line it is closer to a starting question than an answer. A single averaged number cannot tell you whether the line will catch the defect it exists to catch, or whether the industrial computer can hold that accuracy at line speed. mAP50 is a useful diagnostic, but only once you know what it averages over and what it silently drops. The mistake we see most often when engineering leads scope a first computer-vision inspection deployment is treating mAP50 as a pass/fail accuracy target — pick a threshold like 0.9, buy hardware to hit it, and consider accuracy settled. That reads the metric as a proxy for how well the line will inspect. It isn’t. mAP50 is an average of averages, taken at one fixed localisation tolerance, across every defect class in your dataset. Each of those three properties changes what the number is worth. How does mAP50 actually work? mAP50 is the mean, across all your object classes, of the average precision (AP) computed for each class at an intersection-over-union (IoU) threshold of 0.5. Two things are being folded together, and it helps to unfold them. First, for a single class, average precision summarises the precision-recall curve: as you lower the model’s confidence threshold you catch more true defects (higher recall) but also admit more false alarms (lower precision). AP integrates that trade-off into one number between 0 and 1. Second, mAP50 then averages that per-class AP across every class — a scratch class, a dent class, a print-registration class — weighting each equally regardless of how much each defect actually costs you. So a 0.9 mAP50 means: on average, weighting all classes equally, at a 0.5 localisation tolerance, the precision-recall behaviour was strong. That is a genuinely informative statement about a model on a dataset. It is not a statement about whether your line will catch hairline cracks. The averaging is exactly where line-relevant information disappears — a point that becomes concrete once you look at how an image detection model works in industrial inspection and how uneven defect classes usually are in real production data. What does the IoU=0.5 threshold actually mean, and why does it change how you read the number? The “50” in mAP50 is the IoU threshold: a predicted bounding box counts as a correct detection only if it overlaps the ground-truth box by at least 50%. Below that overlap, the same detection is scored as a miss plus a false positive, even though the model clearly saw the defect. IoU=0.5 is a loose localisation bar. A box that is roughly in the right place, half-overlapping the true defect, still counts. For a coarse “is there a defect somewhere in this region” task that is often fine. For measurement-grade tasks — verifying a solder fillet is the right size, checking a crack has not grown past a length spec — a box that is only 50% aligned is not accurate enough to drive the downstream decision, yet mAP50 credits it as a hit. This is why mAP50 and the stricter mAP50-95 (which averages AP across IoU thresholds from 0.5 to 0.95) can tell very different stories about the same model. A model can score high on mAP50 and drop sharply as the localisation bar tightens. If your line cares about where and how big the defect is, not just whether it exists, mAP50 alone flatters the model. We walk through that divergence in detail in mAP50 vs mAP50-95: reading CV inspection metrics on the line. Why can a high aggregate mAP50 still miss the defect class the line exists to catch? Because the mean hides the minimum. This is the failure that quietly ends deployments. Suppose a model is trained on eight defect classes. Seven are common, visually obvious, and well-represented in the training set — the model nails them, each with AP near 0.95. The eighth is a rare hairline-crack class: few labelled examples, subtle appearance, AP of maybe 0.4. The mean across all eight is still around 0.88 — a headline number that looks like a pass. But the one class that carries the recall cost, the crack that ships to a customer and triggers a return, is the one the model is weakest on. The aggregate number rewarded the model for being good at the defects that were never the problem. An inspection line does not exist to catch the average defect. It exists to catch the specific defect that carries cost, and often that is the rare, hard-to-see class that drags per-class AP down while barely moving the mean. Reading mAP50 as a single accuracy target structurally blinds you to this. The correct frame — one we return to across the [computer vision practice](computer vision) — is that aggregate mAP50 is a sanity check, and per-class recall on the cost-bearing defects is the number that actually decides feasibility. How does mAP50 relate to per-class recall and the false-positive rate the line can tolerate? mAP50 collapses the precision-recall trade-off into one area figure. A running line does not operate on an area under a curve; it operates at a single chosen operating point — one confidence threshold — where two numbers matter more than the AP itself. Recall on the cost-bearing class is the escape rate: of the defects that must be caught, what fraction does the model flag at the threshold you deploy? Precision at that same point governs the false-positive rate: how many good parts get rejected or kicked to manual review. These trade against each other, and the line has a tolerance band on both. Reject too many good parts and operators start ignoring or overriding the system; miss the wrong defect and the whole business case collapses. mAP50 is agnostic to where on that curve you deploy. Two models with identical mAP50 can sit at very different, non-interchangeable operating points. That is why the metric feeds the decision but does not make it. This is the same operating-point reasoning that governs whether a real-time object detection model on the production line is actually usable at your reject rate, not just on the validation set. Quick-answer block: what mAP50 does and doesn’t tell you Question Does mAP50 answer it? What actually answers it Is the model broadly competent across classes? Yes mAP50 aggregate benchmark Will the line catch the one defect that carries cost? No Per-class recall on that class at deploy threshold How many good parts will be falsely rejected? No Precision at the chosen operating point Is localisation tight enough for measurement tasks? No mAP50-95 / higher-IoU AP Can the model hold this accuracy at line speed? No Inference latency at throughput on the target box How should mAP50 be decomposed in a feasibility audit rather than read as a single accuracy target? The move that turns a headline number into a decision is decomposition. Instead of asking “does the model hit 0.9 mAP50,” a feasibility read asks three separate questions and refuses to average them away. Decompose by class first. Pull the per-class AP and, more importantly, the per-class recall at a realistic deploy threshold. Rank the classes by the cost of a miss, not by their frequency in the dataset. If the cost-bearing class sits below the band your quality process needs, the aggregate mAP50 is irrelevant — no amount of averaging repairs the one number that matters. Decompose by localisation next. Compare mAP50 against a stricter IoU. If the model’s score falls off a cliff as the IoU bar rises, its boxes are approximate, and any downstream measurement task is on shaky ground. Decompose by operating point last. Fix the confidence threshold you would actually deploy, then read recall and precision at that point per class. The result is a set of per-class, per-tolerance feasibility bands rather than one line-speed guarantee. When we run a GPU Performance Audit scoped to a vision pipeline, the achievable-accuracy bands are expressed exactly this way — per defect class and per latency budget — so that mAP50 is decomposed rather than read as a single number. The assessment methodology behind that decomposition is what turns a raw figure into a per-class, per-latency judgement on real industrial compute, and it draws on the same [R&D engagement approach](computer vision) we use to scope any inspection problem. How does the compute and latency envelope constrain what an mAP50 figure is worth at line speed? A model that scores 0.9 mAP50 in an offline evaluation and a model that sustains 0.9 mAP50 at line throughput are not the same deployment. Accuracy figures are almost always reported without a latency constraint, and the industrial computer at the edge has a hard one. Line speed sets a per-part latency budget — the milliseconds available to inference before the next part arrives. Hitting the same accuracy inside that budget usually forces trade-offs: a smaller backbone, a lower input resolution, INT8 quantisation via TensorRT, or batching that adds latency of its own. Each of those can move accuracy, and the class it moves accuracy on is rarely the class you were watching. A validation-set 0.9 mAP50 measured on a datacentre GPU with no throughput constraint can quietly become 0.85 with a shifted per-class profile once it is quantised and pinned to the latency envelope of an edge box. That is the core reason mAP50 must be read alongside the compute reality, not before it. An accuracy number without a named latency budget and target device is, at best, half a claim. How that plays out for a specific detector is the subject of YOLO inference on industrial CV inspection, where the gap between benchmark throughput and sustained line-speed throughput is where most surprises live. What complementary metrics should sit alongside mAP50 when scoping a deployment? mAP50 belongs in the scoping conversation. It should never be alone in it. The complementary set is small and specific: per-class recall on the cost-bearing defects, precision (or false-positive rate) at the deploy operating point, mAP50-95 where localisation accuracy matters, and sustained inference latency at throughput on the actual target hardware. Together those describe feasibility; mAP50 by itself describes a benchmark run. FAQ How should you think about map50 in practice? mAP50 is the mean, across all defect classes, of each class’s average precision computed at an IoU threshold of 0.5. It summarises the precision-recall trade-off per class and then averages those figures with equal weight. In practice it tells you a model is broadly competent across classes, but not whether it catches the specific defect that carries cost. What does the IoU=0.5 threshold in mAP50 actually mean, and why does it change how you read the number? IoU=0.5 means a predicted box counts as correct only if it overlaps the true defect by at least 50%. That is a loose localisation bar: a roughly-placed box still scores as a hit. For tasks that only need to know a defect exists it is adequate, but for measurement-grade tasks it flatters the model, which is why mAP50 and the stricter mAP50-95 can tell different stories. Why can a high aggregate mAP50 still miss the defect class an inspection line exists to catch? Because the mean hides the minimum. A model can score near-perfect on seven common classes and poorly on one rare, hard-to-see class, yet still post a high aggregate. If that weak class is the cost-bearing defect — a hairline crack, say — the headline number rewarded the model for being good at defects that were never the problem. How does mAP50 relate to per-class recall and the false-positive rate the line can tolerate at throughput? mAP50 collapses the whole precision-recall curve into one area figure, but a running line operates at a single chosen threshold. At that operating point, recall on the cost-bearing class is the escape rate and precision governs how many good parts get falsely rejected. Two models with identical mAP50 can sit at very different, non-interchangeable operating points. How should mAP50 be decomposed in a feasibility audit rather than read as a single accuracy target? Decompose it three ways: by class (per-class recall ranked by miss cost, not frequency), by localisation (compare against a stricter IoU), and by operating point (fix the deploy threshold and read recall and precision per class there). The result is a set of per-class, per-tolerance feasibility bands rather than one line-speed guarantee. How does the compute and latency envelope on the industrial computer constrain what an mAP50 figure is worth at line speed? Line speed sets a per-part latency budget, and hitting the same accuracy inside it usually forces trade-offs — smaller backbone, lower resolution, INT8 quantisation — that can shift the per-class accuracy profile. A validation-set mAP50 measured on an unconstrained datacentre GPU can change once the model is quantised and pinned to an edge box’s latency envelope. An accuracy figure without a named latency budget and target device is half a claim. What alternative or complementary metrics should sit alongside mAP50 when scoping an inspection deployment? Per-class recall on the cost-bearing defects, precision or false-positive rate at the deploy operating point, mAP50-95 where localisation accuracy matters, and sustained inference latency at throughput on the actual target hardware. Together these describe feasibility; mAP50 alone describes a benchmark run. The number on the slide is not the question. The question is which class it is hiding, at which operating point, inside which latency budget — and that is the decomposition a vision-pipeline GPU Performance Audit is built to produce.