Anomalib 配置驱动实战:用 YAML 配置文件驱动 fit / validate / test / predict 全流程
2026/9/17 22:02:00 网站建设 项目流程

Anomalib 配置驱动实战:用 YAML 配置文件驱动 fit / validate / test / predict 全流程

【免费下载链接】anomalibAn anomaly detection library comprising state-of-the-art algorithms and features such as experiment management, hyper-parameter optimization, and edge inference.项目地址: https://gitcode.com/GitHub_Trending/an/anomalib

本文基于 Anomalib 仓库中的配置文件文档 examples/configs/README.md 展开,介绍如何借助新版 CLI 的fitvalidatetestpredict子命令,通过「数据配置 + 模型配置」两个 YAML 文件组合出完整的训练与推理流程。读完本文,你将掌握 Anomalib 配置文件的目录组织方式、class_path/init_args的声明式写法、常用参数(batch size、split 模式、backbone、coreset 采样等)的取值含义,以及配置从命令行解析到类实例化的底层调用链。

一、配置文件的目录组织

examples/configs/目录是 Anomalib 提供的一整套「开箱即用」配置模板,按职责划分为两个子目录:

configs/ ├── data # 数据集/数据模块配置 │ ├── avenue.yaml │ ├── btech.yaml │ ├── folder.yaml │ ├── kaputt.yaml │ ├── kolektor.yaml │ ├── mvtec.yaml │ ├── mvtec_3d.yaml │ ├── mvtec_loco.yaml │ ├── mvtecad2.yaml │ ├── shanghaitech.yaml │ ├── ucsd_ped.yaml │ ├── visa.yaml │ └── ...(共 20 个,含视频数据集 avenue/vad/bmad/mpdd 等) └── model # 异常检测模型配置 ├── ai_vad.yaml ├── cfa.yaml ├── cflow.yaml ├── csflow.yaml ├── efficient_ad.yaml ├── fastflow.yaml ├── padim.yaml ├── patchcore.yaml ├── reverse_distillation.yaml ├── stfpm.yaml └── ...(共 26 个,含 patchflow/ 子目录)

这种「数据」与「模型」解耦的拆分方式意味着:任意数据配置都可以与任意模型配置自由组合,例如用 MVTec 上的 Padim、用 VisA 上的 STFPM,不需要修改任何 Python 代码。

二、数据配置:class_path + init_args 声明式写法

每个数据配置文件的结构都非常统一,以 examples/configs/data/mvtec.yaml 为例:

class_path: anomalib.data.MVTecAD init_args: root: ./datasets/MVTecAD category: bottle train_batch_size: 32 eval_batch_size: 32 num_workers: 8 test_split_mode: from_dir test_split_ratio: 0.2 val_split_mode: same_as_test val_split_ratio: 0.5 seed: null

关键参数说明:

  • class_path:数据模块的完整类路径,CLI 会据此反射式地实例化对应类(MVTecAD、Visa、Folder 等,均位于 src/anomalib/data/datamodules/);
  • root/category:数据集根目录与类别,例如 MVTec 的bottle类别;
  • train_batch_size/eval_batch_size:训练与验证/测试阶段的批量大小;
  • test_split_mode/test_split_ratio:测试集切分方式,from_dir表示直接使用目录结构中的 test 划分;
  • val_split_mode: same_as_test:验证集划分跟随测试集划分。

对比 examples/configs/data/visa.yaml(Visa 数据集,category: capsules)与 examples/configs/data/folder.yaml(通用文件夹数据集)可以发现后者的差异点:

class_path: anomalib.data.Folder init_args: name: bottle root: "datasets/MVTecAD/bottle" normal_dir: "train/good" abnormal_dir: "test/broken_large" normal_test_dir: "test/good" mask_dir: "ground_truth/broken_large" normal_split_ratio: 0 extensions: [".png"]

Folder数据模块不绑定具体数据集,而是显式声明正常样本目录(normal_dir)、异常样本目录(abnormal_dir)、正常测试目录(normal_test_dir)、掩码目录(mask_dir)与文件扩展名(extensions),适合任意自定义目录结构的工业数据集;normal_split_ratio: 0表示训练时不额外切出验证子集。

三、模型配置:从 Padim 到带 Trainer 回调的 STFPM

模型配置统一包裹在顶层model:键下。最简形式见 examples/configs/model/padim.yaml:

model: class_path: anomalib.models.Padim init_args: layers: - layer1 - layer2 - layer3 backbone: resnet18 pre_trained: true n_features: null

其中layers指定用于提取特征的 ResNet 阶段,backbone指定骨干网络,pre_trained: true表示加载预训练权重,n_features: null表示特征维度自动推断。

