论文全称为:Schlegl et al. - 2017 - Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery
出于好奇,本人只是阅读过该篇文章,并没有将该论文应用于实际生活,故不能在实践上给予各位一些建议,万分抱歉!
如果诸位在看我写过的文章时发现了错误,请务必告诉本人,不胜感激!
异常检测即检查某一类数据是否存在异常,例如病人是否患有某种疾病。一般情况下,模型只会使用正常数据进行训练
有监督的异常检测模型往往需要大量标注的训练数据,但是在医疗领域,标注数据需要耗费大量的人力,数据标注成本高,因此,论文作者在DCGAN的基础上,通过精心设计的loss函数,构建了名为AnoGAN的架构,首次利用无监督的GAN进行异常检测。
关于GAN,可以查看我之前的博客深度学习——生成对抗网络(GAN)
DCGAN将隐空间中的点映射为一张图片,通过使用正常图片训练DCGAN,训练完毕后,DCGAN隐空间中的点生成的应该都是正常图像,那我们能不能将一张名为A的图片映射为隐空间中的某个点呢?这有点困难,那我们能不能在隐空间中查找到一个点,该点生成的图片与图片A在视觉上最为相近呢?这便是论文的出发点。
DCGAN训练完毕后,冻结DCGAN的参数,隐空间为待训练参数。随机在隐空间中选择一个点 z y z_y zy,生成器生成的图像记为 G ( z y ) G(z_y) G(zy),测试图像记为x,通过使用反向传播,利用某些优化算法,例如SGD,经过若干轮优化,可以在隐空间中找到一个点,记为 z y ′ z_y' zy′,使得loss最小,此时生成器生成的图像 G ( z y ′ ) G(z_y') G(zy′)与图像A最为相近。由于生成器只能生成正常图片,异常图片与正常图片的差距本来就比较大,比较图像 G ( z y ′ ) G(z_y') G(zy′)与图像x的差距,如果差距大于某个数值,则可认为图像A出现异常。
由此可以抛出两个问题
loss函数分为两部分: R e s i d u a l L o s s Residual\ Loss Residual Loss与 D i s c r i m i n a t i o n L o s s Discrimination\ Loss Discrimination Loss。
R e s i d u a l L o s s Residual\ Loss Residual Loss定义为
R ( z y ) = ∑ ∣ x − G ( z y ′ ) ∣ R(z_y)=\sum|x-G(z_y')| R(zy)=∑∣x−G(zy′)∣
论文并没有具体解释如何计算这个loss,从形式上看,这个loss可以度量生成图片与测试图片的差距,如果生成图片与测试图片一致,则为0
D i s c r i m i n a t i o n L o s s Discrimination\ Loss Discrimination Loss定义为
D ( z y ) = ∑ ∣ f ( x ) − f ( G ( z y ′ ) ) ∣ D(z_y)=\sum|f(x)-f(G(z_y'))| D(zy)=∑∣f(x)−f(G(zy′))∣
论文并没有直接使用鉴别器的输出作为函数 f f f,而是选择鉴别器中间某一层的输出作为函数 f f f,作者将鉴别器看成是一个特征提取器, D i s c r i m i n a t i o n L o s s Discrimination\ Loss Discrimination Loss反映了鉴别器对两张照片提取的特征之间的差异
最终定义的loss函数为
A ( z y ) = ( 1 − λ ) R ( z y ) + λ D ( z y ) A(z_y)=(1-\lambda)R(z_y)+\lambda D(z_y) A(zy)=(1−λ)R(zy)+λD(zy)
λ \lambda λ取值为0到1,为超参数,该loss从像素以及鉴别器提取的图像特征两个维度比较了两张图片的差异。我们可以直接使用该loss度量图片差异,如果经过若干轮优化后,loss仍然大于某个阈值,则可认为该图片存在异常。
以上便是上一节两个疑问的解答。
论文选用的数据集为视网膜的光学相干断层扫描图像,给定含有 M M M张正常图像的数据集 K K K,每张图片上采集 K K K张大小为 c ∗ c c*c c∗c的图片,构成训练数据,测试时,从测试图片采取一定数量的图片,输入到AnoGAN中,利用loss判断是否为异常图片,若为异常图片,则用红点标明原图该块区域,这是一个二分类问题,因此可以使用召回率、准确率等指标对模型性能进行评估。
实验具体解答了以下几个问题
上图有三个大模块,每个模块有四行,所有模块的第一行为真实图片,第二行为生成的图片,第三行为异常检测的结果,第四行应该是将异常区域分割出来的结果。
比对一、二模块的第一行与第二行,可见生成图像与真实图像具有一定的相似性,可简单说明AnoGAN可以生成质量不错的图像。
比对一、二、三模块的三、四行,可见AnoGAN可以可以检测异常。
从效果图来看,AnoGAN效果不错
接着论文设计了三个使用不同loss或模型的baseline,比对了不同loss对DCGAN异常检测的影响
结果如下:
AnoGAN的效果不错。论文也比较了单纯使用 R ( z y ) R(z_y) R(zy)、 D ( z y ) D(z_y) D(zy)、 D ^ ( z y ) \hat D(z_y) D^(zy)作为 l o s s loss loss的结果,对应的ROC以及AUC如下:
单纯使用 R ( z y ) R(z_y) R(zy)或是 D ( z y ) D(z_y) D(zy),也可以带来不错的效果。论文中仍有一些其他图表,就不在此进行总结啦~
这篇论文的重点
总体来说,整篇论文给我感觉非常不错