Industrial anomaly detection

A table where everything
scores 99% cannot
choose a method.

The leading methods in industrial anomaly detection, ranked by Image-level AUROC on MVTec AD. The top eight sit inside a single point.

What is ranked here is not our own product but the state of the field itself. And what the numbers show is not an order of merit but the fact that this metric no longer separates anything. Measure them again under levelled conditions, and the same methods show a different face.

The values each paper reported (self-reported). The settings are not levelled — per-class, multi-class unified, few-shot and zero-shot all sit on the same axis. See the list with settings

Experiment 01

The same methods,
measured again under the same conditions.

Those 99% figures were produced by each set of authors under conditions that suited them. Backbone, resolution and training epochs are not levelled.

Three benchmarks have reimplemented these methods on one codebase, under one set of conditions. Draw a line from the self-reported value to those, and the methods that hold and the methods that collapse separate clearly.

Left = the value each paper reported / right = the reimplemented value in the chosen benchmark (MVTec AD Image-level). A blue line marks a method that fell by five points or more. Only methods present on both sides are joined.

Largest fall
By how much
Methods within one point

What collapses is not sloppy implementation.

DRAEM reaches 0.981 in IM-IAD (per-class), all but reproducing its self-reported 98.0. Its fall to 54.5 in ADer is because its design does not fit a setting where one model handles every part type. It is not that it fails to reproduce; it is that it does not work in that setting.

Some methods do not fall.

PatchCore is near the top in all three benchmarks (self-reported 99.1 → ADer 98.8 / IM-IAD 0.992 / anomalib 0.980). That it does no training at all is the reason it does not collapse when the setting changes.

The top holds methods the list does not.

The highest in ADer's multi-class unified setting is InvAD 98.9, then PatchCore 98.8, MambaAD 98.5 and ViTAD 98.4. InvAD, ViTAD and MambaAD do not appear in the list below (the repository's SOTA table). Being on a list and being strong are different things.

How to read

The same “AUROC”
can be measuring different things.

Four things ought to be written beside every number. A comparison without all four is not a comparison.

01 / Setting
One model per part type, or one model for all of them.

Per-class (trained per part type) / multi-class unified (one model for 15 types) / few-shot (2–8 normal images) / zero-shot (no normal images) / training with contaminated data / supervised, using anomalous samples. These are all different problems. UniAD 96.5 is multi-class unified, RegAD 85.7 is 2-shot, and BGAD 99.3 is supervised with 10 anomalies. They cannot be set side by side and called higher or lower.

02 / Backbone
The quality of the features can matter more than the method.

In one implementation in anomalib, FastFlow gives ResNet-18 0.907 / Wide ResNet-50 0.963 / DeiT 0.925 / CaiT 0.944a span of 0.056. A gap between two published values whose backbones differ is not a difference between methods.

03 / Dataset
Strongest on MVTec AD, and not first on another dataset.

Under the same conditions in IM-IAD, PatchCore leads on MVTec AD 0.992 and MTD 0.975, but CS-Flow 0.973 leads on MPDD, PaDiM 0.965 on BTAD, and RD4AD beats it on LOCO, VisA and DAGM. A method chosen on one dataset is not first on another.

04 / The metric itself
Some methods do not report AUROC.

SAA and SAA+ are zero-shot segmentation, so they report only max-F1 (pixel 39.40 / region 49.67); AD-Copilot is MLLM-based and reports only MMAD accuracy 82.3%. The right treatment is to write “not reported”, not to leave a blank.

※ AUROC measures separation alone, without fixing a threshold. What a factory needs is where to draw the line, and from there it becomes a question of miss rate, false alarm rate and precision.

Experiment 02

What you choose on
is the conditions, not the ranking.

Choose four conditions from your own line and this shows the rows of the benchmark measured under those conditions. Not a recommendation — a pointer to which table you should be reading.

MethodValueWhere the value came from

※ What appears here is rows of published benchmarks, selected and reordered — not our own re-experiment. Nor does it mean that we have adopted any particular method.

The list

The list, with settings.

The SOTA methods with code table (29 methods) from the GitHub repository awesome-industrial-anomaly-detection, with the MVTec AD Image-level AUROC taken from each original paper, and its setting added.

The repository's own table carries no AUROC. Its columns are Title / Venue / Date / Code / topic only. The values here were collected by us, going through the relevant table and text of each paper one by one (as of 2026-09-01).

29 methods shown.

Methods with no evaluation, and methods that do not report AUROC, are always gathered at the end.

Method Published Setting MVTec AD I-AUROC Source

