ronghuaiyang · 2021年04月01日

使用部分卷积来推动深度图像修复的极限

首发:AI公园公众号
作者:Chu-Tak Li
编译:ronghuaiyang

AI公园

做一个生产真正有用的AI内容的公众号。

导读

使用部分卷积来做不规则孔洞的图像修复。

image.png
图1,使用部分卷积的一些修复结果

今天我要讲一篇很好的深度图像修复论文,它打破了以往修复工作的一些局限。总之,以往的论文大多假设缺失区域(s)是规则的(即一个中心缺失的矩形孔或多个小矩形孔),本文提出了一个部分卷积(PConv)层来处理不规则的孔洞。图1显示了使用建议的PConv的一些修复结果。我们一起来掌握PConv的重点吧!

动机

首先,之前的深度图像修复方法对于处理缺失的像素和有效像素相同的,它们填充固定像素值(255或1正常化之前/之后)所有丢失的像素在图像和应用标准曲线玲珑的输入图像修补的任务。这里有两个问题。

i) 将缺失像素的像素值固定为一个预先定义的值是否适合?

ii) 它是否适用于卷积输入图像,而不考虑像素的有效性?

因此,只对有效像素执行操作可能是一个不错的选择。

image.png

图2,对以往采用常规mask图像训练的深度修复方法与本文提出的局部卷积方法进行了视觉比较。

其次,现有的方法假设缺失的区域是/是规则的/矩形的。其中一些应用了局部判别器来区分生成的内容和真实的内容。对于中心缺失区域大小固定的情况,将填充好的中心缺失区域输入到局部判别器中,增强局部纹理细节。但是不规则的缺失区域呢?有可能在使用判别器的情况下获得精细的局部细节吗?如果你尝试过使用现有的方法处理不规则掩膜图像,你会发现修复结果并不令人满意,如图2所示。对于实际的修复方法,他们应该能够处理不规则的mask图像。

介绍

与我之前的文章类似,我假设读者对深度图像修复有一个基本的了解,如网络架构、损失函数(即L1和对抗性损失),以及相关术语(如有效像素、缺失像素等)。在这一节中,我将简要地介绍一下我认为不那么重要的东西,因此我们可以有更多的时间在接下来的几节中深入研究本文最重要的思想,部分卷积。

本文作者采用了一个带有跳过连接的类似U-Net的网络,其中所有的标准卷积层都被部分卷积层所取代。

有趣的是,在这项工作中没有使用判别器。除了标准L1损失和总变异损失(TV损失)外,我们还采用了两种高级特征损失来完成具有良好纹理的mask图像。我将在后面详细介绍这两个损失。

方案

正如在动机中提到的,关键思想是在卷积过程中将缺失的像素与有效像素分离,这样卷积的结果就只依赖于有效像素。这就是为什么我们提出的卷积被称为部分卷积的原因。卷积部分基于可以自动更新的二值mask图像在输入端执行。

方法

部分卷积层

我们定义W和_b_为卷积滤波器的权值和偏置。X表示被卷积的像素值(或特征激活值),M为对应的二进制掩码,表示每个像素/特征值的有效性(0表示缺失像素,1表示有效像素)。部分卷积的计算:
image.png

其中⦿表示元素的乘法,1是全1的矩阵,其形状与M相同。从这个方程可以看出,部分卷积的结果仅取决于有效的输入值(如X⦿M)。sum(1)/sum(M)是一个比例因子,当每个卷积的有效输入值的数量变化时,它可以调整结果。

在每个部分卷积层之后更新二进制掩码,提出的更新二进制掩码的规则很容易。如果当前卷积的结果有至少一个有效输入值的条件,则对应的位置对于下一个部分卷积层是有效的。

image.png
如上所述,更新规则很容易理解。

image.png
图3,提出的部分卷积的图解

图3显示了一个简单的例子来说明所提出的部分卷积。我们考虑一个简单的5×5输入及其相应的5×5二值mask图像(1为有效像素,0为缺失像素)和一个3×3 W具有固定的权重。假设我们想要保持与输入大小5×5相同的输出大小,因此我们在进行卷积之前执行零填充。让我们首先考虑左上角(黄色边界)。这个卷积的XM如图所示,有效输入值的个数为3。因此,这个位置的输出是-9+_b_。另外,更新后的二进制掩码中相应位置的值为1,因为有3个有效的输入值。

