《Semantic Image Inpainting with Deep Generative Models》论文阅读笔记

会议及期刊:CVPR 2017

作者及机构:

Raymond A. Yeh∗, Chen Chen∗, Teck Yian Lim,Alexander G. Schwing, Mark Hasegawa-Johnson, Minh N. Do University of Illinois at Urbana-Champaign

主要创新点及解决的问题:

本文利用了GAN网络的特点,及经过训练之后能够直接将噪声转化为图片。设计了一种利用先验误差来进行图像修复的方法。巧妙的解决了训练集中缺损图片必须有对应的ground truth的问题,可以直接生成像素级高质量的图片。且在推断过程中也很好的利用了孔洞的结构。

文章的行文结构主要如下:

1.Introduction

在Introduction中花了较多的笔墨介绍了基于传统方法的图像修复。首先作者介绍了自己这次要完成的任务,及语义修复:是针对图片上任意形状的、大的缺失区域进行修复。这与传统的图像修复问题有很大区别。我们在这里统一梳理一遍,之后就不再讲了:

  1. 经典的修复方法是通过局部或非局部信息来修复图像的,且大多数已知方法是解决单一的图像修复问题而存在的。因此他们都是通过输入图片上的已知信息以及图像的先验信息来处理问题的。

  2. 比如TV(Total Variation)
    考虑到了自然图像的平滑特性来对小范围损坏进行修复,或者去除杂散噪声。纹理图像可以找到图片中对应相似的纹理进行填补。

  3. 又如patch offsets(贴片偏移量)、planatity(平面度)、low rank(低秩)这些先验信息也能提高修复效果。

  4. PatchMatch(PM)能够在输入图片的已知区域找到相似的补丁,成为了当时最成功的图像修复方法,因为他质量好而且效率高。

  5. 但是以上这些所有的单一图片修复方法都要求了输入图像中包含了合适的信息,比如:相似的像素、结构或者补丁,但是在平时的修复任务中这种假设是很难成立的,因为实际上修复的任务往往面对的是大且随机的掩膜,所以以上这些方法pass。

  6. 根据以上的逻辑,为了解决这个大区域缺失的问题,研究人员开始在非局部方法上进行一些尝试。

  7. 有人提出在一个巨大的数据集中剪切并粘贴一个语义相似的补丁到图像的缺失区域或通过Internet检索到的补丁来替换场景中的目标区域。这些基于检索的方法都要求精确的匹配,当测试场景和数据集中的数据有很大不同时就容易出错。

  8. 接下来就迎来了我们基于学习的方法(但还没有讲到我们熟悉的那种自编码器的结构方法),在经过数据集训练之后,可以很快对目标进行修复,但是通常情况下这些基于学习的方法都是设计成修复小的孔洞或者移除图片中小的文本的。这里提到了三篇论文,分别是:

[22] S. Liu, J. Pan, and M.-H. Yang. Learning recursive filters for low-level vision via a hybrid neural network. In ECCV, 2016.

[27]J. Mairal, M. Elad, and G. Sapiro. Sparse representation for color image restoration. IEEE TIP, 2008.

[33]J. S. Ren, L. Xu, Q. Yan, and W. Sun. Shepard convolutional neural networks. In NIPS, 2015.

[38]J. Xie, L. Xu, and E. Chen. Image denoising and inpainting with deep neural networks. In NIPS, 2012.

  1. 然后介绍了基于深度学习的语义修复方法,Pathak等的ContextEncoder(CE)是一种语义修复的开创性方法,最接近我们的工作。给定表示缺失区域的掩码,训练神经网络对上下文信息进行编码并预测缺失内容。然而,CE只在训练过程中利用了孔洞的结构,但是在推断过程中没有利用好它的结构。因此这将导致模糊或不现实的图像,尤其是在缺失区域具有任意形状时。这里第一次和CE进行对比,突出CE的劣势。
  2. 接下来开始介绍自己的方法的大致思路,然后就是突出自己相比CE的优势:在训练阶段不需要掩膜就可以训练,在推断阶段可以对任意掩膜进行修复。

这里提到数据集:Celeba、SVHN、Stanford Car

2.Related Work

提到了三点:GANs、Autoencoder、输入数据的反向传播

3.基于约束图像生成的语义修复

