
Anomalib 中的 AnomalyVFM基于视觉基础模型的零样本工业异常检测实现详解【免费下载链接】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 官方 API 参考文档anomalyvfm.md所覆盖的两个核心类 —— Lightning 封装AnomalyVFM与 PyTorch 实现AnomalyVFMModel—— 为主线结合仓库中的组件源码、配置文件与模型模块 README完整讲解该零样本zero-shot异常检测模型的 API 用法、参数含义、内部数据流与底层实现原理。读完后你将掌握如何用一行 CLI 命令或几行 Python 代码直接部署该模型理解 RADIO 视觉基础模型 DoRA 适配器 异常解码器的结构组成以及该模型在精度、导出等方面的使用边界。1. AnomalyVFM 是什么零样本异常检测的定位AnomalyVFM 源自论文《AnomalyVFM — Transforming Vision Foundation Models into Zero-Shot Anomaly Detectors》CVPR 2026是 Anomalib 图像模型族中的成员可通过from anomalib.models.image import AnomalyVFM直接导入。据模块 READMEsrc/anomalib/models/image/anomalyvfm/README.md与包级文档字符串anomalyvfm/__init__.py描述零样本设定该模型构建在预训练视觉基础模型VFM之上官方训练流程先用 FLUX 生成合成图像再在其上训练Anomalib 的实现只支持零样本推理不需要也不支持在本地再训练任务类型属于分割Segmentation模型一次前向同时输出图像级异常分数与像素级异常掩码即同时支持异常检测与异常定位两个任务导出限制包级 Notes 明确指出该模型因 Vision Transformer 架构需要较多 GPU 显存且后续章节将看到源码中显式禁用了导出功能。包级__init__.py只导出AnomalyVFMLightning 模型而AnomalyVFMModel位于 torch_model.py 中两者正是 API 参考页分别用automodule挂接的对象。2.AnomalyVFMLightning 模型API 参考逐项解读参考页第一个automodule指令指向 anomalyvfm.lightning_model 中的AnomalyVFM类。它继承自AnomalibModule构造签名与行为如下 from anomalib.models.image import AnomalyVFM # 零样本用法构造即完成权重加载无需 fit model AnomalyVFM()2.1 构造函数参数__init__lightning_model.py#L44-L63接收五个参数参数默认值说明pre_processorTrue预处理配置传True时使用configure_pre_processor返回的默认配置post_processorTrue后处理配置默认由configure_post_processor返回PostProcessor()evaluatorTrue评估器配置用于计算验证/测试指标visualizerTrue可视化配置precisionPrecisionType.FLOAT32推理精度接受PrecisionType枚举或字符串如float32字符串会被.lower()后转换为枚举并写入内部AnomalyVFMModel.precision构造时先创建内部AnomalyVFMModel()再根据precision的类型枚举或字符串设置self.model.precision。这解释了官方配置文件中precision: float32字段的最终去向见第 4 节。2.2 预处理器768×768 默认尺寸configure_pre_processorlightning_model.py#L65-L83使用torchvision的Compose([Resize(image_size, antialiasTrue)])默认目标尺寸为DEFAULT_IMAGE_SIZE 768即768×768。这是 RADIO 骨干patch size 16下的空间特征网格基础768/16 48×48 个 patch token。值得注意的一个实现细节configure_transformslightning_model.py#L131-L140会忽略外部传入的image_size并打印警告因为该模型自带固定的变换管线——也就是说该模型并不遵循 Anomalib 全局image_size配置的通用约定。2.3 推理路径validation/test/predict 三合一validation_steplightning_model.py#L85-L103是唯一的实质推理逻辑anomaly_scores, anomaly_maps self.model(batch.image) predictions InferenceBatch(pred_scoreanomaly_scores, anomaly_mapanomaly_maps) return batch.update(**predictions._asdict())test_step与predict_step均直接重定向到validation_step因此anomalib test与anomalib predict走的完全是同一套推理代码。2.4 零样本属性与导出限制两个属性与方法明确了该模型的边界learning_type恒返回LearningType.ZERO_SHOTlightning_model.py#L113-L120trainer_arguments返回空字典——不需要训练超参这也意味着不应调用anomalib trainto_torch/to_onnx/to_openvino三个导出入口全部被覆写为空操作仅打印警告 Exporting the model is not supported for AnomalyVFM model. Skipping...lightning_model.py#L152-L165。因此该模型无法像其他模型那样部署到 OpenVINO/ONNX 边缘推理路径只能在 PyTorch 运行时内使用。3.AnomalyVFMModelPyTorch 模型权重加载与前向流程参考页第二个automodule指令指向 anomalyvfm.torch_model 中的AnomalyVFMModel。其 docstring 概括了整体集成RADIO 基础 VFM PEFT 适配器 简单解码器像素级掩码 简单预测器图像级分数。3.1 依赖与权重下载构造函数torch_model.py#L40-L65做了三件事硬依赖检查若缺少huggingface_hub或safetensors抛出ImportError并提示pip install anomalib[huggingface]挂载 PEFTself.model.add_peft()默认秩r64见 3.3 节下载预训练权重通过hf_hub_download从 Hugging Face Hub 仓库MaticFuc/anomalyvfm_radio拉取model.safetensors并固定到 revision17654e763c8fae5ae1c44e2ec421a427783d6196以保证可复现随后load_state_dict完成加载。因此首次实例化需要联网local_files_onlyFalse且权重会进入 HF 缓存目录后续实例化命中缓存。3.2 前向传播双输出结构forwardtorch_model.py#L67-L107在torch.autocast torch.no_grad()下执行推理模型全程不建图流程为summary, ftrs self.model(img) # RADIO 输出 summary 与空间特征 ftrs ftrs.permute(0, 2, 1).reshape(b, -1, h//16, w//16) # 还原为特征图 anomaly_score self.predictor(summary).sigmoid() # 图像级分数 anomaly_maps, _ self.decoder(ftrs) # 解码器输出 (mask, conf) anomaly_maps anomaly_maps.sigmoid() anomaly_maps self.mean_kernel(anomaly_maps) # 5×5 平均池化平滑 anomaly_maps functional.interpolate(anomaly_maps, size(h, w), modebilinear, ...)关键实现细节精度策略precision为None或float32时用torch.float32否则 CPU 上自动回退到bfloat16GPU 上用float16torch_model.py#L82-L87空间对齐特征图按h // patch_size, w // patch_size重建patch_size 16定义于 BaseModel这要求输入分辨率能被 16 整除——默认 768×768 满足该条件平滑与上采样掩码先过 5×5AvgPool2dmean_kernel抑制锯齿噪声再双线性插值回原图尺寸。3.3BaseModelRADIO 骨干 DoRABaseModeltorch_model.py#L110-L143封装RADIOModel固定feature_dim 1024、patch_size 16add_peft(r64)调用 dora.py 中的add_peft递归遍历 RADIO 的每个子模块将名字为qkv的线性层替换为DoRAQKVWrapper、名字为proj的替换为DoRAWrapper。从 dora.py 的源码看这些包装器实现了 DoRAWeight-Decomposed Low-Rank Adaptation普通线性层DoRAWrapper在冻结原权重基础上学习低秩增量delta_w (B A) * (alpha / r)然后对W delta_w做幅值/方向分解——magnitude初始化为原权重逐行范数乘以上单位方向得到最终权重参与前向QKV 融合层DoRAQKVWrapper只对 Q 与 V 两个子块做低秩适配与幅值分解K 保持原始权重最后torch.cat([final_q, base_k, final_v])重组r0时所有包装器退化为直通原始层因此该参数也可理解为适配器开关。这个设计与 AnomalyVFM 论文的设定一致只在预训练 VFM 上附加少量可训练参数主干特征保持不变。3.4 RADIO 骨干内部结构RADIOModel 由 radio.py 定义要点输入归一化InputConditioner使用 CLIP 风格的 mean/stdradio.py#L399-L416对 0~1 图像做归一化Patch 化ViTPatchGeneratorradio.py#L88-L129以patch_size16、embed_dim1024将图像 unfold 成 patch token经768→1024线性投影并前置num_prefix_tokens8个可学习前缀 token相当于扩展版 [CLS]动态分辨率位置编码基础位置编码按 128×128 网格16384 个 token初始化_interpolate_pos_encodingradio.py#L323-L375在输入分辨率对应网格不等于 128×128 时用双三次插值重采样空间位置编码前缀 token 位置编码不足/超出时补零或截断——这让同一套权重可处理不同尺寸的输入双输出forward返回summary取前 3 个前缀 token 特征、压平为 1024×3 维向量summary_idxs [0, 1, 2]与spatial_features第 8 个 token 之后的全部 patch 特征。3.5 解码器与预测器decoder.py 提供两个轻量头部SimplePredictor单个nn.Linear(dim, 1)输入summary1024×3即feat_dim * 3输出图像级 logit经sigmoid得到异常分数SimpleDecoderdecoder.py#L70-L106一个BottleNeck3×3 卷积 GroupNorm×2后接upsample_blocks2个DecoderBlockBilinear每次上采样 2 倍并将通道减半1024→512→256最后两个 1×1 卷积分别输出mask logit与conf logitforward返回二元组但AnomalyVFMModel.forward只取第一个AnomalyVFMModel初始化时按feat_dim 1024实例化SimpleDecoder(1024, 1, 1)与SimplePredictor(3072)torch_model.py#L52-L54。此外模块 README 说明 ICPR 与 JIMS 两个论文版本的差异仅在于adapt_cls_features分类头特征是否做适配JIMS 版为默认的 False当前仓库源码未暴露该开关可理解为默认按 JIMS 版本实现。4. 配置与命令行用法4.1 模型配置文件官方提供的模型配置 examples/configs/model/anomalyvfm.yaml 全文仅两项model: class_path: anomalib.models.AnomalyVFM init_args: precision: float32class_path通过 Anomalib 的anomalib.models命名空间解析到AnomalyVFMimage/__init__.py 中from .anomalyvfm import AnomalyVFMprecision字符串在构造时被转换为PrecisionType并注入内部 torch 模型。由于trainer_arguments返回空字典该配置不需要也无法追加max_steps、batch_size等训练项。4.2 CLI直接零样本评测模块 README 给出的标准评测命令为anomalib test --model AnomalyVFM --data MVTecAD --data.category category例如对 MVTec AD 的bottle类别跑零样本评测anomalib test --model AnomalyVFM --data MVTecAD --data.category bottle由于predict_step与validation_step共用同一实现推理侧命令同理anomalib predict --model AnomalyVFM --data path-or-dataset4.3 Python API 示例from anomalib.models import AnomalyVFM model AnomalyVFM() # 首次运行自动从 HF Hub 下载 RADIO DoRA 权重 model.test() # 在配置的数据集上零样本评测 # 或单图推理 prediction model.predict(path/to/image.jpg) prediction.visualize(save_pathanomaly_result.png)注意两个前提其一需要安装anomalib[huggingface]额外依赖组huggingface_hub、safetensors否则构造时抛ImportError其二该模型不能fit也不能导出 ONNX/OpenVINO/TorchScript调用to_onnx等只会得到跳过警告。5. 参考性能MVTec AD 零样本结果据模块 READMEanomalyvfm/README.md#L28-L49记载该 Anomalib 实现在 MVTec AD 上的零样本结果如下categoryI-AUROCI-F1MaxP-AUROCP-F1MaxAUPRObottle98.3797.6494.9269.8590.11cable91.9288.1487.5418.8056.55capsule96.4795.2497.8642.3193.57carpet99.8498.8999.6575.4798.69grid99.9299.1397.4243.1690.91hazelnut99.1497.1496.7055.7192.93leather99.9799.4699.5657.7299.01metal_nut98.1997.3066.2828.8483.53pill95.4095.2787.6338.5591.75screw97.9495.5599.3647.9196.55tile99.4298.8296.2474.4893.44toothbrush91.8193.1092.6536.2691.68transistor78.8772.2268.7515.4554.03wood100.00100.0096.2370.3878.82zipper98.8497.1498.3662.5794.36average96.4195.0091.9449.1687.06这些数据表明该实现完全复现了论文报告的零样本水平图像级指标I-AUROC/I-F1Max普遍高于 90而像素级指标P-F1Max 平均 49.16与图像级存在明显差距这是零样本掩码预测的常见特征复现或调参时应以 AUPRO平均 87.06作为定位质量的综合参考。6. 小结与使用边界回到 API 参考页覆盖的两个类可以这样概括anomalyvfm.md的完整技术图景AnomalyVFM是面向anomalib test/predict流水线的 Lightning 封装固定 768×768 预处理、零样本学习类型、空训练参数、不支持导出AnomalyVFMModel是推理核心RADIO VFM 骨干1024 维、patch 16、8 前缀 token、可插值位置编码 秩 64 的 DoRA 适配器 双分支轻量头分数预测器与掩码解码器权重固定 revision 从 HF Hub 加载使用门槛只有两点安装anomalib[huggingface]依赖组、确保输入分辨率可被 16 整除默认预处理已满足。仓库中未包含针对 AnomalyVFM 的专属单元测试文件其正确性主要由模块 README 的 MVTec AD 评测表与上述固定权重 revision 共同约束。若需要评估其他数据集VisA、Real-IAD、MPDD 等的表现模块 README 指引参考原论文或官方实现。【免费下载链接】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),仅供参考