ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

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

Anomalib 配置驱动实战:用 YAML 配置文件驱动 fit / validate / test / predict 全流程 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 的fit、validate、test、predict子命令通过「数据配置 模型配置」两个 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.yamlVisa 数据集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.yamlmodel: 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: 9coreset_sampling_ratio: 0.1控制 Coreset 采样的特征点保留比例内存与精度的权衡num_neighbors: 9定义近邻检索的距离估计邻域大小。修改这些参数即可在不改代码的情况下调节 PatchCore 的行为。四、CLI 使用方式一条命令组合两份配置配置文件文档给出的核心用法是fit子命令将模型配置经-c传入、数据配置经--data传入anomalib fit -c configs/model/padim.yaml --data configs/data/mvtec.yamlanomalib 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, requiredTrue)注册——这正是 YAML 里class_pathinit_args两个键能被解析的底层机制jsonargparse 按类路径反射导入再按init_args调用构造函数。CLI 支持的子命令集合在 subcommands() 中声明fit、validate、test三个 Trainer 子命令接受model与datamodule或 dataloadersAnomalib 自有的trainfit 后再自动 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 会把model、data分别还原为AnomalibModule与AnomalibDataModule对象再由 instantiate_engine 组装出Engine对Trainer的封装执行对应子命令。值得注意的细节是只要配置了trainer.callbacks且未开启fast_dev_runCLI 会自动追加一个 Lightning 的SaveConfigCallback把最终生效的配置随实验一并落盘方便复现实验。五、适用前提与限制配置中root指向的数据集如./datasets/MVTecAD、./datasets/visa需要事先下载并放置到位配置本身不触发数据下载fit/validate/test等子命令依赖 Lightning 环境cli.py 在导入失败时会给出安装依赖的警告此时仅保留install、predict纯推理等可用路径仓库中实际配置文件清单比 README 文档树更丰富如mvtecad2.yaml、realiad.yaml、tabular.yaml、dinomaly.yaml、l2bt.yaml等以 examples/configs/data/ 与 examples/configs/model/ 当前文件为准文档中的目录树属于早期版本快照需要完整流水线超参搜索、批量对比时仓库还提供了实验性的benchmarkpipeline 子命令见 src/anomalib/cli/pipelines.py 与 tests/integration/pipelines/。小结Anomalib 的配置体系用「class_pathinit_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),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表