InCLAD: A Continual Learning Benchmark for Industrial Visual Anomaly Detection
Organizations: AGH University of Krakow, Krakow, Poland · American University, Washington, DC, USA
Abstract
Industrial anomaly detection benchmarks have advanced rapidly, yet they remain largely static and therefore underrepresent deployment settings in which inspection systems must be extended from one industrial component to another over time. In our setting, continual industrial anomaly detection is framed as a task-incremental problem: each component defines a task, while the learning objective remains semi-supervised. The goal extends beyond conventional anomaly detection, since models should preserve their performance on all components as they are sequentially exposed to new components. This framing is especially relevant because many existing industrial pipelines either assume fully supervised defect labels or study only isolated datasets, leaving open the question of how semi-supervised anomaly detectors behave across a sequence of heterogeneous components. We address this gap by organizing the benchmark as a sequence of related component-level tasks and by defining multiple scenarios, including random, easy-to-hard, and hard-to-easy. In addition to single-dataset continual scenarios, we propose challenging scenarios spanning across multiple datasets. We further evaluate continual performance from two complementary perspectives: image-level anomaly detection and pixel-level anomaly localization. By recasting industrial anomaly detection as a continual benchmark rather than a static train/test problem, our work establishes a concrete path toward studying knowledge retention, adaptation, and generalization in evolving industrial environments.
Figures & tables
| Scenario | # Tasks | # Data samples | # Anomalies (test) |
|---|---|---|---|
| BTAD | 3 | 2,540 | 39.14% |
| DAGM | 10 | 15,054 | 13.09% |
| MPDD | 6 | 1,346 | 61.57% |
| MVTec AD | 15 | 5,354 | 72.93% |
| VisA | 12 | 10,821 | 55.50% |
| MultiDataset | 27 | 20,853 | 29.38% |
| Dataset | Ordering | Metric | Image-level | Pixel-level | ||
|---|---|---|---|---|---|---|
| NCL | CL | NCL | CL | |||
| MVTec | Easy-to-Hard | ROC | ||||
| BWT | ||||||
| Hard-to-Easy | ROC | |||||
| BWT | ||||||
| Random | ROC | |||||
Appendix figures & tables37 assets
Supplementary material from the paper’s appendix.
Appendix
| Benchmark | Industrial | Continual | Normal-only | Image | Pixel | Curricula | Multi-dataset | BWT |
|---|---|---|---|---|---|---|---|---|
| domain | / task-inc. | training | eval. | eval. | orderings | stream | metrics | |
| MVTec AD [ Bergmann et al., 2019 ] | Yes | No | Yes | Yes | Yes | No | No | No |
| VisA [ Zou et al., 2022 ] | Yes | No | Yes | Yes | Yes | No | No | No |
| ADBench [ Han et al., 2022 ] | Partial | No | Partial | No | No | No | Yes | No |
| CableInspect-AD [ Arodi et al., 2024 ] | Yes | No | Partial | Yes | Yes | No | No | No |
| ReinAD [ Wang et al., 2025 ] | Yes | No | Yes | Yes | Yes | No | No | No |
| Dataset | Model | Time | Naive | Continual |
|---|---|---|---|---|
| MVTec | CFA | Train | 6m 32s ( 1m 42s) | 15m 42s ( 10m 57s) |
| Eval | 9m 35s ( 1m 40s) | 52m 7s ( 31m 50s) | ||
| PaDiM | Train | 6m 19s ( 1m 39s) | 7m 9s ( 1m 18s) | |
| Eval | 30m 28s ( 3m 22s) | 65m 24s ( 3m 37s) | ||
| PatchCore | Train | 3m 26s ( 12.6s) | 4m 17s ( 10.2s) | |
| Eval | 34m 27s ( 3m 58s) | 49m 49s ( 1m 42s) |
| Dataset | Model | Time | Naive | Continual |
| MVTec | GANomaly (default) | Train | 4m 59s ( 0.7s) | 5m 56s ( 6.1s) |
| Eval | 9m 38s ( 8.4s) | 9m 44s ( 7.1s) | ||
| EfficientAD (small) | Train | – | 80m 15s ( 1m 6s) | |
| Eval | – | 11m 55s ( 1.4s) | ||
| VisA | GANomaly (default) | Train | 11m 32s ( 10.5s) | 13m 23s ( 18.4s) |
| Eval | 10m 44s ( 35.1s) | 10m 35s ( 41.3s) |
| Hyperparameter | CFA | PaDiM | PatchCore |
|---|---|---|---|
| Training | |||
| Backbone | resnet18 / wide_resnet50_2 | resnet18 / wide_resnet50_2 | resnet18 / wide_resnet50_2 |
| Pretrained | ✓ | ✓ | ✓ |
| Batch size | 32 | 32 | 32 |
| Epochs | 50 | — | — |
| Learning rate | — | — | |
| Hyperparameter | FastFlow | GANomaly | PaSTe | RD4AD | STFPM | EfficientAD |
|---|---|---|---|---|---|---|
| Training | ||||||
| Backbone | resnet18 / wide_resnet50_2 | — | resnet18 / wide_resnet50_2 | resnet18 / wide_resnet50_2 | resnet18 / wide_resnet50_2 | — |
| Pretrained | ✓ | — | ✓ | ✓ | ✓ | — |
| Batch size | 8 | 16 | 32 | 16 | 32 | 1 |
| Epochs | 200 | 15 | 100 | 200 | 100 | 50 |
| Learning rate | 0.4 | 0.4 | ||||
| Dataset | PatchCore vs PaDiM | PatchCore vs CFA | PaDiM vs CFA |
|---|---|---|---|
| BTAD | 0.500 | 1.000 | 0.500 |
| DAGM | 0.855 | 0.455 | 0.648 |
| MPDD | -0.029 | 0.200 | -0.657 |
| MVTec AD | 0.382 | 0.693 | 0.654 |
| VisA | 0.622 | 0.797 | 0.748 |
| Rank | Concept | Avg. ROC-AUC | Avg. Rank | PatchCore | PaDiM | CFA |
|---|---|---|---|---|---|---|
| 1 | 02 | 0.7947 | 1.00 | 0.7923 | 0.7955 | 0.7963 |
| 2 | 01 | 0.9679 | 2.33 | 0.9456 | 0.9874 | 0.9708 |
| 3 | 03 | 0.9903 | 2.67 | 0.9999 | 0.9819 | 0.9890 |
| Rank | Concept | Avg. ROC-AUC | Avg. Rank | PatchCore | PaDiM | CFA |
|---|---|---|---|---|---|---|
| 1 | Class8 | 0.6541 | 1.00 | 0.6729 | 0.7278 | 0.5616 |
| 2 | Class5 | 0.8210 | 3.00 | 0.8164 | 0.8160 | 0.8308 |
| 3 | Class2 | 0.8594 | 3.67 | 0.8920 | 0.9027 | 0.7835 |
| 4 | Class1 | 0.8380 | 3.67 | 0.8561 | 0.7395 | 0.9183 |
| 5 | Class3 | 0.8625 | 4.67 | 0.9776 | 0.9274 | 0.6825 |
| 6 | Class7 | 0.9565 | 7.33 | 0.9990 | 0.9310 | 0.9394 |
| Rank | Concept | Avg. ROC-AUC | Avg. Rank | PatchCore | PaDiM | CFA |
|---|---|---|---|---|---|---|
| 1 | bracket_black | 0.6791 | 2.33 | 0.8471 | 0.6410 | 0.5492 |
| 2 | tubes | 0.7435 | 3.00 | 0.8170 | 0.5738 | 0.8397 |
| 3 | bracket_white | 0.7537 | 3.00 | 0.7311 | 0.8533 | 0.6767 |
| 4 | metal_plate | 0.8106 | 3.67 | 0.9420 | 0.4902 | 0.9995 |
| 5 | bracket_brown | 0.8286 | 4.33 | 0.9480 | 0.7624 | 0.7753 |
| 6 | connector | 0.8643 | 4.67 | 1.0000 | 0.8214 | 0.7714 |
| Rank | Concept | Avg. ROC-AUC | Avg. Rank | PatchCore | PaDiM | CFA |
|---|---|---|---|---|---|---|
| 1 | pill | 0.8300 | 2.00 | 0.8161 | 0.7700 | 0.9037 |
| 2 | screw | 0.7930 | 3.00 | 0.9664 | 0.7284 | 0.6842 |
| 3 | capsule | 0.8738 | 3.67 | 0.9334 | 0.8337 | 0.8544 |
| 4 | grid | 0.9176 | 4.67 | 0.8956 | 0.9181 | 0.9390 |
| 5 | zipper | 0.9079 | 5.33 | 0.9362 | 0.8277 | 0.9598 |
| 6 | transistor | 0.9193 | 7.00 | 0.9729 | 0.8129 | 0.9721 |
| Rank | Concept | Avg. ROC-AUC | Avg. Rank | PatchCore | PaDiM | CFA |
|---|---|---|---|---|---|---|
| 1 | capsules | 0.6493 | 1.33 | 0.7465 | 0.6175 | 0.5840 |
| 2 | macaroni2 | 0.6407 | 2.00 | 0.6722 | 0.6567 | 0.5931 |
| 3 | macaroni1 | 0.8148 | 4.00 | 0.8965 | 0.7791 | 0.7687 |
| 4 | pcb3 | 0.7765 | 4.33 | 0.9196 | 0.6352 | 0.7746 |
| 5 | pcb2 | 0.8363 | 6.00 | 0.9055 | 0.8094 | 0.7941 |
| 6 | candle | 0.8623 | 6.00 | 0.8770 | 0.7839 | 0.9259 |