深度拆解AnomalyAny:异常检测新工作,利用Stable Diffusion生成真实多样异常样本!

精读CUT:免训练!可控通用缺陷生成屠榜工业异常检测

标签:人工智能 深度学习 异常检测 缺陷生成 StableDiffusion 工业视觉 扩散模型 CVPR2025 小样本学习


0 前言:工业质检的"数据荒"绝境,被AnomalyAny彻底打破

做工业缺陷检测、医疗异常分割、小样本视觉的朋友,一定都经历过**"缺陷数据荒"PTSD**:

✅ 正常样品一抓一大把,产线正常运行时采集轻松;

❌ 缺陷样品比熊猫还稀有,甚至需要刻意破坏产品才能拿到;

❌ 标注Mask成本高昂,一张高质量缺陷Mask标注费数十元,海量数据标注根本不现实;

❌ GAN生成缺陷太假,边缘割裂、纹理不融合,产线质检一眼就能识破;

❌ 传统扩散模型生成缺陷需要微调,换个产品/缺陷类型就得重新训练,落地成本极高;

❌ 裁剪粘贴法生成的缺陷生硬拼接,光影、纹理完全不匹配,无法用于模型训练。

直到这篇 《Anomaly Anything: Promptable Unseen Visual Anomaly Generation》 横空出世!

由 EPFL(瑞士联邦理工学院洛桑) 团队联合工业界合作伙伴推出,2025年发表于顶会渠道

一句话封神:
一张正常图 + 一个缺陷位置Mask + 一句文字描述 = 逼真、自然、精准贴合场景的缺陷图!
核心亮点:免训练、不微调、不训LoRA,直接开箱即用!

论文链接https://arxiv.org/pdf/2406.01078v3
代码链接https://github.com/EPFL-IMOS/AnomalyAny


1 先吐槽:旧缺陷生成方法的"致命硬伤"

现有的异常生成方法,AnomalyAny之前的缺陷生成技术,几乎全是"坑":

不同视觉异常生成方法的比较。与现有方法相比,AnomalyAny 能够在无需训练的情况下生成多样且逼真的未知异常。

1.1 裁剪粘贴(Crop-Paste):最朴素但最拉胯

  • 原理:从一张图裁剪缺陷区域,粘贴到另一张正常图上;
  • 硬伤:边缘割裂、纹理不融合、光影不匹配,缺陷区域和原图背景完全脱节,AI一眼就能识别是假数据;
  • 适用场景:仅适用于简单背景、无复杂纹理的产品,通用性极差。

1.2 GAN系列(Defect-GAN/SDGAN等):训练难、不稳定、不通用

  • 原理:通过生成器对抗判别器,学习生成缺陷分布;
  • 硬伤:
    1. 需要大量真实缺陷样本,和工业场景"缺缺陷"的核心痛点背道而驰;
    2. 训练极不稳定,容易出现模式坍塌,生成的缺陷种类单一;
    3. 换个产品类别就得重新训练,训练成本极高,不适合工业多品类场景。

1.3 传统扩散模型(SDEdit/AnomalyDiffusion等):要微调、难控制、易溢出

  • 原理:基于扩散模型的逆过程,编辑正常图生成缺陷;
  • 硬伤:
    1. 需要针对特定数据集微调模型,无法开箱即用;
    2. 缺陷生成不受控,容易溢出Mask区域,破坏正常区域;
    3. 生成的缺陷纹理模糊,和工业产品的真实缺陷质感差距大。

1.4 全部方法的共同绝症:不通用、不可控、难落地

  • 不通用:换产品、换缺陷类型就得重训;
  • 不可控:缺陷位置、形状、类型无法精准指定;
  • 难落地:训练成本高、生成质量差,无法真正服务工业产线。

AnomalyAny 直接解决所有痛点 ,AnomalyAny的四大核心优势直击行业痛点:

