鉴于评论区一些同学需要开源代码,因此已将自己的pytorch实现开源
链接 希望小伙伴们别光看不点星星
注意本项目是基于WGAN的AnoGAN。WGAN从数学上解释了传统GAN存在的问题并引入了沃瑟斯坦距离。关于WGAN细节请自行参考论文。
这是第一篇将GAN思想用于图像异常检测的论文。
结合上图,其基本思想是:
- 训练阶段:仅利用正常样本在DCGAN上无监督地学习正常样本的一个在潜在空间中的流形分布(文中为Normal Anatomical Variability正常解剖变化,解剖是因为数据为医学图像233)。
- 测试阶段:读入测试样本(可能是正常样本或异常样本),定义一个损失函数进行多次反向传播迭代找到一个流形空间内最接近的向量 z Γ z_{\Gamma} zΓ,对 z Γ z_{\Gamma} zΓ前向传播,生成器输出与原图比对可以找到异常区域,辨别器输出又可以作为异常值,超过一定阈值则可认为是异常样本。
Training阶段
训练阶段主要使用的是DCGAN。先来回顾一下GAN:
GAN有2个对抗模型:生成网络和辨别网络。
- 生成网络G从潜在空间中随机采样(随机产生噪声)作为输入,其输出结果需要尽量模仿训练集中的真实样本。
- 判别网络D的输入则为真实样本或生成网络的输出,输出为一个标量,代表其为真实样本而不是生成样本的可能性,其目的是将生成网络的输出从真实样本中尽可能分辨出来。
生成网络要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实。
目标函数:
其中:
G希望D(G(z))尽可能得大,这时V(D, G)会变小。
D希望D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。
生成器G看成解码器decoder,辨别器D视为编码器encoder(AE)
在本文中,GAN中D的作用就是Encoding Anatomical Variability,或者说学习到正常样本的分布。
顺便说一下GAN的训练有两个输入:一种是正常样本输入D训练;另一种是随机生成噪声z来训练G和D。
Inference阶段
训练完成后生成器G已经学到了从潜在空间 z z z到样本 x x x的变换,但是inference阶段的输入是一个图片 x x x,作者认为需要进行一个从 x x x到 z z z的变换,但这个变换并不是free的,需要迭代地寻找 z z z。作者借鉴特征匹配方法,具体方式为:
- 定义一个损失函数,代表潜在空间向量映射到图像的损失;
- 在潜在空间中随机采样一个 z 1 z_{1} z1,代入损失函数计算损失;
- 计算损失关于 z 1 z_{1} z1的梯度,利用梯度下降法不断更新,得到 z 2 z_{2} z2, z 3 z_{3} z3,…,直到 z Γ z_{\Gamma} zΓ, z Γ z_{\Gamma} zΓ就认为是最终的结果。
注意:generator和didcriminator是已经在正常图像上训练好了的,他们的trained weight是保持不变,只更新噪声
z
Γ
z_{\Gamma}
zΓ。
(这种方法实际上是因为没有在训练阶段对x到z的变换建模,只能通过这种迭代的方式来寻找。实际上并不是非常优雅。那么是不是有某种方法可以建模x到潜在空间z的编码过程呢?有的,后面的论文已经这么做了,比如GANomaly,读者请自行查阅。)
Inference阶段中的损失函数
下面说明一下Inference阶段中的损失函数:
-
residual loss
衡量query image x x x 和生成图片 G ( Z y ) G(Z_{y}) G(Zy)的差异:
-
Discrimination Loss
之前的论文直接对辨别器的输出(为一个标量或潜在空间)进行BCEwithLogit损失函数计算,本文中,为了能获取更丰富的特征信息,作者没有使用这种方法,而是额外利用了辨别器中某一个特征层的输出 f f f。同样地衡量 x x x 和生成图片 G ( Z y ) G(Z_{y}) G(Zy)的差异:
-
Weighted sum
两个loss加权求和:
这个结果是一个标量,可以看成是 a n o m a l y anomaly anomaly s c o r e score score,高于一定阈值则为异常,反之正常。更厉害的是,还可以用生成图片减去测试样本图片,得到图片的异常区域(如前文截图所示):
x R = ∣ x − G ( Z y ) ∣ x_R=| x- G(Z_{y})| xR=∣x−G(Zy)∣
总结
这是第一篇用GAN来进行图像异常检测的论文,个人觉得和GAN相比主要创新点是测试阶段测试样本的引入:第一点是直接将测试样本送入辨别器;第二点是测试阶段的梯度下降求样本在潜在空间(流形空间)的一个映射。
虽然比不上现在的sota但是作为看山之作还是值得好好研读的。
如有不正,烦请评论区指出。