📜  循环生成对抗网络(CycleGAN)

📅  最后修改于: 2022-05-13 01:58:07.709000             🧑  作者: Mango

循环生成对抗网络(CycleGAN)

CycleGAN 是由 .它用于将一幅图像的特征转移到另一幅图像或可以将图像的分布映射到另一幅图像。在 CycleGAN 中,我们将问题视为图像重建问题。我们首先获取图像输入 (x) 并使用生成器 G 转换为重建图像。然后我们使用生成器 F 将这个过程从重建图像反转为原始图像。然后我们计算真实图像和重建图像之间的均方误差损失。这个cycle_GAN最重要的特点是它可以在输入图像和输出图像之间不存在关系的未配对图像上进行这种图像翻译。

建筑学

像所有对抗网络一样,CycleGAN 也有生成器和判别器两部分,生成器的工作是从期望的分布中产生样本,而判别器的工作是找出样本是来自实际分布(真实)还是来自由生成器生成(假的)。



CycleGAN 架构与其他 GAN 的不同之处在于它包含 2 个映射函数( G 和 F )作为生成器及其相应的鉴别器(Dx 和Dy):生成器映射函数如下:

\begin{array}{l} G : X \rightarrow Y \\ F : Y \rightarrow X \end{array}

其中 X 是输入图像分布,Y 是所需的输出分布(例如梵高风格)。与这些对应的鉴别器是:

Dx :区分 G(X)(生成输出)和 Y(真实输出)

Dy :区分 F(Y)(生成逆输出)和 X(输入分布)



为了进一步规范映射,除了使用对抗性损失之外,作者还使用了另外两个损失函数。前向循环一致性损失和后向循环一致性损失。前向循环一致性损失细化循环:

x --> G(x) -->F(G(x)) \approx x

反向循环一致性损失对循环进行细化:

y--> F(y) -->G(F(y)) \approx y

生成器架构:



每个 CycleGAN 生成器包含三个部分:

  • 编码器
  • 变压器
  • 解码器

输入图像被传递到编码器。编码器通过使用卷积从输入图像中提取特征并压缩图像的表示但增加通道数。编码器由 3 个卷积组成,将表示减少了实际图像大小的 1/4。考虑我们输入到编码器的大小为 (256, 256, 3) 的图像,编码器的输出将是 (64, 64, 256)。

然后将应用激活函数后的编码器输出传递到变压器中。根据输入的大小,transformer 包含 6 或 9 个残差块。然后将transformer的输出传递到解码器,解码器使用分数步幅的2-反卷积块将表示的大小增加到原始大小。

生成器的架构是:

c7s1-64、d128、d256、R256、R256、R256、

R256、R256、R256、u128、u64、c7s1-3

其中c7s1-k表示一个7×7的卷积-InstanceNorm-RELU层具有k滤波器和步幅1. DK表示的3×3的卷积-InstanceNorm-RELU层具有k滤波器和步幅2. RK表示含有2个3残余块× 3 个卷积层,两层具有相同数量的过滤器。 uk 表示具有 k 个过滤器和步长 1/2(即反卷积操作)的 3 × 3 分数阶步长-卷积-InstanceNorm-ReLU 层。

鉴别器架构:

在鉴别器中,作者使用 PatchGAN 鉴别器。 PatchGAN 和常规 GAN 鉴别器之间的区别在于,常规 GAN 从 256×256 图像映射到单个标量输出,这表示“真实”或“假”,而 PatchGAN 从 256×256 映射到 NxN(这里是 70×70) 输出数组 X,其中每个 X ij表示图像中的补丁ij是真的还是假的。



鉴别器的架构是:

C64-C128-C256-C512

其中 Ck 是具有 k 个过滤器和步长 2 的 4×4 卷积-InstanceNorm-LeakyReLU 层。我们不在第一层 (C64) 上应用 InstanceNorm。在最后一层之后,我们应用卷积操作来产生 1×1 的输出。

成本函数:

  • Adversarial Loss:我们将对抗性损失应用于生成器和鉴别器的映射。这个对手损失写为:

