专注Python、AI、大数据,

照片,在大家生活中扮演者非常重要的角色。

难忘的瞬间、美好的风景、珍贵的回忆,我们总喜欢用照片把它保留下来。

但是,瑕疵、水印、遮挡、涂鸦这些让美好蒙上了一层阴影。

当我们在网络上看到一张喜欢的照片,想要拿来做头像或者电脑手机壁纸,发现在某些地方存在一些瑕疵,最后只能作罢。

针对这类问题,相关工具可谓是层出不穷。

但是,目前市面上绝大多数工具都只用了简单的数字图像处理技术,在处理效果方面不堪入目。

如果选择应用Photoshop,这对于很多人来说又存在着很高的门槛。

这几年AI技术得到越来越普遍的应用,何不利用这些开源免费的项目来实现图像修复呢?




图像重建pytorch代码 python图像修复代码_图像重建pytorch代码


图像修补就是填充图像中缺少的像素,以使得图像看起来逼真并符合上下文信息。


图像重建pytorch代码 python图像修复代码_ci_02


给定上面左图所示的有损坏、遮罩的输入图像。对于有效、真实像素,我们可以直接复制有效像素并将其粘贴到填充图像的相应位置。对于无效/缺失的像素,可以通过算法去填充。

要在图像中填充一些缺失的部分,最简单的方法是复制并粘贴。核心思想是,首先从图像本身的剩余像素或包含数百万个图像的大型数据集中搜索最相似的图像补丁,然后将补丁直接粘贴到缺失的部分上。但是,搜索算法可能很耗时,并且涉及手工制作的距离测量指标。它的泛化和效率仍有很大的改进空间。

由于基于深度学习的方法和大数据时代的到来,我们现在可以拥有基于数据驱动的基于深度学习的图像修复方法,该方法可以在图像中生成具有良好全局一致性和局部精细纹理的缺失像素。在本文中,我们将重点介绍10种著名的基于深度学习的修复方法。

下面,就让我们开始吧!

Context Encoder (2016)


图像重建pytorch代码 python图像修复代码_图像重建pytorch代码_03


Context Encoder[1] (CE, 2016) 是第一篇将GAN应用于图像修复的文章。

本文为图像修复任务提出了一些有用的基本概念。术语“上下文”涉及对整个图像本身的理解,CE的核心思想是Channel-wise Fully Connected Layer(网络中的中间层,如上图所示)。

类似于标准的全连接层,它的要点是,上一层的所有要素位置将对当前层的每个要素位置有所贡献。通过这样做,网络可以学习所有特征位置之间的关系,并且可以获得对整个图像的更深层的语义理解。

CE目前已被视为基准算法。

MSNPS (2016)


图像重建pytorch代码 python图像修复代码_python2.7图像局部增强_04


Multi-Scale Neural Patch Synthesis[2] (MSNPS, 2016)可以看作是CE的增强版本。

本文的作者采用了一种改进的CE来预测图像中的缺失部分,并使用纹理网络修饰了有关缺失部分的预测,从而提高了填充图像的视觉质量。

该算法的思想来自样式转化相关的任务,它希望将最相似的有效像素的样式转换为生成的像素,以增强局部纹理细节。

本文提出的算法是由粗到细的两阶段网络结构的早期版本。第一个网络(即此处的CE)负责缺失部分的重建/预测,而第二个网络(即此处的纹理网络)负责填充部分的细化。

除了典型的逐像素重建损失(即L1损失)和标准对抗损失外,本文提出的纹理损失概念在后来的修复论文中也起着重要作用。

GLCIC ( 2017)


图像重建pytorch代码 python图像修复代码_卷积_05


Globally and Locally Consistent Image Completion[3] (GLCIC, 2017) 是深度图像修复的一个里程碑,实际上,它也是深层图像修复的典型网络结构。

通过使用膨胀卷积,网络无需使用完全连接层即可理解图像的上下文,因此它可以处理不同大小的图像。

除了具有扩张卷积的完全卷积网络之外,还与生成器网络一起训练了两个尺度的两个鉴别器。

全局鉴别器查看整个图像,而局部鉴别器查看填充的中心孔。使用全局和局部,填充图像将具有更好的全局和局部一致性。

Patch-based Image Inpainting with GANs (2018)


图像重建pytorch代码 python图像修复代码_ci_06


Patch-based Image Inpainting with GANs[4]可被视为GLCIC的一种变体。

简单地说,GLCIC中嵌入了两个高级概念,即残差学习和PatchGAN,以进一步提高其修复效果。

本文的作者将残差连接和膨胀卷积结合起来,形成膨胀残差块。传统的GAN鉴别器也被PatchGAN鉴别器取代,以实现更好的局部纹理细节和全局结构一致性。

传统GAN鉴别器和PatchGAN鉴别器之间的核心区别在于,传统GAN鉴别器仅给出单个预测标签(从0到1)以指示输入的真实性,而PatchGAN鉴别器给出预测标签的矩阵,用于指示输入的每个局部区域的真实性。

Shift-Net (2018)


图像重建pytorch代码 python图像修复代码_python2.7图像局部增强_07


Shift-Net[5]既利用了数据驱动的CNN的优势,又利用了以深度特征重排为基础“Copy-and-Paste”方法的优势。

本文有两个主要思想:

首先,作者提出了引导损失,该损失会使得缺失部分的解码特征(给定蒙版图像)接近缺失部分的编码特征(给定条件良好的图像)。结果,解码过程能够能够很准确的预测缺失部分,对缺失部分进行填充。

其次,所提出的shift-connected连接层,通过移位操作,网络可以有效借用缺失部分外最近的邻居给出的信息,来完善生成部分的全局语义结构和局部纹理细节。简单来说,它就是提供合适的参照物来完善估计。