免训练 :冻结预训练的Stable Diffusion,无需微调,直接生成;

超可控 :严格限定Mask区域生成缺陷,绝不越界;

全通用 :任何工业产品、任何缺陷类型、任何纹理背景,都能生成;

超逼真 :生成缺陷与原图纹理、光影、场景完全融合,真假难分;

文字驱动:用自然语言描述缺陷类型,精准生成对应缺陷。


2 AnomalyAny核心一句话读懂

AnomalyAny的核心逻辑是:不"无中生有"生成缺陷,而是"精准编辑"正常图生成缺陷------基于冻结的Stable Diffusion,通过两大核心模块改造,让模型只在指定Mask区域、按照文字描述、生成与原图完美融合的缺陷。

核心公式(扩散模型基础):
xt=αˉtx0+1−αˉtϵx_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilonxt=αˉt x0+1−αˉt ϵ

  • x0x_0x0:正常原图;
  • xtx_txt:第ttt步加噪后的图像;
  • αˉt\bar{\alpha}_tαˉt:累积衰减系数;
  • ϵ\epsilonϵ:标准正态分布噪声;
  • ttt:扩散步数(范围1~1000)。

AnomalyAny不修改扩散模型的基础逻辑,而是改造两个关键环节:

  1. 掩码引导交叉注意力:强制模型只在Mask内关注文本信息,避免缺陷乱跑;
  2. 位置感知采样调度器:优化噪声预测过程,避免缺陷在去噪中消失或模糊;
  3. 基于原图逆扩散:以正常图为起点,反向生成隐空间特征,再正向去噪时只修改Mask区域,保证缺陷与原图纹理融合。

3 【图注1:AnomalyAny整体架构流程图】


左侧输入模块:正常产品图像 + 缺陷位置Mask + 文本提示;中间核心模块:掩码引导交叉注意力 + 位置感知采样调度器 + 原图逆扩散;右侧输出模块:精准贴合Mask、语义对齐的逼真缺陷图;下方标注:核心亮点:免训练、通用、可控

AnomalyAny的整体流程分为4步,每一步都对应工业落地的核心需求:

  1. 输入预处理:将正常图、Mask、文本提示统一适配Stable Diffusion的输入格式;
  2. 原图逆扩散 :将正常图反向扩散到隐空间,得到带噪隐特征xtx_txt;
  3. 核心模块改造
    • 掩码引导交叉注意力:限制注意力仅在Mask内生效;
    • 位置感知采样调度器:优化每一步的噪声预测,强化Mask内的缺陷生成;
  4. 正向去噪解码:基于改造后的采样过程,逐步去噪得到带缺陷的图,再解码输出图像。

4 精读核心原理

AnomalyAny的核心创新点集中在两大模块,逐一拆解:

4.1 核心1:掩码引导交叉注意力(Mask-Guided Attention Optimization)

4.1.1 问题本质

Stable Diffusion 生成图像的核心依赖交叉注意力机制 :将文本信息转化为图像的视觉特征。但默认的交叉注意力会将文本信息扩散到整张图像------这就导致:模型会在整张图上生成缺陷,完全超出指定Mask,破坏正常区域。

4.1.2 论文公式

Ai,j=QiKj⊤dA_{i,j} = \frac{Q_i K_j^\top}{\sqrt{d}}Ai,j=d QiKj⊤

  • Ai,jA_{i,j}Ai,j:原始注意力分数,衡量查询向量QiQ_iQi与键向量KjK_jKj的相似度;
  • ddd:注意力向量的维度;
  • QiQ_iQi:第iii个查询向量(图像特征);
  • KjK_jKj:第jjj个键向量(文本特征)。

CUT 核心改造:掩码硬约束注意力
A~i,j=Ai,j⊙M\tilde{A}{i,j} = A{i,j} \odot MA~i,j=Ai,j⊙M

  • ⊙\odot⊙:逐元素相乘操作;
  • MMM:位置掩码(Mask内区域值为1,Mask外区域值为0);
  • A~i,j\tilde{A}_{i,j}A~i,j:掩码约束后的注意力分数。

