gan5
Image Inpainting for Irregular Holes Using Partial Convolutions 翻译
利用部分卷积对不规则孔进行图像修复
(google翻译,有些许不准确的地方,可评论指出)
摘要
现有的基于深度学习的图像修补方法在损坏的图像上使用标准卷积网络,使用卷积滤波器响应以有效像素以及掩蔽孔中的替代值(通常为平均值)为条件。 这通常会导致诸如颜色差异和模糊等伪影。 后处理通常用于减少这些工件,但代价很高,可能会失败。 我们提出使用部分卷积,其中卷积被掩蔽并重新规格化以仅以有效像素为条件。 我们还包含一个机制,可以为下一层自动生成更新的掩膜,作为正向传递的一部分。 我们的模型胜过其他不规则掩膜的方法。 我们展示定性和定量比较与其他方法来验证我们的方法
![](https://pic2.zhimg.com/80/v2-cd4fc2d7d0e1e713db8cf98f461bff6d_hd.jpg)
图2. 从左到右,从上到下:2(a):带孔的图像。 2(b):PatchMatch [3]的修复结果。 2(c):Iizuka等人的修改结果[1]。 2(d):余等人[2]。 2(e)和2(f)使用与3.2节相同的网络架构,但使用典型的卷积网络,2(e)使用像素值127.5初始化空洞。 2(f)使用平均ImageNet像素值。 2(g):我们基于部分卷积的结果与孔值无关。
1 说明
图像修补是填充图像中孔的任务,可用于许多应用程序。 例如,它可用于图像编辑以去除不需要的图像内容,同时用合理的图像填充结果空间。 以前的深度学习方法主要集中在位于图像中心附近的矩形区域,并且通常依赖于昂贵的后期处理。 这项工作的目标是提出一种图像修复模型,该模型可以在不规则孔洞模式下稳健运行(见图1),并产生语义上有意义的预测结果,与图像的其余部分平滑结合,无需任何额外的后处理 或混合操作。
最近不使用深度学习的图像修复方法使用剩余图像的图像统计信息来填充孔。 PatchMatch [3]是最先进的方法之一,它迭代地搜索最佳拟合补丁以填补漏洞。虽然这种方法通常会产生平滑的结果,但它受可用图像统计量的限制,并没有视觉语义学的概念。例如,在图2(b)中,PatchMatch能够使用来自周围阴影和墙壁的图像补丁平滑地填充绘画中缺失的组件,但语义感知方法将使用绘画中的补丁代替。深度神经网络以端到端的方式学习语义先验和有意义的隐藏表示,已经用于最近的图像修复工作。这些网络在图像上使用卷积滤波器,用固定值替换已删除的内容。结果,这些方法受到依赖于初始孔值的影响,其通常表现为孔区域缺乏纹理,明显的颜色对比或围绕孔的人造边缘响应。在图2(e)和2(f)中可以看到使用具有各种孔值初始化的典型卷积层的U-Net架构的例子。 (对于这两者,训练和测试共享相同的初始化计划)。
调整孔值的输出最终导致各种类型的视觉伪影,这需要昂贵的后处理。例如,Iizuka等人[1]使用快速前进[4]和泊松图像混合[5],而余等。 [2]采用后续改进网络来改进其原始网络预测。然而,这些细化并不能解决所有显示为2(c)和2(d)的工件。我们的工作旨在实现与空洞初始化值无关并且没有任何额外的后处理的良好合并孔预测。
许多最近的方法的另一个局限性是关注矩形孔,通常被认为是图像中心。我们发现这些限制可能会导致过度配合矩形孔,并最终限制这些模型在实际应用中的效用。 Pathak等人[6]和杨等人。 [7]假设128×128图像中心有64×64的方孔。 Iizuka等人[1]和Yu et al。 [2]删除中心孔的假设,可以处理不规则形状的孔,但不要对大量不规则掩膜的图像进行大量的定量分析([8]中的51个测试图像)。为了专注于更实用的不规则孔使用案例,我们收集了具有不同大小不规则掩膜的大型基准图像。在我们的分析中,我们不仅观察孔的大小,还观察孔是否与图像边界接触。
为了正确处理不规则掩膜,我们建议使用部分卷积层,其中包括掩膜和重新归一化卷积操作,然后是掩膜更新步骤。遮蔽和重新归一化卷积的概念在图像分割任务中也被称为[9]中的分割感知卷积,然而他们没有对输入蒙版进行修改。我们使用部分卷积是这样的:给定一个二元掩膜我们的卷积结果仅取决于每一层的非空穴区域。我们的主要扩展是自动掩膜更新步骤,它可以消除部分卷积能够在非掩膜值上操作的任何掩膜。如果有足够的连续更新层,即使是最大的蒙版孔也最终会缩小,只会在特征映射中留下有效的响应。部分卷积层最终使我们的模型对占位符空洞值不可知。
总之,我们做出以下贡献:
- 我们提出使用具有自动掩膜更新步骤的部分卷积来实现图像修补中的最新技术。
- 虽然以前的作品未能通过具有典型卷积的U-Net [10]中的跳过链接获得良好的修复效果,但我们证明用部分卷积和掩膜更新代替卷积层可以获得最新的修补结果。
- 据我们所知,我们首先证明了在形状不规则的孔上训练图像修复模型的功效.
-我们提出了一个大型的不规则掩膜数据集,该数据集将公开发布,以便于未来的训练和评估工作 修复模型。
2 相关工作
图像修复的非学习方法依赖于使用像距离场这样的机制将相邻像素的外观信息传播到目标区域[11,12,4]。但是,这些方法只能处理颜色和纹理方差较小的狭窄孔。大孔可能会导致过度平滑或类似Voronoi区域的伪像,如[4]中所述。基于斑点的方法,如[13,14]通过以迭代的方式从图像的非空洞区域或其他源图像搜索相关斑块来操作。然而,这些步骤通常会带来很大的计算成本,如[15]。 PatchMatch [3]通过提出更快速的类似补丁搜索算法来加速它。但是,这些方法对于实时应用程序来说仍然不够快,并且无法进行语义意识的补丁选择。
基于深度学习的方法通常用一些常数占位符值来初始化孔, 例如ImageNet [16]的平均像素值,然后使用一个卷积网络。由于产生的构件,后处理通常用于改善条件对占位符值的影响。内容编码器[6]首先将具有64×64中心孔的128×128图像嵌入低维特征空间,然后将特征解码为64×64图像。杨等人。 [7]将内容编码器的结果作为输入,然后传播来自非孔洞区域的纹理信息以填充孔洞区域作为后处理。 Song等人[17]使用细化网络,其中模糊的初始填孔结果被用作输入,然后迭代地用特征空间中最接近的非孔洞区域的小片代替。 Iizuka等人[1]通过定义全局和局部鉴别器来扩展内容编码器,然后将泊松混合应用为后处理。继[1]之后,Yu等人[2]用由上下文关注层提供支持的细化网络替换后处理。
在深度学习方法中,其他几项努力也忽略了掩膜占位符的值。在Yeh et al。 [18]在潜在空间搜索最接近编码的图像,然后用它来调节填孔发生器的输出。 Ulyanov等人。 [10]进一步发现,网络不需要外部数据集训练,并且可以依靠生成网络本身的结构来完成损坏的图像。但是,这种方法可能需要为每个图像使用一组不同的超参数,并应用多次迭代来获得良好结果。此外,他们的设计[10]不能使用跳跃链接,这些链接已知可以产生详细的输出。对于标准卷积层,编码器级中噪声或错误孔初始值的原始特征将传播到解码器级。我们的工作也不依赖洞区域中的占位符值,但我们的目标是在一次前馈过程中取得良好结果,并使用跳过链接创建详细预测。
我们的工作广泛使用了蒙板或重新加权的卷积操作,这使得我们只能在有效输入上调节输出。 Harley等人[19]最近利用这种方法与一个软注意掩膜进行语义分割。它也被用于PixelCNN中的全图像生成[20],以仅对先前合成的像素调整下一个像素。部分卷积可以看作是归一化卷积的一个特例,如[21]中介绍的那样。我们关于部分卷积的主要贡献是根据部分卷积能够作出有效响应的位置以及将部分卷积应用于修补问题来进一步更新下一层的输入掩膜。我们的完整型号是一种编码器 - 解码器架构,具有足够的接受区域,使得掩膜在进入解码器一半之前完全有效,这简化了解码过程。
3 方法
我们提出的模型使用堆叠的部分卷积运算和掩膜更新步骤来执行图像修复。我们首先定义我们的卷积和掩膜更新机制,然后讨论模型架构和损失函数。
3.1 部分卷积层
为简洁起见,我们将部分卷积运算和掩膜更新函数联合称为部分卷积层。
设W是卷积滤波器的权重,b是相应的偏差。 X是当前卷积(滑动)窗口的特征值(像素值),M是相应的二进制掩膜。类似于[9]中定义的每个位置的部分卷积被表示为:
![](https://pic3.zhimg.com/80/v2-d2704224816dbbf7ffb094b6c14f02aa_hd.jpg)
其中⊙表示单元乘法。 可以看出,输出值仅取决于非屏蔽输入。 比例因子1/sum(M)应用适当的缩放比例来调整有效(未屏蔽)输入的变化量。
在每次部分卷积操作之后,我们将更新我们的掩膜。 我们的屏蔽规则很简单:如果卷积能够在至少一个有效输入值上调整其输出,则我们移除该位置的掩膜。 这表示为:
![](https://pic2.zhimg.com/80/v2-8ab8a86ac84143be6b72661c323540c5_hd.jpg)
并且可以在任何深度学习框架中轻松实施,作为正向传球的一部分。在部分卷积层有足够的连续应用的情况下,如果输入包含任何有效像素,则任何掩膜将最终全部为1。
3.2 网络架构和实施实施
部分卷积层通过扩展现有的标准PyTorch [22]来实现,尽管它可以在使用自定义层的时间和空间上得到改进。直接的实现是定义大小为C×H×W的二进制掩膜,与相关的图像/特征具有相同的大小,然后使用固定卷积层实现掩膜更新,其具有与部分卷积操作相同的内核大小,但权重相同地设置为1并且偏置设置为0.在单个NVIDIA V100 GPU上,512×512图像上的整个网络推断花费0.23s,而不管孔的大小如何。
网络设计 我们设计了类似于[24]中使用的UNet架构,用部分卷积层替换所有卷积层,并在解码阶段使用最近邻居上采样。在编码阶段使用ReLU,在所有解码层之间使用alpha = 0.2的LeakyReLU。在第一和最后部分卷积层之外的每个部分卷积层和ReLU / LeakyReLU层之间使用批量归一化层[25]。encoder包括八个部分卷积层,其中步长= 2。内核大小为7,5,5,3,3,3,3和3.通道大小为64,128,256,512,512,512,512和512.解码器包括8个上采样层,每个上层系数为2,然后是部分卷积层。decoder中的部分卷积层的输出通道是512,512,512,512,256,128,64和3.输入decoder的skip连接在输入之前以通道方式连接特征映射和二进制掩膜下一个部分卷积层。最后的部分卷积图层的输入将包含原始输入图像与孔和原始蒙版的拼接。这使模型可以简单地复制无孔像素。
部分卷积作为填充 当图像边界附近时,我们不使用任何现有的填充方案来卷积。相反,部分卷积层直接通过适当的掩膜处理。这将进一步确保图像边界上的修复内容不会受到图像外部无效值的影响,这可以解释为另一个漏洞。
3.3损失函数
我们的损失函数是针对每个像素的重建精度以及构图,例如预测的孔值如何平滑过渡到其周围环境。
给定具有孔 的输入图像,初始二值掩膜M(孔为0),网络预测
和ground truth
,我们首先定义我们的像素损失
和
。这些分别是孔和非孔像素在网络输出上的L1损耗。接下来,我们定义由Gatys等人引入的感知损失。 [26]:
![](https://pic3.zhimg.com/80/v2-3916cb04412f626cc14bd2ea4ac7f696_hd.jpg)
这里, 是原始输出图像
,但是非空洞像素直接设置为ground truth。感知损失计算
和
之间的L1距离和基本事实,但是使用ImageNet预训练的VGG-16 [27]将这些图像投影到更高级的特征空间后。 Ψn是第n个选定图层的激活图。我们使用图层pool1,pool2和pool3来弥补我们的损失。
我们进一步包括风格损失项,它类似于感知损失[26],但我们首先在应用L1之前在每个特征图上执行自相关(格雷姆矩阵)。
![](https://pic4.zhimg.com/80/v2-355b04a38c947b420215d5845d0aee2b_hd.jpg)
在这里,我们注意到矩阵运算假设高层特征Ψ(x)n具有形状 ,结果是
Gram矩阵,
是第n个选择的归一化因子
层。再次,我们包括原始输出和合成输出的损失条件。
我们的最终损失项是总变差(TV)损失 :这是P上的平滑惩罚[28],其中P是孔区域的1像素扩张区域。
![](https://pic1.zhimg.com/80/v2-85667b4d4ed83d8c21dd774ec4df3dc8_hd.jpg)
总损失 是所有上述损失函数的组合。
![](https://pic2.zhimg.com/80/v2-96a646fb027d9985d7ca3fe1dd6394cd_hd.jpg)
通过对100个验证图像执行超参数搜索来确定损失项权重。
去除棋盘伪影和鱼鳞伪影 已知感知丢失[28]会产生棋盘伪影。 Johnson等人[28]建议通过使用总变差(TV)损失来改善问题。我们发现这不是我们模型的情况。图3(b)显示了通过从 中移除
和
而训练的模型的结果。对于我们的模型,额外的样式损失项是必要的。然而,并非所有的风格损失的权重计划都会产生合理的结果。图3(f)显示了用小的损失权重训练的模型的结果。与图3(g)中完整
训练模型的结果相比,它具有许多鱼鳞伪影或块状棋盘伪影。最终,风格损失的权重太大会导致高频信息的丢失。我们希望这个讨论会对那些有兴趣使用基于VGG的高层次损失的读者有所帮助。
![](https://pic2.zhimg.com/80/v2-e529d835aaa3e500ebe2d489fa58fee9_hd.jpg)
图3. 从上到下,从左到右:输入带孔的图像; 结果没有风格损失; 造成风格损失; ground truth。 在最下面一行,从左到右:输入带孔的图像; 使用小样式损失权重的结果; 使用完整 的结果; ground truth。
4 实验
4.1不规则掩膜数据集
先前的作品通过随机移除图像中的矩形区域在其数据集中生成空洞。我们认为这不足以创造我们需要的不同孔洞形状和大小。因此,我们首先收集随机条纹和任意形状的孔的蒙版。我们发现在[29]中描述的视频的两个连续帧之间的遮挡/遮挡遮罩估计方法的结果是这样的图案的良好来源。我们为训练产生了55116个掩膜,并为测试产生了24866个掩膜。在训练期间,我们通过从55116个掩膜中随机采样一个掩膜并随后进行随机扩张,旋转和裁剪来增加掩膜数据集。所有用于训练和测试的掩膜和图像尺寸为512×512。
我们从24866个掩膜开始并添加随机扩张,旋转和裁剪来创建测试集。许多先前的方法如[1]在图像边界附近的孔处的性能下降。因此,我们将测试集分为两个:带有和不带有孔的边界的边界。具有远离边界的孔的分割确保距离边界至少50个像素的距离。
我们还根据孔的大小进一步分类我们的口罩。具体而言,我们生成了6种不同孔 - 图面积比的掩膜:(0.01,0.1],(0.1,0.2],(0.2,0.3],(0.3,0.4],(0.4,0.5],(0.5 ,0.6],每个类别包含1000个带和不带边界约束的掩膜,总共创建了6 * 2 * 1000 = 12,000个掩膜,每个类别掩膜的一些例子可以在图4中找到。
![](https://pic3.zhimg.com/80/v2-752cf4de984386c1bbde5466f11f8d8a_hd.jpg)
图4. 每个孔到图像面积比率类别的一些测试蒙版。用边界约束的例子显示了1,3和5;使用它们的示例没有边界约束来示出2,4和6。
4.2 训练过程
训练数据 我们使用3个独立的图像数据集进行训练和测试:ImageNet数据集[16],Places2数据集[30]和CelebA-HQ [31,32]。我们使用ImageNet和Places2的原始火车,测试和val分割。对于CelebA-HQ,我们随机分成27K图像和3K图像进行测试。
训练程序 我们使用[33]中描述的初始化方法初始化权重,并使用Adam [34]进行优化。我们在单个NVIDIA V100 GPU(16GB)上进行训练,批量为6个。
初始化和微调 孔对于批量归一化存在问题,因为平均值和方差将针对孔像素进行计算,所以在掩蔽位置忽略它们是有意义的。但是,每个应用程序都会逐渐填充空洞,并且通常完全由解码器阶段完成。为了在存在孔的情况下使用批量归一化,我们首先使用0.0002的学习率为初始训练启用批量归一化。然后,我们使用0.00005的学习率进行微调,并冻结网络编码器部分的批量归一化参数。我们在解码器中保持启用批量归一化。这不仅避免了不正确的均值和方差问题,而且还帮助我们实现更快的收敛。 ImageNet和Places2模型训练10天,而CelebA-HQ训练3天。所有微调都在一天内完成。
4.3 比较
我们将我们的方法与4种方法进行比较:
- PM:PatchMatch [3],最先进的基于非学习的方法
- GL:Iizuka等人提出的方法。 [1]
- GntIpt:Yu等人提出的方法。 [2]
- Conv:与我们的方法相同的网络结构,但使用典型的卷积层。损失权重通过超参数搜索重新确定。
我们的方法表示为PConv。与GL和GntIpt的公平比较需要对我们的数据进行再训练。然而,两种方法的训练都使用局部鉴别器,假设洞的局部边界框可用,这对于我们的面罩的形状是没有意义的。因此,我们直接使用他们发布的预训练模型1。由于我们不知道他们的训练测试分裂,我们自己的分裂可能会不同于他们的分裂。我们对12,000张图像进行评估,随机将我们的面具分配给图像而无需更换。
定性比较 图5和图6分别显示了ImageNet和Places2上的比较。 GT代表基本事实。我们将它与图9中的CelebA-HQ上的GntIpt [2]进行了比较。GntIpt在256×256上测试了CelebA-HQ,因此我们在将图像送入模型之前将图像下采样为256×256。可以看出,PM可能会在语义上复制不正确的补丁来填补漏洞,而GL和GntIpt有时无法通过后处理或细化网络获得合理的结果。图7显示了Conv的结果,这些结果与洞穴占位符值的调整有着不同的人为因素。
![](https://pic3.zhimg.com/80/v2-0b196a4db87360cde43cc26ee78ea236_hd.jpg)
定量比较 如[2]中所提到的,由于存在许多可能的解决方案,因此没有好的数值度量来评估图像修复结果。尽管如此,我们通过报告L1 error,PSNR,SSIM [35]和初始评分[36]来追踪以前的图像修复工作[7,2]。 L1 error,PSNR和SSIM在Places2上报告,而Inception评分(IScore)在ImageNet上报告。请注意,发布的[1]模型仅在Places2上训练,我们将其用于所有评估。表1显示了比较结果。可以看出,我们的方法在不规则掩膜上的这些测量方法上优于所有其他方法。
![](https://pic2.zhimg.com/80/v2-986ed4f21f29766160b89964bb3aae2d_hd.jpg)
用户研究 除了定量比较外,我们还通过人类主观研究来评估我们的算法。我们执行部署在Amazon Mechanical Turk(MTurk)平台上的成对A / B测试。我们进行两种不同的实验:无限的时间和有限的时间。我们还分别报告有无孔附近的情况。对于每种情况,我们随机选择每种方法300张图像,每张图像比较10次。
![](https://pic3.zhimg.com/80/v2-73824bd4c5e8a13811bb8e19def1bce6_hd.jpg)
![](https://pic3.zhimg.com/80/v2-1c96b2867897ed99ce74ec9b273ed706_hd.jpg)
对于无限时间设置,workers可以一次给出两个图像:每个都由不同的方法生成。然后给workers无限的时间选择更逼真的图像。我们也洗牌图像的顺序,以确保无偏差的比较。图8(a)总结了所有不同的空洞与图像面积比的结果。第一行显示了距离图像边界至少50个像素的结果,而第二行显示了这些孔可能接近或接触图像边界的情况。可以看出,在这两种情况下,我们的方法都比其他所有方法(50%意味着两种方法表现相当好)的表现要好得多。
对于有限的时间设置,我们将所有方法(包括我们的)与ground truth进行比较。在每一次比较中,选择一种方法的结果并在有限的时间内与ground truth一起显示给workers。然后要求workers选择哪个图像看起来更自然。这可以评估图像之间的差异可以被感知的速度。图8(b)显示了不同时间间隔的比较结果。同样,第一行显示了孔不接触图像边界的情况,而第二行允许。在大多数情况下,我们的方法在不同的时间段和孔到图像面积比方面优于其他方法。
![](https://pic4.zhimg.com/80/v2-7284675301f308031d4d721a91db8cb7_hd.jpg)
图8.用户研究结果。我们进行两种实验:无限的时间和有限的时间。 (a)在无限时间设置中,我们将结果与另一种方法生成的结果进行比较。我们的结果是首选的比率是图表。 50%意味着两种方法相同。在第一行中,孔不允许触摸图像边界,而在第二行允许。 (b)在有限的时间内,我们将所有方法与基本事实进行比较。主题被给予一些有限的时间(250ms,1000ms或4000ms)来选择哪个图像更真实。报道了其中ground truth优于其他方法的比率。曲线越低越好。
5 讨论和扩展
5.1 讨论
我们建议使用具有自动掩膜更新机制的部分卷积层并实现最新的图像修复结果。我们的模型可以稳健地处理任何形状,大小的位置或与图像边界的距离。此外,如图10所示,我们的性能不会随着孔的大小增加而发生灾难性的恶化。然而,我们的方法的一个局限性在于,它对于一些结构疏松的图像(例如图11中的门上的条)大多数方法,在最大的孔上挣扎。
![](https://pic2.zhimg.com/80/v2-1b11bfec379bdea85d1b30c0a2668781_hd.jpg)
![](https://pic4.zhimg.com/80/v2-07611f268cb8db39a3bb9e31bffff213_hd.jpg)
5.2 图像超分辨率的扩展
我们还通过偏移像素和插入图像将我们的框架扩展到图像超分辨率任务。具体来说,给定具有高度H和宽度W以及放大系数K的低分辨率图像I,我们使用以下方式构造具有高度K * H和宽度K * W的输入I':对于I中每个像素(x, y),我们把它放在I'中的(K * x +⌊K/2⌋,K * y +⌊K/2⌋),并将该位置标记为掩膜值为1.一个示例输入设置和相应的输出K = 4可以在图12中找到。我们比较图13中K = 4的两种众所周知的图像超分辨率方法SRGAN [37]和MDSR + [38]。
![](https://pic2.zhimg.com/80/v2-e688600b17bf6fc91ac7876832cc68d9_hd.jpg)
![](https://pic2.zhimg.com/80/v2-9f6217aa52f29cfe8b7134ab19c96129_hd.jpg)
![](https://pic1.zhimg.com/80/v2-ab7eea48544b5d9d6fc3ae3fbb8de5c8_hd.jpg)
确认 我们要感谢Jonah Alben,Rafael Valle Costa,Karan Sapra,Chao Yang,Raul Puri,Brandon Rowlett和其他NVIDIA同事进行有价值的讨论,并感谢Chris Hebert提供的技术支持