BicycleGAN:NIPS2017对抗生成网络论文

BicycleGAN:NIPS2017对抗生成网络论文



What:

  1. Cyclegan没法做什么? 因为Cyclegan引入重构loss,虽然保证了一对一,但限制了diversity。 事实上,B->A->B,不一定需要恢复到完全一样的B。
  2. BicycleGAN 处理的是 多对多的生成问题。和原始GAN一样。
  3. BicycleGAN 是pix2pixGan的升级版,不是Cyclegan的升级版。还是需要pair输入去训练的。
  4. BicycleGAN 和StarGAN一样,也是结合了 conditional GAN的想法,但BicycleGAN的输入是随机变量+B,而不是特定label+B.




How:

BicycleGAN 使用的也是重复利用,互相提高的思想,具体来说 是两种GAN的结合。

下面具体介绍这两种GAN:

1. VAE GAN

arXiv:arxiv.org/abs/1512.0930

就是在VAE的基础上 加了GAN的adversarial loss。

B\to^{E}\to z \to^{G}\to \hat{B}

输入: B

编码函数: E

中间:encode(压缩) 成 z。

生成函数: G

还原: \hat{B}

具体来说,如下图

VAE GAN的重点还是在得到的embedding z

而BicycleGAN中画的是:

在原始的基础上,

不变的是:

  • L1 和 D的loss
  • 从 B到 z 再到B

改变的是:

  • Encode出来的Z 要符合N(z), 使用KL loss
  • G的输入 是 A和z



2. Conditional GAN

arXiv:[1411.1784] Conditional Generative Adversarial Nets

生成有语义含义的图像

z+y \to^{G}\to \hat{B} , \hat{B}+y \to ^{D}

输入: z+y

生成函数: G

生成: \hat{B}

判别函数: D

输入: \hat{B}+yB+y (真实的pair和假的pair)

具体来说,如下图


而BicycleGAN中画的是:

在原始的基础上,

不变的是:

  • A对应的就是y, z还是随机的变化,作为G的输入
  • 真实B和生成的B做D的判断

改变的是:

  • 加了Encode ,Encode的z要和输入的z一样。



3. Bicycle GAN (本文方法)

结合了以上两种GAN,更准确的说,和cyclegan一样,一起训练,参数共享。



4. 直观的感受

  • VAE GAN part 其实比较hard,要求还原的B 要和输入pixel-level 一模一样。 学的是一对一映射。
  • Conditional GAN part 相对nice,这里生成的B 可以有一些变化,要求也比较宽松,一个是D的loss 一个是Encode的loss(像是perceptual loss)。 都不是pixel level的要求。



5. 一些小细节

  • 怎么加z到G里面。有两种加法。一种直接concat在input的channel上,一种Unet在压缩的时候,每次结果都加。
  • D用了两个不同receptive field 70x70 和140x140的patchCNN。 (在pix2pix里面只用了70x70的一个patchCNN)


最后的结果 可以像原始GAN一样做一些连续的变化 (改z的一维)。



论文看的比较粗,实验部分还没仔细看,粗浅见解,欢迎建议。

编辑于 2017-12-03

文章被以下专栏收录