想象一下,你正在经营一条用于生产半导体芯片或精密汽车零部件的高科技生产线。你想利用 AI 自动化质量控制流程。为了训练一个能够发现缺陷 (比如镜头上的划痕或榛子上的裂纹) 的模型,你通常需要成千上万个此类缺陷的示例。
但问题在于: 现代制造业非常出色。缺陷非常罕见——通常在 10,000 件产品中出现的概率不到 1 次。你根本无法收集到足够的数据来有效地训练监督式深度学习模型。
这就是工业异常检测中的“数据稀缺”问题。
在这篇文章中,我们将探讨 DefectFill , 这是一篇提出解决方案的新颖研究论文: 既然找不到数据,那就生成数据。但与以前那些生成模糊或虚假样本的尝试不同,DefectFill 使用 Inpainting 扩散模型 (Inpainting Diffusion Models) 来生成极其逼真的缺陷,这些缺陷能与物体的纹理、光照和几何形状无缝融合。
我们将详细拆解这种方法的工作原理、其自定义损失函数背后的数学原理,以及为什么“低保真度”选择实际上可能是一件好事。
核心问题: 为什么“复制-粘贴”还不够
在深度生成模型出现之前,研究人员使用简单的技巧来模拟缺陷。一种常见的方法是 CutPaste , 即从一张图像中剪切一个补丁并将其粘贴到另一张图像上。虽然这制造了一个“异常”,但它看起来很假。边缘很锋利,光照不匹配,纹理也不连续。
后来,人们使用了生成对抗网络 (GAN) ,但它们往往在稳定性和多样性方面表现挣扎。最近,扩散模型 (Diffusion Models) 接管了图像生成领域。然而,标准的文本到图像扩散模型 (如 Stable Diffusion) 很难在不改变其余完美物体的情况下,精确地将缺陷放置在你想要的位置。
这就是 DefectFill 的用武之地。如下图所示,其目标是获取一个正常的物体和一个掩膜 (Mask,即形状) ,并用特定类型的缺陷“填充”该掩膜区域。

该系统需要同时做两件事:
- 捕捉缺陷细节: 裂纹看起来与污渍不同。
- 尊重物体上下文: 榛子上的裂纹看起来与瓷砖上的裂纹不同。
背景: Inpainting 扩散模型
要理解 DefectFill,我们需要快速回顾一下潜在扩散模型 (Latent Diffusion Models, LDMs) 。这些模型的工作原理是逐渐向图像添加噪声,直到它变成纯噪声,然后学习逆转这一过程以重建图像。
前向过程 (添加噪声) 描述如下:

这里,\(x_0\) 是原始图像,\(\epsilon\) 是噪声。模型被训练用于在给定噪声输入 \(x_t\) 和文本提示词 \(\mathcal{P}\) 的情况下预测噪声 \(\epsilon\)。标准的损失函数如下所示:

Inpainting (图像修复/内绘) 修改了这个过程。模型不仅仅是从头开始生成;它是在填补一个空洞。为了做到这一点,模型的输入不仅仅是噪声潜在图像 (\(x_t\)) 。我们将它与被遮罩的背景 (\(b\)) 以及掩膜 (\(M\)) 本身连接起来。

这告诉模型: “保持背景 (\(b\)) 中的一切完全不变,只在掩膜 (\(M\)) 定义的区域内创造新的像素。”
DefectFill 方法
DefectFill 的作者微调了一个预训练的 Stable Diffusion Inpainting 模型。然而,简单地告诉模型“画一条裂缝”对于工业检测来说还不够精确。他们需要模型从少量参考图像 (例如 5-10 张破碎榛子的照片) 中学习特定的缺陷概念。
为了实现这一目标,他们引入了一个包含三个独特损失函数的专门训练流程。
1. 双路径架构
训练过程非常巧妙。它将工作流分为两条路径,以确保模型既能学习缺陷本身,又能学习它在物体上的位置关系。
请看下面的架构概览:

- 上层流水线 (关注缺陷) : 这条路径使用特定的缺陷掩膜 \(M\) 和类似于 “A photo of [V]”* 的提示词,其中 \([V^*]\) 是代表缺陷的特殊 Token。这教导模型缺陷长什么样。
- 下层流水线 (关注物体) : 这条路径使用随机掩膜 (\(M_{rand}\)) 和类似于 “A hazelnut with [V]”* 的提示词。这教导模型物体 (榛子) 与缺陷之间的关系。
2. 三个损失函数
标准的扩散损失 (公式 2) 不够具体。DefectFill 将其替换为三个项的加权组合。
A. 缺陷损失 (\(\mathcal{L}_{def}\))
这是最关键的组件。它强制模型学习缺陷的内在特征 (例如裂纹的锯齿状边缘) 。
输入 \(x_t^{def}\) 结合了噪声图像、无缺陷背景和特定的缺陷掩膜。

损失计算仅在被遮罩区域内进行。

注意 \(M \odot\) 项。这意味着我们在进行损失计算时使用了掩膜。我们不在乎模型在这一步是否完美重建了背景;我们只在乎它是否在掩膜内准确重建了缺陷。
B. 物体损失 (\(\mathcal{L}_{obj}\))
如果我们只使用缺陷损失,模型可能会生成一个完美的裂纹,但它看起来可能像漂浮在图像上方的贴纸。物体损失确保了语义上的融合。
它使用散布在图像上的随机框 (\(M_{rand}\)) 。模型必须重建整个图像,包括缺陷和背景。

