pix2pix、CycleGAN
pix2pix
论文主页 Image-to-Image Translation with Conditional Adversarial Networks
简介
pix2pix算法是解决对于图像域转换翻译问题的奠基地位的一个算法。其中有很多方面的应用(开篇的链接中已经展示实例)
理论基础
pix2pix算法实际上是在条件对抗网络(cGAN)上完善的,输入是一组图像对,如下图
转化域 $\boldsymbol X$ 、被转化域 $\boldsymbol Y$ : $\boldsymbol x \in \boldsymbol X,\boldsymbol y \in \boldsymbol Y$ , 完成转换 $\boldsymbol X \rightarrow \boldsymbol Y$
生成器G : 根据输入的 $\boldsymbol x$ 生成虚假的图片 $G(\boldsymbol x)$
- 判别器D : 判别$G(\boldsymbol x)$和$\boldsymbol y$的真假
生成器
我们的生成器的构架使用了U-net的
如上图,左图是一般的图像的信息提取模型,即编码器-解码器的构架,pix2pix算法使用的是一个变种的编码器-解码器,即U-Net。 具体地说,我们在每个层i和层n-i之间添加跳过连接,其中n是层的总数。 每个跳过连接只是将第i层的所有信道与第n-i层的信道连接起来。
判别器
判别器使用的是PatchGAN,事实上这个算法是根据局部识别来进行判别是否为真实的数据(将图片分成 $n \times n$ 份的小Patch作为输入),将所有的判别器的输出求其平均作为D的最终输出。
目标函数
目标函数可以沿用cGAN的目标函数
$\begin{aligned}
\mathcal{L}{c G A N}(G, D)=& \mathbb{E}{x, y}[\log D(x, y)]+\mathbb{E}_{x, z}[\log (1-D(x, G(x, z))]
\end{aligned}$
不过这里论文中多加了一个L1范式作为强制降低低频部分的正确率,最终我们可以得到目标函数
CycleGAN
论文主页 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
简介
CycleGAN是基于pix2pix的一个算法,解决了pix2pix数据集必须成对限制,降低了对数据集的要求;解决的问题依旧是图像风格转化已经视觉风格转化的问题。下图是文中的Cycle示例。
理论基础
CycleGAN依然是解决图像转化的问题,其中这里不在需要成对的元数据来限制生成的图片,我们只需要两种不同风格的数据集(不需要成对匹配)即可。根据原始GAN的模型框架,在反方向叠加一个GAN构成CycleGAN如下图结构:
我们只需要训练两个GAN模型如上图(中、右两部分)($\hat x$、$\hat y$为生成器生成的数据)
- 生成器$G$:$\hat y = G(x),x\in X$ ,表示讲$X$域的图像转到$Y$域的生成器;$ \hat y = G(\hat x)=G(F(y)),y \in Y$ 表示可以将 $F$ 生成的图片转换成生成前的图片
- 生成器$F$: $\hat x = F(\hat y) = F(G(x)),x \in X$ 表示可以将 $G$ 生成的图片转换成生成前的图片;$F(y) = \hat x,y \in Y$,表示讲$Y$域的图像转到$X$域的生成器
- 判别器$D_Y$:识别 $\hat y$ 是不是真实的$Y$域的图片
- 判别器$D_X$:识别$\hat x$ 是不是真实的$X$域的图片
那么cycleGAN是如何控制好对于输入图片与输出图片的内容对应?上图中的有一个loss值为cycle-consistency loss
,代表我们需要让上图中的$x$和$\hat x$ 以及 $y$和 $\hat y$ 的距离要尽可能小即最小化cycle-consistency loss
这个值
生成器和判别器的模型结构我们可以模仿pix2pix的模型结构,在需要改变的地方微调模型即可,这里不再赘述
目标函数
生成对抗损失
- $G: X \rightarrow Y $ 的部分
$\begin{aligned} \mathcal{L}{\mathrm{GAN}}\left(G, D_Y, X, Y\right) &=\mathbb{E}{y \sim p{\text {data }}(y)}\left[\log D_Y(y)\right]+\mathbb{E}{x \sim p_{\text {data }}(x)}\left[\log \left(1-D_Y(G(x))\right]\right.\end{aligned}$
$F:Y \rightarrow X$ 的部分
$\begin{aligned} \mathcal{L}{\mathrm{GAN}}\left(F, D_X, Y, X\right) &=\mathbb{E}{x \sim p{\text {data }}(x)}\left[\log D_X(x)\right]+\mathbb{E}{y \sim p_{\text {data }}(y)}\left[\log \left(1-D_X(F(y))\right]\right.\end{aligned}$
循环一致损失
$\begin{aligned} \mathcal{L}{\text {cyc }}(G, F) &=\mathbb{E}{x \sim p{\text {data }}(x)}\left[|F(G(x))-x|_1\right]+\mathbb{E}{y \sim p_{\text {data }}(y)}\left[|G(F(y))-y|_1\right] \end{aligned}$
算法对比
pix2pix | CycleGAN | |
---|---|---|
数据要求 | 成对组型数据 | 不用成对 |
目标函数 | ||
模型结构 | ||
方向 | 只能同时训练一个方向转换的模型 | 同时得到两个互转的模型 |