AnomalyVFM:将视觉基础模型改造为零样本异常检测器 AnomalyVFM -- Transforming Vision Foundation Models into Zero-Shot Anomaly Detectors
用合成数据集 + LoRA 微调让 DINOv2/DINOv3/RADIO 等纯视觉基础模型在零样本异常检测上首次反超 CLIP 类方法。
前置知识
零样本异常检测 (Zero-Shot Anomaly Detection)
指模型在训练阶段从未见过目标物体类别的正常或异常图像,测试时却要在任意新类别上同时完成"有没有异常"的图像级判断和"异常在哪里"的像素级定位。工业上经常遇到客户临时换料、换产线,没有时间收集正常样本重新训练的场景,因此需要这种强泛化能力。
本文的核心场景就是 zero-shot AD。读者必须理解它与传统 full-shot/few-shot 的区别,才能体会为什么 VLM(CLIP)一直占优、纯 VFM 却长期落后的背景。
视觉基础模型 (VFM) 与视觉-语言模型 (VLM)
VFM 指 DINOv2/DINOv3/RADIO 这类只用图像自监督训练得到的通用视觉编码器;VLM 指 CLIP 这类用图文对训练、同时具备语言塔的模型。VFM 拥有细粒度视觉表征但缺乏"语义锚点",VLM 拥有高层概念但像素级定位能力较弱。
本文论证 VFM 在 zero-shot AD 落后的根因不在模型本身,而在 (i) 训练数据多样性不足和 (ii) 微调策略太浅,是判断论文价值的基础。
LoRA(Low-Rank Adaptation)
一种参数高效微调方法。它在原始线性层旁并行一个低秩分解矩阵 $\Delta W = BA$,其中 $B\in\mathbb{R}^{d\times r}, A\in\mathbb{R}^{r\times k}$,秩 $r\ll\min(d,k)$。训练时只更新 $A,B$,原权重冻结,从而以极少量参数完成模型适配。
AnomalyVFM 把 LoRA 注入到 VFM 每一个 transformer 块的 Q/V/Proj 注意力层,是它区别于"只换输出头"等浅层适配的关键技术。
图像修复/重绘 (Inpainting via RePaint)
RePaint 是一种基于扩散/流匹配的图像修复方法:在迭代去噪过程中,对需要保留的区域每步都加回原图加噪后的状态,对待生成区域继续去噪,最终在指定掩码 $R$ 内合成新内容。
本文用 FLUX + RePaint 把"缺陷"画到前景物体上,是合成异常数据三步流水线的核心技术步骤。
研究动机
近两年零样本异常检测的最强方法几乎清一色基于 CLIP 这类视觉-语言模型:WinCLIP、AnomalyCLIP、AdaCLIP、AACLIP、Bayes-PFL、FAPrompt 在 9 个工业基准(MVTec AD、VisA、BTAD、MPDD、RealIAD 等)上的 image-level AUROC 已经卷到 90% 以上。但同样用大规模自监督预训练的纯视觉基础模型 DINOv2、VFM-Adapter 等却始终落后 5-8 个百分点。作者认为这不是 VFM 本身不够强,而是两个工程层面被忽视的问题:(i) 现有辅助异常数据集(MVTec AD 只有 15 个物体、73 种缺陷;VisA 同样规模小、缺陷类型少)多样性严重不足,纯 VFM 没有 VLM 那样的高层语义先验,必须靠数据学到通用的"正常 vs 异常"判别线索,少量类别根本学不到;(ii) 以往用 VFM 做 zero-shot AD 的做法都太浅——只在冻结的 backbone 后面接一个简单的 MLP 或 1×1 卷积解码器,用普通像素级损失微调,backbone 内部表征几乎没变,等于让一个对像素极其敏感的模型只能用最后一层特征去判别全局异常,定位能力自然上不去。
本文的目标是提出 AnomalyVFM 框架,目标是把任意一个预训练好的纯视觉基础模型(DINOv2、DINOv3、RADIO)都改造成一个能直接 zero-shot 工业异常检测的强模型,同时证明一个反直觉的假设:纯 VFM 在像素级感知任务上其实更合适,只要数据够丰富、微调够深,就能反超 VLM。具体量化目标是在 9 个工业基准上把 image-level AUROC 从之前最好的 90.8%(Bayes-PFL)至少提升 2-3 个百分点,并保持像素级定位能力不下降。
与已有工作不同的是,本文的独特切入角度是"数据 + 适配器"双管齐下,且两者都必须为 VFM 量身定制。在数据侧,作者提出三阶段全自动合成流水线(FLUX 生成无缺陷图 → 在前景上 inpaint 缺陷 → 用 DINOv2 特征差异做过滤),完全不依赖任何真实异常数据,就能得到 10000 张、100 个物体类别、204 种缺陷的训练集,物体/背景组合数达到 4596,远超 MVTec AD 的 15 类。在模型侧,把 LoRA 注入 backbone 所有 transformer 块的注意力层,让内部表征真正改变;并设计一个 confidence-weighted 像素损失,decoder 同时输出异常图 $M_o$ 和置信图 $c$,让模型对"自己也不确定"的区域自动降权,缓解合成标签噪声。这两件事是先前 VFM-based zero-shot AD 都没有系统做过的。
核心方法
AnomalyVFM 的整体思路可以一句话概括:"造一个足够大、足够杂的合成异常数据集,再用 LoRA 把 VFM 内部表征和一个小 decoder 一起微调,让它学会把异常与正常在像素级别区分开"。直觉上,正常样本的视觉特征分布和异常样本的视觉特征分布在 VFM 特征空间里是不同的几何结构——问题在于 (a) backbone 没见过这种"正常-异常对",不知道该把哪些维度放大;(b) 真实异常数据又贵又少。AnomalyVFM 用合成数据破解 (a),用 LoRA 注入破解 (b)。技术路线分两条并行的流水线:数据流水线是 FLUX 文本→图像→inpaint 缺陷→DINOv2 特征过滤;模型流水线是冻结的 VFM backbone + 注入 Q/V/Proj 的 LoRA 适配器 + 一个轻量卷积 decoder(输出异常图和置信图)+ 一个 image-level 分类头。训练时三者联合用置信加权损失优化,推理时 backbone 一次前向同时给出像素级异常图和图像级异常分数。
核心创新点是把"数据多样性"和"模型内部表征适应"绑定为同一个问题的两面。已有工作 (AnomalyCLIP、AdaCLIP 等) 的成功靠的是 CLIP 自带的语言先验——"normal/abnormal" 这种高层概念已经内嵌在文本嵌入里,所以即使辅助数据少也能泛化;而 VFM 没有这个"捷径",必须自己从数据中学。AnomalyVFM 指出,要让 VFM 真正在 zero-shot 任务上和 VLM 竞争,必须同时满足两个条件:(1) 训练数据在物体类别、背景、缺陷类型上都必须足够丰富,使得学到的判别规则是"跨类别通用"的;(2) 微调必须深入到 backbone 内部,让特征本身重新组织出"正常-异常"这一新维度,而不只是换头。本质区别于 SAA、WinCLIP、AdaCLIP 等"冻结/浅层微调 backbone"的做法。
方法步骤详情
数据合成流水线共三步。第一步用 FLUX(一种流匹配图像生成模型)根据 prompt $p$ 生成无缺陷前景图 $I$,prompt 模板是 "A close-up photo of [Object] for industrial visual inspection. Top-down view. Centered. [Texture] background",其中 [Object] 从 LLM 生成的 100 个类别(如 apple, screw, tile)里采样,[Texture] 从 50 种背景里采样。第二步是 inpaint 缺陷:用 IS-Net 显著目标分割网络得到前景 mask $M_{fg}$,在前景上随机采样中心 $(x,y)$,并按 $w\sim\mathcal{U}(w_{min},w_{max}), h\sim\mathcal{U}(h_{min},h_{max})$(默认 50-350 像素)生成缺陷矩形 $R$,再用 FLUX + RePaint 策略在 $R$ 内填充 prompt $p_a$ = "A close-up photo of a [Anomaly] [Object] ...",其中 [Anomaly] 是 GPT-4o 生成的、针对该物体合理的缺陷词(cracked, dented, smudged 等,204 种)。第三步是数据过滤:对 $I$ 和 $I_a$ 分别提取 DINOv2 patch 特征 $f, f_a$,计算余弦距离图 $M_d$,取最大值 $D$,若 $D<0.3$ 则视为生成失败、丢弃样本。最终得到 (I, I_a, M) 三元组各 10000 个。模型侧流程:把图像 $I$ 输入冻结的 RADIOv2.5 ViT-L/16(多分辨率训练,输入 resize 到 768×768),在每个 transformer 块 $b$ 的 Query/Value/Output 投影上注入 rank=64 的 LoRA;同时训练一个轻量 decoder(两个 conv+GroupNorm+ReLU+双线性上采样块 + 1 个 1×1 conv),输入 backbone 最后一层 reshaped 特征 $f_r$,同时输出异常分割图 $M_o\in[0,1]^{H\times W}$ 和置信图 $c\in\mathbb{R}^{H\times W}$;CLS token 过一个线性层得到图像级异常分数 $A_o$。损失函数为 $\mathcal{L}=\mathcal{L}_{seg}+\mathcal{L}_{img}$,其中 $\mathcal{L}_{img}$ 是 Focal Loss,$\mathcal{L}_{seg}=\mathcal{L}_{base}(M_o, M_{GT})\cdot C^{-\alpha\log C}$,$C=1+\exp(c)$,$\alpha=0.1$;$\mathcal{L}_{base}=\mathcal{L}_1(M_o, M_{GT})+\beta\mathcal{L}_{focal}(M_o, M_{GT})$,$\beta=5$。置信加权的设计动机是合成 mask 不完全可靠——decoder 自己"认为不确定"的区域应该少被惩罚。训练 500 步,batch size 32,AdamW,学习率 $10^{-4}$。
技术新颖性
技术新颖性主要体现在三处。第一,把"自动合成数据集 + VFM 微调"组合成一个通用、模型无关的 zero-shot 框架:data generation pipeline 不依赖任何真实异常数据,是真正意义上的 zero-resource;adapter 方案不绑定具体 VFM 架构,只要 backbone 是 transformer 就能用,作者实测 DINOv2、DINOv3、RADIO 三个不同家族都稳定提升 5-6 个百分点。第二,把 LoRA 从 LLM/扩散模型领域迁移到视觉 backbone 的所有注意力块,并配合一个同时预测异常图和置信图的 decoder,这套组合在异常检测领域之前没有人系统尝试过;ablation 显示 LoRA 换成 AdaLN 或 VPT 都会掉 0.7-1.0 p.p.,换成只训练 decoder 而不注入 LoRA 则会掉 6.1 p.p.,证明"内部表征变化"是 VFM 真正学到的关键。第三,confidence-weighted pixel loss 借鉴了 3D 重建中用不确定性加权多任务损失(Kendall et al.)的思路,但用到了合成数据驱动的异常分割里,特别契合"合成标签本身有噪声"这一现实问题,且推理时不需要额外分支。
实验结果
核心实验分四组展开,结论都非常硬。第一组是 VFM 通用性验证(Table 1):在 9 个工业数据集上平均,DINOv2 单 backbone 的 image-level AUROC 只有 83.0%,加上合成数据(SD)涨到 86.4%,再加上 LoRA+decoder(FA)后达到 90.2%(+7.2 p.p.);DINOv3 从 85.3% 涨到 91.5%(+6.2 p.p.);RADIO 从 89.1% 涨到 94.1%(+5.0 p.p.)。这组实验同时验证了"数据多样性 + 内部适配"两个 claim 的必要性,单独加任一项提升都有限。第二组是和 SOTA zero-shot 方法的横向对比(Table 2,9 个工业数据集):AnomalyVFM image-level AUROC 取得平均 94.1%,比第二名 Bayes-PFL(90.8%)高 3.3 p.p.,比 AdaCLIP(89.6%)高 4.5 p.p.,比 AnomalyCLIP(87.6%)高 6.5 p.p.;image-level F1-Max 87.6% 同样第一。在 MVTec AD、VisA、RealIAD 这种主流数据集上分别达到 (94.9, 94.1)、(93.6, 90.1)、(88.0, 81.6),均刷新当时的 zero-shot SOTA。pixel-level AUROC 平均 96.9%,比第二名 Bayes-PFL(96.0%)高 0.9 p.p.;F1-Max 44.3% 仅次于 AdaCLIP 的 51.0%。第三组是医疗领域泛化(Table 3):虽然 AnomalyVFM 完全没有用医疗数据训练,但在 HeadCT、BrainMRI、BR35H 三个分类数据集上 image-level AUROC 拿到 (94.8, 92.9, 94.4),平均 94.0% 与 Bayes-PFL (94.9%) 相当;在 6 个分割基准上 pixel-level AUROC 平均 90.0%,比 AdaCLIP 还高 1.2 p.p.,证明合成数据中学到的"正常 vs 异常"判别能力是真的可迁移的。第四组是 few-shot 迁移(Table 4):把 zero-shot 模型在 1/2/4 张正常样本上额外微调 50 步后,在 MVTec AD 上拿到 97.2/97.9/98.2 image-level AUROC,超过当前 SOTA 的 INP-Former(96.1/97.0/97.6);VisA 上 1-shot 拿到 93.8 也最高。可视化结果(Figure 5)显示 AnomalyVFM 在小缺陷(列 4、5)和大缺陷(列 2、3、10)上都能给出比 AdaCLIP、Bayes-PFL 更锐利、更完整的 mask。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 工业零样本异常检测(MVTec AD) | Image-level (AUROC, F1-Max) | (94.9, 94.1) | Bayes-PFL (92.3, 93.1) | +2.6 AUROC, +1.0 F1-Max |
| 工业零样本异常检测(VisA) | Image-level (AUROC, F1-Max) | (93.6, 90.1) | Bayes-PFL (87.0, 84.1) | +6.6 AUROC, +6.0 F1-Max |
| 工业零样本异常检测(RealIAD) | Image-level (AUROC, F1-Max) | (88.0, 81.6) | Bayes-PFL (85.2, 78.7) | +2.8 AUROC, +2.9 F1-Max |
| 工业零样本异常检测(DTD-Synthetic 纹理) | Image-level (AUROC, F1-Max) | (99.4, 99.0) | Bayes-PFL (95.1, 95.1) | +4.3 AUROC, +3.9 F1-Max |
| 工业零样本异常定位(9 数据集平均) | Pixel-level (AUROC, F1-Max) | (96.9, 44.3) | Bayes-PFL (96.0, 43.9) | +0.9 AUROC, +0.4 F1-Max |
| 医疗零样本异常定位(6 数据集平均) | Pixel-level (AUROC, F1-Max) | (90.0, 59.7) | AdaCLIP (88.8, 64.5) | +1.2 AUROC, -4.8 F1-Max |
| Few-shot 异常检测(MVTec AD, 1-shot) | Image-level AUROC | 97.2 | INP-Former (96.1) | +1.1 |
| 推理速度(单样本, A100) | Latency (ms) | 20.5 | Bayes-PFL (208.5) | 约 10× 加速 |
局限与改进
作者明确指出的局限性主要集中在数据生成环节:用 FLUX 在单卡 A100 上生成 10000 张高质量异常数据需要约 1 天,而模型训练只要 2 小时,瓶颈完全在合成数据上。第二个限制是医疗领域表现虽然超出预期,但作者承认若能在医学影像数据集上对 FLUX 进一步微调,效果应该还能再涨,但这部分留作未来工作。第三是合成数据中仍约有 30% 的样本在过滤阈值 T=0.3 下被丢弃,说明 prompt adherence 远未解决;且通过的样本里也偶有"看似没缺陷"的情况(见补充材料 Figure 1)。我自己观察到的额外限制包括:(1) pixel-level F1-Max 在工业数据集上(44.3%)其实比 AdaCLIP(51.0%)低 6.7 p.p.,这意味着虽然 AUROC 高,但 threshold 选择后的实际像素覆盖率/误报率仍有改进空间,可能是 confidence-weighted loss 在抑制噪声 mask 的同时把一些细粒度边界也一起压低了;(2) 生成数据中缺陷平均只占图像 2.52%(最大 11.24%),比 MVTec AD 的 4.39% 偏小,对小缺陷友好但对占大面积的"脏污/变色"类异常可能欠拟合;(3) 整个框架依赖 CLIP 衍生出的多模态 VFM(如 RADIO 本身就吸收了 CLIP 训练目标),所以严格说不是"纯"纯 VFM,是"已被多模态蒸馏过"的 VFM;(4) LoRA 注入 Q/V/Proj 三处的设计在更大 VFM 上不一定是最优(ViT-H 反而比 ViT-L 略掉 0.6 p.p.),且对 LoRA rank 在 32-128 区间都鲁棒,但 rank 之外的设计空间未充分探索。
独立分析的弱点
独立分析后我认为主要有四个弱点值得指出。第一个是合成数据多样性虽然物体/背景组合达到 4596,但所有缺陷都是 2D 表面型(crack、dent、scratch、discoloration 等),没有覆盖 3D 几何异常(如 MVTec AD 里 "carpet" 的 metal thread 偏折、PCB 的 missing hole),这类几何型缺陷在 zero-shot 工业质检中恰恰很常见,模型在 BTAD 上只有 92.3% 的 pixel-AUROC 一定程度上印证了这一点;改进方向是在 inpaint 之前先估计表面法线或深度,引导 3D-aware 的缺陷生成。第二个是 anomaly 类别不平衡——训练时所有 [Anomaly] 是均匀采样的,但工业真实场景中不同缺陷出现频率差几个数量级(划痕远比 missing hole 常见),目前模型在罕见缺陷类上的置信度没有校准;可以引入类别权重或 focal sampling。第三个是 pixel-level F1-Max 比 AdaCLIP 低 6.7 p.p.,意味着 AUROC 高、但实用阈值下的精度不足;推测是 confidence-weighted loss 的 $\alpha=0.1$ 偏小,没有充分让模型"敢预测";改进是引入阈值无关的指标如 AP(average precision)作为额外目标,或在推理时用基于 patch 熵的 adaptive thresholding。第四个是模型的图像级判别依赖 CLS token 线性层,比较脆弱——尤其在 RealIAD 这种多视角数据集上 (88.0%) 明显低于 MVTec AD (94.9%),说明 CLS token 没有充分编码"多视角一致性"信息;改进是加入一个 view-consistency head,推理时跨视角融合 CLS 预测。
未来方向
作者在结论中明确点出两条未来方向:(1) 进一步提升生成缺陷的真实性,包括更准的 mask 估计和更鲁棒的过滤——他们已经在补充里展示可以用训练好的 AnomalyVFM 反过来当过滤器,进一步清洗数据;(2) 集成 monodepth 基础模型(如 Marigold)将框架扩展到 zero-shot RGBD 异常检测,因为很多工业场景有现成深度图。基于成果自然延伸的方向还包括:(a) 把合成流水线做成 continual learning 工具——每隔一段时间用最新生成模型(如更强的 FLUX 版本)重新合成 10000 张,进一步推到上限;(b) 探索 AnomalyVFM 作为 few-shot/full-shot 主干的可能性,本文已经显示 MVTec AD 1-shot 拿到 97.2%,逼近甚至超过部分 full-shot 方法(PatchCore 在 full-shot 下约 99%),结合更强的 memory bank 可能直接成为新 SOTA;(c) 把合成数据 pipeline 推广到其他 dense prediction 任务(语义分割、表面重建、显著目标检测),因为"用生成模型造监督信号"本质是一个通用范式;(d) 研究 LoRA 在 VFM 上更高效的注入位置——目前 Q/V/Proj 是经验选择,作者补充实验也尝试了 Norm/All-Linear 但都掉点,是否有更结构化的选择(如只在后几个 block 注入)值得探索。
复现评估
复现评估整体比较友好。作者明确说"Project Page"会提供代码,并在 5.2 节给出了几乎所有关键超参:FLUX 作为默认生成模型,矩形采样 $w,h\in[50,350]$(1024×1024 图像),过滤阈值 $T=0.3$,训练集规模 10000 张,batch size 32,AdamW,学习率 $10^{-4}$,训练 500 步,backbone 是 RADIOv2.5 ViT-L/16,输入 768×768,$\alpha=0.1$,$\beta=5$,LoRA rank 64,注入 Q/V/Proj。数据侧:100 个 object、50 个 background、204 个 anomaly tag 全部在补充材料的 Table 4-6 中列出,可以完全离线复现合成过程。算力上训练只需单卡 A100 约 2 小时,主要开销在数据生成的 ~1 天。开源方面没有在论文正文中给具体仓库链接(仅写了 Project Page 字样),但作者团队(University of Ljubljana + codeplain 的 Zavrtanik)此前在 DRÆM、SuperSimpleNet 等项目上都开源了代码,预期 AnomalyVFM 也会开源。复现难度中等偏上——主要门槛不是算法而是 FLUX 的算力:要在 A100 上跑 1 天生成 10000 张带缺陷的图像对需要一定成本;可以先用 100-1000 张做小规模实验验证(论文 Figure 5 显示 1000 张时性能已经接近 10000 张的 95%),门槛大幅降低。值得提醒的是评估时必须把测试集类别从 [Object] tag 列表中剔除,作者已经做了这步以避免数据泄漏,复现者要严格遵守。
论文图表
图 1 是论文的"门面图",把核心 claim 用一张图表达清楚:左侧柱状图比较了 CLIP-based 方法(WinCLIP、AnomalyCLIP、AdaCLIP、AACLIP、Bayes-PFL、FAPrompt)和纯 VFM-based 方法(DINOv2 加上 SAA、VFM-Adapter 等)在 9 个工业数据集上 image-level AUROC 的均值,可以看到 VFM 系(蓝色柱)整体明显矮一截(80-88%),而 VLM 系(绿色柱)在 87-91% 之间;右侧示意 AnomalyVFM(红色柱 + 圈出)以 94.1% 反超所有基线,箭头直指问题根源——"suboptimal training sets"和"suboptimal fine-tuning procedures"两个短板。
这张图是理解整篇论文动机的入口。它一眼告诉读者:(1) VFM 在 zero-shot AD 上确实长期落后 VLM,(2) AnomalyVFM 首次让 VFM 跑赢 VLM 阵营。这两个事实是后续方法和实验设计合理性的根基。