【计算摄影】浅析图像修复背后的核心技术

2021-08-09 15:52:43  作者:言有三

大家好,这是专栏《计算摄影》的第十篇文章,这一个专栏来自于计算机科学与摄影艺术的交叉学科。

 

                                            作者&编辑 | 言有三

今天要介绍的一个问题是计算机视觉领域中的非常经典的问题,即图像修复,介绍基于深度学习的图像修复及其背后的核心技术。

1 图像修复基础 

1.1 纹理合成

 

纹理合成即Texture Synthesis,这是一个常见的视觉问题。它的定义是给定一小块纹理样本,生成大片的外观相似的图像,比如下图1:

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图1 Texture Synthesis

 

上图1中框内的是原图,而剩下的部分完全是生成的,典型的纹理合成方法就是通过搜索已有图像相近区域的像素来一步步生成。这样的技术,可以用于对小的空洞和瑕疵进行填充与去除,如下图2:

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图2 基于Texture Synthesis的空洞填充

 

1.2 图像修复

 

图像修复即image inpainting。在摄影照片拍摄中,很多的时候我们无法控制拍摄场景,比如在景区中繁华的人流,导致难以获得背景干净的照片。另一方面,图像在保存过程中也会出现损坏,需要进行修复,比如下图3展示了一幅修复前后对比的图片。

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图3 照片修复

 

最简单的图像修复方法是基于图像自相似的原理,也就是前面说的纹理合成的方法,通过在当前图像中寻找纹理类似的匹配块进行补全,这一类方法以结构传播(structure propagation)为代表,已经可以较好地补全较小的区域。

 

比如Photoshop中的印章工具就是一个可以进行局部图像修复的工具,它背后的技术原理是PatchMatch,也是基于图像块填补的方法,可以使用交互式的策略进行逐渐修补。

 

这一类方法的问题是只考虑到了图像的相似性,没有考虑到语义信息,因此经常补全出来的图像非常不真实。比如下图猫尾巴的修复,对于较大的缺失区域也无法完成补全。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图4 Photoshop图像修复

 

2 基于深度学习的图像修复算法

传统的图像方法学习能力有限,无法很好地完成比较严重的图像块修复,当前基于深度学习模型和生成对抗网络的思想逐渐被应用于图像修复,并取得了很好的效果,本文主要介绍相关技术。

 

2.1 基本方法

 

传统的方法通常是用相似度算法从图像的其他区域选择图像块进行补全,Context Encoder[1]方法则训练了神经网络从遮挡图像的未遮挡部分来推断遮挡部分的信息,即将该过程自动化,具体的网络结构如图5所示:

 

Context Encoders包含一个Encoder,一个全连接层,一个Decoder,用于学习图像特征和生成图像待修补区域对应的预测图,输入为包括遮挡区域的原图,输出被遮挡区域的预测结果。

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图5 Context Encoders

 

Encoder的主体结构是AlexNet网络,假如输入227×227,得到特征图为6×6×256。

 

Encoder之后是逐通道全连接层,为了获取大的感受野同时又具有较小的计算量,采用了逐通道全连接的结构,它的输入大小是6×6×256,输出大小则不发生变化。当然此处也不一定要采用逐通道的全连接层结构,只需要控制特征有较大感受野。较大的感受野对于图像补全任务来说非常重要,当感受野较小时,补全区域内部点无法使用到区域外的有效信息,补全效果会受到较大的影响。

 

Decoder包含了若干个上采样卷积,输出待修补部位,具体的上采样倍率与修补部位相对于原图的大小有关。

 

网络训练的过程中损失函数都由两部分组成:

第一部分是Encoder-decoder部分的图像重建损失,使用预测部分与原图的L2距离,当然只计算需要修补的部分,所以此处需要在掩膜的控制下。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

第二部分就是GAN的对抗损失。当GAN的判别器无法判断预测图是否来自训练集时,就认为网络模型参数达到了最优状态。

 

Context Encoder模型的生成器和判别器结构都比较简单,补全的结果虽然比较真实,但是边界非常不平滑,不满足局部一致性。针对这个特点,研究者[2]联合使用了全局判别器和局部判别器对Context Encoder模型进行了改进,提出Globally and Locally Consistent Image Completion模型(简称GLCIC模型)。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图6 GLCIC模型

 

GLCIC模型包含3个模块,一个是编解码的图像补全模型,一个是全局判别器,一个是局部判别器。其中全局判别器可以用于判断整幅图重建的一致性,输出局部判别器可以用于判断填补的图像块是否具有较好的局部细节,具体的判别损失则是将全局判别器,局部判别器输出特征向量进行串接,然后经过sigmoid映射后进行真实性判别。

 

2.2 注意力机制

 

传统图像补全方法擅长从周围图像中采样,CNN模型擅长直接生成新的纹理,为了综合利用这两类方法的长处,并充分使用图片中的冗余信息,一些研究者提出了基于注意力机制的方法来进行图像补全。以文[3]为例,采用了由粗到细的两个步骤。

 

基本的流程是先粗略补全图片,再在未遮挡区域寻找与遮挡区域中相似的图片块,整体的网络结构如下:

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图7 注意力机制图像修复模型

 

基础的生成图像修复网络(coarse network)是一个编解码模型,它用于进行初始粗略预测,粗网络的训练损失为重建损失。此处重建损失作者对不同的像素,根据它与已知像素之间的距离进行了加权,距离越近,权重越小,因为重建越容易。

 

细网络(refinement network)将粗网络的预测作为输入进行精细调整,包含了两个分支。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图8 细网络

 