DeepFill v1 (2018)


图像重建pytorch代码 python图像修复代码_图像重建pytorch代码_08


Generative Image Inpainting with Contextual Attention[6] (CA, 2018)可被视为Shift-Net的增强版本或变体。

作者进一步提出了复制粘贴的想法,并提出了一个可区分和完全卷积的上下文注意力层。

类似于Shift-Net中的移位连接层,通过匹配缺失区域内的生成特征和缺失区域外的特征,可以知道缺失区域外的所有特征对缺失区域内每个位置的贡献。因此,可以将外部所有特征的组合用于细化缺失区域内部的生成特征。与仅查找最相似特征的连接层(相比,本文的CA层采用软分配(可微分),其中所有特征都有自己的权重来指示他们对缺失区域内每个位置的贡献。

GMCNN (2018)


图像重建pytorch代码 python图像修复代码_python2.7图像局部增强_09


Generative Multi-column Convolutional Neural Networks[7] (GMCNN, 2018)增强了接受场(receptive fields)对于图像内画的重要性,并提出了新的损失函数来进一步增强生成内容的局部纹理细节。

如图上图所示,有三个分支/列,在每个分支处使用三种不同大小的滤波器。之所以使用多个接受场(滤波器大小),是因为接受场的大小对图像内画任务很重要。由于局部相邻像素的缺失,我们必须借用远处空间位置给出的信息来填补局部缺失的像素。

对于所提出的损失函数,隐式多样化马尔科夫随机场(Implicit Diversified Markov Random Field,ID-MRF)损失的主要思想是引导生成的特征斑点在缺失区域外找到其最近的邻居作为参照物,这些最近的邻居有足够多样化,从而可以模拟出更多的局部纹理细节。

PartialConv (2018)


图像重建pytorch代码 python图像修复代码_python2.7图像局部增强_10


Image Inpainting for Irregular Holes using Partial Convolutions[8] (PartialConv or PConv)通过提出一种处理带有多个不规则区域的蒙版图像的方法,突破了深层图像修补的限制。

显然,本文的核心思想是Partial Convolution。

通过使用PConv,卷积的结果将仅取决于有效像素,因此我们可以控制在网络内部传递的信息。

这是针对处理不规则区域的第一篇文章。

请注意,以前的修复模型是在规则的蒙版图像上训练的,因此,这些模型不适合完成不规则的蒙版图像。

EdgeConnect (2019)


图像重建pytorch代码 python图像修复代码_卷积_11


EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning[9] (EdgeConnect) 提供了一种有趣的方法来完成图像修复任务。

本文的主要思想是将任务分为两个简单的步骤,即边缘预测和基于预测边缘图的图像修复。

他们首先预测缺失区域中的边缘,然后根据预测的边缘信息修复图像。

DeepFill v2 (2019)


图像重建pytorch代码 python图像修复代码_卷积_12


Free-Form Image Inpainting with Gated Convolution[10] (DeepFill v2 or GConv, 2019)可能是最实用的图像修复算法,可以直接在你的应用程序中使用。

这可以视为DeepFill v1,Partial Convolution和EdgeConnect的增强版本。

本文的主要思想是门控卷积(Gated Convolution),它是部分卷积的可学习版本。通过添加一个额外的标准卷积层,然后加上一个sigmoid函数,可以学习每个像素/特征位置的有效性,因此也允许使用可选的用户草图输入。

除了门控卷积,还采用了SN-PatchGAN来进一步稳定GAN模型的训练。

结语

希望大家现在对图像修复有一个基本的了解,也希望对你踏入这条道路上有所帮助。

我认为,对于图像修复,仍然难以完成具有复杂场景结构和大遮罩比例(例如,丢失了50%的像素)的图像。

当然,高分辨率图像修复也是另一项艰巨的任务。

我相信,这些方向都是非常有趣,且值得关注的。


[1]

Context Encoder: https://medium.com/analytics-vidhya/introduction-to-generative-models-for-image-inpainting-and-review-context-encoders-13e48df30244

[2]

Multi-Scale Neural Patch Synthesis: https://medium.com/analytics-vidhya/review-high-resolution-image-inpainting-using-multi-scale-neural-patch-synthesis-4bbda21aa5bc

[3]

Globally and Locally Consistent Image Completion: https://towardsdatascience.com/a-milestone-in-deep-image-inpainting-review-globally-and-locally-consistent-image-completion-505413c300df

[4]

Patch-based Image Inpainting with GANs: https://towardsdatascience.com/revision-for-deep-image-inpainting-and-review-patch-based-image-inpainting-with-generative-4197d29c5468

[5]

Shift-Net: https://towardsdatascience.com/how-copy-and-paste-is-embedded-in-cnns-for-image-inpainting-review-shift-net-image-433a2a93c963

[6]

Generative Image Inpainting with Contextual Attention: https://towardsdatascience.com/a-breakthrough-in-deep-image-inpainting-review-generative-image-inpainting-with-contextual-1099c195f3f0

[7]

Generative Multi-column Convolutional Neural Networks: https://towardsdatascience.com/what-if-multiple-receptive-fields-are-used-for-image-inpainting-ea44003ea7e9

[8]

Image Inpainting for Irregular Holes using Partial Convolutions: https://towardsdatascience.com/pushing-the-limits-of-deep-image-inpainting-using-partial-convolutions-ed5520775ab4

[9]

EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning: https://towardsdatascience.com/lines-first-color-next-an-inspirational-deep-image-inpainting-approach-b2d980efb364

[10]

Free-Form Image Inpainting with Gated Convolution: https://towardsdatascience.com/a-practical-generative-deep-image-inpainting-approach-1c99fef68bd7