论文阅读笔记《GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training》

核心思想

  本文提出一种基于半监督GAN的异常检测算法,主要的创新点在于在自动编码器之后,又增加了一个编码器,构成了“编码-解码-编码”的结构,通过比较第二个编码器的输出和第一个编码器的输出之间的差别,来评估输入图像是否属于异常图像。网络的训练过程同样也引入了对抗训练的思想,即使用一个区分器对解码器输出的重构图像进行判断,是来自原始图像还是重构图像,整个网络的结构如下图所示
论文阅读笔记《GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training》_第1张图片
  整个网络可以分为三个子模块:自动编码器模块( G E , G D G_E,G_D GE,GD),编码器模块( E E E)和区分器模块( D D D)。首先,输入图像 x x x经过自动编码器模块中的编码器部分 G E G_E GE得到潜空间中的特征向量 z z z,再经过解码器部分 G D G_D GD得到重构图像 x ^ \hat{x} x^。然后重构图像 x ^ \hat{x} x^进入编码器模块 E E E,得到重构后的特征向量 z ^ \hat{z} z^(图中标记有误)。最后重构图像 x ^ \hat{x} x^和输入图像 x x x还要输入到区分器 D D D中进行判断。
  整个训练过程输入图像都是正常图像,测试时输入的图像既有正常图像,又有异常图像。当输入图像为异常图像时,编码器 G E G_E GE将其信息编码得到特征向量 z z z,但因为网络仅在正常图像条件下进行训练,因此解码器 G D G_D GD不具备重构异常图像的能力,重构图像 x ^ \hat{x} x^就会丢失异常部分的信息。当再次经过编码器 E E E进行编码时,得到的重构特征向量 z ^ \hat{z} z^自然也是不包含异常信息的,因此 z ^ \hat{z} z^ z z z之间会有明显的差异,计算这一差异的绝对值得到异常得分 A ( x ^ ) \mathcal{A}(\hat{x}) A(x^)
在这里插入图片描述

  对于整个测试集 D ^ \hat{\mathcal{D}} D^可以得到异常得分集 S = { s i : A ( x i ^ ) , x i ^ ∈ D ^ } \mathcal{S}=\left \{s_i : \mathcal{A}(\hat{x_i}), \hat{x_i} \in \hat{\mathcal{D}}\right \} S={si:A(xi^),xi^D^},对整个异常得分集进行归一化处理
在这里插入图片描述
即可获得最终规范化的异常得分集 S ′ \mathcal{S}' S.

实现过程

网络结构

  两个编码器和区分器的结构基本是相同的,而区分器和解码器结构参考了DCGAN的结构。

损失函数

  损失函数包含三个部分:对抗损失(Adversarial Loss),上下文损失(Contextual Loss)和编码器损失(Encoder Loss)。其中对抗损失是计算了区分器中,对于输入图像 x x x和重构图像 G ( x ) G(x) G(x)得到的特征图差别,计算过程如下

  上下文损失计算输入图像和重构图像之间的差别
在这里插入图片描述
  编码器损失计算了潜空间的特征向量 z z z和重构特征向量 z ^ \hat{z} z^之间的差异
在这里插入图片描述

创新点

  • 在原有的自动编码器的基础上又增加了新的编码器模块,构成“编码-解码-编码”的三级结构,并设计了相应的损失函数

算法评价

  本文研究的是异常检测问题,与缺陷检测有一定的相似性,但也有区别。异常检测本身只需要关注输入图像是否存在异常即可,不需要输出异常区域的位置,也不需要对异常区域进行分类。这个可以和分割成图块的缺陷检测问题结合起来,把异常得分转化成图块内存在缺陷的概率。最后我觉得本文叫做半监督(Semi-Supervised)并不合适,因为整个训练过程并没有用到任何的异常图像以及对应的Groundtruth,应该叫做无监督或者自监督可能更加合适。

如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。

你可能感兴趣的:(论文阅读笔记,#,缺陷检测,深度学习,异常检测)