examples/configs/model/stfpm.yaml 则展示了更完整的写法——模型配置之外还可以附加trainer:段,覆盖 Lightning Trainer 的行为并挂载回调:

model: class_path: anomalib.models.Stfpm init_args: backbone: resnet18 layers: - layer1 - layer2 - layer3 trainer: max_epochs: 100 callbacks: - class_path: lightning.pytorch.callbacks.EarlyStopping init_args: patience: 5 monitor: pixel_AUROC mode: max

这里max_epochs: 100设定最大训练轮数,EarlyStopping回调监视pixel_AUROC(越大越好),连续 5 轮不提升即提前停止,避免过拟合。

再看 examples/configs/model/patchcore.yaml,它体现了 PatchCore 特有的超参数:

model: class_path: anomalib.models.Patchcore init_args: backbone: wide_resnet50_2 layers: - layer2 - layer3 pre_trained: true coreset_sampling_ratio: 0.1 num_neighbors: 9

coreset_sampling_ratio: 0.1控制 Coreset 采样的特征点保留比例(内存与精度的权衡),num_neighbors: 9定义近邻检索的距离估计邻域大小。修改这些参数即可在不改代码的情况下调节 PatchCore 的行为。

四、CLI 使用方式:一条命令组合两份配置

配置文件文档给出的核心用法是fit子命令,将模型配置经-c传入、数据配置经--data传入:

anomalib fit -c configs/model/padim.yaml --data configs/data/mvtec.yaml
anomalib fit -c configs/model/stfpm.yaml --data configs/data/visa.yaml

从 src/anomalib/cli/cli.py 的init_parser可以看到,-c/--config使用了 jsonargparse 的ActionConfigFile动作,支持 json 或 yaml 格式;数据参数--data在 add_trainer_arguments 中通过add_subclass_arguments(AnomalibDataModule, "data")注册为AnomalibDataModule的子类参数,模型参数--model则通过add_subclass_arguments(AnomalibModule, "model", required=True)注册——这正是 YAML 里class_path+init_args两个键能被解析的底层机制:jsonargparse 按类路径反射导入,再按init_args调用构造函数。

CLI 支持的子命令集合在 subcommands() 中声明:fitvalidatetest三个 Trainer 子命令接受modeldatamodule(或 dataloaders),Anomalib 自有的train(fit 后再自动 test)、predict(推理)、export(导出 ONNX/OpenVINO)子命令则在 anomalib_subcommands() 中注册。因此同一份配置组合也可以复用到其他阶段,例如:

# 训练完成后评估 anomalib test -c configs/model/padim.yaml --data configs/data/mvtec.yaml # 对单张/单目录数据推理 anomalib predict -c configs/model/padim.yaml --data /path/to/images

配置并非简单透传,CLI 在实例化前会先经过 before_instantiate_classes 中的update_config做归一化处理(例如补全 tiler 相关配置);实例化阶段 instantiate_classes 会把modeldata分别还原为AnomalibModuleAnomalibDataModule对象,再由 instantiate_engine 组装出Engine(对Trainer的封装)执行对应子命令。值得注意的细节是:只要配置了trainer.callbacks,且未开启fast_dev_run,CLI 会自动追加一个 Lightning 的SaveConfigCallback,把最终生效的配置随实验一并落盘,方便复现实验。

五、适用前提与限制

  • 配置中root指向的数据集(如./datasets/MVTecAD./datasets/visa)需要事先下载并放置到位,配置本身不触发数据下载;
  • fit/validate/test等子命令依赖 Lightning 环境,cli.py 在导入失败时会给出安装依赖的警告,此时仅保留installpredict(纯推理)等可用路径;
  • 仓库中实际配置文件清单比 README 文档树更丰富(如mvtecad2.yamlrealiad.yamltabular.yamldinomaly.yamll2bt.yaml等),以 examples/configs/data/ 与 examples/configs/model/ 当前文件为准,文档中的目录树属于早期版本快照;
  • 需要完整流水线(超参搜索、批量对比)时,仓库还提供了实验性的benchmarkpipeline 子命令,见 src/anomalib/cli/pipelines.py 与 tests/integration/pipelines/。

小结

Anomalib 的配置体系用「class_path+init_args」的声明式 YAML 把数据与模型彻底解耦:选一份 data/ 配置、一份 model/ 配置,再用anomalib fit -c ... --data ...一条命令即可启动训练,评估与推理复用同一套组合。理解class_path/init_args与 jsonargparse 的对应关系后,你可以自行扩展任意AnomalibDataModule/AnomalibModule子类的配置,而不必接触 Python 代码。

【免费下载链接】anomalibAn anomaly detection library comprising state-of-the-art algorithms and features such as experiment management, hyper-parameter optimization, and edge inference.项目地址: https://gitcode.com/GitHub_Trending/an/anomalib

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询