图像修复论文“Generative Image Inpainting with Contextual Attention”

作者发现在图像修复问题中,因为卷积神经网络无法从图像较远的区域提取信息,所以在修复区域的边界,经常会生成扭曲的结构和模糊的图像,而传统的纹理和斑块(patch)的修复能取得比较好的效果,因为他们只需要从周围区域借鉴图像。
  作者基于上述这些现象,提出了一种新的基于深度生成模型的方法,不仅可以生成新的图像结构,还能够很好地利用周围的图像特征作为参考,从而做出更好的预测。
  作者提出了一个带有内容感知层(contextual attention layer)的前馈生成网络,这个网络的训练分为两个阶段。第一阶段是一个简单的卷积网络,通过不断修复缺失区域来产生损失值reconstruction loss,修复出的是一个比较模糊的结果。第二阶段是内容感知层的训练,其核心思想是:使用已知图像斑块的特征作为卷积核来加工生成出来的斑块,来精细化这个模糊的修复结果。它是这样来设计和实现的:用卷积的方法,来从已知的图像内容中匹配相似的斑块,通过在全通道上做softmax来找出最像待修补区域的斑块,然后使用这个区域的信息做反卷积(deconvolution)从而来重建该修补区域。
  这个内容感知模块,还有着空间传播层(spatial propagation layer)来提高感知的空间一致性。
  为了让网络能“想象”(hallucinate)出新的图像内容,有着另一条卷积通路(convolutional pathway),这条通路和内容感知卷积通路是平行的。这两个通路最终聚合并送入一个解码器来产生最后的输出。第二阶段的网络通过两个损失值来训练(重建损失值 reconstruction losses 和两个WGAN-GP损失(Wasserstein GAN losses),其中一个WGAN来观察全局图像,另一个WGAN来观察局部生成出的图像。
图像修复论文“Generative Image Inpainting with Contextual Attention”
 粗网络(Coarse network)仅仅使用使用重构损失进行训练,而细网络(Refinement network)使用重构损失+两个GAN损失进行训练。

直观上,细网络比带有缺失区域的图像看到的场景更完整,因此编码器比粗网络能更好地学习特征表示。这种二阶段(two-stage)的网络架构类似于残差学习(residual learning)或是深度监督机制(deep supervision)。

为了提高网络的训练效率以及减少参数的数量,作者使用了窄而深(thin and deep)的网络,在layer的实现方面,作者对所有layer的边界使用了镜像填充(mirror padding),移除了批归一化(batch normalization),原因是作者发现批归一化会降低修复的图像色彩的一致性。此外,作者使用了ELUs来替代ReLU,通过对输出卷积核的值的裁剪(clip the output filter values)来替代**函数tanh或是sigmoid。另外,作者发现将全局和局部的特征表示分开,而不是合并到一起(Iizuka的网络合并到一起了),能够更好地对GAN进行训练。
全局和局部的WGAN Global and local Wasserstein GANs
  不同于先前的使用DCGAN进行图像修复,作者提出了WGAN-GP的修改版本。通过在第二阶段结合全局和局部的WGAN-GP损失来增强全局和局部的一致性(这一点是受Iizuka网络的启发)。WGAN-GP损失是目前已有的用于图像生成的GAN中表现最好的损失值(使用1-范数重建损失,表现的会更好)。
空间衰减重构损失 Spatially discounted reconstruction loss
  对于图像修复问题,一个缺失区域可能会有多种可行的修复结果。一个可行的修复结果可能会和原始图像差距很大,如果使用原始图像作为唯一的参照标准(ground truth),计算重构损失(reconstruction loss)时就会误导卷积网络的训练过程。
  直观上来说,在缺失区域的边界上修复的结果的歧义性(ambiguity),要远小于中心区域。这与强化学习中的问题类似。当长期奖励(long-term rewards)有着很大的取值范围时,人们在采样轨迹(sampled trajectories)上使用随着时间衰减的奖励;受这一点的启发,作者提出了空间衰减重构损失。
随着像素点越靠近中心位置,权重越来越小,以此来减小中心区域的权值,使计算损失值时,不会因为中心结果和原始图像差距过大,从而误导训练过程。
  具体的做法是使用一个带有权值的mask M,在M上,每一点的权值由γl来计算,其中γ被设定为0.99,l是该点到最近的已知像素点的距离。
  通过上述提升的方法,作者的生成修复网络有着比Iizuka的网络更快的收敛速度,结果也更精确。此外也不需要图像的后续处理了。
图像修复论文“Generative Image Inpainting with Contextual Attention”
图像修复论文“Generative Image Inpainting with Contextual Attention”
1) 匹配及选取 Match and attend
  作者想解决的问题是:在背景区域中匹配缺失区域的特征。
  作者首先在背景区域提取3x3的patch,并作为卷积核。为了匹配前景(即待修复区域)斑块,使用标准化内积(余弦相似度)来测量,然后用softmax来为每个背景斑块计算权值,最后选取出一个最好的斑块,并反卷积出前景区域。对于反卷积过程中的重叠区域(overlapped pixels)取平均值。
2) 感知传播 Attention propagation
  为了进一步保持图像的一致性,作者使用了感知传播。思想是对前景区域做偏移,可能对应和背景区域做相同的偏移,实现方式是使用单位矩阵作为卷积核,从而做到对图像的偏移。作者先做了左右传播,然后再做上下传播。从而得到新的感知分数(attention score)
  该方法有效的提高了修复的结果,以及在训练过程中提供了更丰富的梯度。
3) 显存效率 Memory efficiency
  假设在128x128的图像中有个64x64的缺失区域作为输入,那么从背景区域提取出的卷积核个数是12288个(3x3大小)。这可能会超过GPU的显存限制。
  为了克服这一问题,作者介绍两种方法:1)在提取背景斑块时添加步长参数来减少提取的卷积核个数;2)在卷积前降低前景区域(缺失区域)的分辨率,然后在感知传播后提高感知图(attention map)的大小。
Unified Inpainting Network
图像修复论文“Generative Image Inpainting with Contextual Attention”
Ablation Study
Contextual attention vs. spatial transformer network and appearance flow
STN-based Attention Module提取出的global affine transformation太粗糙的。
Choice of the GAN loss for image inpainting
WGAN-GP收敛快,训练更稳定。LSGAN和DCGAN结果更差,会出现mode collapse的情况。
Essential reconstruction loss
是否可以不使用l1l_1 loss而只使用WGAN所带来的损失函数?作者在不使用$l_1 $ loss训练后发现,逐像素级的损失函数尽管会带来模糊的结果,但是它可以获得上下文结构,从而作为GAN网络的正则化参数。
Perceptual loss, style loss and total variation loss
这三种损失函数都没有能够有效提高image inpainting的性能,所以就没有进行使用。