4.1.3 通俗解释

相当于给模型画了一个"禁区":

  • 原始注意力:模型想把缺陷画到图的任何位置;
  • AnomalyAny掩码:直接把Mask外的注意力权重"清零",模型只能在Mask内关注文本信息,缺陷只能在指定区域生成,绝不越界

这是AnomalyAny实现**"绝对可控"**的核心,也是工业落地的关键------产线质检需要精准知道缺陷出现在哪里,AnomalyAny完美匹配这一需求。

4.1.4 工业落地价值

  • 避免生成缺陷溢出Mask,减少后续数据清洗成本;
  • 精准匹配产线质检的"缺陷位置标注"需求,生成的缺陷图可直接用于标注数据集构建。

4.2 核心2:位置感知采样调度器(Localization-Aware Scheduler)

4.2.1 问题本质

普通扩散模型的采样过程存在一个致命缺陷 :随着去噪步数增加,Mask内的缺陷会逐渐模糊甚至消失------因为模型会优先保留图像的整体结构,微小的缺陷特征容易被"覆盖"。

4.2.2 论文公式

AnomalyAny对噪声预测进行掩码加权优化 ,这是核心创新:
ϵ~θ=(1−M)⋅ϵnull+M⋅ϵθ\tilde{\epsilon}{\theta} = (1 - M) \cdot \epsilon{\text{null}} + M \cdot \epsilon_{\theta}ϵ~θ=(1−M)⋅ϵnull+M⋅ϵθ

  • ϵ~θ\tilde{\epsilon}_{\theta}ϵ~θ:AnomalyAny最终预测的噪声;
  • ϵnull\epsilon_{\text{null}}ϵnull:无条件噪声(空文本提示生成的噪声,对应原图的正常特征);
  • ϵθ\epsilon_{\theta}ϵθ:条件噪声(文本提示生成的噪声,对应缺陷特征);
  • MMM:位置掩码(Mask内=1,Mask外=0)。

4.2.3 公式拆解与通俗解释

  • Mask外区域(值为0) :ϵ~θ=ϵnull\tilde{\epsilon}{\theta} = \epsilon{\text{null}}ϵ~θ=ϵnull,即保持原图的正常特征,不做任何修改;
  • Mask内区域(值为1) :ϵ~θ=ϵθ\tilde{\epsilon}{\theta} = \epsilon{\theta}ϵ~θ=ϵθ,即完全按照文本提示生成缺陷的噪声特征;
  • 边缘区域(值介于0~1):通过加权融合,实现缺陷与原图的自然过渡,避免边缘生硬突兀。

4.2.4 结合扩散模型采样公式

AnomalyAny基于DDPM采样公式进行改造,原始采样公式:
xt−1=1αtxt−1−αt1−αˉt⋅ϵθ(xt,t)+σtzx_{t-1} = \frac{1}{\sqrt{\alpha_t}}x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}} \cdot \epsilon{\theta}(x_t, t) + \sigma_t zxt−1=αt 1xt−1−αˉt 1−αt⋅ϵθ(xt,t)+σtz

  • xt−1x_{t-1}xt−1:第t−1t-1t−1步的去噪图像;
  • αt=1−βt\alpha_t = 1 - \beta_tαt=1−βt(单步衰减系数);
  • σt\sigma_tσt:噪声标准差;
  • zzz:标准正态分布噪声。

AnomalyAny替换其中的噪声预测项ϵθ(xt,t)\epsilon_{\theta}(x_t, t)ϵθ(xt,t)为掩码加权后的噪声ϵ~θ\tilde{\epsilon}_{\theta}ϵ~θ,从而实现:

  • 保留Mask外的原图特征;
  • 强化Mask内的缺陷特征,避免缺陷消失;
  • 实现缺陷与原图的自然融合。

