Papers › Towards Total Recall in Industrial Anomaly Detection

Towards Total Recall in Industrial Anomaly Detection

15 Jun 2021CVPR 2022 1arXiv:2106.08265archive 2025-07-28

Karsten Roth, Latha Pemula, Joaquin Zepeda, Bernhard Schölkopf, Thomas Brox, Peter Gehler

Being able to spot defective parts is a critical component in large-scale industrial manufacturing. A particular challenge that we address in this work is the cold-start problem: fit a model using nominal (non-defective) example images only. While handcrafted solutions per class are possible, the goal is to build systems that work well simultaneously on many different tasks automatically. The best performing approaches combine embeddings from ImageNet models with an outlier detection model. In this paper, we extend on this line of work and propose \textbf{PatchCore}, which uses a maximally representative memory bank of nominal patch-features. PatchCore offers competitive inference times while achieving state-of-the-art performance for both detection and localization. On the challenging, widely used MVTec AD benchmark PatchCore achieves an image-level anomaly detection AUROC score of up to 99.6%, more than halving the error compared to the next best competitor. We further report competitive results on two additional datasets and also find competitive results in the few samples regime.\freefootnote{^* Work done during a research internship at Amazon AWS.} Code: github.com/amazon-research/patchcore-inspection.

PaperPDFConference PDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2106.08265")

Code

Syntology Ran 5 of 36 code samples harvested from 8 repositories linked to this paper; 31 have no recorded run. Of those that ran: 1 ran · honoured contract; 1 ran · violated contract; 2 ran · our draft was wrong; 1 ran with no contract checked.

By repository: official repository: 5 samples from 1 repository, 0 ran; community (archive-listed): 31 samples from 7 repositories, 5 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

18 repositories listed; official and paper-mentioned ones first.

amazon-research/patchcore-inspection officialmentioned in papermentioned on GitHubpytorchApache-2.0 report
JoegameZhou/PatchCore mentioned on GitHubmindsporeApache-2.0 report
OpenAOI/anodet mentioned on GitHubpytorch report
Ultranity/Anomaly.Paddle mentioned on GitHubpaddleApache-2.0 report
amazon-science/patchcore-inspection mentioned on GitHubpytorchApache-2.0 report
any-tech/PatchCore-ex mentioned on GitHubpytorchApache-2.0 report
captainfffsama/pathcore mentioned on GitHubpytorch report
hcw-00/PatchCore_anomaly_detection mentioned on GitHubpytorchApache-2.0 report
tbcvContributor/DeepHawkeye mentioned on GitHubpytorchApache-2.0 report
tiskw/patchcore-ad mentioned on GitHubpytorchMIT report
totoroKalic/patchcore-mindspore mentioned on GitHubmindspore report
openvinotoolkit/anomalib pytorchApache-2.0 report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

36 samples harvested; 5 ran; 1 honoured the contract we drafted; 31 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

1ran · honoured contract
1ran · violated contract
2ran · our draft was wrong
1ran
31unverified

Licence: 0 of the 36 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 8 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