考虑到中间(紫色边界)框,正如你所看到的,这次卷积没有有效的输入值,所以结果是0+_b_,更新后的掩码值也是0。右下角(蓝色边界)的方框是另一个显示比例因子作用的卷积例子。通过比例因子,网络可以区分由3个有效输入值计算的-3和由5个有效输入值计算的-3。

供读者参考的是,图3右上角显示了经过部分卷积层后的二进制掩码的更新。你可以看到,在更新的二进制mask中有更少的零。**当我们进行越来越多的部分卷积时,二进制mask最终会更新为全1 **。这意味着我们可以控制在网络内传递的信息,而不考虑缺失区域的大小和形状。

损失函数

在它们的最终损失函数中,总共有4个损失项,分别是L1损失、感知损失、风格损失和TV损失。

L1 loss (per-pixel loss)

这个损失是为了确保像素级的重建精度。

image.png
其中I__out_和I__gt_分别为网络的输出和ground truth。_M_是二进制掩码,0表示孔洞,1表示有效像素。_N__I__gt_为图像中像素值的总数,等于_C_ * H * W_, _C_为通道大小(对于RGB图像为3),_H_和_W_为图像I *\_*gt 的高度和宽度。可以看出,__L\_hole_ 和 _L\_valid_分别是缺失像素和有效像素的L1损失。

感知损失 (VGG loss)

image.png

感知损失是由Gatys等人提出的,我们之前已经介绍过这种损失。简单地说,我们希望填充后的图像和ground truth图像具有类似的特征表示,这些特征表示是通过像VGG-16这样的预训练网络计算出来的。具体来说,我们将ground truth图像和填充后的图像提供给一个预先训练好的VGG-16来提取特征。然后,我们计算它们的所有层或几个层的特征值之间的L1距离。

上式中, I\_compI\_out 相同,不同之处是有效像素直接被ground truth像素代替。_Ψ^I^\_p_ 是在给定输入I的前提下,由一个预先训练过的VGG-16计算的第_p_层的特征映射。N\_Ψ^I^gt是 Ψ^I^\_p中元素的数量。Gatys等人认为,当完成的图像在语义上接近ground truth图像时,这种感知损失是小的。也许,这是因为更深的层次(更高的层次)提供了更多的图像语义信息,类似的高层特征表示代表了完成了更好的语义正确性。这里,使用VGG-16 _pool_1、_pool_2、_pool_3层计算感知损失。

风格损失

image.png
除了感知损失外,作者还采用了如上所示的风格损失。你可以看到,风格损失也是使用预训练的VGG-16给出的特性图计算的。这次我们首先计算每个feature map的自相关性,称为Gram矩阵。Gram矩阵包含了图像的风格信息,如纹理和颜色。这也是为什么这种损失被称为风格损失的原因。因此,我们计算完整图像的Gram矩阵与ground truth图像之间的L1距离。注意,_Ψ_^I\_p 的尺寸是(_H_\_p_×_W\_p_)×_C\_p_,Gram矩阵的尺寸为_C\_p_×_C\_p_,_K\__p_是一个归一化因子,它依赖于第_p_层特征图的空间大小。

TV 损失

最终损失函数中的最后一个损失项是TV损失。在我之前的文章中,我们已经讨论过这一损失。简单地说,采用这种损失是为了保证完成图像的平滑性。这在许多图像处理任务中也是一个常见的损失。

image.png

其中,_N_\_I\__comp_是I\__comp_中的像素的总数。

总的损失

image.png

这是所提出的模型的最终损失函数。基于100张验证图像的实验设置了用于控制每个损失项重要性的超参数。

消融研究

image.png

图4,使用不同的损失条款修复结果。(a)输入图像 (b)没有风格损失的结果 (c)使用全部损失的结果 (d)ground truth (e)输入图像 (f)使用一个小风格损失的结果 (g)使用全部损失的结果 (h)ground truth (i)输入图像 (j)不使用感知损失的结果 (k)使用全部损失的结果 (l)ground truth。

作者做了实验来展示不同损失项的影响。结果如上面的图4所示。首先,图4(b)显示了没有使用风格损失的修复结果。他们发现,在他们的模型中使用风格损失是必要的,以产生良好的局部纹理。但是,必须仔细选择风格损失的超参数。正如你在图4(f)中所看到的,与使用完整损失的结果相比,风格损失的小权重将导致一些明显的伪影(图4(g))。除了风格损失,感知损失也很重要。他们还发现,感知损失的使用可以减少网格形状的伪影。使用感知损失的效果见图4(j)和(k)。

