DeftechSenior

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 fieldWhat is actually wrongThe check that catches it
1Excellent on the test set, poor in the first weekThe 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.
2Works where it was trained, fails in a new season or on a new cameraThe 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.
3Fine up close, blind at rangeToo 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.
4Slower and later in the field than on the benchHeat 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.
5A harmless-looking update breaks itThe device prepares images differently from training: resize, colour order, normalisation, quantisation.A golden-image test of the whole on-device pipeline against reference outputs.
6Scores 99.99% and finds nothingClass 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.
7Operators stop responding to alertsToo many false alarms per operator-hour at the chosen threshold.A written threshold policy with both error rates and a named owner.
8Precision looks excellent, and something still got pastA miss produces no alert and no record, so nobody ever sees it.Sample and review the frames the detector stayed silent on.
9A confident answer on something it has never seenThe system has no way to say "I do not know".An uncertain band routed to review, not to the operator.
10An object loses its history every time its label flipsTracking 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.
11It learned the wrong thingA 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.
12Fooled by a pattern, a cover or a decoyThe 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.

BudgetWhat it actually limits
Power, in wattsEvery watt spent on inference is flight time or run time not spent. The model competes with the mission, not with other tenants.
HeatA 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 frameIf 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 storageDecides 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 pathA 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.

On a moving platform, latency is a position error. The same model is drawn twice with illustrative numbers: on a cool bench the pipeline takes 173 milliseconds from shutter to decision, and in a sealed enclosure after twenty minutes in the sun inference slows under thermal throttling and the queue grows, for 363 milliseconds. At a relative speed of 15 metres a second that is the difference between a detection 2.6 metres from where the object now is and one 5.4 metres away. Usually only the inference stage is benchmarked, and usually on the bench, so the field number is the one nobody measured. Stamp the time when the shutter opens rather than when the result is ready, and measure the whole pipeline on the real device at operating temperature.

Row 5 belongs here too, because it is a budget decision that looks like a modelling one. Shrinking a model to fit the device — 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.
An aggregate score is a weighted average, and the weights are whatever the test set happens to contain. In this illustrative detector most test frames are daylight colour frames, where it scores 98%, so the overall figure comes out at 94% while thermal imagery at long range — 4% of the test set, and quite possibly the condition the system was bought for — sits at 41%. The same shape is documented for commercial face analysis: Gender Shades found error rates of up to 34.7% for one subgroup and at most 0.8% for another, inside systems that each reported one accuracy number. Report every condition separately, and the rare class separately from the common one.

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 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.

All three columns are the same trained model. Nothing about the network changed between them — one number did, and with it which kind of mistake the system makes and who absorbs it. Set the threshold low and almost nothing is missed, at the price of an alert stream so noisy that within a week the operator has stopped reading it, which converts a technical setting into a human failure nobody logs. Set it high and the alerts are all worth looking at, while the things below the line are never seen by anyone and leave no trace that they happened — the failure mode with no feedback signal at all. The middle column is not the right answer; it is the answer that was written down, with both error rates stated and accepted by someone who has the standing to accept them. That is the actual deliverable: not a threshold that maximises a validation score, but a number attached to a policy, a named owner and a review date.

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.

When the object is rare, a false-alarm rate that sounds small still dominates what the operator sees. Take one illustrative hour: 10,000 image regions are examined, 5 contain the object, and the detector finds 4 of them. At a 1% false-alarm rate it also raises 100 false alarms, so only 4 of 104 alerts are real — about 4%. Cutting the rate tenfold, to 0.1%, leaves 10 false alarms, and 4 of 14 alerts are real — about 29%. Nobody attends to a wall of noise for a whole shift, so the first configuration trains the operator to stop looking, and the failure will look like a human one. That is why a threshold is judged by false alarms per operator-hour, measured on real traffic, rather than by a per-frame rate.

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 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.

CaseWhat happenedThe row that covers it
Google Photos, 2015The 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 2016A 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 2018An 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 2018A 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, 2018Researchers 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 2018A 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 2020A 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

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.