这里提到,对于生成器和判决器的训练都是采用为破损图像来进行的。训练好之后再将破损图像修输入到网络里边。这个被称为推断过程,推断过程的主要作用就是产生一个encoding manifold,让其通过生成器之后能够不断接近损坏的图片。这里他采用了两个损失,一个是先验损失,一个是上下文损失。最后提到需不需要将y丢进判决器来提升网络的生成效果。答案是不需要,因为y是破损图像,它的数据分布既不来源于Pz也不来源于Pdata,输入进去只会让效果更差。
稍微提一下,这里涉及一个掩膜的生成,掩膜和图片大小是一样的,但是破损区域是0,而为破损区域为1.
文章的网络结构如下:
《Semantic Image Inpainting with Deep Generative Models》论文阅读笔记_第1张图片
上下文损失就是将修复之后的图片和输入图片的为破损区域进行比较,并采用L1范数(这里是通过作者实验对比之后的结果,L1的效果比L2要好)。这里文中在这里有一个技巧,它假设了一种中间位置缺失的情况,影响整体损失的很大一部分因素将会来自于图片外围的一些像素,比如背景这些不重要的东西。但真正重要的是靠近孔洞缺失区域的这些像素。所以我们可以假设像素的重要性是和周围破损区域的大小或者说破损像素的数量成正相关的,由此我们可以设计一种权重用来完成我们这种假设。所以就有以下的权重公式:
《Semantic Image Inpainting with Deep Generative Models》论文阅读笔记_第2张图片
你想一想,|N(i)|=7,Mj是受损像素的时候就为0,这个时候1-Mj=1,所以周围受损像素越多,其权重就越大。最后的上下文损失的公式如下:
在这里插入图片描述
先验损失这里之所以叫先验损失,而不是叫对抗损失,是因为这个时候判决器就被固定住了,固定住之后,我们就只会通过更新生成器的参数来让样本更加真实,因为这个时候判决器本省就从数据集中学习到了Pdata,所以这里所谓的“更加真实”就是让生成的图像更加接近它从数据集中学习到的数据。它的公式为:
在这里插入图片描述
最终我们可以将整个模型看做是一个优化问题:
在这里插入图片描述
仿真细节
这里提到了他这个网络可以采用任意的GAN网络来进行仿真,在这篇文章中他用的是DCGAN而已,训练DCGAN的时候采用的Adam优化器进行。仿真还用了随机水平翻转来进行数据增强,接下来说了推断时候的迭代次数为1500次,文中lamda设置的是0.003。在训练过程中始终保证z在[-1, 1]的范围内,也是采用Adam优化器来进行的。

5.实验

1.不同的数据集和不同的掩膜

*celebA:一共有202559张人脸图片,选取2000张用来做测试,将图片全部采用center crop裁剪为6464的图片。
*SVHN:有99289张RGB图片数字图像。直接采用它提供的数据集来进行训练与测试,也是resize为6464来适应DCGAN的输入。
*The Stanford Cars:有16185张汽车的图片,根据提供的边框进行crop,直到大小为6464
测试的四种掩膜分别为:
1)中央掩膜
2)随机模式掩膜:25%面积的缺失
3)80%缺失的随机掩膜
4)一般缺失(随机选择水平或者垂直)
这里个人觉得要考虑到的一个变量是边缘缺失。

2.视觉比较
与全变分修复和低秩修复的比较(这是和局部修复方法的比较),他这个固定了掩膜类型,即80%缺失的随机掩膜,修复效果是TV、LR都不行,PM方法由于现有的补丁不够(缺失的区域过大)无法使用。
与最近邻域的修复(NN)(这是和基于检索的修复方法进行比较),基于检索的方法都具有继承失调的问题。
与CE(context encoder)的比较为了公平起见,文章为CE使用了所有四种类型的掩膜,CE的缺点在于每更换一种掩膜就可能需要重新训练,而本片文章不需要。这在考虑图像修复应用的时候是一个很好的优势。接下来在修复效果方面直接引用文中的话:

不考虑一些小的伪像,CE在修复中心缺失的时候表现结果最好。这是因为在这种情况下,孔总是固定在训练和测试期间,并且CE可以容易地学习以从上下文中填充孔。然而,随机缺失数据对于CE学习的难度要大得多。此外,CE不使用掩码进行推理,而是用平均颜色预填充空洞。它可能会错误地将一些颜色相似的未损坏像素视为未知。我们可以观察到,当孔洞处于随机位置时,CE具有更多的伪影和模糊的结果。在许多情况下,我们的结果与真实图像一样逼真。

3.定量比较
在这里作者指出语义修复并不是用来恢复ground_truth的,它的目标是在空洞区域填充一些真实的内容。groud_truth可能也是许多种修复结果中的一种可能。但是在很多经典修复方法中PSNR也会被拿来当做图像修复质量的定量指标。所以比较了CE和本文的PSNR值:
除随机掩码外,CE在大多数情况下具有较高的PSNR值,因为它们被训练以最小化均方误差。用SSIM[36]代替PSNR得到了类似的结果。这些结果与前面提到的视觉比较相冲突。
然后作者对这种情况进行了一个调查:通过调查生成图像和原始图像之间的误差来进行一个判断,从图上看,我们的结果看上去是无伪影的,非常逼真,而从CE得到的结果在重建区域中有可见的伪影。然而,CE的PSNR值比我们的高1.73dB。误差图像表明,我们的结果在头发区域有很大的误差,因为我们产生了与真实图像不同的发型。定量结果并不能很好地反映出不同方法的真实性能时,地面真相并不是唯一的。类似的观测可以在最近的超分辨率作品[14,19]中找到,其中更好的视觉结果对应于较低的PSNR值。
作者单独提到,在进行80%的随机缺失修复的时候视觉效果差异很大,但是PSNR两种方法都很高,因为这个时候缺损像素分布在整个图片上,这个时候PSNR更有意义,也与经典的修复作品中所考虑的PSNR更为相似。

[14]J. Johnson, A. Alahi, and L. Fei-Fei. Perceptual losses for
real-time style transfer and super-resolution. In ECCV, 2016.
[19]C.Ledig, L. Theis, F. Huszar, J. Caballero, A. Aitken, A. Te- ´jani, J.
Totz, Z. Wang, and W. Shi. Photo-realistic single image super-resolution using a generative adversarial network. arXiv preprint arXiv:1609.04802, 2016.

缺点

过于依赖之前训练好的生成网络,只能在单一的数据集上收敛,只能修复相对简单的结构。但是比较方便的一点是可以直接对生成网络进行更改来让文章有更好的效果。

你可能感兴趣的:(深度学习及Python相关知识)