anoGan
Paper:Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery
2017, IPMI ( Information Processing in Medical Imaging )
生物医学影像与影像引导治疗系, 奥地利维也纳医科大学
数据类型为医学影像, 光学相干层析成像(Optical Coherence tomography, OCT)技术
异常检测前提
使用正常样本来训练生成器和判别器, 正常样本能够很好地被重构出来, 而异常样本不能被很好地重构出来。
模型结构
模型训练
生成器G, 将隐变量z经过一系列的反卷积操作, 生成样本.
判别器D, 最后一层的激活函数是sigmoid, 输出一个概率, $\in[0,1 ]$, 越大代表判别器D认为输入的样本为真实的样本.
使用健康人的样本来训练模型. 隐变量Z,服从标准正态分布. 采样z, 经过生成器G(z), 得到生成的图片G(z). 将生成的图片样本G(z) 和 健康人图片样本x, 一起输入到判别器D.
训练步骤:
- 将G(z), x 输入到判别器D, 根据以下目标函数更新判别器D的参数:
意义是, 对于输入样本为真实样本x, 希望判别器的输出值趋近1; 对于输入样本为生成样本G(z), 希望判别器的输出值趋近于0.
- 固定判别器D的参数, 根据以下目标函数更新生成器G的参数:意义是, 通过调整生成器G的参数,让生成的样本G(z)更像真实样本x, 让判别器D无法判别真实样本和生成样本.
经过这样的对抗训练之后, 生成样本G(z)越来越像真实样本.
找到输入样本x对应的隐变量z
生成器G可以将隐变量z映射到x, $G(\mathbf{z})=\mathbf{z} \mapsto \mathbf{x}$. 如果给定x, 很难直接找到这个x对应的z, 使得G(z)看起来跟x很像. 为了找到最好的z, 固定生成器G的参数. 先随机采样一个$z1$, 生成一个图像$G(z_1)$, 利于一个损失函数来提供梯度, 去更新$z_1$的系数, 更新后的位置设为$z_2$. 为了找到与输入图片样本x最相似的生成图片样本$G\left(\mathbf{z}{\Gamma}\right)$, 需要经过迭代过程$\gamma=1,2, \ldots, \Gamma$.
以上使用的损失函数, 包括两个部分:
Residual Loss
利用生成器G:生成样本和真实样本之间像素级别的差距.
Discrimination Loss
利用判别器D:
原始的版本:交叉熵损失
其中目标为1, 即希望判别器D不能判别出$G(z_\gamma)$为生成样本, 以上公式化简为:
本文改进的版本: 利用判别器的中间结果:
其中$f(*)$为判别器的中间层的输出.
综上, 寻找最优的$z$所用的损失函数为:
其中$\lambda$为权重, 本文设定为0.1
异常检测
定义异常分数, 利用以上的损失函数:
实验结果
第一,二列为训练样本, 第三列为测试样本. 第一行为输入样本, 第二行为对应的生成样本, 第三行中的红色部分为异常分数较高的区域, 最后一行中的绿色区域为异常区域.
图a: 不同的模型的检测结果
AnoGAN:$A(\mathbf{x})=(1-\lambda) \cdot R(\mathbf{x})+\lambda \cdot D(\mathbf{x})$
$GAN_R$:$\hat{A}(\mathbf{x})=(1-\lambda) \cdot R(\mathbf{x})+\lambda \cdot \hat{D}(\mathbf{x})$
$P_D$: 直接的D(x), 不经过生成器.
图b: 不同的部分的异常检测结果.
图c:Residual loss A(x) =$\sum\left|\mathbf{x}-G\left(\mathbf{z}_{\gamma}\right)\right|$ 的分布
图d:Discrimination loss A(x) =$\sum\left|\mathbf{f}(\mathbf{x})-\mathbf{f}\left(G\left(\mathbf{z}_{\gamma}\right)\right)\right|$ 的分布
其中蓝色为训练集, 绿色为测试集, 红色为异常样本.
综上, 能够检测出异常的部分主要是$R(X)=\sum\left|\mathbf{x}-G\left(\mathbf{z}_{\gamma}\right)\right|$,
$D(X)=\sum\left|\mathbf{f}(\mathbf{x})-\mathbf{f}\left(G\left(\mathbf{z}_{\gamma}\right)\right)\right|$能够稍微提升检测结果.
总结
由于在训练的时候, 只使用了正常样本,
对于生成器来说, 给定异常样本x, 重构出来的会很像是正常样本.
对于判别器来说, 由于没有使用异常真实样本来训练, 不能将异常真实样本判定为真实样本. 只有正常真实样本, 才能判定为真实样本.
f-anoGan
Paper:f-AnoGAN: Fast unsupervised anomaly detection with generative adversarial networks
2019, Medical Image Analysis
anoGan的缺点
在检测的时候, 为了找到输入样本x对应的隐变量$z_\Gamma$, 需要经过500次迭代. 为了加速检测, 提出了f-anoGan
新的网络结构
原来的结构:
为了在检测的时候, 快速找到输入样本x对应的隐变量$z_\Gamma$, 在训练好生成器G和判别器D之后, 固定G和D的参数, 加入编码器E:
训练编码器E, 是的输入的样本x经过编码器E之后, 直接得到对应的隐变量z.