Pix2Pix

116 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 31 天,点击查看活动详情


1. 概述

很多的图像处理问题可以转换成图像到图像(Image-to-Image)的转换,即将一个输入图像翻译成另外一个对应的图像。通常直接学习这种转换,需要事先定义好损失函数,然而对于不同的转换任务,需要设计的损失函数也不尽相同。得益于生成对抗网络GAN的提出,尤其是条件生成对抗网络cGAN[1](conditional GAN),可以直接学习这种映射关系,同时不需要人工定义该映射的损失函数,可以通过自动的学习得到。基于cGAN的基本原理,Pix2Pix[2]提出了一种图像转图像的通用框架。Pix2Pix网络不仅能够学习到从输入图像到输出图像的映射,还能学习到用于训练该映射的损失函数。

2. 算法原理

2.1. Pix2Pix的原理

与GAN,cGAN的结构一致,在Pix2Pix中包括两个部分,即生成器GG和判别器DD,对于cGAN的结构,可以由下图表示:

在这里插入图片描述

其中,z\boldsymbol{z}为随机噪音,x\boldsymbol{x}为条件变量,对于基本的cGAN,将随机噪音z\boldsymbol{z}和随机变量x\boldsymbol{x}两者concat后输入到生成器GG中,得到生成结果G(x,z)G\left ( \boldsymbol{x},\boldsymbol{z} \right );将生成的结果G(x,z)G\left ( \boldsymbol{x},\boldsymbol{z} \right )或者真实数据y\boldsymbol{y}与随机变量x\boldsymbol{x}两者concat后输入到判别器DD中,判断该输入是来自真实的,还是生成的。而Pix2Pix的结构如下图所示:

在这里插入图片描述

其中生成器GG将输入的轮廓图x\boldsymbol{x}映射成图片G(x)G\left ( \boldsymbol{x} \right ),判别器DD在轮廓图 x\boldsymbol{x}的条件下,对于生成的图片G(x)G\left ( \boldsymbol{x} \right )和真实图片y\boldsymbol{y}判断是否是真实图片。与cGAN相比,有四点不一致:

差异cGANPix2Pix
生成器GG的输入concat(z\boldsymbol{z},x\boldsymbol{x})x\boldsymbol{x}
生成器GGMLPU-Net
判别器GG的输入concat(G(x,z)G\left ( \boldsymbol{x},\boldsymbol{z} \right ),x\boldsymbol{x})concat(G(x)G\left ( \boldsymbol{x} \right ),x\boldsymbol{x})
判别器DDMLPPatchGAN

对于cGAN,其目标函数为:

LcGAN(G,D)=Ex,y[log  D(x,y)]+Ex,z[log  (1D(x,G(x,z)))]L_{cGAN}\left ( G,D \right )=\mathbb{E}_{\boldsymbol{x},\boldsymbol{y}}\left [ log\; D\left ( \boldsymbol{x},\boldsymbol{y} \right ) \right ]+\mathbb{E}_{\boldsymbol{x},\boldsymbol{z}}\left [ log\; \left ( 1-D\left ( \boldsymbol{x},G\left ( \boldsymbol{x},\boldsymbol{z} \right ) \right ) \right ) \right ]

最优的生成器GG^{\ast}为:

G=argminGmaxDLcGAN(G,D)G^{\ast}=argmin_{G}max_{D}L_{cGAN}\left ( G,D \right )

Pix2Pix在cGAN目标函数的基础上,增加了L1L_1正则:

LL1(G)=Ex,y,z[yG(x,z)1]L_{L_1}\left ( G \right )=\mathbb{E}_{\boldsymbol{x},\boldsymbol{y},\boldsymbol{z}}\left [ \left \| \boldsymbol{y}-G\left ( \boldsymbol{x},\boldsymbol{z} \right ) \right \|_1 \right ]

最终,最优的生成器GG^{\ast}为:

G=arg  minG  maxDLcGAN(G,D)+λLL1(G)G^{\ast}=arg\; \underset{G}{min}\; \underset{D}{max}L_{cGAN}\left ( G,D \right )+\lambda L_{L_1}\left ( G \right )

在Pix2Pix中,设计了专门的生成器GG和判别器DD

2.2. 生成器U-Net

在Pix2Pix中的生成器GG采用了U-Net结构,U-Net[3]是2015年提出用于处理生物医学图像分割的卷积网络,U-Net的网络结构如下图所示:

在这里插入图片描述

如上图,U-Net网络是一个对称的结构,因为形似英文字母“U”所以也被称为U-Net。在上图中,蓝色和白色的框表示的是 feature map,蓝色箭头表示的是3×33\times 3的卷积,用于特征提取,灰色箭头表示的是skip-connection,用于特征融合,红色箭头表示的是pooling,用于降低维度,绿色箭头表示的是上采样upsample,用于恢复维度,青色箭头表示的是1×11\times 1的卷积,用于输出结果。

U-Net网络是一个典型的Encoder-Decoder结构,与一般的Encoder-Decoder结构不同的是在Encoder和Decoder之间增加了skip connection。其中Encoder是由卷积操作和下采样操作组成,用于特征提取;Decoder是由卷积操作和upsampling操作组成。其与encoder-decoder架构的关系如下图所示:

在这里插入图片描述

2.3. 判别器PatchGAN

判别器PatchGAN的思路也比较直接,对比原先一个CNN模型对整个图片进行卷积和pooling的操作,在PatchGAN中,模型对每一个N×NN\times N的patch进行操作,最终将所有的patch块的结果做平均,作为最终的判别器DD的输出。

3. 总结

Pix2Pix借鉴cGAN的基本原理,并对其中的损失函数,生成器GG,判别器DD分别做了优化,从而实现了图像到图像的转换。

参考文献

[1] Mirza M, Osindero S. Conditional generative adversarial nets[J]. arXiv preprint arXiv:1411.1784, 2014.

[2] Isola, Phillip, Jun-Yan Zhu, Tinghui Zhou, and Alexei A. Efros. “Image-to-image translation with conditional adversarial networks.” In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1125-1134. 2017.

[3] Ronneberger O , Fischer P , Brox T . U-Net: Convolutional Networks for Biomedical Image Segmentation[J]. Springer International Publishing, 2015.

[4] Pix2Pix图图转换网络原理分析与pytorch实现

[5] U-Net原理分析与代码解读


开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 31 天,点击查看活动详情