然而,作者在这里使用了一个技巧。比起随机背景,他们更关心缺陷区域。他们创建了一个加权掩膜 \(M'\):

这里,\(\alpha\) 是一个小于 1 的权重。这意味着缺陷区域的错误受到的惩罚比背景区域的错误更重,但背景仍然很重要。
C. 注意力损失 (\(\mathcal{L}_{attn}\))
最后,我们需要确保当模型看到 Token \([V^*]\) 时,它实际上是在关注缺陷所在的像素。这使用了 UNet 中的交叉注意力图 (Cross-Attention maps) 。

该损失强制 \([V^*]\) Token 的注意力图与物理掩膜 \(M\) 对齐。如果模型试图将缺陷特征放在掩膜之外,该损失就会惩罚它。
3. 组合目标
最终的目标函数是这三个组件的加权和:

权重 (\(\lambda\)) 是通过实验确定的,其中缺陷损失通常占最大的比重。
4. 低保真度选择 (LFS)
一旦模型训练完成,我们就可以生成无数的缺陷图像。但扩散模型具有随机性——有时它们会生成一团模糊的东西,或者更糟糕的是,它们只是“修复”了图像,生成了正常的纹理而不是缺陷。
我们如何自动丢弃这些糟糕的样本?
作者提出了 低保真度选择 (Low-Fidelity Selection, LFS) 。 这听起来可能有悖常理: 通常我们想要高保真度。但在 Inpainting 中,对原始背景的“高保真度”意味着模型没有改变任何东西——它只是重建了健康的物体!
我们希望生成的区域与原始健康区域不同 。

如图 3 所示,该方法生成多个变体。然后,它计算结果与原始图像之间的 LPIPS 分数 (一种感知相似度度量) 。它选择具有最高 LPIPS 分数 (最低保真度) 的图像,因为该图像具有最强烈、最明显的缺陷。
实验与结果
这个复杂的架构真的有效吗?作者在 MVTec AD 数据集上测试了 DefectFill,这是工业异常检测的标准基准。
定性结果
从视觉上看,结果令人印象深刻。该模型可以处理各种材料——从榛子等有机纹理到人造网格和皮革。

在上图中,请看榛子 (第二列) 。生成的裂纹尊重了坚果的光照和表面纹理。
与竞争对手的比较更清楚地显示了差异。在下面的图 5 中,将底行 (DefectFill) 与其上方的行进行比较。

像 AnomalyDiffusion (AnoDiff) 这样的竞争对手通常在颜色匹配上表现挣扎,或者产生模糊的伪影。DFMGAN 经常无法融合缺陷边界。DefectFill 则创建了清晰、融合的缺陷。
定量分析
为了衡量“逼真度”,研究人员使用 KID (Kernel Inception Distance)——越低越好。为了衡量多样性,他们使用 IC-LPIPS——越高越好。

DefectFill 实现了显著更低的 KID 分数 (例如,榛子上为 1.13,而 DFMGAN 为 21.16) ,证明生成的图像在统计上更接近真实缺陷。
对下游任务的影响
最终的测试不仅仅是“它看起来漂亮吗?”,而是“它有助于训练检测器吗?”
作者使用他们的合成数据训练了一个 ResNet-34 分类器,并在真实缺陷上进行了测试。

分类准确率 (表 3) 非常惊人。对于像“胶囊 (Capsule) ”这样的困难类别,DefectFill 将准确率从约 45% (竞争对手) 提高到了 87.50%。
他们还使用 UNet 测试了定位能力 (准确找到缺陷位置) 。

为什么我们需要所有三个损失?
一项消融实验 (每次移除一个部分) 揭示了为什么复杂的损失函数是必要的。

- 无 \(\mathcal{L}_{def}\): 模型通常只是重建背景 (未能制造缺陷) 。
- 无 \(\mathcal{L}_{obj}\): 缺陷看起来像是粘贴上去的;拉链齿看起来可能融合在一起或不自然。
- 无 \(\mathcal{L}_{attn}\): 缺陷溢出掩膜范围或没有完全填充掩膜。
- \(\mathcal{L}_{ours}\) (全部): 清晰、位置准确且逼真。
图 6 进一步将 DefectFill 与使用不同损失 (CLiC) 的标准 Stable Diffusion 模型进行了比较。标准模型倾向于优先“修复”图像,而 DefectFill 优先插入异常。

局限性与未来工作
虽然 DefectFill 迈出了重要的一步,但它并非魔法。作者坦率地提出了失败案例,特别是关于“结构性”缺陷。

由于 DefectFill 依赖于对被遮罩区域进行 Inpainting,它在处理全局异常时会遇到困难。例如,如果一个金属螺母翻转了 (结构性变化) ,仅仅遮罩它的一部分并没有真正的作用——模型学习了螺母背面的纹理,但不理解“翻转”的概念。同样,对于错位的晶体管,生成的随机性有时会导致鬼影般的透明度,而不是一个实体的物体。
结论
DefectFill 代表了工业 AI 的一次范式转变。我们不再依赖人工收集罕见事件的数据,而是可以使用 Inpainting 扩散模型 来生成逼真的缺陷。
通过精心设计平衡缺陷细节、物体上下文和注意力对齐的损失函数,DefectFill 将数据的短缺转变为高质量训练材料的丰富来源。
对于计算机视觉领域的学生和研究人员来说,这篇论文强调了一个重要的教训: 使用强大的预训练模型 (如 Stable Diffusion) 是一个很好的起点,但通过特定领域的约束 (掩膜和自定义损失) 对其进行微调,才是解决现实世界问题的关键。
关键要点
- Inpainting > 生成: 对于缺陷而言,保留原始物体的结构是关键。
- 上下文很重要: 缺陷不仅仅是一种纹理;它是对现有表面的破坏。物体损失捕捉到了这一点。
- 低保真度是有用的: 当试图创造异常时,最好的结果往往是那些看起来与原始健康图像最不相似的结果。
- SOTA 性能: 合成数据现在可以训练出与真实数据训练相媲美的分类器。
](https://deep-paper.org/en/paper/2503.13985/images/cover.png)