对抗生成网络GAN-循环一致性
GAN 的论文笔记:https://www.jianshu.com/p/db99e242bdb0
GAN 可以生成图像,如果想要用GAN 生成某种风格的图像,但是没有配对的图像,要怎么做呢?
把原图像称为 Domain X, 目标图像称为 Domain Y,想要做的就是把图像从 Domain X 转到 Domain Y。
一个思路是用 Domain Y 的图像去训练判别器,让判别器关注在 Domain Y上,用 Domain X的图像作为生成器的输入,希望输出的图像是 Domain Y上的对应图像。这种方法的问题在于,如果生成器的结构足够复杂,完全可以忽略输入图像,来生成 Domain Y 的图像,这个图像可能是真实,但是与输入无关。
1. CycleGAN
CycleGAN项目主页:https://junyanz.github.io/CycleGAN/
其他参考:https://mofanpy.com/tutorials/machine-learning/gan/lsgan/
为了保证输出的图像与输入图像有关,我们需要循环一致性(cycle-consistency)。在生成器实现了从 Domain X 到 Domain Y的图像之后,再用另一个生成器实现 Domain Y 到 Domain X,把生成出来的图像转回去,最小化输入图像与转回来的图像之间的 loss。这样就构成了 CycleGAN。
CycleGAN 由两个 GAN 结合而成,有两个生成器和两个判别器,将 Domain X 到 Domain Y 的生成器记为 G,Domain Y 到 Domain X的生成器记为 F,有两个循环一致性损失, ,。
有两个GAN,所以有两个 GAN Loss,再加上两个 cycle-consistency loss,总的目标函数就是他们的和:
其中:
在实际训练上,为了避免模型训练不稳定,以及生产更高质量的结果,作者用用最小二乘损失来代替负对数似然目标(为什么?),因此 GAN Loss变成了:
训练 G 以减少
训练 D 以减少
应用:脑部 MRI 生成 CT
Yang, H., Sun, J., Carass, A., Zhao, C., Lee, J., Xu, Z., & Prince, J. (2018). Unpaired Brain MR-to-CT Synthesis Using a Structure-Constrained CycleGAN. Lecture Notes in Computer Science, 174–182. doi:10.1007/978-3-030-00889-5_20
利用 CycleGAN 实现由 MR 图像生成 CT 图像, 重建的 MR 图像与原图是一致的, 但是由于 CycleGAN 本身没有对生成图像与原图进行约束,导致了生成出来的 CT 图像中会出现与原图 MR 结构不一致。
proposed structure-constrained cycleGA为了解决这个问题,作者定义了一个结构一致性损失,强制合成图像中提取的特征在体素方面接近输入图像中提取的特征。
由于合成的图像和输入图像分别在 MR 和 CT 域中,作者首先使用与模态无关的结构特征将这些图像映射到一个共同的特征域中,在这项工作中,作者使用了模态独立邻域描述符 (modality independent neighborhood descripto,MIND) 作为结构特征,然后在这个特征域中测量合成图像和输入图像之间的结构一致性。
MIND 是使用基于非局部补丁的自相似性定义的,并且依赖于图像局部结构。MIND 特征通过将每个patch 与其在非局部区域中的所有邻居进行比较来提取独特的图像结构。
其中 N 代表体素的数量, R代表非局部区域,F是一个体素x的 MIND 特征。
总的训练 loss如下:
图(a)为真实CT图像与输入MRI, 图(e)为提出的方法的生成CT和残差图像(和真实CT比较),可以看到头骨的形状更加接近。
2. StarGAN
论文地址:https://arxiv.org/abs/1711.09020
代码地址:https://github.com/yunjey/StarGAN
CycleGAN 可以实现两个 Domian 之间的转换,那么如果是多个 Domian 之间的转化呢?如果是 CycleGAN 的方式,需要在每对 Domian 之间都训练一对 GAN,显然非常麻烦。
(Domain 是什么?)
We denote domain as a set of images sharing the same attribute value. People with black hair is one domain and people with blond hair is another domain.
对此,StarGAN 被提出来解决多数据集在多个 Domian 图像间转换的问题,只需要一个生成器,拟合所有输入 Domian 的数据。
上图(a),训练判别器,不同之处是判别器需要判断图像真假的同时还需要判断图像来自哪个域。
图(b),训练生成器,不仅需要输入图像,还需要一个目标域。
图(c),循环一致性,将生成的图像以及之前的域再次输入生成器,得到重建的输入,期待与真实输入差别越小越好。
总的 loss 为:其中包括 GAN 的通用 loss:
循环一致的重构 loss,其中 c 是 domain 的类别:
训练判别器的分类 loss: 训练生成器的分类 loss:
在训练中,为了稳定训练过程并生成更高质量的图像,作者用带有梯度惩罚的 Wasserstein GAN loss 替换了 :
其中是沿一对真实图像和生成图像之间的直线均匀采样。
StarGAN v2
论文地址: https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9157662
代码地址: https://github.com/clovaai/stargan-v2
为了生成图像多样化,以及在多个域上具有可扩展性,StarGAN v2 被提了出来。
domain implies a set of images that can be grouped as a visually distinctive
category, and each image has a unique appearance, which we call style.
作者将StarGAN 中的域标签用特定域的风格特征来代替,使用了 style encoder 和 mapping network。
为了保证生成的图能够保留其输入图像 x 的域不变特征(例如姿势),作者依旧采用了循环一致性损失,
3. 小结
循环一致性是一种自监督的思路,目的是为了保留某种特征。除了 CycleGAN和StarGAN,还有DTN和XGAN,强调了图像语义一致性。
参考资料: