图像处理的很多问题都是将一张输入的图片转变为一张对应的输出图片,比如灰度图、梯度图、彩色图之间的转换等。通常每一种问题都使用特定的算法(如:使用CNN来解决图像转换问题时,要根据每个问题设定一个特定的loss function 来让CNN去优化,而一般的方法都是训练CNN去缩小输入跟输出的欧氏距离,但这样通常会得到比较模糊的输出)。这些方法的本质其实都是从像素到像素的映射。于是论文在GAN的基础上提出一个通用的方法:pix2pix 来解决这一类问题。通过pix2pix来完成成对的图像转换(Labels to Street Scene, Aerial to Map,Day to Night等),可以得到比较清晰的结果。
上图描述了本文中的图像到图像转换架构的一个抽象的high-level view。与许多图像合成模型类似,它使用Conditional-GAN框架。图像x被用作生成器Generator的输入和作为鉴别器Discriminator的输入。
论文对DCGAN的生成器和判别器的结构做了一些改进。
U-Net是德国Freiburg大学模式识别和图像处理组提出的一种全卷积结构。和常见的先降采样到低维度,再升采样到原始分辨率的编解码(Encoder-Decoder)结构的网络相比,U-Net的区别是加入skip-connection,对应的feature maps和decode之后的同样大小的feature maps按通道拼(concatenate)一起,用来保留不同分辨率下像素级的细节信息。U-Net对提升细节的效果非常明显,下面是文中给出的一个效果对比,可以看到不同尺度的信息都得到了很好的保留。
pix2pix中使用的PatchGAN鉴别器是该设计的另一个独特组成部分。PatchGAN / Markovian鉴别器的工作原理是将图像中的独立的patches分类为“真实与假”,而不是将整个图像分类为“真实与假”。作者认为这会强制实施更多约束,从而鼓励出现尖锐的高频细节(sharp high-frequency detail)。此外,PatchGAN具有更少的参数,并且比分类整个图像运行得更快。下图描绘了不同N大小的情况下,对N x N 大小的patches进行分类的实验结果:
pix2pix的优化目标包含2个部分,如下所示。一部分是cGAN的优化目标;另一部分是L1距离,用来约束生成图像和真实图像之间的差异,这部分借鉴了其他基于GAN做图像翻译的思想,只不过这里用L1而不是L2,目的是减少生成图像的模糊。
cGAN的优化目标如公式1所示,z表示随机噪声,判别器D的优化目标是使得公式1的值越大越好,而生成器G的优化目标是使得公式1的log(1-D(x,G(x,z))越小越好,这也就是公式4中min和max的含义。这里需要注意的是正如GAN论文提到的,公式1有时候训练容易出现饱和现象,也就是判别器D很强大,但是生成器G很弱小,导致G基本上训练不起来,因此可以将生成器G的优化目标从最小化log(1-D(x,G(x,z))修改为最大化log(D(x,G(x,z))),pix2pix算法采用修改后的优化目标。
L1距离如公式3所示,用来约束生成图像G(x, z)和真实图像y之间的差异。
Table1是关于不同损失函数的组成效果对比, 这里采用的是基于分割标签得到图像的任务。评价时候采用语义分割算法FCN对生成器得到的合成图像做语义分割得到分割图,假如合成图像足够真实,那么分割结果也会更接近真实图像的分割结果,分割结果的评价主要采用语义分割中常用的基于像素点的准确率和IOU等。
Table2是关于不同生成器的效果,主要是encoder-decoder和U-Net的对比。
Table3是关于判别器PatchGAN采用不同大小N的实验结果,其中1 ∗ 1 111∗1表示以像素点为单位判断真假,显然这样的判断缺少足够的信息,因此效果不好;286 ∗ 286 286286286∗286表示常规的以图像为单位判断真假,这是比较常规的做法,从实验来看效果也一般。中间2行是介于前两者之间的PatchGAN的效果,可以看到基于区域来判断真假效果较好。
最后放一下pix2pix的生成图像,可以基于图像边缘得到图像、基于语义分割的标签得到图像、背景去除、图像修复等。更多结果可以参考原论文,效果还是很不错的。
这篇paper作为pix2pix的改进版本,如其名字一样,主要是可以产生高分辨率的图像。具体来说,作者的贡献主要在以下两个方面:
为了生成高分辨率图像,作者主要从三个层面做了改进:
如上图,生成的流程:图片先经过一个生成器 G 2 G_2 G2的卷积层进行2倍下采样,然后使用另一个生成器 G 1 G_1 G1生成低分辨率的图,将得到的结果和刚刚下采样得到的图进行element-wise的相加,然后输出到 G 2 G_2 G2的后续网络生成高分辨率的图片。
这么做的好处是,低分辨率的生成器会学习到全局的连续性(越粗糙的尺度感受野越大,越重视全局一致性),高分辨率的生成器会学习到局部的精细特征,因此生成的图片会兼顾局部特征和全局特征的真实性。如果仅使用高分辨率的图生成的话,精细的局部特征可能比较真实,但是全局的特征就不那么真实了。
判别器使用多尺度判别器,在三个不同的尺度上进行判别并对结果取平均。判别的三个尺度为:原图,原图的1/2降采样,原图的1/4降采样(实际做法为在不同尺度的特征图上进行判别,而非对原图进行降采样)。显然,越粗糙的尺度感受野越大,越关注全局一致性。
生成器和判别器均使用多尺度结构实现高分辨率重建,思路和PGGAN类似,但实际做法差别比较大。
这里的Loss由三部分组成:
使用Feature matching loss和Content loss计算特征的loss,而不是计算生成样本和Ground truth的MSE,主要在于MSE会造成生成的图像过度平滑,缺乏细节。Feature matching loss和Content loss只保证内容一致,细节则由GAN去学习。
pix2pix采用语义分割的结果进行训练,可是语义分割结果没有对同类物体进行区分,导致多个同一类物体排列在一起的时候出现模糊,这在街景图中尤为常见。在这里,作者使用个体分割(Instance-level segmention)的结果来进行训练,因为个体分割的结果提供了同一类物体的边界信息。具体做法如下:
不同于pix2pix实现生成多样性的方法(使用Dropout),这里采用了一个非常巧妙的办法,即学习一个条件(Condition)作为条件GAN的输入,不同的输入条件就得到了不同的输出,从而实现了多样化的输出,而且还是可编辑的。具体做法如下:
这个方法总的来说非常巧妙,通过学习数据的隐变量达到控制图像颜色纹理风格信息。
pix2pix主要的贡献在于:
可以看出,这篇paper除了第三点,都是针对性的解决高分辨率图像生成的问题的。