Skip to content

Release Anomalib Library v2.6.0

Choose a tag to compare

@ashwinvaidya17 ashwinvaidya17 released this 25 Jul 08:58
· 62 commits to main since this release
3759687

What's Changed

Added

Removed

  • 鈿狅笍 data: Remove Kaputt deprecated APIs (use_reference, reference_only, category='all'); use image_mode=ImageMode.* and category=None / a concrete category (default book_other) instead
  • 鈿狅笍 metric: Remove deprecated AUPRO num_thresholds constructor argument and unused compute_pro(..., target=...) parameter
  • 鈿狅笍 utils: Remove temporary resolve_with_warning / _is_legacy_default_root helpers; use resolve_dataset_root instead

Changed

  • 馃敡 data: Kaputt datamodule default category is now book_other (was the deprecated all pseudo-category)

Fixed

New Contributors

Full Changelog: lib/v2.5.1...lib/v2.6.0


API Changes

New Public Exports

The following class is now exported from anomalib.models:

Class Module Path
SuperADD anomalib.models.image.super_add
from anomalib.data import MVTecAD2
from anomalib.engine import Engine
from anomalib.models import SuperADD

datamodule = MVTecAD2(category="sheet_metal")
model = SuperADD(patch_size=640, patch_overlap=128)
engine = Engine()
engine.fit(model=model, datamodule=datamodule)

The following classes are now exported from anomalib.data:

Class Module Path
AutoVI anomalib.data.datamodules.image.autovi
AutoVIDataset anomalib.data.datasets.image.autovi
from anomalib.data import AutoVI

datamodule = AutoVI(
    root="./datasets/AutoVI",
    category="pipe_clip",
)
datamodule.prepare_data()  # downloads only the zip for `pipe_clip`
datamodule.setup()

Breaking Changes

These APIs were deprecated in prior releases and are removed in v2.6.0:

Removed API Replacement Since
Kaputt(category='all') category=None (all categories) or a concrete material (default is now book_other) v2.4.0
KaputtDataset(reference_only=...) image_mode=ImageMode.REFERENCE_ONLY v2.4.0
KaputtDataset(use_reference=...) image_mode=ImageMode.QUERY_AND_REFERENCE v2.4.0
AUPRO(num_thresholds=...) Omit the argument (it was ignored) v2.1.0
AUPRO.compute_pro(..., target=...) compute_pro(cca=..., preds=...) only v2.1.0
resolve_with_warning / _is_legacy_default_root resolve_dataset_root v2.4.x

Kaputt category and image mode

# Before (removed)
from anomalib.data import Kaputt

datamodule = Kaputt(category="all", use_reference=True)
datamodule = Kaputt(reference_only=True)

# After
from anomalib.data import Kaputt
from anomalib.data.datasets.image.kaputt import ImageMode

datamodule = Kaputt(category=None)  # all categories
datamodule = Kaputt()  # default category is now "book_other"
datamodule = Kaputt(image_mode=ImageMode.QUERY_AND_REFERENCE)
datamodule = Kaputt(image_mode=ImageMode.REFERENCE_ONLY)
# Before (removed)
from anomalib.data.datasets import KaputtDataset

dataset = KaputtDataset(use_reference=True)
dataset = KaputtDataset(reference_only=True)

# After
from anomalib.data.datasets import KaputtDataset
from anomalib.data.datasets.image.kaputt import ImageMode

dataset = KaputtDataset(image_mode=ImageMode.QUERY_AND_REFERENCE)
dataset = KaputtDataset(image_mode=ImageMode.REFERENCE_ONLY)

AUPRO

# Before (removed)
from anomalib.metrics import AUPRO

metric = AUPRO(fpr_limit=0.3, num_thresholds=100)
fpr, pro = metric.compute_pro(cca=cca, preds=preds, target=masks)

# After
from anomalib.metrics import AUPRO

metric = AUPRO(fpr_limit=0.3)
fpr, pro = metric.compute_pro(cca=cca, preds=preds)

Dataset root resolution

# Before (removed)
from anomalib.utils.path import resolve_with_warning

root = resolve_with_warning("./datasets/MVTecAD", "MVTecAD")

# After
from anomalib.utils.path import resolve_dataset_root

root = resolve_dataset_root("./datasets/MVTecAD", "MVTecAD")
root = resolve_dataset_root(None, "MVTecAD")  # -> ~/.cache/anomalib/datasets/MVTecAD

Existing Deprecations (carried forward)

These were deprecated in prior releases and remain deprecated:

Deprecated API Replacement Since Removal Target
anomalib.models.components.dinov2 TimmFeatureExtractor v2.5.1 Future
Legacy ONNX exporter (dynamo=False) Dynamo exporter (dynamo=True) v2.5.1 v2.7.0
Engine.export(ov_args=...) Use ExportParameters directly v2.3.0 Future
PatchcoreTorchModel.compute_distance(embeddings=...) Default memory bank path v2.1.0 Future
# Prefer (current)
from anomalib.models.components.feature_extractors import TimmFeatureExtractor

extractor = TimmFeatureExtractor(
    backbone="vit_small_patch14_dinov2",
    layers=["blocks.2", "blocks.5", "blocks.8", "blocks.11"],
)

# Avoid (deprecated)
from anomalib.models.components import dinov2  # FutureWarning

# Prefer dynamo ONNX export
model.to_onnx(export_root="./exports", dynamo=True)

# Avoid legacy exporter (removed in v2.7.0)
model.to_onnx(export_root="./exports", dynamo=False)

What's Changed

  • chore(lib): bump version by @ashwinvaidya17 in #3677
  • chore(deps): update python:3.13-slim docker digest to 6771159 by @oep-renovate[bot] in #3678
  • fix(deps): bump torch to resolve Dependabot alerts (v2) by @AlexanderBarabanov in #3681
  • chore(deps): update dependency js-yaml to v4.3.0 [security] by @oep-renovate[bot] in #3682
  • 馃悶 fix(data): distribute split remainder over subsets to avoid ZeroDivisionError by @prawnsgupta in #3680
  • ci: Add cleanup old images workflow by @ivanzati in #3683
  • chore(deps): update dependency dompurify to v3.4.12 [security] by @oep-renovate[bot] in #3685
  • chore(ci): add temp guard to prevent some Dependabot alerts from reopening by @AlexanderBarabanov in #3684
  • fix: path traversal by @AlexanderBarabanov in #3686
  • feat(lib): merge 2.6.0 branch by @ashwinvaidya17 in #3694

New Contributors

Full Changelog: lib/v2.5.1...lib/v2.6.0