Press "Enter" to skip to content

如何将“复制粘贴”嵌入到图像修复中:Shift-Net使用深度特征重排的图像修复方法

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

本文已参加【新人创作礼】活动,一起开启掘金创作之路。

 

导读

 

今天,我们将深入到更具体的深度图像修复技术, 深度特征重排 。这种技术既利用了现代数据驱动的CNN,又利用了传统的复制-粘贴修复方法。

 

回顾

 

在前几期的深度图像修复的文章中,第一篇: 用生成模型来做图像恢复的介绍和回顾:上下文编码器 我介绍了图像修复的目的和第一种基于GAN的图像修复方法。第二篇: 使用多尺度patch合成来做高分辨率的图像复原 我们在第一个GAN-based图像修复方法上进行了改进,使用了纹理网络来增强局部纹理细节。第三篇: 图像修复中的一个里程碑:全局和局部一致性的图像补全 我们介绍了深度图像修复的一个里程碑,该网络体系结构可以被看作是一个设计图像修复的标准的网络。在第四篇文章中: 深度图像修复的回顾和改进:使用生成对抗网络基于Patch的图像修复 ,我们进行了一个改进,并介绍了标准修复网络的一个变体/改进版本。

 

动机

 

 

图1,不同方法的修复结果的量化比较,(a)输入,(b)卷积方法(基于复制粘贴)(c)第一个基于GAN的方法,上下文编码器 (d) 提出的方法

 

正如我在之前的文章中提到的,一种传统的方法是在一张图片中寻找最相似的图像patch,然后直接复制粘贴这些patch到缺失的部分(即复制粘贴方法)。该方法直接在缺失的部分粘贴其他图像patch,从而提供了良好的局部细节。然而,这些patch可能并不完全适合整个图像的上下文,这可能会导致全局一致性较差。以图1(b)为例,可以看到填充区域的局部纹理细节很好,但与未缺失的部分(即有效像素)不一致。

 

另一方面,基于深度学习的方法关注的是整个图像的上下文。全连接层或扩展的卷积层用于捕捉整个图像的上下文。深度学习模型使用L1损失进行训练,以确保像素级重建精度。因此,深度学习方法提供的填充图像具有更好的全局一致性。然而,L1损失会导致模糊的修复结果,即使对抗损失(GAN损失)可以用来增强填充像素的清晰度。以图1(c)为例,可以看到填充的区域与未缺失的区域更加一致,但填充的区域比较模糊。

 

因此,本文作者希望利用传统的“复制-粘贴”方法(良好的局部细节)和现代深度学习方法(良好的全局一致性)的优势。

 

介绍

 

在图像修复中,我们希望得到一幅具有良好视觉质量的完整图像。因此,我们需要 正确的全局语义结构 和 精细的纹理 。正确的全局语义结构意味着生成的像素和有效像素应该是一致的。换句话说,我们必须填充一个图像,并且必须保持它的上下文。精细的纹理意味着生成的像素应该是真实的,并且尽可能的清晰。

 

在前一节中,我们提到了传统的“复制-粘贴”方法可以提供精细的纹理,而最近的深度学习方法可以提供更好的全局语义结构校正。因此,本文引入移位连接层,利用复制-粘贴的概念在其网络内部实现深度特征重排。图1(d)显示了他们提出的方法提供的修复结果。

 

方案

 

提出了一个 引导损失 ,以鼓励他们的网络( Shift-Net )在解码过程中学习填补缺失的部分。除此之外,我们还建议使用一个移位连接层,将缺失区域内的解码特征与缺失区域外的编码特征进行匹配,然后将缺失区域外编码特征的每个匹配位置移动到缺失区域内的相应位置。这捕获了在缺失区域之外发现的最相似的局部图像块的信息,并将该信息连接到解码后的特征,以便进一步重建。

 

贡献

 

如前所述,我们提出了一个移位连接层,将复制-粘贴的概念嵌入到现代CNN中,从而使我们提出的模型能够提供具有正确的全局语义结构和精细纹理的修复结果。

 

除了标准的L1和对抗性损失外,他们还建议 引导损失 以端到端数据驱动的方式训练他们的移位网络。

 

方法

 

 

图2,Shift-Net的网络结构,移位连接层加在32×32的分辨率上。

 