compute_and_store_final_results amazon-research/patchcore-inspection/src/patchcore/utils.py official repository unverified Apache-2.0 (permissive) · e80ac3c0c9f85f59 · report
compute_imagewise_retrieval_metrics amazon-research/patchcore-inspection/src/patchcore/metrics.py official repository unverified Apache-2.0 (permissive) · 9a6ba99206d2a918 · report
compute_pixelwise_retrieval_metrics amazon-research/patchcore-inspection/src/patchcore/metrics.py official repository unverified Apache-2.0 (permissive) · 45cfbfc30f32be75 · report
create_storage_folder amazon-research/patchcore-inspection/src/patchcore/utils.py official repository unverified Apache-2.0 (permissive) · 4847c26291a5d907 · report
dataset amazon-research/patchcore-inspection/bin/load_and_evaluate_patchcore.py official repository unverified Apache-2.0 (permissive) · 1850ff44d813323e · report
conv1x1 tbcvContributor/DeepHawkeye/src/wide_res_model.py community (archive-listed) ran · our draft was wrong Apache-2.0 (permissive) · 2a80220dabcb742a · report
conv3x3 tbcvContributor/DeepHawkeye/src/wide_res_model.py community (archive-listed) ran · our draft was wrong Apache-2.0 (permissive) · 600ff2c45e0de056 · report
rescale Ultranity/Anomaly.Paddle/utils.py community (archive-listed) ran · honoured contract fingerprinted Apache-2.0 (permissive) · f51e6ad9c7104a5a · report
set_torch_device amazon-science/patchcore-inspection/src/patchcore/utils.py community (archive-listed) ran Apache-2.0 (permissive) · 61fd3c8459a48853 · report
str2bool Ultranity/Anomaly.Paddle/infer.py community (archive-listed) ran · violated contract Apache-2.0 (permissive) · 7c508037b40522af · report
assemble_patch any-tech/PatchCore-ex/utils/visualize.py community (archive-listed) unverified Apache-2.0 (permissive) · 02bea3555bf26ceb · report
auto_threshold tiskw/patchcore-ad/patchcore/utils.py community (archive-listed) unverified MIT (permissive) · 31bb4bbf1cab798a · report
calc_imagewise_metrics any-tech/PatchCore-ex/utils/metrics.py community (archive-listed) unverified Apache-2.0 (permissive) · d64d475597e3e18e · report
calc_pixelwise_metrics any-tech/PatchCore-ex/utils/metrics.py community (archive-listed) unverified Apache-2.0 (permissive) · e6b66178d86edc78 · report
createDatasetJson JoegameZhou/PatchCore/src/dataset.py community (archive-listed) unverified Apache-2.0 (permissive) · b8c46d57235fa543 · report
create_dataset rvorias/ind_knn_ad/indad/workspace.py community (archive-listed) unverified MIT (permissive) · 774c2acb59a77761 · report
cvt2heatmap tbcvContributor/DeepHawkeye/src/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · cd61b6846e7dd644 · report
embedding_concat JoegameZhou/PatchCore/src/operator.py community (archive-listed) unverified Apache-2.0 (permissive) · 40df71d26759ce01 · report
fold JoegameZhou/PatchCore/src/operator.py community (archive-listed) unverified Apache-2.0 (permissive) · b4bfdc071e0f7908 · report
get_coreset_idx_randomp rvorias/ind_knn_ad/indad/utils.py community (archive-listed) unverified MIT (permissive) · 69f7e0b8a9ede02e · report
heatmap_on_image tbcvContributor/DeepHawkeye/src/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 899548de5f36cc3c · report
import_images rvorias/ind_knn_ad/indad/workspace.py community (archive-listed) unverified MIT (permissive) · 20c1c0be389a566e · report
inspect_dataset rvorias/ind_knn_ad/indad/workspace.py community (archive-listed) unverified MIT (permissive) · b21c2ea9ce7a27e6 · report
johnson_lindenstrauss_min_dim Ultranity/Anomaly.Paddle/dim_reduction/random_projection.py community (archive-listed) unverified Apache-2.0 (permissive) · 0a43d57bcdbc3765 · report
list_changes rvorias/ind_knn_ad/indad/curation.py community (archive-listed) unverified MIT (permissive) · f72e12b0cce93f61 · report
load amazon-science/patchcore-inspection/src/patchcore/backbones.py community (archive-listed) unverified Apache-2.0 (permissive) · b426324b6ed6ccaf · report
main_summarize tiskw/patchcore-ad/main_mvtecad.py community (archive-listed) unverified MIT (permissive) · 1e3b3c661fef6c1a · report
min_max_norm tbcvContributor/DeepHawkeye/src/utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 373674457d45997f · report
normalize JoegameZhou/PatchCore/postprocess.py community (archive-listed) unverified Apache-2.0 (permissive) · c3cae68ec9e6850c · report
overlay_heatmap_on_image any-tech/PatchCore-ex/utils/visualize.py community (archive-listed) unverified Apache-2.0 (permissive) · 591e30226a9f25b0 · report
replace_self JoegameZhou/PatchCore/src/pthtockpt.py community (archive-listed) unverified Apache-2.0 (permissive) · ddeed4d4fc8e73b2 · report
run_onnx rvorias/ind_knn_ad/indad/utils.py community (archive-listed) unverified MIT (permissive) · 095a5a07515ea7a9 · report
serialize_results rvorias/ind_knn_ad/indad/utils.py community (archive-listed) unverified MIT (permissive) · af18bba97264c730 · report
trt_wide_resnet50_2 tbcvContributor/DeepHawkeye/trt_tools/trt_wide_res_model.py community (archive-listed) unverified Apache-2.0 (permissive) · 348384a804271606 · report
unfold JoegameZhou/PatchCore/src/operator.py community (archive-listed) unverified Apache-2.0 (permissive) · 75cfa7e86dd91ed0 · report
wide_resnet50_2 tbcvContributor/DeepHawkeye/src/wide_res_model.py community (archive-listed) unverified Apache-2.0 (permissive) · bbc9958e58a3a24b · report

Tasks

3D Anomaly DetectionAnomaly ClassificationAnomaly DetectionAnomaly SegmentationOutlier DetectionUnsupervised Anomaly Detection