其中一个为注意力分支,它将卷积看成模版匹配过程,通过前景(遮挡区域)与背景(未遮挡区域)的块卷积在背景中寻找与前景的图像块相似的图像块。具体来说,就是从背景中按照3×3的大小进行采样组成一系列卷积核,然后与前景进行卷积,两者相似度越大,则卷积的结果越大,这通过普通卷积和逐通道的softmax操作实现。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图9 注意力分支

 

细网络的完整训练损失为重建损失和对抗损失。因为精细网络比缺少区域信息的原始图像拥有更完整的场景,所以它的编码器可以比粗网络学习更好的特征表示。

 

2.3 任意形状的修复

 

在使用深度学习方法进行图片补全的时候,一般将缺失的区域使用白色或者是随机噪声来填充, 再使用卷积层来提取上下文特征以及后续的补全。白色/随机噪声本来没有有效信息, 对它们与有效的信息不加区别的卷积并不合理, 这样的补全结果会出现一些不合理的图像块,并且不能对任意形状区域进行修复,比如下图10中样本的补全。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图10 不规则区域补全

 

为了解决这一副作用, Nvidia提出了Partial Convolution[4],它通过修改卷积操作来改进图片补全, 具体而言, Partial Convolution的计算公式如下:

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

式中的W是卷积核,X是一个卷积核上对应的图片内容,M是一个卷积核上的含遮挡信息的Mask矩阵, 元素只含0和1; m’就是每层更新Mask矩阵的方法,可以发现就是只对需要填充的区域进行填充。

 

后来的Gated Conv[5]在Partial Convolution的基础上进行了改进, 将Partial Conv方法的Mask更新改为从图片中进行学习, 并不再将Mask中元素的值固定为0和1,而是取自[0,1],二者的比较见下图:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图11 Partial Convolution(左)与Gated Conv(右)

 

2.4 基于边缘指导的修复

 

当一个作画者开始画一幅图时,往往先描绘出整体的边缘轮廓,然后再上色。基于这样的启发,有一类图像修复框架采取先对边缘进行修复,然后对纹理内容进行修复的思路,EdgeConnect[6]是其中的一个代表,它包含两个生成器,两个判别器用来完成上述两个步骤。

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图12 Edge Connect

 

假如输入的不需要修复的图为Igray,它的边缘检测结果为Cgt,第一个生成器的输入包括三幅图,待修复的灰度图~Igray,灰度图边缘检测结果~Cgt,以及掩膜M,输出为修复后的边缘Cpred,第一个生成器要完成的任务如下。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

生成器优化目标包括标准的对抗网络损失和一个特征匹配损失(feature matching loss),其中特征匹配损失定义如下:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

LFM的定义类似于感知损失,不过没有使用外部的VGG模型的特征,而是直接使用了判别模型D的各层激活值,因为VGG模型并不被训练用于边缘检测。

 

得到了边缘预测结果后,该边缘和彩色图像一起被送入第2个生成器,输出最终的预测结果。该生成器优化目标包括标准的对抗网络和一个感知损失,风格损失。感知损失就是我们常用的VGG特征空间的距离,风格损失就是在风格化网络中常用的Gram矩阵距离,定义如下:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

因为EdgeConnect方法需要预先计算边缘,以Canny算子为代表,不同参数会生成不同的边缘特征,从而影响修复结果,实验发现更多的边缘信息有助于进行内容修复。

 

2.5 小结

 

图像修复是一个非常底层,应用非常广泛的任务,但当前的图像修复模型还未能够得到大规模地落地使用,因为在真实场景的泛化能力非常有限,目前值得关注的重点包括但不限于:

 

(1) 生成式模型的应用与改进。

(2) 交互式信息的添加与使用。

(3) 图像修复的各类应用。

(4) 视频的修复。

 

本文参考资料:

[1] Pathak D, Krahenbuhl P, Donahue J, et al. Context encoders: Feature learning by inpainting[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 2536-2544.

[2] Iizuka S, Simo-Serra E, Ishikawa H. Globally and locally consistent image completion[J]. ACM Transactions on Graphics (ToG), 2017, 36(4): 1-14.

[3] Yu J, Lin Z, Yang J, et al. Generative image inpainting with contextual attention[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 5505-5514.

[4] Liu G, Reda F A, Shih K J, et al. Image inpainting for irregular holes using partial convolutions[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 85-100.

[5] Yu J, Lin Z, Yang J, et al. Free-form image inpainting with gated convolution[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 4471-4480.

[6] Nazeri K, Ng E, Joseph T, et al. EdgeConnect: Structure Guided Image Inpainting using Edge Prediction[C]//Proceedings of the IEEE International Conference on Computer Vision Workshops. 2019: 0-0.

更多内容细节和实践,请参考我最近出版的新书,《深度学习之摄影图像处理》,介绍如下:

 

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

总结

 

本文介绍了图像修复问题,它属于比较复杂的技术,不仅需要对图像进行高层的理解,还需要进行精细的局部编辑,当前基于深度学习的图像修复模型取得了一定进展,但是离实际应用还有一定距离,值得对视觉技术感兴趣的朋友了解学习。

有三AI秋季划-图像质量组

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

图像质量小组需要掌握与图像质量相关的内容,学习的东西包括8大方向:图像质量评价,图像构图分析,图像降噪,图像对比度增强,图像去模糊与超分辨,图像风格化,图像深度估计,图像修复。了解详细请阅读以下文章:

 

【CV秋季划】图像质量提升与编辑有哪些研究和应用,如何循序渐进地学习好?

 

转载文章请后台联系

侵权必究

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

往期精选

 

版权声明
本文为[言有三]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_14122493/3322499