SimpleNet-阅读笔记

title

SimpleNet: A Simple Network for Image Anomaly Detection and Localization 阅读笔记

亮点(更准、更快)

  1. 异常检测实现了99.6% 的AUROC

  2. 在单张3080ti上能实现77FPS

背景

  • 基于重建的方法 :认为异常不应该能被很好的重建出来,问题在于当异常与正常部分是同样的组成模式,那么异常部分还是可能会被重建出来的。

  • 基于合成的方法:主要是利用简单的数据增强的方法制作异常部分并随机的粘贴到正常数据上,这样做的缺点是,制作的异常与真实的异常并不相似。

  • 基于嵌入的方法:在特征空间上,异常的特征与正常的特征不在同一分布上,先用预训练模型学习正常的分布。之后通过特征提取的方法找出在正常分布之外的异常。这样的缺点在于,预训练模型是根据ImageNet数据集训练的,ImageNet中的数据与真实的工业图像之间有很大的差距,导致学习到的正常分布与工业图像的正常分布并不相同。

详细方法

图3

SimpleNet由一个特征提取器、一个特征适配器、一个异常特征生成器和一个判别器组成。其中特征生成器只在训练过程使用。

特征提取器

训练集 \(\mathcal{X_{train}}\) ,测试集 \(\mathcal{X_{text}}\) ,对于在 \(\mathcal{X_{train} \bigcup \mathcal{X_{test}}}\) 中的任一图像 \(x_i \in \mathbb{R}^{H \times W \times 3}\) 。由ResNet作为骨架的并经过预训练的特征提取网络 \(\phi\) 来进行特征提取。

特征适配器

因为工业图像通常与用于预训练的数据集中的图像有很大的不同,所以需要特征适配器 \(G_{\theta}\) 将训练获得的特征转移到所需要的域。

这里的特征适配器可以由简单网络构成,如全连接层或者多层感知机(MLP)。作者经实验发现,单个全连接层也能产生很好的效果。

异常特征生成器

利用通过在正常特征里添加高斯噪声的方法形成异常特征。这种做法比直接合成缺陷图像要更有效。

图4

判别器

判别器是用来估计每个位置的特征是否正常,如果是正常特征则输出为正,否则输出为负。这里作者简单的利用了2层的MLP实现的。

损失函数和训练过程

损失函数是截断的 \(l1\) 损失函数 \[ l_{h,w}^i = max(0, th^+ - D_{\psi}(q_{h,w}^i)\ +\ max(0, th^- + D_{\psi}(q_{h,w}^{i-})) \] 其中 \(th^+, th^-\) 是防止过拟合的截断项,默认设为0.5和-0.5,\(D_{\psi}(·)\) 是判别器,\(q_{h,w}^i, q_{h,w}^{i-}\) 分别是正常特征和异常特征。

训练目标: \[ \mathcal{L} = \min_{\theta, \psi} \sum_{x^i \in \mathcal{X_{train}}} \sum_{h,w} \frac{l_{h,w}^i}{H_0*W_0} \]

评分函数

\[ s_{h,w}^i = -D_{\psi}(q_{h,w}^i) \]

用于异常定位的异常图定义如下: \[ S_{AL}(x_i) := {s_{h,w}^i|(h,w) \in W_0 \times H_0} \] 之后通过插值恢复到原图的分辨率,并对平滑边缘进行高斯滤波 \(\sigma = 4\)

把最高的异常得分,作为这幅图的异常得分 \[ S_{AD}(x_i) := \max_{(h,w) \in W_0 \times H_0} s_{h,w}^i \]


SimpleNet-阅读笔记
https://pixelpilot666.github.io/2024/03/15/SimpleNet-阅读笔记/
作者
PixelPilot
发布于
2024年3月15日
许可协议