CVPR2024 合成异常数据 工业异常检测 RealNet

前言

本文分享一个基于扩散模型的异常检测框架,用于检测工业场景缺陷检测异常检测

  • 强度可控扩散异常合成:基于扩散过程的合成策略,能够生成不同强度的异常样本,模仿真实异常样本的分布。
  • 异常感知特征选择:选择代表性和判别性的预训练特征子集,以提高异常检测性能并控制计算成本。
  • 重建残差选择:自适应选择判别性残差,用于全面识别各级异常区域。

论文地址:RealNet: A Feature Selection Network with Realistic Synthetic Anomaly for Anomaly Detection

代码地址:https://github.com/cnulab/RealNet

强度可控扩散异常合成,简称为SDAS,生成的异常图像,如下图所示。

  • 这些异常图像,都是基于正常图像生成的。
  • 使用的仅仅是正常图像,通过SDAS生成与正常图像相似但带有异常特征的图像。

  • 电子元件的正面视图,这些图像显示了明显的异常(如损坏、变形等)
  • 螺丝的图像,可以看到一些异常样本(如弯曲、断裂等)
  • 织物的图像,其中有一些织物图案显示了异常(如磨损、变形等)
  • 铝箔的图像,有明显的异常(如刮痕、孔洞等)。

强度可控扩散异常合成: 

  • 新颖的合成策略:生成的样本更接近自然分布,并提供控制异常强度的灵活性。
  • 使用DDPM扩散模型:在采样过程中引入扰动项,以生成低概率密度区域的样本。
  • 模拟自然异常模式:如老化、结构变化、异常纹理和颜色变化。

一、模型框架

RealNet的模型框架,如下图所示:

  1. 输入图像数据
  2. 基于扩散模型,实现强度可控的异常数据生成。
  3. 生成的异常数据、原来的图像数据,一起进行训练。
  4. 图像数据,通过预训练模型进行特征提取,生成图像特征。
  5. 通过AFS结构,选择有助于异常检测的特征。
  6. 通过RRS结构,选择包含最多异常信息的重建残差特征。
  7. 选择出来的重建特征,送入判别器,输出异常检测信息。

二、核心内容——强度可控扩散异常合成(SDAS) 

目的:

  • 生成具有不同强度的异常图像。这样可以用来训练和评估异常检测模型,使它们在现实世界中表现得更好。 

核心概念:

  • 异常强度控制:通过一个参数 s来控制生成异常的强度。
  • 扩散模型 (DDPM):通过逐步添加和去除噪声来生成异常图像。

思路流程:

生成异常图像的过程是基于“扩散模型”(Diffusion Model)的技术,它通过逐步添加和去除噪声来生成新的图像。

这里的目标是通过控制噪声的强度,生成具有不同异常强度的图像。

异常图像生成,如下图所示:

  • 在不同异常强度s下,生成的样本异常图像。
  • 常强度设定在0.1和0.2之间,以覆盖更广泛的真实世界异常。

进阶加深理解——扩散原理

下面是详细版本介绍,如果上面懂了也可以忽略的。

如下图所示,使用不同合成方法生成的异常图像示例 :

  • 左侧使用具有不同异常强度的 SDAS 生成的示例。
  • 右侧是使用各种异常合成方法生成的具有局部异常区域的示例。

深入加深理解细节

实验设置
  • 超参数:设定 γ=0.001,在训练阶段停止μθ​(xt​,t) 的梯度。
  • 预训练权重:使用预训练在ImageNet上的权重加速扩散模型的收敛。
  • 训练时长:在单个NVIDIA GeForce RTX 3090上生成10,000张分辨率为256×256的图像需要约6小时。
  • SDAS和DDIM的实现:提供了三种选择用于确定性反向扩散过程的扰动方差:Σ=βt​,  Σ=βˉ​t​,  Σ=Σθ​(xt​,t)。
  • 不透明度:在图像混合过程中,均匀采样不透明度 δ 从0.5到1.0。
  • 硬件配置:在单个NVIDIA GeForce RTX 3090上,平均训练时间约为2小时。

三、核心关键点——异常感知特征选择 (AFS)

AFS 是一种用于从预训练网络中选择最有助于检测异常的特征的方法。

它的目标是减少特征维度,消除预训练偏差,并管理重建成本。

AFS 的作用
  1. 减少特征冗余:选择具有代表性的特征,避免重复信息。
  2. 增强判别能力:提高特征的代表性和判别性,提升异常检测性能。
  3. 控制计算成本:通过选择合适的特征维度,优化计算资源的使用。

思路流程:

AFS 通过以下步骤实现高效的特征选择:

  1. 定义三元组集合:异常图像、正常图像和异常掩膜。
  2. 提取预训练特征:从预训练网络的每一层提取特征。
  3. 计算特征差异:计算异常图像和正常图像之间的特征差异。
  4. 归一化和对齐:将差异归一化并对齐到异常掩膜的分辨率。
  5. 计算 AFS 损失:评估每个特征图的效果。
  6. 选择特征图:选择具有最小 AFS 损失的特征图用于重建。
  7. 多尺度特征选择:在不同层次上执行特征选择,获得多尺度特征。
  8. 通过这些步骤,AFS 有效地选择出最具代表性和判别性的特征,提升了异常检测的性能,同时优化了计算成本。

