Skip to main content

anomalib-training

Trains an anomalib model on a dataset via the Python API or CLI, including training on a custom folder-structured dataset with the Folder datamodule. Use when writing or debugging an anomalib training script/command, choosing Engine/Trainer arguments, or wiring a model + datamodule together. Do not use for adding a new model or datamodule from scratch (see anomalib-adding-a-model / anomalib-adding-a-datamodule), or for the tiled-ensemble or benchmarking pipelines (see anomalib-tiled-ensemble / anomalib-benchmarking).

Quellinformationen

Repository
open-edge-platform/anomalib
Letzte Quellaktivität
24. August 2026 um 13:28
Erkannte Sprache von SKILL.md
Englisch
Sterne
6.222
Forks
1.000

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
2 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
anomalib-training
description
Trains an anomalib model on a dataset via the Python API or CLI, including training on a custom folder-structured dataset with the Folder datamodule. Use when writing or debugging an anomalib training script/command, choosing Engine/Trainer arguments, or wiring a model + datamodule together. Do not use for adding a new model or datamodule from scratch (see anomalib-adding-a-model / anomalib-adding-a-datamodule), or for the tiled-ensemble or benchmarking pipelines (see anomalib-tiled-ensemble / anomalib-benchmarking).
license
Apache-2.0
# Training a Model on a Dataset Training in anomalib always goes through `anomalib.engine.Engine`, which wraps a Lightning `Trainer`. ## Python API — standard benchmark dataset (MVTecAD) ```python from anomalib.data import MVTecAD from anomalib.models import Patchcore from anomalib.engine import Engine datamodule = MVTecAD(root="./datasets/MVTecAD", category="bottle", train_batch_size=32) model = Patchcore() engine = Engine() # any Lightning Trainer kwarg can go here engine.fit(model=model, datamodule=datamodule) results = engine.test(model=model, datamodule=datamodule) ``` `Engine(**kwargs)` forwards unknown kwargs straight to the underlying Lightning `Trainer` (`accelerator`, `devices`, `strategy`, `max_epochs`, `logger`, `callbacks`, `enable_checkpointing`, `val_check_interval`, `barebones`, ...) — there is no separate "Trainer config object" to build. Key `Engine` methods: `fit(model, datamodule=...)`, `train(...)` (fit + test in one call), `test(model=None, datamodule=...)`, `predict(model=None, datamodule=..., dataset=..., data_path=...)`. If `model`/`datamodule` are omitted from `test`/`predict`, the engine reuses the ones passed to `fit`. ## Python API — custom data with the Folder datamodule Use `Folder` whenever your data is laid out as `root/normal_dir/*`, `root/abnormal_dir/*`, and optionally `root/mask_dir/*` (segmentation masks) — no new dataset code needed: ```python from anomalib.data import Folder from anomalib.models import Padim from anomalib.engine import Engine datamodule = Folder( name="custom", # required — used as the datamodule's display name root="./datasets/custom", normal_dir="good", # required abnormal_dir="defect", # optional: enables anomalous test/eval samples mask_dir="mask", # optional: enables pixel-level (segmentation) evaluation train_batch_size=32, eval_batch_size=32, num_workers=8, ) model = Padim() engine = Engine() engine.fit(model=model, datamodule=datamodule) ``` If you only have normal training images and unlabeled/normal-only test images, omit `abnormal_dir` and `mask_dir` — `Folder` will still produce a valid train/test split via `test_split_ratio` (fraction of normal training images held out for testing). Use `normal_test_dir` if you have a separate directory of normal images specifically for the test set. ## CLI ```bash # Standard dataset, defaults anomalib train --model Patchcore --data anomalib.data.MVTecAD # Override a datamodule field anomalib train --model Patchcore --data anomalib.data.MVTecAD --data.category transistor # Override a trainer field (use a gradient-trained model like Stfpm where max_epochs is meaningful) anomalib train --model anomalib.models.Stfpm --data anomalib.data.MVTecAD --trainer.max_epochs 3 # Custom Folder dataset from the CLI anomalib train --model Padim --data anomalib.data.Folder \ --data.name custom --data.root ./datasets/custom \ --data.normal_dir good --data.abnormal_dir defect # From a config file (jsonargparse; combine with any of the above overrides) anomalib train --config path/to/config.yaml ``` CLI wiring lives in `src/anomalib/cli/cli.py` (`AnomalibCLI`); model/data classes are exposed as jsonargparse subclass arguments, so `--model`/`--data` accept either a short name (`Padim`) or a full class path (`anomalib.models.Padim`, `anomalib.data.Folder`). ## Choosing accelerator / devices Pass standard Lightning kwargs to `Engine(...)`: `accelerator="gpu"|"cpu"|"xpu"`, `devices=1`. For Intel XPU specifically, use `SingleXPUStrategy`/`XPUAccelerator` from `anomalib.engine`: ```python from anomalib.engine import Engine, SingleXPUStrategy, XPUAccelerator engine = Engine(strategy=SingleXPUStrategy(), accelerator=XPUAccelerator()) ``` ## Gotchas - Not every model trains via gradient descent — training-free models (e.g. Padim, Patchcore) still go through `engine.fit(...)`; `Engine`/`Trainer` handles the single "epoch" needed to build their memory bank. You don't need special-case code for this. Note that these models override `max_epochs` via their `trainer_arguments` property (e.g. `max_epochs=1`), so any `max_epochs` you pass to `Engine` will be overwritten for such models. - `Folder`'s `mask_dir` is what switches evaluation from image-level (classification) to pixel-level (segmentation) metrics — only pass it if you actually have per-pixel ground-truth masks. - Results (checkpoints, logs, images) are written under `Engine`'s `default_root_dir` (`"results"` by default), nested by model/datamodule/category — check there first when debugging a run. ## Reviewer / self-check - [ ] `Engine(...)` receives Trainer overrides as plain kwargs, not a hand-built `Trainer` object. - [ ] Folder-dataset training specifies `normal_dir` and, if applicable, `abnormal_dir`/`mask_dir` matching the actual on-disk layout. - [ ] CLI invocations use `anomalib.data.<Class>` / `anomalib.models.<Class>` paths that are actually exported (see `anomalib-adding-a-model` / `anomalib-adding-a-datamodule` for how exports work).
Auf GitHub ansehen