|
1 | | -# Copyright (C) 2022-2025 Intel Corporation |
| 1 | +# Copyright (C) 2025 Intel Corporation |
2 | 2 | # SPDX-License-Identifier: Apache-2.0 |
3 | 3 |
|
4 | 4 | """AnomalyDINO: Boosting Patch-based Few-shot Anomaly Detection with DINOv2. |
|
15 | 15 | >>> from anomalib.data import MVTecAD |
16 | 16 | >>> from anomalib.models.image.anomaly_dino.lightning_model import AnomalyDINO |
17 | 17 | >>> from anomalib.engine import Engine |
18 | | - >>> |
| 18 | +
|
19 | 19 | >>> MVTEC_CATEGORIES = [ |
20 | 20 | ... "hazelnut", "grid", "carpet", "bottle", "cable", "capsule", "leather", |
21 | 21 | ... "metal_nut", "pill", "screw", "tile", "toothbrush", "transistor", "wood", "zipper" |
22 | 22 | ... ] |
23 | 23 | >>> MASKED_CATEGORIES = ["capsule", "hazelnut", "pill", "screw", "toothbrush"] |
24 | | - >>> |
| 24 | +
|
25 | 25 | >>> for category in MVTEC_CATEGORIES: |
26 | 26 | ... mask = category in MASKED_CATEGORIES |
27 | 27 | ... print(f"--- Running category: {category} | masking={mask} ---") |
28 | | - ... |
| 28 | +
|
29 | 29 | ... # Initialize data module |
30 | 30 | ... datamodule = MVTecAD(category=category) |
31 | | - ... |
| 31 | +
|
32 | 32 | ... # Initialize model |
33 | 33 | ... model = AnomalyDINO( |
34 | 34 | ... num_neighbours=1, |
35 | 35 | ... encoder_name="dinov2_vit_small_14", |
36 | 36 | ... masking=mask, |
37 | 37 | ... coreset_subsampling=False, |
38 | 38 | ... ) |
39 | | - ... |
| 39 | +
|
40 | 40 | ... # Train and test |
41 | 41 | ... engine = Engine() |
42 | 42 | ... engine.fit(model=model, datamodule=datamodule) |
43 | 43 | ... engine.test(datamodule=datamodule) |
44 | | - >>> |
45 | 44 | >>> print("All categories processed.") |
46 | 45 | """ |
47 | 46 |
|
@@ -107,33 +106,33 @@ class AnomalyDINO(MemoryBankMixin, AnomalibModule): |
107 | 106 | >>> from anomalib.data import MVTecAD |
108 | 107 | >>> from anomalib.models.image.anomaly_dino.lightning_model import AnomalyDINO |
109 | 108 | >>> from anomalib.engine import Engine |
110 | | - >>> |
| 109 | +
|
111 | 110 | >>> MVTEC_CATEGORIES = [ |
112 | 111 | ... "hazelnut", "grid", "carpet", "bottle", "cable", "capsule", "leather", |
113 | 112 | ... "metal_nut", "pill", "screw", "tile", "toothbrush", "transistor", "wood", "zipper" |
114 | 113 | ... ] |
115 | 114 | >>> MASKED_CATEGORIES = ["capsule", "hazelnut", "pill", "screw", "toothbrush"] |
116 | | - >>> |
| 115 | +
|
117 | 116 | >>> for category in MVTEC_CATEGORIES: |
118 | 117 | ... mask = category in MASKED_CATEGORIES |
119 | 118 | ... print(f"--- Running category: {category} | masking={mask} ---") |
120 | | - ... |
| 119 | +
|
121 | 120 | ... # Initialize data module |
122 | 121 | ... datamodule = MVTecAD(category=category) |
123 | | - ... |
| 122 | +
|
124 | 123 | ... # Initialize model |
125 | 124 | ... model = AnomalyDINO( |
126 | 125 | ... num_neighbours=1, |
127 | 126 | ... encoder_name="dinov2_vit_small_14", |
128 | 127 | ... masking=mask, |
129 | 128 | ... coreset_subsampling=False, |
130 | 129 | ... ) |
131 | | - ... |
| 130 | +
|
132 | 131 | ... # Train and test |
133 | 132 | ... engine = Engine() |
134 | 133 | ... engine.fit(model=model, datamodule=datamodule) |
135 | 134 | ... engine.test(datamodule=datamodule) |
136 | | - >>> |
| 135 | +
|
137 | 136 | >>> print("All categories processed.") |
138 | 137 |
|
139 | 138 | Notes: |
|
0 commit comments