事实上,高层特征损失的使用还没有得到充分的研究。我们不能百分之百地说感知损失或风格损失一定对图像的修复有帮助。因此,我们必须自己做实验来检查不同损失项对于我们想要的应用的有效性。

实验

image.png

图5,一些mask图像的例子。1、3、5有边界约束,2、4、6没有边界约束

在他们的实验中,所有的mask、训练和测试图像的大小都是512×512。作者将测试图像分为两组,_i)_ 带孔的靠近边缘的mask ii) 不带孔的靠近边缘的mask。所有孔与边界的距离至少为50像素的图像被分为第二组。图5显示了这两组掩码的一些例子。此外,作者还根据孔-像面积比生成了6种mask:(0.01,0.1],(0.1,0.2],(0.2,0.3],(0.3,0.4],(0.4,0.5],(0.5,0.6])。这意味着最大的mask将遮去原始图像内容的60%。

训练数据 与之前的工作类似,作者在3个公开可用的数据集上评估了他们的模型,即ImageNet、Places2和CelebA-HQ数据集。

image.png

图6,在ImageNet上比较不同方法的视觉效果。(a)输入图像(b) PatchMatch (c) GLCIC (d)上下文注意 (e) PConv (f) Ground truth

image.png
图7,不同方法在Places2上的可视化。

图6和图7分别展示了不同方法在ImageNet和Places2上的可视化。PatchMatch是最先进的传统方法。GLCIC和Contextual Attention是两种最先进的深度学习的方法我们之前介绍过的。如你所见,GLCIC (c)和上下文注意力(d)不能提供良好的视觉质量的修复结果。这可能是由于之前的两种深度学习方法是针对常规的mask图像而不是不规则的mask图像进行训练。

image.png
图8,在CelebA-HQ上不同方法的视觉比较。(a)输入图像 (b)上下文注意 (c) PConv (d) Ground truth

图8显示了CelebA-HQ数据集上的修复结果。你可以放大以便更好地查看结果。

image.png

表1,各种方法的定量比较。6列代表6种不同的mask比。N表示无边界(即孔可以靠近边界),B表示有边界(即无孔靠近边界)

表1列出了读者信息的几个客观评价指标。显然,所提出的PConv在几乎所有情况下都提供了最好的结果。注意,IScore是作为视觉质量评估的初始分数,越低的视觉质量评估越好。

除了定性和定量比较,作者还进行了人类主观研究,以评估不同方法的视觉质量。

限制

image.png

图9,当孔越来越大时,采用PConv方法进行修复的结果
image.png

图10,一些失败的例子,特别是当场景更加复杂的时候

在本文的最后,作者还指出了当前深度图像修复方法的局限性。首先,如图9右侧缺失区域较大的图像很难修复完成。其次,当图像结构复杂时,也很难完成图10所示的具有良好视觉质量的图像。目前还没有一种综合的方法来处理特大图像和复杂图像。所以,你可以尝试提出一个好的解决方案来解决这个极端的图像修复问题。

总结

显然,部分卷积是本文的主要思想。我希望我的简单的例子能够清楚地向你们解释部分卷积是如何执行的,以及在每个部分卷积层之后二进制掩码是如何更新的。通过使用部分卷积,卷积的结果只会取决于有效像素,因此我们可以控制内部的信息传递网络,这对图像修复的任务可能是有用的(至少作者提供的证据表明,在他们的情况下部分卷积是有用的)。除了图像修复,作者还尝试将部分卷积扩展到超分辨率任务,因为它与图像修复有相似之处。

要点

毫无疑问,我希望你们能理解什么是部分卷积。从本文开始,后续的深度图像修复方法可以同时处理规则和不规则mask。结合我之前关于图像修复的帖子,也希望大家能对图像修复领域有更好的了解。你应该知道一些在图像修复中常见的技术和挑战。例如,膨胀卷积,上下文注意力层等。当图像中的孔洞太大,且图像结构复杂时,也很难填充图像。

—END—

英文原文:https://towardsdatascience.co...

推荐阅读

关注图像处理,自然语言处理,机器学习等人工智能领域,请点击关注AI公园专栏
欢迎关注微信公众号
AI公园 公众号二维码.jfif
推荐阅读
关注数
8244
内容数
210
关注图像处理,NLP,机器学习等人工智能领域
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息