论文:论文地址http://openaccess.thecvf.com/content_cvpr_2018/papers/Yu_Generative_Image_Inpainting_CVPR_2018_paper.pdf
github开源代码:
tensorflow:https://github.com/JiahuiYu/generative_inpainting
pytorch:https://github.com/WonwoongCho/Generative-Inpainting-pytorch
摘要:
最近基于深度学习的方法已经显示出在图像中修复大的缺失区域的挑战性任务的是有希望的结果。这些方法可以生成视觉上合理的图像结构和纹理,但通常会产生扭曲的结构或与周围区域不一致的模糊纹理。这主要是由于卷积神经网络明显地从远处空间位置借用或复制信息的无效性。另一方面,当需要从周围区域借用纹理时,传统的纹理和块合成方法特别适合。通过这些观察,我们提出了一种新的基于深度生成模型的方法,它不仅可以合成新颖的图像结构,还可以明确利用周围的图像特征作为网络训练期间的参考,以做出更好的预测。该模型是一个前馈,完全卷积神经网络,可以在任意位置处理具有多个孔的图像,并且在测试时间内具有可变大小。在包括人脸(CelebA,CelebA-HQ),纹理(DTD)和自然图像(ImageNet,Places2)在内的多个数据集上的实验表明,我们提出的方法比现有方法产生更高质量的修复结果。代码,演示和模型可在以下网址获得:https://github.com/JiahuiYu/generative_inpainting。
1. 引言
填充图像的缺失像素(通常称为图像修复或完成)是计算机视觉中的重要任务。 它在照片编辑,基于图像的渲染和计算摄影方面有很多应用[3,25,30,31,36,41]。 图像修复的核心挑战在于合成与现有图像相关的缺失区域的视觉逼真和语义合理像素。
早期作品[3,14]试图使用类似于纹理合成的思想来解决问题[10,11],即通过将背景块匹配和复制到从低分辨率到高分辨率或从孔边界传播的孔中。 这些方法尤其适用于北京修复任务,并广泛应用于实际应用[3]。 然而,由于他们假设在背景区域的某处可以找到缺失的块,因此对于具有复杂的,非重复的结构(例如面部,物体)的修复区域的挑战性情况,它们不能产生幻觉新颖的图像内容。 而且,这些方法无法捕获高级语义。
深度卷积神经网络(CNN)和生成对抗网络(GAN)[12]的快速进展启发了最近的作品[17,27,32,41],将修复制定为条件图像生成问题,其中高级识别和低级别 像素合成被制定成卷积编码器 - 解码器网络,与对抗网络共同训练以促进生成和现有像素之间的一致性。 这些作品被证明可以在高度结构化的图像中生成合理的新内容,例如人脸,物体和场景。
不幸的是,这些基于CNN的方法经常产生边界伪影,扭曲的结构和与周围区域不一致的模糊纹理。我们发现这可能是由于卷积神经网络在模拟远距离上下文信息和空洞区域之间的长期相关性方面的无效性。例如,为了允许像素受到64像素的内容影响,它需要至少6层3×3卷积,具有扩张因子2或等效[17,22]。然而,扩张的卷积样本来自规则和对称网格的特征,因此可能无法权衡感兴趣的特征而不是其他特征。请注意,最近的工作[40]试图通过优化生成的补丁和已知区域中的匹配补丁之间的纹理相似性来解决外观差异。虽然提高了视觉质量,但是这种方法被数百个梯度下降迭代拖拽,并且花费几分钟来处理GPU上分辨率为512×512的图像。
我们提出了一个统一的前馈生成网络,其具有用于图像修复的新颖的上下文注意力层。我们建议的网络包括两个阶段。第一阶段是一个简单的扩张卷积网络,它训练有重建损失以粗略地丢失缺失的内容。上下文注意力集中在第二阶段。上下文关注的核心思想是使用已知块的特征作为卷积过滤器来处理生成的块。它是通过卷积设计和实现的,用于将生成的块与已知的上下文块匹配,通道级的softmax用于权衡相关块和反卷积以使用上下文块重建生成的块。上下文注意力模块还具有空间传播层以鼓励注意力的空间一致性。为了让网络产生幻觉新内容,我们还有另一个与上下文注意路径并行的卷积路径。将这两个路径合并喂给单个解码器以获得最终输出。整个网络以端到端的方式进行重建损失和两次Wasserstein GAN损失训练[1,13],其中一个判别器看全局区域,而另一个判别器看缺失区域的局部块。
对包括人脸,纹理和自然图像在内的多个数据集的实验表明,所提出的方法比现有方法产生更高质量的修复结果。 示例结果如图1所示。
我们的贡献总结如下:
- 我们提出了一种新颖的上下文注意力层,以明确地参与远处空间位置的相关特征块。
- 我们介绍了几种技术,包括修复网络增强,全局和局部WGAN [13],以及空间折扣重建损失,以提高基于当前最先进的生成图像修复网络的训练稳定性和速度[17]。 因此,我们能够在一周而不是两个月内训练网络。
- 我们统一的前馈生成网络在各种具有挑战性的数据集上实现了高质量的修复效果,包括CelebA人脸[28],CelebAHQ人脸[22],DTD纹理[6],ImageNet [34]和Places2 [43]。
2. 相关工作
2.1 图像修复
用于图像修复的现有工作可以主要分为两组。 第一组代表传统的基于扩散或基于块的方法,具有低级特征。 第二组试图通过基于学习的方法来解决修复问题,例如, 训练深度卷积神经网络以预测缺失区域的像素。
传统的扩散或基于块的方法,例如[2,4,10,11],通常使用变分算法或块相似性来将信息从背景区域传播到孔。 这些方法适用于静态纹理,但仅限于静态数据,如自然图像。 Simakov等人。 [36]提出了一种基于双向块相似性的方案,以更好地模拟非静态视觉数据,以重新定位和修复应用程序。 然而,块相似性的密集计算[36]是非常昂贵的操作,这禁止了这种方法的实际应用。 为了应对这一挑战,已经提出了一种称为PatchMatch [3]的快速最近邻域算法,它已经为包括修复在内的图像编辑应用展示了重要的实用价值。
最近,深度学习和基于GAN的方法已成为图像修复的有前途的范例。 最初的努力[23,39]训练卷积神经网络用于小区域的去噪和修复。 上下文编码器[32]首先训练深度神经网络以修复大洞。 训练在128×128图像中完成64×64的中心区域,以l2像素重建损失和生成对抗性损失为目标函数。 最近,Iizuka等人。 [17]通过引入全局和局部判别器作为对抗性损失来改进它。 全局判别器评估完成的图像作为整体是否连贯的,而局部判别器关注于以生成的区域为中心的小区域以强制本地一致性。 此外,Iizuka等人。 [17]在修复网络中使用扩张卷积来代替上下文编码器中采用的通道方式完全连接层,两种技术都被提出用于增加输出神经元的感受域。同时,有几项研究侧重于生成性面部修复。 Yeh等人。 [41]在损坏的图像的潜在空间中搜索最接近的编码并解码以获得完成的图像。Li等人。 [27]为面部完成引入额外的面部解析损失。然而,这些方法通常需要后处理步骤,例如图像混合操作,以在孔边界附近实施颜色一致性。
一些作品[37,40]遵循图像样式[5,26]的想法,将修复作为优化问题。 例如,Yang等人。 [40]提出了一种基于图像内容和纹理约束的联合优化的多尺度神经块合成方法,它不仅保留了上下文结构,而且通过使用深度分类网络来匹配和调整块与最相似的中间层特征相关性来产生高频细节。 该方法显示出有前景的视觉结果,但由于优化过程而非常慢。
2.2 注意力模块
在深度卷积神经网络中已经有许多关于学习空间注意力的研究。在这里,我们选择回顾一些与提议的上下文关注模型相关的代表性问题。 Jaderberg等。 [19]首先提出一种称为空间变换网络(STN)的参数空间注意模块,用于对象分类任务。该模型具有一个定位模块,用于预测全局仿射变换到扭曲特征的参数。但是,此模型假设全局转换,因此不适合建模块级注意。周等人。 [44]引入外观流程以预测偏移矢量,该偏移矢量指定应当移动输入视图中的哪些像素以重建用于新颖视图合成的目标视图。根据我们的实验,该方法被证明对于匹配相同物体的相关视图是有效的,但是在预测从背景区域到孔的流场方面是无效的。最近,Dai等人。 [8]和Jeon等人。 [20]建议学习空间注意力或主动卷积内核。这些方法可以更好地利用信息在训练期间使卷积内核形状变形,但是当我们需要从背景中借用精确特征时,这些方法可能仍然有限。
3. 改进的生成修复网络
我们首先通过对最近最先进的修复模型[17]进行复现和改进来构建我们的生成图像修复网络,该模型已经显示出有希望的视觉效果,用于修复人脸图像,建筑立面和自然图像。
3.1 Coarse-fine 网络架构
我们改进模型的网络架构如图2所示。我们遵循与[17]中相同的输入和输出配置进行训练和推理,即生成器网络采用填充了白色像素的图像孔和二进制掩模指示孔区域作为输入对,并输出最终完成的图像。 我们将输入与相应的二元掩模配对,以处理具有可变大小,形状和位置的孔。 网络的输入是256×256图像,在训练期间随机采样矩形缺失区域,并且训练的模型可以拍摄具有多个孔的不同尺寸的图像。
在图像修复任务中,感受野的大小应该足够大,Iizuka等人。 [17]为此目的采用扩张卷积。 为了进一步扩大感受域并稳定训练,我们引入了两个粗到细网络架构,其中第一个网络进行初始粗略预测,第二个网络将粗略预测作为输入并预测精细结果。 粗略网络用明确的重建损失进行训练,而细化网络用重建以及GAN损失进行训练。 直观地,细化网络看到比具有缺失区域的原始图像更完整的场景,因此其编码器可以比粗网络学习更好的特征表示。 这种两阶段网络架构在精神上与残留学习[15]或深度监督[24]相似。
此外,我们的修复网络采用细和深的方案设计,以提高效率,并且参数少于[17]中的参数。 在层实现方面,我们对所有卷积层使用小填充并删除批量标准化层[18](我们发现它会降低颜色一致性)。 此外,我们在[17]中使用ELU [7]作为激活函数而不是ReLU,并剪切输出滤波器值而不是使用tanh或sigmoid函数。 此外,我们发现GAN训练的全局和局部特征表示分离比[17]中的特征级联更好。 更多细节可以在补充材料中找到。
图2:改进的生成修复网络结构
3.2 Global and local Wasserstein GANs
与先前依赖DCGAN [33]进行对抗性监督的生成性修复网络[17,27,32]不同,我们建议使用WGAN-GP的修改版本[1,13]。 我们将WGAN-GP损失附加到第二阶段细化网络的全球和本地输出,以实现全局和局部的一致性,受到[17]的启发。 众所周知,WGAN-GP损失在图像生成任务方面优于现有的GAN损失,并且当它们都使用L1距离度量时,它与L1重建损失相结合时效果很好。
具体而言,WGAN使用Earth - Mover距离(a.k.a.Wasserstein-1)距离"
W
(
P
r
,
P
g
)
W(Pr,Pg)
W(Pr,Pg)"来比较生成的和实际的数据分布。 它的目标函数是通过应用构建的Kantorovich-Rubinstein二元性构造的函数:
其中D是1-Lipschitz函数的集合,Pg是由x~ = G(z)隐式定义的模型分布。 z是生成器的输入。
Gulrajani等。 [13]提出了一个带有梯度惩罚项的WGAN的改进版本。
其中x是从分布Pg和Pr采样的点之间的直线采样的。原因是直线上所有点x=(1-t)*x+t*x的D*梯度都应该指向最近的采样点x~,意味着
对于图像修复,我们只尝试预测孔区域,因此梯度损失应仅应用于孔内的像素。 这可以通过梯度和输入掩码m的乘法来实现,如下所示:
其中掩码值为0表示缺失像素,1表示其他地方。 在所有实验中λ设定为10。
我们使用像素方式L1损失(而不是[17]中的均方误差)和WGAN对抗性损失的加权和。 请注意,在原始空间中,WGAN中的Wasserstein-1距离基于L1真实图像。
其中(Pr,Pg)表示所有连接分布y(x,y)的集合,其边缘分别为Pr和Pg。直观地,像素方式的重建损失直接将空洞回归到当前真实图像,而WGAN隐含地学习匹配潜在的正确图像并用对抗性梯度训练生成器。 由于两种损失均以像素为单位测量L1距离,因此组合损失更容易训练并使优化过程更稳定。
3.3 Spatially discounted reconstruction loss
修复问题涉及像素的幻觉,因此对于任何给定的环境都可能有许多合理的解决方案。 在具有挑战性的情况下,合理的完整图像可能具有与原始图像中的块或像素,这些块和像素是非常不同的块或像素。 由于我们使用原始图像作为计算重建损失的唯一基础事实,因此强制执行这些像素中的重建损失可能会误导卷积网络的训练过程。
直观地,孔边界附近的缺失像素比靠近孔中心的像素具有更少的模糊度。 这类似于强化学习中观察到的问题。 当长期奖励在采样过程中有很大的变化时,人们会使用时间贴现的奖励而不是采样的轨迹[38]。 受此启发,我们使用权重掩模M引入空间折扣的重建损失。掩模中每个像素的权重计算为γ1,其中l是像素与最近的已知像素的距离。 在所有实验中γ设定为0.99。
在[32,41]中也探讨了类似的加权思想。 在[41]中提出的重要性加权上下文损失通过固定窗口内的未损坏像素的比率(例如7×7)在空间上加权。 Pathak等人。 [32]预测一个略大的块,边界区域的损失权重(×10)更高。 对于修补大孔,建议的折扣损失对于改善视觉质量更有效。 我们在实施中使用贴现的L1重建损失。
通过以上所有改进,我们的基线生成修复模型收敛速度比[17]快得多,从而获得更准确的修复结果。 对于Places2 [43],我们将训练时间从[17]报告的11,520 GPU小时(K80)减少到120 GPU小时(GTX 1080),这几乎是100倍加速。 而且,不再需要后处理步骤(图像混合)[17]。
4. Image Inpainting with Contextual Attention
卷积神经网络逐层处理具有局部卷积核的图像特征因此对于从远处空间位置借用特征是无效的。 为克服这一局限,我们考虑了注意机制,并在深层生成网络中引入了一个新的上下文注意层。 在本节中,我们首先讨论上下文注意层的细节,然后讨论如何将它集成到我们的统一修复网络中。
4.1 Contextual Attention
上下文注意层学习从已知背景块借用或复制特征信息的位置以生成缺失块。 它是可微分的,因此可以在深度模型中进行训练,并且可以完全卷积,这允许在任意分辨率下进行测试。
图3:上下文注意层的插图。 首先,我们使用卷积来计算前景块与背景块(作为卷积滤波器)的匹配分数。 然后我们应用softmax来比较并获得每个像素的注意力得分。 最后,我们通过对注意力得分进行反卷积来重建具有背景块的前景块。 上下文注意层是可区分的并且是完全卷积的。
图4:基于第一编码器编码器网络的粗略结果,引入两个并行编码器,然后合并到单个解码器以获得修复结果。 对于注意力图的可视化,颜色指示前景中每个像素的最感兴趣的背景块的相对位置。 例如,白色(颜色编码图的中心)表示像素在自身上呈现,在左下方呈粉红色,绿色表示右上角。
Match and attend
我们考虑将缺失像素(前景)的特征与周围环境(背景)匹配的问题。 如图3所示,我们首先在背景中提取补丁(3×3)并将它们重新整形为卷积滤波器。 为了匹配前景块{fx,y}与背景{bx’,y’},我们用归一化的内积(余弦相似度)进行测量
其中Sx,y,x’,y’表示以背景(x’,y’)和前景(x,y)为中心的块的相似性。 然后,我们使用缩放的softmax沿x’y’维度权衡相似性,以获得每个像素的注意力得分s*x,y,x’,y’ = softmax x’,y’(λsx,y,x’,y’),其中λ是常数值。 这有效地实现为卷积和通道方式softmax。 最后,我们重新使用提取的块{bx’,y’}作为反卷积滤波器来重建前景。 重叠像素的值被平均。
Attention propagation
我们通过传播(融合)进一步激励注意力的一致性。 一致性的想法是前景块的移位可能对应于背景块中的相同移位以引起注意。 例如,Sx,y,x’,y’通常具有接近的值,其中Sx+1,y,x’+1,y’。 为了模拟和鼓励注意力图的一致性,我们进行左右传播,然后进行自上而下的传播,内核大小为k。 以左右传播为例,我们获得了新的注意力得分:
传播有效地实现为具有单位矩阵作为核的卷积。 注意力传播显着改善了测试中的修复效果,并丰富了训练中的渐变。
Memory efficiency
假设在128×128特征图中缺少64×64区域,则从背景中提取的卷积滤波器的数量是12,288。 这可能会导致GPU的内存开销。 为了克服这个问题,我们引入了两个选项:1)提取具有跨步的背景补丁以减少滤波器的数量和2)在卷积之前缩小前景输入的分辨率并在传播之后放大注意力映射图。
4.2 Unified Inpainting Network
为了整合注意力模块,我们引入了两个并行编码器,如图4所示,基于图2.底部编码器专门用于逐层(扩散)卷积的幻觉内容,而顶部编码器则尝试关注感兴趣的背景特征。 来自两个编码器的输出特征被聚合并馈送到单个解码器以获得最终输出。 为了解释上下文关注,我们以图4所示的方式对其进行可视化。我们使用颜色来指示每个前景像素最感兴趣的背景块的相对位置。 例如,白色(颜色编码图的中心)表示像素在其自身上,左下方为粉红色,上方为绿色。 对于不同的图像,偏移值被不同地缩放以最佳地可视化最有趣的范围。
对于训练,给定原始图像x,我们在随机位置采样一个二进制图像掩模m。 输入图像z从原始图像中被破坏为z = x *m。 修补网络G将z和m的连接作为输入,并输出具有与输入相同大小的预测图像x‘=G(z,m)。 将x’的掩蔽区域粘贴到输入图像,我们得到修复输出x~ = z + x’ * (1-m)。 输入和输出的图像值线性缩放为[-1, 1]在所有实验中。 训练程序如算法1所示。
5.Experiments
我们在四个数据集上评估建议的修复模型,包括Places2 [43],CelebA面[28],CelebAHQ面[22],DTD纹理[6]和ImageNet [34]。
Qualitative comparisons
首先,我们在图5中显示,我们的基线模型通过比较我们的输出结果和从主要论文中复制的结果,与先前的最新技术[17]产生可比较的修复结果。 请注意,我们的基线模型没有执行后处理步骤,而图像混合应用于[17]的结果。
接下来,我们使用最具挑战性的Places2数据集,通过与我们从先前的最新技术[17]扩展的基线两阶段模型进行比较,评估我们的完整模型与上下文关注。 对于训练,我们使用分辨率为256×256的图像,最大孔尺寸为128×128,如4.2节所述。 两种方法都基于完全卷积神经网络,因此可以在不同分辨率的图像上填充多个孔。 验证集中各种复杂场景的可视化比较如图6所示。为了测试的一致性,这些测试图像的大小均为512×680。 报告的所有结果都是来自训练模型的直接输出,而不使用任何后处理。 对于每个示例,我们还在最后一列中可视化我们模型的潜在注意力图(颜色编码在第4.2节中进行了解释)。
如图所示,我们具有上下文关注的完整模型可以利用周围的纹理和结构,从而生成更逼真的结果,并且比基线模型更少的伪像。 注意力图的可视化揭示了我们的方法知道上下文图像结构,并且可以自适应地从周围区域借用信息以帮助合成和生成。
在图7中,我们还展示了我们在CelebA,DTD和ImageNet上训练的完整模型的一些示例结果和注意图。 由于篇幅限制,我们在补充材料中包含了这些数据集的更多结果
Quantitative comparisons
与其他图像生成任务一样,图像修复缺乏良好的定量评估指标。 为评估GAN模型而引入的Inception score[35]不是用于评估图像修复方法的良好度量,因为修复主要集中在背景填充(例如,对象移除情况),而不是其生成各种类对象的能力。
由于存在许多与原始图像内容不同的可能解决方案,因此在重建误差方面的评估度量也不是完美的。 尽管如此,我们在Places2上的验证集上的平均L1误差,平均L2误差,峰值信噪比(PSNR)和总变差(TV)损失方面报告我们的评估仅供参考表1所示。如图所示。 在表中,基于学习的方法在L1,L2错误和PSNR方面表现更好,而直接复制原始图像补丁的方法具有更低的总变异损失。
我们的完整模型总共有2.9M参数,大约是[17]中提出的模型的一半。 模型在TensorFlow v1.3,CUDNN v6.0,CUDA v8.0上实现,并在具有CPU Intel(R)Xeon(R)CPU E5-2697 v3(2.60GHz)和GPU GTX 1080 Ti的硬件上运行。 我们的完整模型在GPU上每帧0.2秒,在CPU上每帧1.5秒,平均分辨率为512×512的图像。
5.1 Ablation study
Contextual attention vs. spatial transformer network and appearance flow
我们研究了与其他空间关注模块相比的情境关注的有效性,包括用于图像修复的外观流[44]和空间变换网络[19]。对于外观流[44],我们在相同的框架上训练,除了用卷积层替换上下文关注层以直接预测2-D像素偏移作为注意。如图8所示,对于非常不同的测试图像对,外观流返回非常相似的注意力图,这意味着网络可能陷入不良的局部最小值。为了改善外观流动的结果,我们还研究了多个注意力聚集和基于块的注意力的想法。这些想法都不能很好地改善修复效果。此外,我们在图8的框架中将空间变换器网络[19]的结果显示为注意力。如图所示,基于STN的注意力不适用于修复,因为其全局仿射变换太粗糙。
Choice of the GAN loss for image inpainting
我们的修复框架极大地受益于其学习曲线和更快/更稳定的收敛行为所证实的WGAN-GP损失。 使用DCGAN训练的同一模型有时会折叠到修复任务的有限模式,如图9所示。我们还尝试了LSGAN [29],结果更糟。
Essential reconstruction loss
我们还进行了测试,如果我们可以放弃L1重建损失并纯粹依赖对抗性损失(即改进的WGAN)以产生良好的结果。 为了得出结论,我们训练我们的修复模型,在细网络中没有L1重建损失”。 我们的结论是像素方式的重建损失虽然趋于使结果模糊,但却是图像修复的基本要素。 重建损失有助于捕获内容结构,并作为训练GAN的强大正则化术语。
Perceptual loss, style loss and total variation loss
我们还没有发现感知损失(VGG特征的重建损失),风格损失(在VGG特征上计算的Gram矩阵的Frobenius范数)[21]和总变差(TV)损失在我们的框架中为图像修复带来了显着的改进,因此 没用过。
6.Conclusion
我们提出了一个从粗到精的生成图像修复框架,并介绍了我们的基线模型以及具有新颖的上下文关注模块的完整模型。 我们通过学习用于明确匹配和参与相关背景补丁的特征表示,显示了上下文关注模块显着改善了图像修复结果。 作为未来的工作,我们计划使用类似于GAN渐进式增长的想法将方法扩展到高分辨率的修复应用[22]。 所提出的修复框架和上下文关注模块也可以应用于条件图像生成,图像编辑和计算摄影任务,包括基于图像的渲染,图像超分辨率,引导编辑和许多其他任务。