图2显示了Shift-Net的网络架构。没有移位连接层,这是一个非常标准的使用了跳跃连接的U-Net结构。注意,编码的特征被连接到解码的特征的相应层。这种跳跃连接对于低层次的视觉任务是有用的,包括图像修复,可以得到更好的局部视觉细节和重建精度。

 

引导损失

 

提出了引导损失来训练它们的Shift-Net。简单地说,这个损失计算的是缺失区域内输入mask图像的解码特征与缺失区域内的ground truth的编码特征之间的差。

 

 

让我们先来定义一下问题。设Ω为缺失区域,Ω(bar)为有效区域(即非缺失区域)。对于具有 L 层的U-Net,我们的最终目标是恢复ground truth。因此,我们希望第L层的编码特征和对应的解码层的特征包含了几乎所有的ground truth在该层的特征。对于编码特征,我们将缺失区域置为0,那幺第L层缺失区域的编码特征就是0,所以,对应的解码层的特征应该包含ground truth的缺失区域在该对应编码层特征。这意味着解码过程应该要可以填补缺失的区域。

 

式子1显示了编码层和对应解码层的特征的关系,注意对于 x ∈ Ω(bar)(非缺失区域),我们假设第L解码层的特征和ground truth的对应编码层的特征是一样,因此,引导损失只是定义在缺失区域上。通过将编码层的特征拼接到对应的解码层上,我们可以得到几乎所有的信息。

 

 

图3,Shift-Net的特征可视化, (a) 输入(亮的区域表示缺失区域)(b) ground truth的可视化 (c) 编码层特征的可视化 (d) 移位特征的可视化

 

为了进一步显示缺失区域编码层和解码层特征之间的关系,作者将通过移位网学习到的特征可视化,如图3所示。比较图3(b)和(c),可以看出移位网络特征是ground truth的合理估计,但太模糊。导致模糊的修复结果是没有精细的纹理细节。他们提出的移位连接层解决了这一问题,结果如图(d)所示。下面我们来讨论移位操作。

 

Shift连接层

 

我个人认为这是本文的核心思想。回想一下,我们假设编码层特征和解码层特征包含了ground truth的所有信息。从上面我们可以看到,移位后的特征是ground truth的的合理估计,但它不够清晰。让我们看看作者如何利用缺失区域外的特征来进一步增强缺失区域内的模糊估计。

 

 

简单地说,上面的公式就是寻找缺失区域外与缺失区域内每个解码特征最相似的编码特征。这是余弦相似性运算。对于每个编码特征,我们找到最相似的解码特征,输出的 x *( y )表示匹配的特征位置的坐标,我们可以得到平移向量 u_y =  x *( y) –  y 。注意,这个shift操作可以写成一个卷积层。我将在下一篇文章中详细讨论这个问题。

 

在得到shift向量后,我们可以重新排列解码特征的空间位置然后拼接接到编码特征和解码特征上,进一步增强我们的估计。空间重排操作如下:

 

 

简单说,对于缺失区域内的每个解码特征,在找到缺失区域外最相似的编码特征后,我们根据shift向量形成另一组特征映射。这组特征映射包含了在缺失区域外到缺失区域内解码特征最近的编码特征的信息。然后将所有相关信息组合在一起,如图2所示,以便进一步重建。

 

这里我想强调一些关于shift连接层的要点。i) 传统的“复制-粘贴”方法操作在像素或图像的patch域上,而shift连接层操作在深度特征域。ii)从大量的训练数据中学习深度特征,以端到端数据驱动的方式学习所有组件。因此,使用“复制-粘贴”和CNN的优点都被继承了。

 

损失函数

 

它们的损失函数是非常标准的。如前所述,除了我们引入的建议的 引导损失 ,他们还使用 L1损失 和 标准的对抗损失 。总的损失函数为:

 

 

λ_g 和λ_adv用来控制损失权重的参数,在实验中,分别设置为 0.01 和 0.002。

 

如果你熟悉CNN的训练过程,你可能会注意到 Shift操作是一种手动修改特征图 的操作。因此,我们必须针对特征第l层的特征来修改梯度的计算。根据式5,shift特征和第l层编码特征的关系为:

 

 

其中 P 是{0,1}的移位矩阵, P 每一行只有一个1的元素。元素1显示最近邻居的位置。因此,对于 ϕ _ l ( I )的梯度计算为:

 

 