AFS 的可视化,从上到下,特征图分别来自第一层到第四层。

  • 对于原始图像和合成异常图像,可视化了预训练 WideResNet50不同层中它们对应的特征图之间的归一化差异。
  • 每个特征图都标有其在层中的索引和相应的 AFS 损失。从左到右,特征图的定位性能逐渐下降。
  • 可视化直观地展示了预训练造成的定位偏差,表明并非所有特征图对异常检测和定位的贡献都相同,同时也强调了 AFS 的有效性。

四、核心关键点——重建残差选择 (RRS)

RRS 模块的目的是通过选择包含最多异常信息重建残差来生成异常得分,从而有效地检测异常区域。

重建残差选择 (RRS) 总结

  1. 重建残差选择:通过选择最能代表异常信息的重建残差,提升检测准确性。
  2. 全局最大池化和平均池化:用于找到最重要的特征。
  3. 鉴别器:将特征图映射到图像级别分辨率以生成异常得分。
  4. 损失函数:结合重建损失和分割损失优化模型性能。

 在 MVTec-AD 数据集上,进行消融实验:

  • RealNet在各种重建残差选择模式(Max、Avg 和Max&Avg)

五、模型设计细节

在四个数据集上进行评估模型,包括 MVTec-AD、MPDD、BTAD 和 VisA。

  • MVTec-AD:包含 5,354 张来自 15 类工业异常检测任务的图像,包括 10 个物体类别和 5 个纹理类别。
  • MPDD:包含 1,346 张来自 6 种工业金属产品的图像,具有不同的照明条件、不均匀的背景和每张图像中多个产品。包括产品的摆放方向、拍摄距离和位置的多样性。
  • BTAD:包含 3 种真实世界工业产品的图像。
  • VisA:包含 9,621 张正常图像和 1,200 张来自 12 个类别的异常图像。某些类别展示了复杂的结构,例如 PCB(印刷电路板),其他类别则包含需要检测的多个对象。

评价指标:

  • AUROC:用于评估图像级别的异常检测性能。
  • Pixel AUROC:用于评估像素级别的异常位置检测。
  • PRO:每区域重叠度,用于评估像素级别的异常位置检测。

模型参数:

  • 预训练权重:使用预训练在ImageNet上的权重加速扩散模型的收敛。
  • 训练时长:在单个NVIDIA GeForce RTX 3090上生成10,000张分辨率为256×256的图像需要约6小时。
  • SDAS和DDIM的实现:提供了三种选择用于确定性反向扩散过程的扰动方差:Σ=βt​,  Σ=βˉ​t​,  Σ=Σθ​(xt​,t)。
  • 不透明度:在图像混合过程中,均匀采样不透明度 δ 从0.5到1.0。
  • 硬件配置:在单个NVIDIA GeForce RTX 3090上,平均训练时间约为2小时。

六、模型效果

在MVTec-AD数据集上测试,消融结果如下表所示:

  • 评估了AFS(异常感知特征选择)和RRS(重建残差选择)的影响

异常强度对RealNet的影响,如下表所示:

  • 异常强度s在0.1到0.2之间变化时,模型性能保持最优状态

 SDAS 生成的完整异常图像:

  • 在每个组中,从上到下,异常强度逐渐增加。
  • 示例来自 MVTec-AD、MPDD、BTAD 和 VisA 数据集。

SIA 合成的局部异常图像:(注意和上面的完整异常图片对比)

在看一组对比,完整异常图像:

合成的局部异常图像:

RealNet 的模型效果,从左到右依次为异常图像、真实值和预测异常分数。

示例2:

分享完成~

后续分析更多工业异常检测、缺陷检测的技术方案。

03-17
### 关于 RealNet 的概述 RealNet 是一种基于特征选择网络的异常检测方法,其设计目的是通过引入现实合成异常来提升异常检测的效果。这一开源项目的官方实现已经在 GitHub 和 GitCode 平台上发布,方便研究者和开发者获取并使用[^1]。 #### 安装与环境准备 为了成功部署 RealNet,需先完成开发环境的搭建工作。这一步骤涉及安装 Python 及其他必要依赖项,具体操作可参照项目文档中的说明部分[^3]。建议仔细阅读这些资料以确保所有组件都已正确配置完毕。 #### 使用入门 一旦完成了前期准备工作之后,就可以着手执行一些基本命令来进行初步测试或者训练自己的数据集了。通常情况下,会有几个重要的脚本来帮助用户快速上手这个工具包,比如 `train.py` 用于模型训练而 `test.py` 则负责评估性能表现等[^2]。 #### 配置调整 对于想要进一步优化结果的人来说,熟悉如何修改参数设定就显得尤为重要了。一般而言,在根目录下可以找到名为 config.yaml 或类似的文件用来存储各种超参定义等内容;通过对它们做出适当更改即可满足特定需求场景下的定制化要求。 #### 性能考量因素之一 - 异常强度影响分析 值得注意的是,当异常强度 s 处于区间 [0.1, 0.2] 范围内变动时,系统的整体效能能够维持在一个较为理想的状态之中[^5]。因此,在实际应用场景当中合理选取合适的阈值范围将会极大地促进最终效果达成预期目标水平之上。 ```python import yaml def load_config(config_path='config.yaml'): """加载配置文件""" with open(config_path, 'r') as f: cfg = yaml.safe_load(f) return cfg cfg = load_config() print(cfg['anomaly_strength']) # 假设存在这样一个键表示异常强度 ``` 上述代码片段展示了怎样读取 YAML 格式的配置文件,并打印其中有关异常强度的部分作为例子展示给读者参考学习之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗小树x

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值