周报内容:
- .论文精读《Gaussian Anomaly Detection by Modeling the Distribution of Normal Data in
Pretrained Deep Features》 - 焊接电路板正常数据集整理
- 复现论文《DRAEM》
- 下周工作计划
学习产出:
一、论文笔记
Gaussian Anomaly Detection by Modeling the Distribution of Normal Data in Pretrained Deep Features
通过多元高斯 (MVG) 从ImageNet学习的深度特征表示中对正态数据的分布进行建模(发现正常数据中方差很小的主成分对于区分正常和异常实例至关重要),并将MVG拟合到每个 “新颖” 的正常数据中。
在多元高斯假设下,基于选择可接受的误报率 (FPR),可以合理地设置工作点,判断图像是否为异常。
图1 使用预训练表示的高斯异常检测流程示意图
在训练 (实线) 期间,使用正常图像 (标记为蓝色) 来估计基础高斯分布的参数;
测试(虚线) 期间,计算测试图像与估计的高斯之间的距离,并将其用作异常分数。
1.深度特征表示中的高斯缺陷检测
(1)估计高斯分布
MVG(多元高斯)定义为:
(2)异常得分定义:
马氏距离
(3)模型架构:
采用EfficientNet模型(ImageNet分类中的最新技术),如下图所示,每个级别具有不同的空间尺寸 (在红点旁边显示) 和特征数量 (如下所示)。
图2 EfficientNet-B0的架构示意图
(4)特征提取:
在模型 9个“level” 的末尾提取特征。对特征进行空间聚合、平均池化之后,跟每个level的输出计算马氏距离,每个图像最多可以计算九个不同的异常得分。然后,图像的总体异常得分为这9个得分之和:
(5)增强和降维产生的影响:
对于降维,我们假设区分缺陷检测任务的特征不一定在正常数据内变化很大。因此,仅保留特征值最小的主成分。
对于增强,我们采用了在监督/半监督学习中也使用的常见仿射和颜色变换。
(6)设置工作点
根据估计的MVG合理地设置工作点。
对于高斯分布,每个马氏距离唯一地对应于看到正常样本的概率p,与在该距离处阈值的异常检测器的预期真实负率 (TNR) 匹配。阈值 t 的求解为:
2.实验
我们选择编码器的ResNet-18和解码器部分的反相ResNet-18。
上采样操作采用了像素混洗操作,以减少棋盘伪影。瓶颈的潜在维度设置为32,并在所有类别中正确重建正常类别。
尽管用于ROC计算的阈值仍设置在像素级别,但我们现在仅在测试图像包含至少与测试集中存在的最小异常一样大的连接分量时才将其标记为有缺陷。
提出的高斯异常检测器在公共MVTec AD数据集上实现了新的技术水平 :
二、焊接电路板正常数据集整理
这周学习了数据挖掘课程,老师的一番话让我深有感悟:在数据集上不断调整模型,对性能的提升可能只有一两个百分点。但是如果将自己数据集的质量提升,可能对结果是至关重要的。
因此,将拿到的PCB图片仔细筛选,去除模糊、质量差的图片, 并进行裁剪、修改格式处理,得到221张正常数据,并通过数据增强,最终得到1547张正常数据集图片。
三、复现论文《DRAEM》
在mvtec数据集上进行训练,测试结果如下:
在自建数据集上进行训练:
合成异常图像Ia:
重建图像 Ir:
原始图像 I :
输出异常分割掩码M:
真实值Ma:
测试结果没有可视化效果,我下周尝试修改代码添加上。
四、下周工作计划
1.添加可视化效果,目前的结果图不够清晰
2.一些图片在pycharm中无法打开,导致数据集利用率低,继续找原因(图片太大? 改图片格式时出了问题?)