所有这三项都可以直接计算,除了我们必须将shift矩阵的转置乘以P到最后一项,以确保梯度是正确的反向传播。

 

也许,你会发现这部分有点难以理解,因为我们必须修改梯度的计算。如果你不懂这部分,只要能抓住shift操作的核心思想就好了。在这里,shift操作是一种硬分配。这意味着损失区域中的每个解码特征只能有一个在损失区域之外的最近的邻居。这就是为什幺移位矩阵 P 是{0,1}的形式,以及为什幺我们必须修改梯度的计算。随后,提出了类似的shift操作思想,并采用了软分配。在这种情况下,缺失区域之外的所有邻居都被赋予权值,以表示与缺失区域内每个解码特征的相似度,我们不需要修改梯度的计算,因为这个操作是完全可微的。

 

实验

 

作者在两个数据集上评估了他们的模型,即 Paris StreetView 和 Places365-Standard 的六个场景。Paris StreeView包含14900张训练图像和100张测试图像。对于Places365,有来自365个场景的160万张训练图像。选取六个场景进行评价。每个场景有5000张训练图像,900张测试图像和100张验证图像。对于这两个数据集,他们调整每个图像的大小,使最小的维数为350,然后随机裁剪大小为256×256的子图像作为模型的输入。

 

为了进行训练,他们使用了学习率为0.0002和beta_1 = 0.5的Adam优化器。batch大小设置为1,训练epochs的总数为30。使用图像翻转进行数据增强。他们声称需要大约一天的时间在Nvidia Titan X Pascal GPU上训练他们的Shift-Net。

 

 

图4,巴黎街景数据集上修复结果的视觉比较。(a)输入 (b)内容感知填充(复制粘贴法) (c)Context Encoder (d)Multi-scale Neural Patch Synthesis (MNPS) (e) Shift-Net

 

图4显示了Paris StreetView数据集上最先进方法的视觉比较。内容感知填充(图4(b))是利用复制-粘贴概念的传统方法。你可以看到它提供了很好的局部纹理细节,但是错误的全局语义结构。图4 (c)和(d)是Context Encoder和Multi-scale Neural Patch Synthesis的结果。我们前面已经回顾了这两种方法。你可以看到Context Encoder的结果具有正确的全局语义结构,但它们是模糊的。MNPS提供了比Context Encoder更好的结果,但我们仍然可以很容易地观察填充区域的伪影。相比之下,Shift-Net可以提供具有正确的全局语义结构和精细的局部纹理细节的修复结果。结果如图4(e)所示,请放大以便更好地查看。

 

 

图5,在Places数据集上对比修复结果。(a)输入 (b)内容感知填充(复制粘贴法) (c)Context Encoder (d)Multi-scale Neural Patch Synthesis (MNPS) (e)Shift-Net

 

图5显示了Places数据集上最先进方法的定性比较。请放大以更好地看到局部的纹理细节。

 

 

表1,最先进方法的定量比较

 

表1列出了Paris StreeView数据集上的一些定量评价指标。显然,所提出的Shift-Net提供了最好的PSNR, SSIM和平均L2损失。正如我在之前的文章中提到的,这些数字与像素重建精度有关(客观评价)。它们不能反映修复结果的视觉质量。

 

 

图6,填充随机区域的例子。从上到下:输入、内容感知填充和Shift-Net

 

图6显示了使用内容感知填充和提出的Shift-Net 填充随机区域的一些例子。Shift-Net能够以良好的视觉质量处理随机裁剪的区域。请放大以更好地查看局部纹理细节。

 

消融研究

 

作者也做了消融研究来证明所提出的导引损失和shift连接层的有效性。

 

 

图7,提出的导引损失在标准U-Net和提出的Shift-Net的影响

 

图7显示了U-Net和Shift-Net在不使用和使用引导损失情况下的修复结果。很明显,引导损失对于减少视觉artifacts是很有用的。

 

 

图8,不同的λ_g对引导损失的影响

 

图8显示了不同 λ_g 的Shift-Net的修复结果。可以看出,当 λ_g = 0.01时,可以获得较好的修复效果。因此,他们在实验中根据经验设置 λ_g = 0.01。

 

 

图9,在不同的L-l层上进行shift操作的效果

 

图9显示了shift操作在不同层上的效果。回想一下,shift操作是在( L-l )层的深度特征映射上使用第 L 层的特征进行的。当 l 较小时,feature map的尺寸较大,因此在这一层进行shift操作的计算成本较高。当 l 较大时,feature map的尺寸较小,因此随着空间大小的减小,时间成本较低,但丢失的空间信息较多。这也可能导致修复效果不佳。在图9中,我们可以看到 L -3 (c)和 L -2 (d)的修复效果都很好(可能 L -2要好一点)。请注意, L -2处理一个图像大约需要400毫秒,而 L -3处理一个图像大约需要80毫秒。因此,为了平衡时间成本和性能,作者决定在( L -3)层进行shift操作。

 

 

图10,归零的影响

 

回想一下图2中Shift-Net的架构,在shift连接层之后拼接了3个不同的特征映射,分别是编码层特征,解码层特征以及移位特征。作者试图检查这些特征图对最终重建的重要性,结果如图10所示。很明显,解码层的特征对于最终的重构是非常重要的。如果我们将这个解码后的特征归零,重构将完全失败,如图10 (b)所示。因此,我们可以知道解码后的特征包含了缺失区域的主要结构和内容的信息。

 

图10 (c)显示了删除编码特征的结果。我们可以看到,主体结构仍然可以重建,但视觉质量差比完整的模型,如图10所示(e)。

 

最后,如果我们去掉图10 (d)所示的shift连接特征,填充的缺失区域有明显的伪影。因此,我们可以到shift连接特征对于细化填充的缺失区域非常有用,它提供缺失区域外最近邻居搜索的结果作为细化的参考。

 

 

图11,从上到下,基于随机shift连接和最近邻搜索的Shift-Net修复结果

 

为了进一步展示shift连接特征有效性,作者比较了随机移位连接和最近邻居搜索,如图11所示。我们可以看到,与最近邻搜索相比,随机shift连接并不能改善修复结果以获得更好的全局语义结构一致性。因此,我们可以说正确的shift操作对于获得良好的视觉修复效果是很重要的。

 

结论shift-connection层的使用,我认为最重要的观点是,我们提供一个缺失区域内的参考生成特征(假设生成的特征很好估计缺失区域),作为可以进一步完善这些生成的特征的基础,这个参考特征是来自于非缺失区域的最相似的地方。因此,我们可以借用非缺失区域的特征结构和纹理来细化缺失区域的特征。

 

其他要注意的点

 

对于有兴趣的读者,这里还有三点需要进一步研究。首先,你可能对特征映射中的mask区域的定义感兴趣。实际上,我们只有输入mask图像。因此,特征映射的mask必须被定义。简单地说,作者使用一个与编码器结构相同的简单CNN来获取网络内部的mask区域。利用简单的卷积和阈值技术得到特征映射中的掩码区域。我在这里不做详细介绍,因为我们将很快介绍一种可学习的方法来获取网络内的mask!

 

其次,介绍了生成器和判别器的详细结构。在之前的文章中已经介绍过,我们有一个标准的图像修复网络设计,本文的网络也是相当标准的。他们使用带shift的连接层的U-Net作为生成器,他们的判别器就是我们前面讨论过的PatchGAN判别器。

 

第三,在文章中可以找到更多关于Paris StreetView和Places数据集的比较。你可以看看,关于今天的深度图像修复算法的视觉质量,你会有一个大致的概念。

 

总结

 

本文主要有两个重点。首先,所提出的导引损失鼓励缺失区域的解码特征(给定输入mask图像)接近缺失区域的编码特征(给定的ground truth)。因此,解码过程应该能够在合理估计ground truth中缺失区域的情况下填补缺失区域。其次,采用shift操作的shift连接层可以有效地借用缺失区域外最相似区域的信息,进一步增强全局语义结构和局部纹理细节。

 

要点

 

这篇文章可能对你们有些人来说有点超前。我认为本文最重要的思想是shift操作,它可以看作是一种应用于图像修复任务中的注意力技术。

 

简单的说,shift操作允许所生成的缺失区域的特征借用缺失区域外最相似的特征的信息。缺失区域外的特征具有良好的全局语义结构和精细的局部纹理细节,可以作为参考对生成的特征进行细化。我希望你们能理解这个主要思想。

 

英文原文: towardsdatascience.com/how-copy-an…

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。