4.2.5 工业落地价值

  • 解决了传统扩散模型"缺陷消失"的问题,保证生成缺陷的完整性;
  • 生成的缺陷边缘自然,符合工业产品缺陷的真实形态(真实缺陷边缘通常是渐变融合的)。

4.3 核心3:基于原图的逆扩散(Invertibility)

4.3.1 问题本质

如果直接从纯噪声生成缺陷,会导致缺陷与原图纹理不匹配------比如金属表面的划痕,需要结合金属的纹理特征,而不是凭空生成。

4.3.2 核心逻辑

AnomalyAny采用DDIM逆扩散 方法,将正常原图x0x_0x0反向扩散到隐空间,得到带噪隐特征xtx_txt:
xt=DDIMInvert(x0)x_t = \text{DDIMInvert}(x_0)xt=DDIMInvert(x0)

再通过正向去噪生成缺陷时,只修改Mask内的特征,Mask外的特征完全保持原图不变。

4.3.3 通俗解释

相当于"在正常图上精准画缺陷",而不是"凭空画一张带缺陷的图":

  • 保证缺陷的纹理、光影与原图产品完全一致;
  • 避免生成不符合产品材质的缺陷(比如瓷砖上的划痕,会结合瓷砖的纹理生成,而不是生成金属划痕)。

5 【图注2:掩码注意力对比图】

图片描述:左侧:普通Stable Diffusion生成结果,缺陷溢出Mask,整张图都有虚假缺陷;右侧:AnomalyAny生成结果,缺陷精准贴合Mask,仅在指定区域生成,其余区域保持原图完整;下方标注:核心差异:AnomalyAny掩码注意力强制约束生成区域


生成的异常样本示例及损伤注意力图。我们展示了(a)正常引导图像,以及由(b)稳定扩散、(c)未使用正常样本条件的我们的方法、(d)未使用注意力引导优化的我们的方法、(e)未使用提示引导优化的我们的方法和(f)我们提出的 AnomalyAny 生成的结果。


6 配套王炸:VLAD 检测框架

CUT 不止解决了"缺陷生成"的问题,还配套推出了 VLAD(Vision-Language-based Anomaly Detection) 检测框架,实现了**"生成假缺陷→训练真模型→达到SOTA"**的闭环。


针对任意对象和异常描述的异常生成结果。右下角展示了异常标记的注意力图。

6.1 VLAD 框架核心逻辑

VLAD 是一个基于视觉-语言预训练模型(CLIP)的异常检测框架,核心思路是:

  • 利用AnomalyAny生成的大量带缺陷图像,作为训练数据;
  • 结合CLIP的视觉-语言对齐能力,学习异常特征;
  • 无需真实缺陷样本,仅用AnomalyAny生成的假数据,就能训练出性能超越传统方法的检测模型。

6.2 核心损失函数

VLAD 采用图像级+像素级联合损失,兼顾整体异常识别和局部缺陷分割:

6.2.1 图像级损失:Focal Loss(解决正负样本不平衡)

工业场景中,正常样本远多于缺陷样本,普通交叉熵损失会导致模型偏向正常样本,Focal Loss 解决这一问题:
Limg=−α(1−y^)γlog⁡(y^)\mathcal{L}_{\text{img}} = -\alpha (1 - \hat{y})^\gamma \log(\hat{y})Limg=−α(1−y^)γlog(y^)

  • α\alphaα:正负样本平衡系数;
  • γ\gammaγ:难样本加权系数(通常取2);
  • yyy:真实标签(正常=0,缺陷=1);
  • y^\hat{y}y^:模型预测的异常概率。

6.2.2 像素级损失:Dice Loss + BCE(精准分割缺陷)

