基于风格的对抗生成网络
基于风格的对抗生成网络
- 0. 前言
- 1. MUNIT 原理
- 2. MUNIT 架构
- 3. 自编码器设计
- 4. 图像转换结果
0. 前言
风格迁移的创新影响了生成对抗网络 (Generative Adversarial Network, GAN) 的发展。尽管 GAN
可以生成逼真的图像,但是它们多是通过使用随机潜变量生成的,我们对它们表示的内容知之甚少。即使多模式 GAN
可能会在生成的图像中产生变化,但我们仍不知道如何控制潜变量来实现所需的结果。
我们希望可以独立控制我们想要生成的特征,这称为解耦表示 (disentangled representation
),解耦表示的想法是将图像分离为独立的表示。例如,一张脸有两只眼睛,鼻子和嘴巴。正如我们从风格迁移中学到的,图像可以分解为内容和风格。因此研究人员将该想法引入了 GAN
中。
接下来,我们将介绍基于风格的 GAN
,多模式无监督图像到图像转换 (Multimodal Unsupervised Image-to-Image Translation
, MUNIT
),详细探讨整个体系结构以了解在这些模型中如何使用风格。
1. MUNIT 原理
MUNIT
是类似于 BicycleGAN 的图像到图像转换模型。两者都可以生成具有连续分布的多模式图像,但是 BicycleGAN
需要具有成对的数据,而 MUNIT
则不需要。BicycleGAN
通过使用两个将目标图像与潜变量相关联的模型来生成多模式图像。但我们并不清楚这些模型如何工作,也不清楚如何控制潜变量以修改输出。MUNIT
的方法在概念上有很多不同,但也很容易理解,其假定源图像和目标图像共享相同的内容空间,但是具有不同的风格。
下图显示了 MUNIT
背后的原理:
假设我们有两个图像,X1X_1X1 和 X2X_2X2。它们中的每一个都可以分别表示为内容编码和风格编码对 (C1,S1)(C_1, S_1)(C1,S1) 和 (C2,S2)(C_2, S_2)(C2,S2)。假定 C1C_1C1 和 C2C_2C2 都位于共享的内容空间 CCC 中。换句话说,内容可能不完全相同,但相似。风格位于它们各自的特定于域的风格空间中。因此,可以将来自 X1X_1X1 和 X2X_2X2 的图像转换为使用来自 X1X_1X1 的内容编码和来自 X2X_2X2 的风格编码,或者换句话说,根据编码 (C1,S2)(C_1, S_2)(C1,S2) 生成图像。
在风格迁移中,我们将风格视为具有不同笔触,颜色和纹理的艺术风格。现在,我们将风格的含义扩展到了艺术绘画之外。例如,老虎和狮子都是猫科,它们具有不同风格的胡须,皮肤,毛皮和形状。接下来,让我们看一下 MUNIT
模型架构。
2. MUNIT 架构
下图显示了 MUNIT
体系结构:
有两个自编码器,每个域中一个。自编码器将图像编码为其风格和内容代码,然后解码器将其解码回原始图像。这是使用对抗损失训练的,换句话说,模型由自编码器组成,但像 GAN
一样训练。
在上图中,图像重建过程显示在左侧,右边是跨域翻译。如前所述,要从 X1X_1X1 转换为 X2X_2X2,我们首先将图像编码为它们各自的内容和风格代码,然后执行以下操作:
- 我们使用 (C1,S2)(C_1, S_2)(C1,S2) 在风格域
2
中生成伪造图像。这也是使用GAN
进行训练的 - 我们将生成图像编码为内容和风格编码。如果翻译效果很好,则应类似于 (C1,S2)(C_1, S_2)(C1,S2)
这类似于 CycleGAN 的循环一致性约束,但是这里的循环一致性不应用于图像,而是应用于内容和风格编码。
3. 自编码器设计
最后,让我们看一下自编码器的详细架构,如下图所示:
与其他风格迁移模型不同,MUNIT
不使用 VGG
作为编码器。它使用两个单独的编码器,一个用于内容,另一个用于风格。内容编码器由几个残差块组成,具有实例标准化和下采样功能。这与 VGG
的风格功能非常相似。
风格编码器与内容编码器在两个方面有所不同:
- 首先,没有归一化,将激活归一化为零意味着删除风格信息
- 其次,将残差块替换为全连接层。这是因为风格被视为空间不变的,因此我们不需要卷积层即可提供空间信息
也就是说,风格编码仅包含有关眼睛颜色的信息,而无需知道眼睛在哪里,因为这是内容编码的责任。风格编码是低维向量,通常大小为 8
,这与 GAN
和变分自编码器 (Variational Autoencoder, VAE)中的高维潜编码不同,并且在风格迁移中具有风格特征。风格编码尺寸较小的原因是,使我们可以使用较少的特征来控制风格,更易于管理。下图显示了内容和风格编码如何输入解码器:
解码器中的生成器由一组残差块组成。仅第一组中的残差块将自适应实例归一化 (adaptive instance normalization
, AdaIN
) 用作归一化层。AdaIN
方程如下,其中 zzz 是来自前一个卷积层的激活:
AdaIN(z,γ,β)=γ(z−μ(z)σ(z))+βAdaIN(z,\gamma,\beta)=\gamma(\frac{z-\mu(z)}{\sigma(z)})+\beta AdaIN(z,γ,β)=γ(σ(z)z−μ(z))+β
在前馈神经风格传递中,我们使用来自单个风格层的均值和标准差作为 AdaIN
中的 γγγ 和 βββ 。在 MUNIT
中,使用多层感知器从风格编码生成 γγγ 和 βββ。
4. 图像转换结果
以下屏幕截图显示了 MUNIT
的一对多图像翻译示例。我们可以使用不同的风格编码生成各种输出图像: