Computer vision
Computer vision is the practice of turning camera images into detections a machine or a person can act on, and the model is rarely the hard part of it. What makes it hard here is that it runs on a device with a power budget and no network, on images unlike the ones it was trained on, feeding a decision where the two kinds of error are paid for by different people. The page opens with twelve field failures, the cause behind each and the check that catches it, then covers the budget on the device, the data problem, the threshold as a policy, what has to be recorded, and seven documented failures.
- Runs
- On the device, alone
- Hardest input
- The one you never trained on
- The threshold is
- A policy, not a metric
Twelve field failures, and the check for each
Here is the whole list first, because a detector rarely fails in the lab and very often fails in one of these twelve ways in its first months in the field. Each row pairs what you will see with what is actually wrong and the check that would have caught it before deployment. The rows are numbered so a review can say "we have no check for row 8", and the sections below refer to them by number.
| # | What you see in the field | What is actually wrong | The check that catches it |
|---|---|---|---|
| 1 | Excellent on the test set, poor in the first week | The test frames came from the same flights or sessions as the training frames, so the model was graded on scenes it had already seen. | Split by flight, place and date — never by frame. |
| 2 | Works where it was trained, fails in a new season or on a new camera | The deployment conditions — season, weather, sensor — were never in the training data. | Evaluate per condition; re-validate on every new sensor and before every new season. |
| 3 | Fine up close, blind at range | Too few pixels on the object at that altitude or focal length. | Evaluate by object size in pixels, and state the smallest size the system supports. |
| 4 | Slower and later in the field than on the bench | Heat throttling, and a latency measured without capture and queue. On a moving platform the lag is a position error. | Measure shutter to decision at operating temperature; stamp the time at the shutter. |
| 5 | A harmless-looking update breaks it | The device prepares images differently from training: resize, colour order, normalisation, quantisation. | A golden-image test of the whole on-device pipeline against reference outputs. |
| 6 | Scores 99.99% and finds nothing | Class imbalance: the model learned that "nothing here" is almost always right. | Report recall on the rare class and false alarms per hour — never overall accuracy. |
| 7 | Operators stop responding to alerts | Too many false alarms per operator-hour at the chosen threshold. | A written threshold policy with both error rates and a named owner. |
| 8 | Precision looks excellent, and something still got past | A miss produces no alert and no record, so nobody ever sees it. | Sample and review the frames the detector stayed silent on. |
| 9 | A confident answer on something it has never seen | The system has no way to say "I do not know". | An uncertain band routed to review, not to the operator. |
| 10 | An object loses its history every time its label flips | Tracking is keyed on the class, so a reclassified object starts again as a new one. | Track identity independent of the label, with the label as an attribute that can be revised. |
| 11 | It learned the wrong thing | A shortcut: the background, a watermark or the source of the image correlates with the label. | Slice results by source and background, and test on a source the model has never seen. |
| 12 | Fooled by a pattern, a cover or a decoy | The input is chosen by someone who wants detection to fail. | A red-team evaluation set with concealment and decoys, kept apart from training. |
Inference happens inside a budget, and the budget is not GPU memory
Model serving in a data centre optimises for throughput per dollar. On a device the constraints are different in kind, not in degree, and three of them have nothing to do with computation. The general serving material lives in the MLOps pages; what follows is only what changes.
| Budget | What it actually limits |
|---|---|
| Power, in watts | Every watt spent on inference is flight time or run time not spent. The model competes with the mission, not with other tenants. |
| Heat | A sealed enclosure in the sun throttles. A benchmark on a bench is not the same number as a benchmark in the field after twenty minutes. |
| Latency, per frame | If the platform is moving, a detection that arrives late describes a place the object has left. Latency is an accuracy problem here, not a comfort one. |
| Memory and storage | Decides whether you can keep the raw frames that a later investigation will need, which is usually the first thing sacrificed and the first thing missed. |
| The update path | A model you cannot replace for six months has to be right for six months, which changes how much you are willing to specialise it. |
Row 4 of the opening table deserves a picture, because it is where a modelling metric quietly becomes a positional one. The benchmark most teams quote is inference alone, on a cool bench. The number that matters is shutter to decision, on the real device, after it has been in the sun.
Row 5 belongs here too, because it is a budget decision that looks like a modelling one. Shrinking a model to fit the device — quantisationfewer bits per numberStoring a model’s weights — or an index’s vectors — with fewer bits per number, typically 8-bit integers instead of 32-bit floats, so they take less memory and run faster. The cost is some accuracy, and whether that cost is acceptable has to be measured on your own data, not assumed.All terms it to 8-bit integers, compiling it for an accelerator, resizing inputs to what the hardware likes — changes its outputs. Sometimes by nothing, sometimes by enough to flip detections near the threshold. A fixed set of golden images run through the whole on-device pipeline and compared with the reference outputs on every build is the cheapest test on this page, and it catches a colour-channel swap before a flight does.
The data problem, which no amount of training fixes
A detector learns the distribution it was shown. Deployed, it meets a different one, and the gap is not random noise — it is systematic, it is large, and it is predictable enough to be planned for. This is the single biggest source of field failures in vision systems, rows 2, 3 and 6, and it is almost never a modelling mistake.
- Sensor shift. A model trained on colour imagery does not transfer to thermal, and one trained on one thermal camera often does not transfer to another. The sensor is part of the training data, not a detail of it.
- Season and weather. Foliage, snow, mud, rain on the lens, low sun straight into the sensor. A model validated in summer has been validated on a quarter of the year.
- Geometry. Altitude, angle and focal length change the number of pixels on an object by an order of magnitude, and a detector trained at one scale quietly fails at another.
- Deliberate concealment. Unlike almost every other domain, someone is actively working to make detection fail — with cover, with decoys, with disruptive patterns. The distribution is not merely different; it is adversarially chosen, which is row 12.
- Class imbalance in the extreme. The thing you care about may appear in one frame in fifty thousand, so a model that always says "nothing here" scores 99.998% and is worthless.
Two failures on the list are about the test itself rather than the world, and they are the ones that make every other number lie. Row 1 is leakage: frames from one flight are nearly identical, so a split made frame by frame puts near-copies on both sides and the model is graded on scenes it has memorised. Row 11 is the shortcut: something in the image that has nothing to do with the object — the background, a watermark, which camera took it — correlates with the label, and the model learns that instead. The fix for both is the same discipline. Split by flight, place and date, and hold out a whole source the model never sees until the end.
The practical response is not a better architecture. It is a data pipeline that closes the loop: every deployment records real frames, a review process labels the interesting ones — especially the misses and the false alarms — and those enter a permanent evaluation setthe test suite for a modelA fixed collection of inputs with a way to judge each output, run before and after every change to a prompt, a model or a retrieval step, and reported as rates rather than pass or fail. Its job is to fail: a set built from cases the system already handles reports a high score forever and detects nothing.Full article →All terms organised by condition. That is the same discipline as the regression suite described in the QA section, applied to a model, and it is what turns field experience into something the next version inherits rather than something an engineer remembers.
The threshold is a policy decision with a named owner
A detector does not output "yes" or "no". It outputs a number, and somebody turns that number into a yes or a no by choosing where the line goes. That choice is usually made by whoever was tuning the model, on a Tuesday, using the validation set — and it is the single most consequential decision in the system.
Both failure directions have consequences that leave the model behind. Too many false positives and the operator stops trusting the alerts — row 7 — not through negligence but through arithmetic, because a stream that is mostly noise cannot be attended to. That failure looks like a human problem and is caused by a number. Too many misses and nothing at all happens — row 8: no alert, no record, no feedback, and the system quietly reports excellent precision while the thing it exists to find goes past. Of the two, the second is worse precisely because it produces no signal that anything is wrong.
The arithmetic behind row 7 is worth seeing once, because it is what makes a respectable-sounding error rate unusable. When the object is rare, false alarms are drawn from almost every frame and real detections from almost none, so even a small rate multiplies into a wall of noise.
One more property belongs in that policy and is usually absent — row 9: the system needs a way to express "I do not know". A detector forced to answer with a binary on every frame will answer confidently on the frames it has never seen anything like, which is the exact opposite of what you want. An explicit uncertain band — below the alert threshold, above the ignore threshold, routed to review rather than to an operator — costs little, and it is where the interesting failures show up first.
And a detection is rarely acted on alone: frames are joined into tracks, and row 10 is where that joining goes wrong. If the tracker keys an object on its class, every time the classifier changes its mind the object starts again with no history, and its path can never be predicted. The label has to be an attribute of a track that can be revised, not the thing that defines it — the same rule the C2Command and control — command and control softwareSoftware that turns reports from many sources into one shared picture people can act on, and carries the decisions made from it. Its central job is correlation — deciding whether two reports describe one thing or two — which is why it is harder than the map it is usually drawn as.Full article →All terms page states for track numbers.
What has to be recorded for a wrong answer to be investigable
A detection that cannot be reconstructed cannot be reviewed, and a system whose mistakes cannot be reviewed does not improve — it accumulates opinions about itself. Recording is constrained here by storage and by the fact that the device may not come back, so it has to be designed rather than switched on.
The frame, or a crop of it
Without the image there is no investigation, only argument. If storage forbids keeping everything, keep the detections and a sample of the silent frames rather than a uniform sample of nothing in particular.
The model identity
Which model version, which weights, which threshold, which preprocessing. Six months later this is what distinguishes a model regression from a changed environment.
The conditions
Sensor, altitude, angle, time, temperature. These are what let you slice performance by condition afterwards, which is the only useful way to read it.
What the human did
Confirmed, rejected, ignored. This is free labelled data of exactly the right distribution, and most systems throw it away.
The last card is the one worth acting on this week. Operator decisions are a labelled stream produced by the exact deployment you care about, at no annotation cost, and they are the shortest path from "the system is wrong sometimes" to a case in an evaluation set. Capturing them requires the interface to make confirm and reject equally easy, which is a design decision made in the C2 layer rather than in the model.
Seven failures, and the row that covers each
Defence programmes rarely publish their failures, so the documented cases here are civilian. The mechanisms transfer exactly: a detector does not know what it has been deployed for, and each of these is a failure of data, threshold, tracking or oversight rather than of the model architecture.
| Case | What happened | The row that covers it |
|---|---|---|
| Google Photos, 2015 | The photo app labelled two Black people as gorillas. The fix Google shipped was to block the gorilla label, and related primate labels, altogether; a test by Wired in 2018 found them still blocked. | 2. The training data did not cover the people the product served, and the patch removed a class instead of fixing the data. |
| Tesla, Williston, Florida, May 2016 | A car on Autopilot drove under a tractor-trailer crossing the highway, killing the driver. The system did not detect the white trailer against a bright sky. The NTSB found the road outside the conditions the system was designed for, and a design that let the driver disengage for long periods — hands on the wheel for 25 seconds of 37 minutes. | 2 and 9. The input was outside the design domain, and nothing in the system could say that it could not see. |
| Gender Shades, February 2018 | An audit of three commercial face-analysis products found gender-classification error rates of up to 34.7% for darker-skinned women and at most 0.8% for lighter-skinned men. The benchmarks those products were commonly evaluated on were overwhelmingly lighter-skinned. | 2, and the diagram above: one number concealed the slice that failed. |
| Uber test car, Tempe, Arizona, March 2018 | A self-driving test car struck and killed a woman walking a bicycle across the road. It detected her 5.6 seconds before impact but kept changing its classification — vehicle, bicycle, other — and each change discarded her tracking history, so her path was never predicted. A one-second action suppression delayed the response, emergency braking was not enabled, and the safety driver was looking at a phone. | 10, and C2 line 6.1: identity was keyed on a label that kept changing, and the person on the loop was in no position to act. |
| Stickers on a stop sign, 2018 | Researchers added black and white stickers to a stop sign, and a classifier read it as a 45 mph speed-limit sign in 84.8% of the frames captured from a moving car. The work was published at CVPR as a warning about physical-world inputs. | 12. When someone chooses the input, a test set collected from cooperative scenes measures nothing about it. |
| Pneumonia on chest X-rays, November 2018 | A study of models trained on radiographs from three hospital systems found they could identify which hospital system, and even which department, an image came from, and performed worse on hospitals they had not seen. Disease prevalence differed between sites, so the source itself predicted the label. | 11 and 1. The model learned the source, and a test that mixed sources rewarded it for doing so. |
| Detroit wrongful arrest, January 2020 | A face-recognition search matched a still from store security video to Robert Williams’s driver’s licence photo, and he was arrested and held for about thirty hours for a theft he did not commit. The 2024 settlement bars Detroit police from arresting anyone on the basis of a face-recognition result alone. | 3 and 9, and the threshold policy: a candidate drawn from a poor image was treated as an identification, and nobody owned the difference. |
Where it degrades
The honest limit of every check on this page is that it measures the detector against conditions somebody thought to collect. An evaluation set sliced twelve ways still contains only those twelve slices; the thirteenth condition — a new kind of cover, a sensor fault, weather nobody recorded — arrives unannounced, and the numbers stay green until it does. The uncertain band of row 9 and the review of silent frames in row 8 are the only practices here aimed at what nobody anticipated, which is why they are worth more than their cost suggests.
- One accuracy figure on a slide, averaged across conditions nobody lists.
- A test set split frame by frame from the same flights as the training data.
- A benchmark run on a workstation and quoted for a device in a sealed box in the sun.
- A threshold nobody owns, set on a Tuesday by whoever tuned the model.
- "Human review" of an alert stream that is ninety-six per cent noise.
- Precision reported with no look at what was missed.
- A class removed from the product because the model got it wrong, with the data left as it was.
- An evaluation set collected only from cooperative scenes, for a system whose input someone else chooses.
- A match score presented to a person as an identification.
When to use it
Use it when
- As a pre-deployment review: the twelve rows at the top, each with its check.
- When inference must run on the device, inside a power, heat and latency budget measured end to end.
- When setting a detection threshold, which needs a written policy, both error rates per operator-hour and a named owner.
- When designing what a device records, so a wrong answer six months later can still be investigated.
Avoid it when
- As general model training or serving guidance — the AI/LLM and MLOps pages own that and this one leans on them.
- As a basis for letting a model decide rather than detect — the decision and the person in the loop belong to C2.
- With a single aggregate accuracy figure, which is the metric most likely to be both impressive and misleading.
- Where a person can review every frame anyway, in which case most of this machinery is overhead.
Sources and method
What this page stands on
- 7 sources
- 4 documented failures
- Checked October 13, 2026
The failures this page learns from
the field failures in the case table- ArticleWhen It Comes to Gorillas, Google Photos Remains Blind (opens in a new tab)WIRED · Jan 2018
- Regulator reportNTSB HAR-17/02 — Collision Between a Car Operating With Automated Vehicle Control Systems and a Tractor-Semitrailer Truck (opens in a new tab)National Transportation Safety Board · Sep 2017
- Regulator reportNTSB HAR-19/03 — Collision Between Vehicle Controlled by Developmental Automated Driving System and Pedestrian (opens in a new tab)National Transportation Safety Board · Nov 2019
- ArticleCivil Rights Advocates Achieve the Nation’s Strongest Police Department Policy on Facial Recognition Technology (opens in a new tab)ACLU · Jun 28, 2024
Research
bias, physical attacks and domain shift, measured- ResearchJoy Buolamwini, Timnit Gebru — Gender Shades: Intersectional Accuracy Disparities in Commercial Gender Classification (opens in a new tab)FAT* 2018 · PMLR · Feb 2018
- ResearchKevin Eykholt et al. — Robust Physical-World Attacks on Deep Learning Visual Classification (opens in a new tab)CVPR 2018 · 2018
- ResearchJohn R. Zech et al. — Variable generalization performance of a deep learning model to detect pneumonia in chest radiographs (opens in a new tab)PLOS Medicine · Nov 2018
Researched with Claude. Finding and cross-checking the primary sources was done with Claude (Anthropic). Selection, writing and fact-checking: the Anatomy of IT Product editors.
Found this useful?
Share it with someone who is working on the same problem.