RADIOlogy: A Single-Pass Approach to Training-Free Zero-Shot Anomaly Detection
Organizations: AIMS Group, Department of Electrical Engineering, Eindhoven University of Technology
Abstract
Current zero-shot anomaly detection methods often rely on complex prompt-learning techniques or computationally expensive sliding-window strategies to achieve fine-grained visual alignment to detect small-scale anomalies. This reliance stems from the fundamental limitation of standard CLIP architectures, where [CLS] token attention and spatial patch pooling struggle to capture subtle, localized anomaly features. While prompt-learning approaches aim to bridge this gap, they typically require a large number of ground-truth segmentation masks from auxiliary datasets, which are often unavailable in specialized domains. In this work, we show an emerging property of multi-head attention pooling in vision-language models: remarkable zero-shot anomaly localization and detection right out of the box. We translate this property into a single-pass anomaly detection technique, RADIOlogy, that does not require dense, windowed execution and significantly outperforms other training-free baselines. Instead, the method relies on a simple contrastive scoring approach that compares the average similarity between vision features and a suite of normal and abnormal prompts. Furthermore, we leverage the agglomerative features of RADIO models to enhance pixel-level anomaly segmentation using a dense anomaly refinement pipeline. Finally, we show how the vision-language family of training-free zero-shot anomaly detection techniques can be applied successfully to the medical domain with minimal modifications. Code is available at https://github.com/jacomof/RADIOlogy.
Figures & tables
| Dataset | CLIP | SAA+ | WinCLIP | FADE | DIVAD | MRAD-TF | Ours |
| Industrial | |||||||
| MVTec-AD | 88.2 / 90.1 / 94.4 | 62.8 / 87.0 / 81.3 | 90.4 / 92.7 / 95.6 | 90.1 / 92.0 / 95.4 | 75.9 / 87.3 / 86.2 | 79.0 / 88.2 / 90.0 | 96.0 / 95.1 / 98.0 |
| VisA | 79.7 / 78.7 / 83.6 | 70.9 / 76.0 / 77.2 | 75.5 / 78.2 / 78.7 | 74.7 / 78.3 / 78.3 | 69.7 / 74.2 / 75.4 | 75.0 / 77.6 / 79.1 | 85.4 / 83.1 / 87.8 |
| BTAD | 75.2 / 72.9 / 74.8 | 43.5 / 64.4 / 53.0 | 68.2 / 67.8 / 70.9 | 74.3 / 69.6 / 71.7 | 82.4 / 88.0 / 91.3 | 86.3 / 85.2 / 90.3 | 94.4 / 90.1 / 93.7 |
| MPDD | 73.1 / 78.6 / 80.6 | 47.0 / 73.8 / 61.0 | 61.5 / 77.5 / 69.2 | 62.8 / 78.0 / 69.4 | 63.4 / 75.0 / 66.2 | 67.9 / 77.8 / 73.8 | 77.0 / 82.0 / 78.9 |
| KSDD | 83.0 / 54.2 / 54.9 | 68.0 / 31.4 / 25.1 | 77.0 / 41.2 / 35.2 | 75.4 / 38.9 / 30.8 | 67.1 / 34.3 / 20.2 | 92.5 / 68.1 / 72.6 | 97.5 / 90.0 / 92.9 |
| Dataset | CLIP | SAA+ | WinCLIP | FADE | DIVAD | MRAD-TF | Ours |
| Industrial | |||||||
| MVTec-AD | 35.0 / 6.4 / 7.6 | 73.2 / 37.7 / 53.5 | 82.3 / 24.8 / 61.9 | 89.2 / 39.8 / 84.1 | 88.1 / 35.8 / 72.4 | 86.7 / 28.1 / 63.5 | 92.2 / 39.0 / 82.9 |
| VisA | 43.9 / 3.5 / 13.0 | 76.0 / 33.0 / 55.4 | 73.2 / 9.0 / 51.0 | 91.1 / 16.8 / 79.1 | 93.4 / 24.0 / 78.2 | 91.0 / 15.7 / 71.0 | 93.7 / 20.4 / 83.1 |
| BTAD | 30.3 / 6.2 / 11.8 | 58.4 / 8.1 / 26.4 | 72.7 / 18.5 / 27.5 | 96.3 / 46.4 / 76.7 | 94.3 / 52.5 / 69.9 | 80.5 / 15.7 / 36.3 | 96.2 / 52.9 / 77.8 |
| MPDD | 43.6 / 5.0 / 16.9 | 76.7 / 15.6 / 55.0 | 71.2 / 15.4 / 40.5 | 95.3 / 24.6 / 83.9 | 94.9 / 27.0 / 82.0 | 92.7 / 13.9 / 76.2 | 94.4 / 24.7 / 85.5 |
| KSDD | 71.1 / 1.5 / 31.4 | 68.3 / 6.2 / 30.5 | 79.1 / 7.0 / 34.3 | 84.4 / 6.4 / 56.1 | 88.2 / 4.5 / 72.8 | 90.6 / 19.1 / 48.7 | 98.5 / 38.5 / 93.8 |
| Context | Affinity | Regions | AUROC | max-F1 |
|---|---|---|---|---|
| 89.5 | 24.3 | |||
| ✓ | 93.7 | 28.9 | ||
| ✓ | ✓ | 94.6 | 33.6 | |
| ✓ | ✓ | ✓ | 95.2 | 37.8 |
| Encoder | Pooling | Pixel AUROC | Pixel max-F1 | Image AUROC |
|---|---|---|---|---|
| SigLIP (so400m) [ 51 ] | MAP head | 84.2 | 29.3 | 91.7 |
| SigLIP2 (so400m, p14) [ 45 ] | MAP head | 83.6 | 27.8 | 94.6 |
| SigLIP2-g [ 45 ] | MAP head | 81.1 | 27.3 | 96.4 |
| PE-Core (ViT-L/14) [ 5 ] | MAP head | 75.2 | 26.1 | 91.6 |
| RADIOv2.5-h (SigLIP distilled) [ 18 ] | MAP head distilled | 87.0 | 30.9 | 92.8 |
| C-RADIOv4-h (SigLIP2 distilled) [ 36 ] | MAP head distilled | 83.3 | 26.5 | 95.3 |
| Mechanism | Substrate | AUROC | AUPRO | max-F1 |
| Affinity refinement | DINO head | 95.1 | 85.4 | 36.7 |
| RADIO trunk (declared) | 95.2 | 85.9 | 37.8 | |
| SAM head | 95.0 | 85.3 | 37.1 | |
| SigLIP2 head | 95.1 | 85.6 | 37.4 | |
| Region pooling | SAM head (declared) | 95.2 | 85.9 | 37.8 |
| RADIO trunk | 95.3 | 85.5 | 35.9 |
| Foreground stage | AUROC | AUPRO | max-F1 |
|---|---|---|---|
| No mask | 92.8 | 82.8 | 37.0 |
| Mask, no gate | 93.7 | 84.2 | 37.8 |
| Mask + language gate (declared) | 95.2 | 85.9 | 37.8 |
| Ours | WinCLIP | SAA+ | ||||
|---|---|---|---|---|---|---|
| Dataset | Industrial | Clinical | Industrial | Clinical | Industrial | Clinical |
| HeadCT [ 25 ] | 92.7 / 89.9 | 98.0 / 93.9 | 83.7 / 78.8 | 77.3 / 71.8 | 45.1 / 67.3 | 47.3 / 66.7 |
| BrainMRI [ 23 ] | 90.4 / 89.9 | 96.0 / 94.9 | 88.9 / 86.4 | 84.6 / 81.9 | 51.7 / 77.8 | 53.8 / 77.2 |
| Br35H [ 17 ] | 93.9 / 89.7 | 97.9 / 94.7 | 83.9 / 77.1 | 77.1 / 71.9 | 54.7 / 68.4 | 57.1 / 67.9 |
| Mean | 92.3 / 89.8 | 97.3 / 94.5 | 85.5 / 80.8 | 79.7 / 75.2 | 50.5 / 71.2 | 52.7 / 70.6 |
| Ours | WinCLIP | SAA+ | ||||
| Dataset | Industrial | Clinical | Industrial | Clinical | Industrial | Clinical |
| ISIC [ 16 ] | 90.2 / 77.3 | 90.5 / 74.0 | 74.4 / 55.1 | 70.6 / 51.8 | 78.0 / 69.3 | 81.4 / 72.3 |
| ClinicDB [ 4 ] | 88.2 / 53.4 | 89.6 / 54.9 | 69.7 / 26.7 | 75.5 / 33.3 | 78.7 / 47.2 | 83.7 / 50.5 |
| ColonDB [ 44 ] | 82.2 / 42.5 | 89.5 / 47.8 | 64.7 / 21.1 | 69.8 / 23.8 | 78.2 / 42.2 | 76.8 / 36.4 |
| TN3K [ 14 ] | 64.0 / 30.2 | 79.5 / 43.4 | 68.1 / 31.1 | 68.5 / 31.0 | 71.3 / 38.3 | 71.2 / 37.7 |
| Mean | 81.1 / 50.8 | 87.3 / 55.0 | 69.2 / 33.5 | 71.1 / 35.0 | 76.5 / 49.3 | 78.3 / 49.2 |
| Image | Pixel | ||||
|---|---|---|---|---|---|
| Aspect handling | AUROC | max-F1 | AUROC | AUPRO | max-F1 |
| Without correction | 93.5 | 70.7 | 98.5 | 89.9 | 25.9 |
| With correction (declared) | 97.5 | 90.0 | 98.5 | 93.8 | 38.5 |
| Input resolution | AUROC | max-F1 |
|---|---|---|
| 224 | 89.6 | 86.6 |
| 384 | 92.1 | 89.9 |
| 448 (declared) | 92.6 | 90.5 |
| 512 | 93.0 | 90.5 |
| 672 | 92.7 | 90.8 |
| Dataset | Input resolution | AUROC | AUPRO | max-F1 |
|---|---|---|---|---|
| MVTec-AD | 224 | 88.9 | 70.9 | 31.0 |
| 384 | 91.0 | 78.2 | 35.0 | |
| 448 (declared) | 92.2 | 82.9 | 39.0 | |
| 512 | 91.1 | 78.9 | 36.4 | |
| 672 | 90.8 | 78.2 | 36.2 | |
| VisA | 224 | 90.4 | 67.5 | 14.9 |
| Encoder | Pixel | Image |
|---|---|---|
| RADIOv2.5-B (siglip head) | 90.36 / 37.78 | 91.02 / 92.56 |
| RADIOv2.5-L (siglip head) | 90.23 / 39.63 | 93.86 / 94.30 |
| RADIOv2.5-H (siglip head) | 90.21 / 40.10 | 93.36 / 93.08 |
| C-RADIOv4-h (siglip2-g head) | 92.15 / 38.98 | 96.00 / 95.14 |
| C-RADIOv4-so400m (siglip2-g head) | 86.34 / 36.97 | 94.55 / 93.57 |
| Dataset | C-RADIOv4-h (declared) | Real teachers |
| Industrial | ||
| MVTec | 96.0 / 95.1 | 96.3 / 95.6 |
| VisA | 85.4 / 83.1 | 83.0 / 81.9 |
| BTAD | 94.4 / 90.1 | 93.8 / 91.9 |
| MPDD | 77.0 / 82.0 | 72.6 / 81.1 |
| KSDD | 97.5 / 90.0 | 98.2 / 86.6 |
| Dataset | C-RADIOv4-h (declared) | Real teachers |
| Industrial | ||
| MVTec | 92.2 / 39.0 | 88.3 / 38.9 |
| VisA | 93.7 / 20.4 | 95.0 / 25.8 |
| BTAD | 96.2 / 52.9 | 96.1 / 44.8 |
| MPDD | 94.4 / 24.7 | 93.0 / 26.1 |
| KSDD | 98.5 / 38.5 | 99.4 / 41.1 |
| Style | a {} form | the {} form |
|---|---|---|
| Cropped | a cropped photo of a {}. | a cropped photo of the {}. |
| Close-up | a close-up photo of a {}. | a close-up photo of the {}. |
| Bright | a bright photo of a {}. | a bright photo of the {}. |
| Dark | a dark photo of a {}. | a dark photo of the {}. |
| JPEG-corrupted | a jpeg corrupted photo of a {}. | a jpeg corrupted photo of the {}. |
| Blurry | a blurry photo of a {}. | a blurry photo of the {}. |
| Category | Image AUROC / max-F1 / AP | Pixel AUROC / max-F1 / AUPRO |
|---|---|---|
| MVTec-AD | ||
| Bottle | 94.3 / 93.6 / 98.3 | 93.2 / 62.9 / 86.9 |
| Cable | 92.7 / 89.5 / 95.8 | 88.2 / 27.3 / 73.2 |
| Capsule | 92.4 / 93.4 / 98.5 | 96.6 / 35.7 / 89.4 |
| Carpet | 100.0 / 100.0 / 100.0 | 98.9 / 57.9 / 93.4 |
| Grid | 100.0 / 100.0 / 100.0 | 96.8 / 26.9 / 86.0 |
| Image | Pixel | |
|---|---|---|
| Published | 79.8 / – / – | 68.4 / – / – |
| Released lookup | 79.8 / 83.6 / 87.0 | 68.4 / 19.1 / 29.3 |
| Corrected lookup (ours) | 82.4 / 88.0 / 91.3 | 94.3 / 52.5 / 69.9 |
Anomaly Detection
Anomaly detection finds rare or unexpected patterns in data, from defective products and system faults to fraud and security threats.
See all 657 papers