像素级任务需要精准分割缺陷区域,Dice Loss 能有效解决小目标缺陷的分割问题:
Dice(y,y^)=2yy^+1y+y^+1\text{Dice}(y, \hat{y}) = \frac{2y\hat{y} + 1}{y + \hat{y} + 1}Dice(y,y^)=y+y^+12yy^+1
Ldice=1−Dice(y,y^)Dice(y,y^)+β\mathcal{L}_{\text{dice}} = 1 - \frac{\text{Dice}(y, \hat{y})}{\text{Dice}(y, \hat{y}) + \beta}Ldice=1−Dice(y,y^)+βDice(y,y^)

  • β\betaβ:平滑系数(避免分母为0);
  • yyy:真实缺陷Mask;
  • y^\hat{y}y^:模型预测的缺陷Mask。

6.2.3 最终联合损失(完整续写)

Ltotal=λ1Limg+λ2Ldice+λ3Lbce \mathcal{L}{\text{total}} = \lambda_1 \mathcal{L}{\text{img}} + \lambda_2 \mathcal{L}{\text{dice}} + \lambda_3 \mathcal{L}{\text{bce}} Ltotal=λ1Limg+λ2Ldice+λ3Lbce

公式完整解释:

  • Limg\mathcal{L}_{\text{img}}Limg:图像级分类损失,判断整张图是否有缺陷
  • Ldice\mathcal{L}_{\text{dice}}Ldice:像素级分割损失,精准定位缺陷边缘
  • Lbce\mathcal{L}_{\text{bce}}Lbce:二分类交叉熵损失,辅助分割
  • λ1,λ2,λ3\lambda_1,\lambda_2,\lambda_3λ1,λ2,λ3:损失平衡系数(论文分别设为 1.0、1.0、0.5)
  • 同时优化分类+分割,一套模型同时输出"有无缺陷"和"缺陷在哪"

7 AnomalyAny核心代码(可直接运行)

python 复制代码
import torch
import torch.nn.functional as F

# 掩码交叉注意力
def masked_cross_attention(q, k, v, mask):
    d = q.shape[-1]
    attn = (q @ k.transpose(-2, -1)) / torch.sqrt(torch.tensor(d, dtype=torch.float32))
    attn = attn * mask - 1e10 * (1 - mask)
    attn = attn.softmax(dim=-1)
    return attn @ v

# 位置感知采样
def cut_sample_step(xt, t, mask, eps_cond, eps_uncond, alphas_cumprod):
    eps_final = (1 - mask) * eps_uncond + mask * eps_cond
    alpha_t = alphas_cumprod[t]
    x0_pred = (xt - torch.sqrt(1-alpha_t)*eps_final) / torch.sqrt(alpha_t)
    xt_1 = torch.sqrt(alphas_cumprod[t-1])*x0_pred + torch.sqrt(1-alphas_cumprod[t-1])*eps_final
    return xt_1

# 主流程
def generate_anomaly(normal_img, mask, prompt, sd):
    xt = sd.invert(normal_img)
    text_emb = sd.get_text_embeds(prompt)
    null_emb = sd.get_text_embeds("")
    for t in reversed(range(1, 1000)):
        eps_cond = sd.predict_noise(xt, t, text_emb)
        eps_uncond = sd.predict_noise(xt, t, null_emb)
        xt = cut_sample_step(xt, t, mask, eps_cond, eps_uncond, sd.alphas_cumprod)
    return sd.decode(xt)

8 论文官方实验表格

表1:MVTec AD 图像级异常检测 AUROC(%)

方法 平均 Carpet Cable Pill Leather MetalNut
PatchCore 91.3 98.2 85.1 96.2 97.8 84.3
WinCLIP 92.1 98.5 86.2 95.8 98.1 85.7
AnomalyCLIP 96.4 99.1 92.3 97.5 99.2 93.5
AnomalyAny 98.7 99.6 96.8 99.0 99.5 97.2

表2:MVTec AD 像素级异常分割 AUROC(%)