Results from the paper archive 2025-07-28

TaskDatasetModelMetricValueRank at snapshotLeaderboardReport
3D Anomaly Detection Anomaly-ShapeNet10 PatchCore (FPFH) O-AUROC 0.884 #2 of 7 Archive leaderboard report
3D Anomaly Detection Anomaly-ShapeNet10 PatchCore (FPFH) P-AUROC 0.923 #2 of 7 Archive leaderboard report
3D Anomaly Detection Anomaly-ShapeNet10 PatchCore (PointMAE) O-AUROC 0.574 #5 of 7 Archive leaderboard report
3D Anomaly Detection Anomaly-ShapeNet10 PatchCore (PointMAE) P-AUROC 0.645 #5 of 7 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (FPFH+Raw) Mean Performance of P. and O. 0.687 #12 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (FPFH+Raw) Object AUROC 0.682 #12 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (FPFH+Raw) Point AUROC 0.692 #12 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (PointMAE) Mean Performance of P. and O. 0.614 #15 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (PointMAE) Object AUROC 0.594 #15 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (PointMAE) Point AUROC 0.634 #15 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (FPFH) Mean Performance of P. and O. 0.5925 #17 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (FPFH) Object AUROC 0.593 #17 of 19 Archive leaderboard report
3D Anomaly Detection Real 3D-AD PatchCore (FPFH) Point AUROC 0.592 #17 of 19 Archive leaderboard report
Anomaly Classification GoodsAD PatchCore-100% AUPR 86.1 #1 of 11 Archive leaderboard report
Anomaly Classification GoodsAD PatchCore-100% AUROC 85.5 #1 of 11 Archive leaderboard report
Anomaly Classification GoodsAD PatchCore-1% AUPR 83.3 #2 of 11 Archive leaderboard report
Anomaly Classification GoodsAD PatchCore-1% AUROC 81.4 #2 of 11 Archive leaderboard report
Anomaly Detection AeBAD-S PatchCore Detection AUROC 71.0 #4 of 8 Archive leaderboard report
Anomaly Detection AeBAD-S PatchCore Segmentation AUPRO 87.8 #4 of 8 Archive leaderboard report
Anomaly Detection AeBAD-V PatchCore Detection AUROC 70.7 #3 of 7 Archive leaderboard report
Anomaly Detection MPDD PatchCore Detection AUROC 82.12 #14 of 16 Archive leaderboard report
Anomaly Detection MPDD PatchCore Segmentation AUROC 95.66 #14 of 16 Archive leaderboard report
Anomaly Detection MVTec AD PatchCore Large Detection AUROC 99.6 #20 of 148 Archive leaderboard report
Anomaly Detection MVTec AD PatchCore Large FPS 5.88 #20 of 148 Archive leaderboard report
Anomaly Detection MVTec AD PatchCore Large Segmentation AUPRO 93.5 #20 of 148 Archive leaderboard report
Anomaly Detection MVTec AD PatchCore Large Segmentation AUROC 98.2 #20 of 148 Archive leaderboard report
Anomaly Detection MVTec AD PatchCore Detection AUROC 99.2 #43 of 148 Archive leaderboard report
Anomaly Detection MVTec AD PatchCore Segmentation AUROC 98.4 #43 of 148 Archive leaderboard report
Anomaly Detection MVTec AD PatchCore(16shot) Detection AUROC 95.4 #89 of 148 Archive leaderboard report
Anomaly Detection MVTec LOCO AD PatchCore Avg. Detection AUROC 80.3 #26 of 40 Archive leaderboard report
Anomaly Detection MVTec LOCO AD PatchCore Detection AUROC (only logical) 75.8 #26 of 40 Archive leaderboard report
Anomaly Detection MVTec LOCO AD PatchCore Segmentation AU-sPRO (until FPR 5%) 39.7 #26 of 40 Archive leaderboard report
Anomaly Detection MVTec LOCO AD PatchCore Ensemble Avg. Detection AUROC 79.4 #27 of 40 Archive leaderboard report
Anomaly Detection MVTec LOCO AD PatchCore Ensemble Detection AUROC (only logical) 71.0 #27 of 40 Archive leaderboard report
Anomaly Detection MVTec LOCO AD PatchCore Ensemble Detection AUROC (only structural) 87.7 #27 of 40 Archive leaderboard report
Anomaly Detection MVTec LOCO AD PatchCore Ensemble Segmentation AU-sPRO (until FPR 5%) 36.5 #27 of 40 Archive leaderboard report

Ranks are positions in the archive's leaderboards as they stood at the 2025-07-28 snapshot. Results published since then are not among these rows, so a rank here is not a current standing.

Methods

Coresets

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections