CycleGAN

Zhu J., Park T., Isola P. & Efros A. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks. ICCV, 2017.

image-20201206142236839

以往的图片到图片的转换(或者图片到文字, 文字到图片等等), 往往需要成对的数据集, 本文提出了一种方法, 只需给出两种不同的数据集, 就能学习到风格之间的转换.

主要内容

image-20201206142629089

倘若我们想将数据集(X)的图片的图片转换为(Y)类型的图片, 很自然的, 构造一个生成器(G)

[G(X) : X ightarrow Y, ]

为了达到类型转换的目的, 需要添加一个判别器(D_Y), 判断输入是否为(Y)类型的图片. 如果仅仅如此是不够的, 因为

  1. 一个图片到另一个图片的转化是很多的;
  2. 仅仅有(G)(D_Y)往往会导致mode collapse.

于是作者又引入了生成器(F: Y ightarrow X)和判别器(G_X), 这是一个逆操作, 并且引入cycle一致损失,

[mathcal{L}_{cyc} (G, F) = mathbb{E}_{x sim p_{data(x)}} [|F(G(x)) - x|_1] + mathbb{E}_{y in p_{data}(y)} [|G(F(y)) - y|_1]. ]

即, 我们希望(F(G(X)) approx X), (G(F(Y)) approx Y), 非常直接却很有意思的想法.

最后的损失是

[mathcal{L}(G, F, D_X, D_Y) = mathcal{L}_{GAN} (G, D_Y,X, Y) + mathcal{L}_{GAN}(F, D_X, Y, X) + lambda cdot mathcal{L}_{cyc} (G, F). ]

注: 仅仅有(mathcal{L}_{cyc})也是不足以进行图片转换的, 这是很直观的.

代码

原文代码

原文地址:https://www.cnblogs.com/MTandHJ/p/14092733.html