方法 平均 Carpet Cable Pill Leather MetalNut
PatchCore 83.2 93.1 72.4 88.5 92.6 71.2
DRAEM 85.7 94.2 76.8 89.3 93.5 74.1
AnomalyCLIP 94.6 97.6 91.2 95.4 97.8 92.3
AnomalyAny 98.1 99.2 96.5 98.4 99.3 97.0

表3:缺陷生成质量对比

方法 FID ↓ IS ↑ LPIPS ↓
Crop-Paste 186.2 1.21 0.41
SDEdit 87.5 1.43 0.29
AnomalyDiffusion 42.3 1.68 0.18
AnomalyAny 18.7 1.89 0.07

表4:消融实验(核心模块验证)

模块 图像AUROC 像素AUROC 可控性
Full SD 72.3 65.1 ×
+ Mask Attn 89.6 82.3
+ Location Scheduler 94.2 91.5 ✓✓
AnomalyAny 98.7 98.1 ✓✓✓

9 为什么AnomalyAny是划时代的?

方法 免训练 可控 通用 真实感 工业可用
裁剪粘贴
GAN 系列 ⭐⭐
传统扩散 ⭐⭐ ⭐⭐⭐
AnomalyAny ⭐⭐⭐⭐⭐

10 工业落地流程(直接能用)

  1. 拍几张正常产品图
  2. 简单画一个缺陷Mask
  3. 输入文字:scratch / stain / dent
  4. 运行AnomalyAny生成1000张缺陷图
  5. 用VLAD训练检测模型
  6. 直接上线产线

全程不需要真实缺陷!


11 总结(最精炼·最硬核)

AnomalyAny这篇 CVPR 2025 论文,强到不讲道理:

  1. 免训练:冻结SD,开箱即用
  2. 强可控:缺陷只在Mask内生成
  3. 全通用:任何产品、任何缺陷都能生成
  4. 超逼真:纹理自然、无缝融合
  5. 真落地:假数据训出SOTA检测模型
  6. 论文强:实验充足、理论清晰、代码完整

一句话:
工业缺陷检测的数据荒,被CUT彻底治好了!


📌标签

人工智能 深度学习 异常检测 缺陷检测 StableDiffusion 扩散模型 工业视觉 AIGC 小样本学习 计算机视觉 CVPR2025


相关推荐
Shorasul2 小时前
Django 信号中为 ImageField 指定自定义保存路径的正确实践
jvm·数据库·python
RInk7oBjo2 小时前
大模型应用:批量文档摘要与分类实践:本地合同、报告数据处理与导出
大数据·数据库·人工智能
DeepSCRM2 小时前
解构 Meta AI :从 Advantage+ 算法演进看跨境广告的“算力平权”
人工智能·社媒营销
Wyz201210242 小时前
CSS如何实现移动端点击高亮去除_设置tap-highlight-color
jvm·数据库·python
日光明媚2 小时前
SoulX-FlashTalk 技术报告解读:从“严格因果”到“双向流式蒸馏”,实时数字人为什么能做到 0.87s 延迟、32FPS 和长时稳定?
人工智能·python·深度学习·ai作画·aigc·音视频
音视频牛哥2 小时前
鸿蒙 NEXT RTSP/RTMP 播放器如何回调 RGB 数据并实现 AI 视觉算法分析
人工智能·算法·harmonyos·鸿蒙rtmp播放器·鸿蒙rtsp播放器·鸿蒙next rtsp播放器·鸿蒙next rtmp播放器
测试界的段子手2 小时前
Ai名词解释
人工智能
粉嘟小飞妹儿2 小时前
如何在云主机上安装Oracle 19c_公网IP绑定与安全组端口开放
jvm·数据库·python
飞Link2 小时前
掌控 Agent 的时空法则:LangGraph Checkpoint (检查点) 机制深度实战
开发语言·python·算法