※ The 99.1 for PatchCore is the standard setting, WideResNet-50 at 224px; 99.6 is an ensemble of three backbones at 320px. In comparisons with other methods, 99.1 is normally the value quoted.
※ AnoVL was renamed AnoCLIP in arXiv v2 (the repository still lists it as AnoVL).

Beyond MVTec AD

The room that is left
is on other datasets.

MVTec AD is saturated. That does not mean the field is solved. The axis of evaluation has already moved to other benchmarks.

DatasetBest I-AUROC to dateMethodWhat it tells you
MVTec AD99.9Dinomaly2Saturated. It no longer discriminates between methods
VisA99.3Dinomaly2All but saturated
MPDD99.0Dinomaly2A sharp rise from RealNet 96.35. The dataset where methods differ most
BTAD97.7SoftPatchDinomaly2 97.5 is close behind
MVTec 3D-AD97.4Dinomaly2Improves on M3DM 94.5 (RGB+3D fusion)
MVTec LOCO96.1SALADLogical anomalies remain hard
Real-IAD92.1Dinomaly2The 2D benchmark with the most room left
Real3D-AD70.4Reg3D-ADUnsolved. Many baselines sit below 60%

Sources: the original paper of each method, and Real3D-AD (NeurIPS 2023). This table gives the highest value on each dataset, not a general ranking.

Logical anomalies are a separate problem.

Looking only at the logical anomalies of MVTec LOCO under IM-IAD's unified conditions: GCAD 0.860, against RD4AD 0.694 and PatchCore 0.690. The strongest on MVTec AD sink to the bottom. The structural limit — that the distance of a local patch cannot catch “one part missing” — shows directly in the numbers.

Nobody has solved point clouds yet.

On Real3D-AD (360° scanned point clouds), even the proposed Reg3D-AD reaches only 70.4. PatchCore (FPFH+Raw) 68.2, M3DM (PointMAE) 55.2. Alongside a row of 99% in 2D, this is where 3D stands.

Few shot

At start-up the reality is
a handful of good pieces.

Few floors can collect several hundred good pieces before production. With only a few normal images, the ranking changes again.

AnomalyDINO and PatchCore are almost the same approach — store the features of normal patches in memory and measure the nearest-neighbour distance. Neither trains. What differs is the backbone (Wide ResNet-50 / ImageNet → DINOv2) and a background mask. So the gap between them measures not a cleverness of algorithm but the quality of the visual features themselves.

Normal imagesPatchCoreAnomalyDINODifference
183.4 ±3.096.6 ±0.4+13.2
286.3 ±3.396.9 ±0.7+10.6
488.8 ±2.697.7 ±0.2+8.9
16not reported in that paper98.4 ±0.1
Full data99.1not reported in that paper

Source: AnomalyDINO (WACV 2025) Table 2 / Table 3. MVTec AD Image-level AUROC, AnomalyDINO-S (672). The 83.4 for PatchCore does not mean it is weak — it is a method designed for training on the full dataset, run on a single image, which is outside its design intent.

One image beats four.

AnomalyDINO at one image, 96.6, is above PatchCore at four, 88.8. Adding shots does not close the gap.

Small variance is what tells.

At one image the standard deviation is ±3.0 for PatchCore against ±0.4 for AnomalyDINO. The result does not swing on which single image you pick, so less care is needed over choosing the start-up samples.

Still not universal.

In batched zero-shot, with no normal images at all, MuSc reaches 97.8 against AnomalyDINO 94.2. Where the full dataset is available, PatchCore 99.1 remains strong. The advantage is confined to having only a handful.

Where it sits

What we work on
is upstream of this table.

Every number so far is a competition in how to decide on a given image. What we bring is upstream of that — what is handed over as the image.

With the same decision method, the overlap of the distributions changes depending on whether the image handed over is Live or Surface Normal. Once a metric saturates, what tells is the quality of the input.

Sensor
FORESIGHT STEREO®

Four ways of seeing from a single capture. Making the difference before the decision is the work of this layer. How it works

Decision
E3 ENGINE

Learns good products only, and returns a score and a three-way verdict (OK / Human_Check / NG). Product page

Systems
TR series

Connects the verdict to what happens on the floor. Where the line is drawn follows from how the line is built. See products

The numbers on this page are not the performance of our products. Our own evaluation output is published as confusion matrices, exactly as measured, on the E3 ENGINE specifications .

Contact

Not the ranking in a table,
but your own sample.

Which method fits changes with how part types grow, how clean the training data is, and what kind of anomaly must be found. Send us a sample: we will run the evaluation and show you the distribution of scores and the confusion matrix as they come.