Loss_{advers}\left ( G, D_y, X, Y \right ) =\frac{1}{m}\sum \left ( 1 - D_y\left ( G\left ( x \right ) \right ) \right )^{2} \,
Loss_{advers}\left ( F, D_x, Y, X \right ) =\frac{1}{m}\sum \left ( 1 - D_x\left ( F\left ( y \right ) \right ) \right )^{2}



  • Cycle Consistency Loss :给定一组随机图像,对抗网络可以将输入图像集映射到输出域中图像的随机排列,这可能会导致类似于目标分布的输出分布。因此对抗性映射不能保证输入 x i到 y i 。为了实现这一点,作者建议该过程应该是循环一致的。这个损失函数在 Cycle GAN 中用于测量逆映射 G(x) -> F(G(x)) 的错误率。该损失函数引起的行为导致真实输入 (x) 和 F(G(x)) 紧密匹配

Loss_{cyc}\left ( G, F, X, Y \right ) =\frac{1}{m}\left [ \left ( F\left ( G\left ( x_i \right ) \right )-x_i \right ) +\left ( G\left ( F\left ( y_i \right ) \right )-y_i \right ) \right ]

我们使用的成本函数是对抗性损失和循环一致损失的总和:

L\left ( G, F, D_x, D_y \right ) = L_{advers}\left (G, D_y, X, Y \right ) + L_{advers}\left (F, D_x, Y, X \right ) + \lambda L_{cycl}\left ( G, F, X, Y \right )

我们的目标是:

arg \underset{G, F}{min}\underset{D_x, D_y}{max}L\left ( G, F, D_x, D_y \right )

应用:

  • 收藏风格转移:作者使用从 Flickr 和 WikiArt 下载的风景照片训练模型。与其他关于神经风格迁移的作品不同,CycleGAN 学习模仿整个艺术品集合的风格,而不是迁移单个选定艺术品的风格。因此它可以生成不同的风格,例如:梵高、塞尚、莫奈和浮世绘。

风格迁移结果

不同风格迁移结果的比较

  • 对象转换:CycleGAN 可以将对象从一个 ImageNet 类转换为另一个类,例如:斑马到马,反之亦然,苹果到橙子,反之亦然等。
    • 苹果 <—> 橙子:

  • 季节传输:CycleGAN 还可以将图像从冬季传输到夏季,反之亦然。为此,该模型在来自 Flickr 的优胜美地的 854 张冬季照片和 1273 张夏季照片上进行了训练。



  • 从绘画中生成照片:CycleGAN 也可用于从绘画中转换照片,反之亦然。然而,为了改进这种转换,作者还引入了一个额外的损失,称为身份损失。这种损失可以定义为:

L_{identity}\left ( G, F \right ) =\mathbb{E}_{y~p\left ( y \right )}\left [ \left \| G(y)-y \right \|_1 \right ] + \mathbb{E}_{x~p\left ( x \right )}\left [ \left \| F(x)-x \right \|_1 \right ]

  • 照片增强:CycleGAN 也可用于照片增强。为此,该模型从智能手机相机(通常由于低光圈而具有深景深)到数码单反相机(具有较低景深)拍摄的两类图像中获取图像。对于此任务,模型将图像从智能手机转换为 DSLR 质量图像。

评估指标:

  • AMT 感知研究 :对于 在地图 - 航空照片任务中,作者在 Amazon Mechanical Turk (AMT) 上运行“真与假”感知研究,以评估我们输出的真实性。 .参与者被展示了一系列图像,一个是真实的照片或地图,一个是假的(由我们的算法或基线生成),并要求他们点击他们认为是真实的图像。
  • FCN 分数:对于城市景观 标签?照片数据集作者 FCN 得分。 FCN 预测生成的照片的标签图。然后可以使用标准语义分割指标将该标签图与输入的真实标签进行比较。这里是 Cityscapes 数据集中使用的标准分割指标,例如每像素精度、每类 IoU 和平均类 IoU。

结果:

  • 对于地图空中任务,AMT“real vs fake”测试结果如下:



在这项任务中,作者从谷歌地图和谷歌地球中提取数据,并在不同的 GAN 方法上进行评估,并与 Ground Truth 进行比较。

不同指标的分类性能

Cityscapes 数据集的部分结果如下

缺点和限制:

  • 当我们需要执行颜色或纹理变换时,CycleGAN 很有用,但是当应用于执行几何变换时,CycleGAN 表现不佳。这是因为生成器架构被训练来执行图像中的外观变化。

Cycle GAN 的失败案例

参考:

  • 使用循环一致对抗网络的非配对图像到图像转换