RealNet是CVPR2024上一篇基于重建思路的异常检测方法,取得了很好的效果。
RealNet:基于真实合成异常的特征选择网络(CVPR 2024)
code: https://github.com/cnulab/RealNet
paper: RealNet: A Feature Selection Network with Realistic Synthetic Anomaly for Anomaly Detection (CVPR 2024)
文章总体思路
- 本文总体上属于特征重建类,RealNet自身包含AFS和RRS两个创新,并通过提出SDAS来生成更真实的异常来辅助提高效果。
- 其中SDAS是受到自监督异常检测类方法在异常合成(anomaly synthesis)方面的启发进行效果改善;
- AFS是考虑到重建类方法,不同类别所需的最优预训练特征是有差异的,选择合适的预训练特征对异常检测的重要性,因此实现了自动的特征选择;
作者总结的主要贡献
-
提出RealNet特征重建网络
RealNet通过自适应选择预训练特征和重建残差,有效利用多尺度预训练特征进行异常检测。该网络在解决传统方法计算成本高的同时,实现了最先进的检测性能。其核心创新在于结合动态特征选择与残差优化机制,显著提升了模型效率和准确性。 -
引入强度可控的扩散异常合成(SDAS)
SDAS是一种基于扩散模型的新型异常生成策略,能够合成与真实异常分布高度一致的多样化样本。通过调节异常强度参数,SDAS可灵活生成从细微缺陷到显著结构异常的样本,突破了传统数据增强方法在真实性和多样性上的局限。 -
跨数据集验证性能优势
在MVTec-AD、MPDD、BTAD和VisA四个工业异常检测基准数据集上,RealNet使用统一的网络架构和超参数设置,均显著超越现有方法。例如,在MVTec-AD上实现Image AUROC 99.65%、Pixel AUROC 99.03%,证明了其通用性和鲁棒性。 -
发布合成工业异常数据集(SIA)
通过SDAS生成包含36类工业产品、共36万张异常图像的SIA数据集。该数据集支持自监督异常检测方法的训练,解决了真实异常数据稀缺的问题,为后续研究提供了标准化资源。
实际核心模块
RealNet 是一种自监督异常检测框架,针对工业图像中的异常检测与定位任务提出创新解决方案。其核心贡献在于结合了以下三个关键技术:
1. 强度可控的扩散异常合成(SDAS)
基于去噪扩散概率模型(DDPM),通过在反向扩散过程中引入扰动项,生成与真实异常分布高度一致的合成异常图像,解决了传统异常合成方法(如CutPaste、NSA)在真实性和多样性上的局限性。SDAS 支持灵活调节异常强度,能够模拟老化、结构变化、纹理异常等多种自然异常模式。
SDAS的原理简单来说就是在扩散模型的去噪过程中,也就是反向扩散过程中,添加一些扰动,使模型不能正常的扩散回正常样本的样子,具体的从公式上来看:
标准反向扩散过程
p
θ
(
x
t
−
1
∣
x
t
)
=
N
(
x
t
−
1
;
μ
θ
(
x
t
,
t
)
,
Σ
θ
(
x
t
,
t
)
)
p_{\theta}(x_{t-1} | x_t) = \mathcal{N}\left(x_{t-1}; \mu_{\theta}(x_t, t), \Sigma_{\theta}(x_t, t)\right)
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))
SDAS的改进反向扩散
p
θ
(
x
t
−
1
′
∣
x
t
)
=
N
(
x
t
−
1
′
;
μ
θ
(
x
t
,
t
)
,
(
1
+
s
)
Σ
θ
(
x
t
,
t
)
)
p_{\theta}(x'_{t-1} | x_t) = \mathcal{N}\left(x'_{t-1}; \mu_{\theta}(x_t, t), (1+s)\Sigma_{\theta}(x_t, t)\right)
pθ(xt−1′∣xt)=N(xt−1′;μθ(xt,t),(1+s)Σθ(xt,t))
对比可以看出差异就在参数
s
s
s的引入,其中:
- s ≥ 0 s \geq 0 s≥0 是异常强度控制参数, s = 0 s=0 s=0 时退化为正常图像生成过程。
-
μ
θ
(
x
t
,
t
)
\mu_{\theta}(x_t, t)
μθ(xt,t) 是神经网络预测的均值,通常通过去噪模型
ϵ
θ
(
x
t
,
t
)
\epsilon_{\theta}(x_t, t)
ϵθ(xt,t) 计算得到:
μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ϵ θ ( x t , t ) ) \mu_{\theta}(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_{\theta}(x_t, t) \right) μθ(xt,t)=αt1(xt−1−αˉtβtϵθ(xt,t)) - Σ θ ( x t , t ) \Sigma_{\theta}(x_t, t) Σθ(xt,t) 是学习得到的方差(如通过IDDPM [25]的混合方差策略)。
对比维度 | 标准反向扩散公式 | SDAS公式 | 差异原因与目的 |
---|---|---|---|
方差项 | Σ θ ( x t , t ) \Sigma_{\theta}(x_t, t) Σθ(xt,t) | ( 1 + s ) Σ θ ( x t , t ) (1+s)\Sigma_{\theta}(x_t, t) (1+s)Σθ(xt,t) | 通过扩大方差引入扰动,使生成样本偏离正常分布。 |
异常控制 | 无 | 通过(s)调节扰动强度 | 实现异常强度的灵活控制,生成从轻微到显著的异常。 |
生成目标 | 生成正常图像(高概率密度区域) | 生成低概率密度区域的异常图像 | 模拟真实异常分布,覆盖多样化的异常模式。 |
异常合成
基于diffusion生成的是整张异常的图片,作者在实际使用时,会基于anomaly mask仅将生成的异常图像的mask区域加到正常图像上作为异常区域,其中
M
M
M是anomaly mask,
δ
\delta
δ是往正常图像上贴时的不透明度(作者实验时为不同样本选择0.5-1间的随机值):
(注意作者发布的SIA数据集是没有与正常图像叠加过的样本,所以在训练异常检测时先做这一步的叠加)
2. 异常感知特征选择(AFS) -用于选择对异常区域最敏感的特征
通过自监督方式从预训练网络中筛选出最具判别性的特征子集,减少冗余特征和预训练偏差。AFS 针对不同类别动态选择最优特征组合,在控制计算成本的同时提升检测性能,其优势在于:
- AFS 减少了层内特征冗余,减轻了预训练偏差,增强了特征代表性和可辨别性,从而提高了异常检测性能。
- AFS 拓宽了感受野,增强了多尺度异常检测能力。
- AFS 将预训练特征的维度与异常检测所用的维度区分开来,确保有效控制计算成本和灵活定制模型大小。
简单理解,AFS就是在提取特征的预训练网络的每一个block的最后一层(layer),仅选取部分通道而不是全部用于特征重建,从而减少了实际使用的特征。
AFS的介绍提到了很多卷积神经网络的基本概念,比如layers, block, feature map, channel等,容易看的比较混乱,这里统一梳理一下:
- 块(Block):ResNet中的残差模块,包含多个卷积层。
- 层:表示不同块的最后一层输出,对应不同空间分辨率(如block1至block4输出逐步下采样)。
- 通道数(cₖ):每个块输出的特征图通道数(如block1输出256通道,block2输出512通道)。
- 特征图(φₖ(Aₙ) ∈ ℝ^{hₖ×wₖ×cₖ}):第k个块对输入图像Aₙ提取的特征。不同通道编码不同视觉模式(如颜色、纹理、形状)。AFS从中选择对异常敏感的通道。
- 核心步骤:
- 特征差异计算:对合成异常图像Aₙ和正常图像Iₙ,计算同一通道的特征差异:
[ φ k , i ( A n ) − φ k , i ( I n ) ] 2 [φ_{k,i}(Aₙ) - φ_{k,i}(Iₙ)]² [φk,i(An)−φk,i(In)]2 - 分辨率对齐:通过函数F(·)将差异图的分辨率对齐到异常掩码Mₙ(如双线性插值)。
- 损失评估:计算AFS损失(公式4),衡量该通道对异常区域的定位能力:
L A F S ( φ k , i ) = 1 N ∑ n = 1 N ∥ F ( [ φ k , i ( A n ) − φ k , i ( I n ) ] 2 ) − M n ∥ 2 2 \mathcal{L}_{AFS}(φ_{k,i}) = \frac{1}{N} \sum_{n=1}^{N} \| F([φ_{k,i}(Aₙ) - φ_{k,i}(Iₙ)]²) - Mₙ \|_2^2 LAFS(φk,i)=N1n=1∑N∥F([φk,i(An)−φk,i(In)]2)−Mn∥22 - 通道选择:对每个块k,选择损失最小的mₖ个通道(如block1选256→128通道),通过该步骤实现的特征选择,realnet只需要对预训练特征计算1次并保存下来,以用于后续的训练推理等。
- 作用:
- 减少冗余:剔除对异常检测无关或冗余的通道(如背景响应通道)。
- 缓解预训练偏差:避免分类任务预训练的特征偏向语义类别而非异常模式。
- 特征差异计算:对合成异常图像Aₙ和正常图像Iₙ,计算同一通道的特征差异:
主要步骤/概念 | 在AFS中的角色 |
---|---|
预训练网络 | 提供多尺度、多语义的基础特征。 |
块(Block)与层 | 分层提取特征,适配不同粒度异常(高分辨率→细节,低分辨率→结构)。 |
通道(Channel) | 通过选择判别性通道,优化特征表达,减少冗余。 |
特征选择(AFS) | 动态筛选通道,提升异常敏感度,抑制预训练偏差。 |
多尺度重建 | 独立处理各层特征,平衡检测分辨率与计算效率。 |
通过上述机制,AFS显著提升了异常检测的精度与效率,同时保持了对复杂工业场景的适应能力。
3. 重建残差选择(RRS) -用于选择对异常判别最有效的重建残差
自适应选择包含显著异常信息的重建残差,结合全局最大池化(GMP)和平均池化(GAP)策略,增强对多尺度异常的捕捉能力,减少漏检。其设计融合了局部与全局显著性评估,在保证检测精度的同时显著降低计算成本,是RealNet实现高效异常定位的核心模块之一。
与其他模块的协同作用
- 与AFS的协同:AFS筛选出判别性特征通道,RRS进一步从这些通道中选择残差,形成两级优化(特征级→残差级)。
- 与SDAS的互补:SDAS生成逼真异常样本,RRS确保模型聚焦于关键异常模式,减少合成噪声的影响。
1. 设计动机
在基于特征重建的异常检测中,多尺度重建残差(即输入特征与重建特征之间的差异)包含了不同层次的异常信息。然而,直接使用所有残差可能导致以下问题:
- 冗余干扰:部分残差可能对应正常区域的微小波动,缺乏异常判别性。
- 分辨率矛盾:不同尺度的残差对不同规模异常的敏感度不同(如低分辨率特征可能遗漏细节异常)。
- 计算开销:高维残差的直接处理会增加计算负担。
因此,RRS的目标是自适应选择最具判别性的残差,以提升异常定位的准确性和效率。
2. RRS的核心设计
步骤1:构建全局重建残差
- 输入:各层(k=1到K)的重建残差 E k ( A n ) = [ φ k ( A n ) − G k ( φ k ( A n ) ) ] 2 E_k(A_n) = [\varphi_k(A_n) - G_k(\varphi_k(A_n))]^2 Ek(An)=[φk(An)−Gk(φk(An))]2。
- 处理:将低分辨率残差上采样至最高分辨率(如 h ′ × w ′ = 64 × 64 ) h' \times w' = 64 \times 64) h′×w′=64×64),并沿通道维度拼接,得到全局残差 E ( A n ) ∈ R h ′ × w ′ × m ′ E(A_n) \in \mathbb{R}^{h' \times w' \times m'} E(An)∈Rh′×w′×m′ ( m ′ = ∑ m k ) (m' = \sum m_k) (m′=∑mk)。
- 目的:统一多尺度残差的分辨率,便于后续选择。
步骤2:显著性评估与残差选择
- 全局池化:
- 全局最大池化(GMP):提取每个通道的最大响应值 E GMP ( A n ) ∈ R m ′ E_{\text{GMP}}(A_n) \in \mathbb{R}^{m'} EGMP(An)∈Rm′,捕捉局部显著异常(如小面积缺陷)。
- 全局平均池化(GAP):计算每个通道的平均响应值 E GAP ( A n ) ∈ R m ′ E_{\text{GAP}}(A_n) \in \mathbb{R}^{m'} EGAP(An)∈Rm′,反映全局异常分布(如大范围结构异常)。
- Top-K选择:
- 从 E GMP E_{\text{GMP}} EGMP和 E GAP E_{\text{GAP}} EGAP中分别选取前 r / 2 r/2 r/2个最大值的通道索引。
- 拼接两部分索引对应的残差,得到 E RRS ( A n , r ) ∈ R h ′ × w ′ × r E_{\text{RRS}}(A_n, r) \in \mathbb{R}^{h' \times w' \times r} ERRS(An,r)∈Rh′×w′×r(保留总通道数的1/3,如 r = m ′ / 3 r = m'/3 r=m′/3)。
步骤3:异常得分生成
- 判别器映射:将 E RRS E_{\text{RRS}} ERRS输入轻量级判别器(如MLP+上采样层),输出像素级异常得分图(Anomaly map)。
- 评分规则:图像级异常分数取得分图的最大值,像素级异常区域直接由得分图阈值化得到。
3. 设计细节与创新点
设计要素 | 具体实现 | 作用 |
---|---|---|
Max&Avg融合策略 | 同时利用GMP(局部极值)和GAP(全局分布)选择残差 | 兼顾不同规模异常,避免单一策略的偏差。 |
保留比例控制 | 保留总通道数的1/3(如 r = m ′ / 3 r = m'/3 r=m′/3) | 平衡信息保留与冗余剔除,控制计算开销。 |
残差归一化 | 对全局残差 E ( A n ) E(A_n) E(An)进行批归一化(无仿射变换) | 消除多尺度残差的分布差异,提升选择稳定性。 |
判别器轻量化 | 使用MLP与上采样层,而非复杂网络 | 减少计算成本,适配实时工业检测需求。 |
4. 实验验证与效果
作者的GPU是1块NVIDIA RTX3090,所以实验都是在这上面做的,所有图像都统一尺寸为256*256,在此基础下realnet的训练大概需要2小时;
- 性能提升:在MVTec-AD数据集上,RRS使Pixel AUROC从95.84%提升至98.22%(表5(a)的1和3,其中 每一行有两个值可能是对应的两种AFS的对比方法)。
- 池化方式对比:
- Max模式:擅长定位小面积异常(如裂纹),但对大范围异常敏感度低。
- Avg模式:更关注全局异常,但可能忽略局部细节。
- Max&Avg模式:综合两者优势,在PRO指标上表现最优(图5)。
- 计算效率:通过丢弃2/3的残差,推理速度提升约20%(对比表S4中架构A与C)。
功能特点
- 高逼真异常生成:SDAS 生成的异常图像在视觉和分布上更接近真实异常,支持局部和全局异常模拟。
- 高效特征利用:AFS 优化特征选择,避免传统方法中手动选择特征的局限性,显著降低计算开销。
- 多粒度检测:RRS 通过残差选择机制,精准定位从细微纹理异常到大规模结构缺陷的不同类型异常。
- 跨数据集通用性:在 MVTec-AD、MPDD、BTAD、VisA 等数据集上均达到 SOTA 性能,无需针对特定任务调整架构或超参数。
应用场景
RealNet 主要面向工业生产的质量控制和自动化检测领域,典型应用包括:
- 工业产品缺陷检测:如电子元件表面裂纹、金属零件划痕、PCB 板焊接异常等。
- 安全监控:实时识别生产线中的异常事件(如异物侵入、设备故障)。
- 复杂场景适应:支持光照变化、多目标检测(如胶囊多物体场景)及复杂结构(如精细纹理或大型机械组件)的异常定位。
性能优势
- 检测指标:在 MVTec-AD 数据集上实现 Image AUROC 99.65%、Pixel AUROC 99.03%,显著优于 PatchCore、FastFlow 等现有方法。
- 计算效率:单 GPU(RTX 3090)推理速度达 31.93 FPS,内存占用仅 4GB,满足工业实时检测需求。
- 数据集支持:提供合成工业异常数据集(SIA),包含 36 类共 36 万张异常图像,可作为自监督训练的通用资源。
总结
RealNet 通过融合扩散模型生成、动态特征选择与残差优化,解决了传统异常检测方法在合成数据真实性、特征冗余和计算效率上的瓶颈,为工业视觉检测提供了高效、鲁棒的解决方案。其代码、数据和模型已开源,助力后续研究与实际应用。