交互式生成对抗网络(iGAN)
交互式生成对抗网络
- 0. 前言
- 1. iGAN 简介
- 2. 了解流形
- 3. 图片编辑
- 3.1 将图像投影到流形上
- 3.2 使用潜编码编辑流形
- 3.3 编辑迁移
0. 前言
在本节中,我们将研究可用于交互式生成和编辑图像的生成对抗网络 (Generative Adversarial Network, GAN) ,交互式生成对抗网络 (interactive GAN, iGAN
),iGAN
是第一个演示如何使用 GAN
进行交互式图像编辑和转换的网络。虽然生成的图像质量不如当今的网络优异,但是为将 GAN
纳入主流图像编辑奠定了基础。在本节中,将介绍 iGAN
的核心概念。
1. iGAN 简介
现在,我们已经熟悉使用诸如 pix2pix 之类的生成模型,从草图或分割蒙版生成图像。但是,由于我们大多数人都不是熟练的画家,因此我们只能绘制简单的草图,因此,生成的图像也只具有简单的形状。我们是否可以使用一个真实的图像作为输入,并使用草图来改变真实图像的外观?
在 GAN
的早期,J-Y
探讨了如何使用学习到的潜在表示来执行图像编辑和变形。交互式图像生成 (Interactive image generation
):涉及实时从草图生成图像:
交互式图像编辑 (Interactive image editing
):导入图片,然后我们使用 GAN
进行图像编辑。早期 GAN
生成的图像仅使用噪声作为输入。甚至 BicycleGAN 也只能在没有直接操纵的情况下随机改变生成图像的外观。iGAN
允许我们指定颜色和纹理的变化。
交互式图像变换 (Interactive image transformation
):给定两个图像,iGAN
可以创建图像序列,这些图像序列显示从一个图像到另一个图像的变换过程:
流形 (manifold
) 一词在论文中经常出现。它也出现在其他机器学习文献中,所以让我们花一些时间来理解它。
2. 了解流形
我们可以从自然图像的角度理解流形 (manifold
)。彩色像素可以用 8
位或 256
位数字表示。仅一个 RGB
像素就可以具有 256x256x256 = 160 万
种不同的可能组合。
但是,我们知道像素不是彼此独立的。例如,草地的像素被限制在绿色范围内。因此,图像的高维度并不像看起来那样令人生畏。换句话说,维度空间比起初我们想象的要小得多。因此,我们可以说高维图像空间是由低维流形支撑的。
流形是物理学和数学中的一个术语,用于描述光滑的几何表面。它们可以存在于任何维度。一维流形包括直线和圆。二维流形称为表面。球体是一个在任何地方都光滑的三维流形。相反,由于立方体在顶点处不平滑,因此它们不是流形。实际上,在变分自编码器,潜尺寸为 2
的潜空间是投影的 MNIST
数字的 2D
流形。下图显示了 2D
数字的潜空间:
在以下示例中,对 GAN
进行了训练,以将均匀分布的 2D
样本映射为具有圆形分布的 2D
样本:
我们可以使用流形可视化此映射,其中输入表示为统一的正方形网格。生成器将高维输入网格包装为尺寸较小的扭曲版本。图右上方显示的输出是生成器近似的流形。生成器的输出(图中右下方)是从流形采样的样本,其中具有较小网格块的区域表示较高的采样概率。
假设从随机噪声 zzz 采样的 GAN
输出 G(z)G(z)G(z) 位于平滑流形上。因此,给定流形上的两个图像 G(z0)G(z_0)G(z0) 和 G(zN)G(z_N)G(zN),通过在潜空间内插进行平滑过渡,我们可以获得具有 N+1N + 1N+1 个图像的序列 [G(z0),G(z0),...,G(zN)][G(z_0), G(z_0), ..., G(z_N)][G(z0),G(z0),...,G(zN)]。自然图像流形的这种近似用于执行逼真的图像编辑。
3. 图片编辑
现在我们知道了什么是流形,接下来,我们看看如何使用这些知识来执行图像编辑。图像编辑的第一步是将图像投影到流形上。
3.1 将图像投影到流形上
将图像投影到流形上的方法是使用预训练的 GAN
生成接近给定图像的图像。在本节中,我们可以使用预训练的 DCGAN,其中生成器的输入是 100
维潜编码。因此,我们将需要找到一个潜编码,该编码会生成一个与原始图像尽可能接近的图像流形。一种实现方法是使用优化,例如风格迁移。
- 我们首先使用预训练的卷积神经网络 (CNN) 提取原始图像的特征,例如
VGG
中block5_conv1
层的输出,并将其用作目标。 - 然后,我们使用具有冻结权重的预训练
DCGAN
生成器,并通过最小化特征之间的L2
损失来优化输入潜编码
我们知道风格迁移的优化可能会运行缓慢,因此在交互绘图时无响应。
另一种方法是训练前馈网络,以从图像中预测潜编码,这要快得多。如果 GAN
要将分割蒙版转换为图像,则可以使用诸如 U-Net
之类的网络从图像中预测分割蒙版。
使用前馈网络的流形投影看起来与使用自编码器相似。编码器从原始图像编码(预测)潜编码,然后解码器(在 GAN
的情况下为生成器)将潜编码投影到图像流形上。但是,这种方法并不总是完美的。这就是混合方法的用武之地。我们使用前馈网络预测潜编码,然后使用优化对其进行微调。下图显示了使用不同技术生成的图像:
现在我们已经获得了潜编码,接下来,使用它来编辑流形。
3.2 使用潜编码编辑流形
现在我们已经获得了潜编码 z0z_0z0 和图像流形 x0=G(z0)x_0 = G(z_0)x0=G(z0),下一步是操纵 z0z_0z0 来修改图像。现在,假设图像是红色的鞋子,我们想将颜色更改为黑色–我们该怎么做?最简单,最原始的方法是打开一个图像编辑软件,选择图片中的所有红色像素并将其更改为黑色。由于某些细节可能丢失,因此生成的图片看起来可能不太自然。传统图像编辑工具的算法在具有复杂形状和精细纹理细节的自然图像上往往效果不佳。
另一方面,我们知道我们可能会更改潜编码并将其馈送到生成器并更改颜色。但在实践中,我们不知道如何修改潜编码以获得所需的结果。
因此,我们可以直接从另一个方向解决该问题,而不是直接更改该潜编码。我们可以编辑流形,例如,通过在鞋子上绘制黑色条纹,然后使用它来优化潜在编码,然后对其进行投影以在流形上生成另一个图像。
本质上,我们正在执行针对流形投影的上述优化,但是具有不同的损失函数。我们想要找到一个最小化以下等式的图像流形 xxx:
x∗=argminx∈M{∑g∣∣fg(x)−vg∣∣2+λSS(x,x0)}x^*=\underset {x\in M} {argmin}\{\sum_g||f_g(x)-v_g||^2+\lambda_SS(x,x_0)\} x∗=x∈Margmin{g∑∣∣fg(x)−vg∣∣2+λSS(x,x0)}
让我们从流形平滑度的第二个损失项 S(x,x0)S(x, x_0)S(x,x0) 开始。它是 L2
损失,用于鼓励新流形不要偏离原始流形太多。此损失项可以控制图像的整体外观。第一个损失项是数据项,它汇总了所有编辑操作的损失。最好使用以下图像进行描述:
本示例使用彩色画笔更改鞋子的颜色。上图的第一行将画笔笔划显示为约束 vgv_gvg,将其显示为编辑操作。我们希望画笔笔划 fg(x)f_g(x)fg(x) 中的每个流形像素都尽可能接近 vgv_gvg。
换句话说,如果我们在鞋子上涂上黑色的笔触,我们希望图像流形中的该部分是黑色的,但是要执行它,我们将需要对潜编码进行优化。因此,我们将前面的方程式从像素空间重新构造为潜空间。公式如下:
x∗=argminz∈Z{∑g∣∣fg(G(z))−vg∣∣2+λS∣∣z−z0∣∣2+ED}x^*=\underset{z\in \mathbb Z}{argmin}\{\sum_g||f_g(G(z))-v_g||^2+\lambda_S||z-z_0||^2+E_D\} x∗=z∈Zargmin{g∑∣∣fg(G(z))−vg∣∣2+λS∣∣z−z0∣∣2+ED}
最后一项 ED=λDlog(1−D(G(z))E_D=\lambda_Dlog(1-D(G(z))ED=λDlog(1−D(G(z)) 是 GAN
的对抗损失。这用于使流形看起来真实,并稍微改善视觉质量。默认情况下,该项不用于提高帧速率。在定义了所有损失项之后,我们可以使用 TensorFlow
优化器 (例如 Adam
) 来运行优化。
3.3 编辑迁移
编辑迁移是图像编辑的最后一步。现在我们有了两个流形 G(z0)G(z_0)G(z0) 和 G(z1)G(z_1)G(z1),并且可以在 z0z_0z0 和 z1z_1z1 之间的潜空间中使用线性插值来生成中间图像序列。由于 DCGAN
的容量限制,生成的流形可能会显得模糊并且看起来不像我们希望的那样真实。
论文作者解决这个问题的方法是不使用流形作为最终图像,而是估计流形之间的颜色和几何变化并将这些变化应用于原始图像。颜色和运动流的估计是使用光流执行的,这是传统的计算机视觉技术。
使用前面的鞋子示例,如果我们感兴趣的只是颜色变化,我们估计流形之间像素的颜色变化,然后将颜色变化传递到原始图像中的像素上。同样,如果变换涉及变形(即形状变化),我们将测量像素的运动并将其应用于原始图像以执行变形。
综上所述,我们现在了解到,iGAN
并不是 GAN
,而是一种使用 GAN
进行图像编辑的方法。这是通过首先使用优化或前馈网络将真实图像投影到流形上来完成的。接下来,我们使用画笔笔触作为约束来修改由潜在编码生成的流形。最后,我们将插值流形的颜色和运动流转移到真实图像上以完成图像编辑。