美文网首页@IT·互联网
论文阅读分享:图像修复--DeepFill-v1

论文阅读分享:图像修复--DeepFill-v1

作者: 飞姐的分享 | 来源:发表于2018-12-02 12:03 被阅读8次

    本篇介绍2018 CVPR关于图像修复的一个非常棒的工作DeepFill-V1。

    图像修复

    图像修复(Image Inpainting)要解决的问题是在内容缺失的图片上进行填充,填充后的图片尽量自然,可以理解成算法自动PS。

    图像修复问题一般有两种解决方案,传统方案和深度学习方案。

    传统方案通过图像其他部分的像素来对缺失部分进行填充,最糙的方法是直接进行边缘像素的拉伸,精细的方法需要计算小区块的相似度,扩散式的逐步填充,典型的方法如PatchMatch。

    因为是用背景中相似的像素去填充缺失的像素,无法深入理解图像的语义,所以传统算法在边缘部分处理得比较好,但无法理解更多的语义信息,更无法填充人脸。

    深度学习方案将填充问题看成一个学习问题,通过深度神经网络去做缺失部分pixel级别的预测。因为深度学习算法对深层的结构和语义信息理解得比较好,所以可以填充一些抽象的信息(如填充一个鼻子),缺点是边缘部分处理得比较差,经常会产生与周围区域不一致的扭曲结构或模糊纹理。

    深度学习方案可以人为构造大量的学习样本,比如将任意图片中的一部分擦除,然后用深度学习网络构建生成模型,生成的目标就是还原原图,这种方式理论上可以为这个问题构建无数的训练样本(这真是一个好消息)。

    DeepFill算法结合深度学习算法的解决方案,同时参考传统算法的优点,对生成网络做了进一步改进,可以自动修复一个有多处孔洞或较大块儿孔洞的图片。

    下面是两个good case:

    主要贡献:

    深度学习方法在图像修复方面取得了不错的表现,主要得益于对图像高层结构和语义特征的理解,但是在pixel维度处理不太好,经常会产生与周围区域不一致的扭曲结构或模糊纹理。这是因为深度网络没有考虑缺失部分与全图像素的远近,学到了较远处的特征。相比之下,传统方法主要从缺失部分的四周获取素材进行修改,对此类问题处理得更好一些。这篇工作中提出的深度学习方法,既能学习图像的结构和语义表示,而且会尽量去利用背景像素的相似,并考虑边缘的一致性,从而获得了更好的局部一致性效果。

    它可以处理任意位置及大小的孔洞的修复问题。在包括人脸(CelebA,CelebA-HQ),纹理(DTD)和自然图像(ImageNet,Places2)在内的多个数据集进行的实验表明,论文的方案可以产生比现有方法更高质量的修复结果。

    在这篇工作之前的state-of-the-art工作【Iizuka et al 2017】中,图像修复的损失是基于GAN的两个loss, Global判别器区分图像是否是一个经修复的图像,Local判别器去区分修复的局部区域一致性,同时使用孔洞卷积增大图像的感受野。还有一些研究专注解决人脸图像的修复[R Yeh et al 2016, Y Li et al 2017]。这篇工作借鉴了上述工作的一些基本思想(双GAN loss,孔洞卷积等)

    网络结构

    网络的输入:1)遮挡部分替换成白色的待修复图,2) 遮挡部分的mask(二维)。网络输出:修复后的图。

    粗细两层网络结构:coarse network和refinement network。

    coarse network优化目标是图像重建的pixel维度L1 Loss(即第一阶段输出的Coarse Result与原图Raw的pixel维度的L1 Loss)。

    refinenetwork有三个优化目标:图像重建L1 Loss,global和local的GAN判别器损失。refine network的输入是Coarse Network的输出:Coarse Result,比coarse network可以看到更全局的信息,也是为了进一步扩大感受野。

    一些具体的trick: 为了提速,选择更深更窄的网络,去掉了BN层,选用mirror padding,将global和local GAN的目标分开,而不是在特征层融合。ELU替代RELU等。GAN选用WGAN-GP。(提供的开源代码中可以进行WGAN-GP和DC-GAN等的对比)

    重要优化一:图像重建损失的优化。图像重建的损失,边缘的一致性更重要一些。现在的训练方式是把原图做为修复的目标,实际上原图可能并不是唯一的修复目标,和缺失部分的中心相比,边缘部分的一致性更重要一些。所以设计了全图的惩罚项,增强边缘部分的重建损失,松弛远处的重建损失。

    通过以上的方式,已经可以显著的在state-of-the-art上有较大的改进,网络收敛更快。

    重要优化二:Contextual attention layer。这一层的主要作用是模拟传统方法中类似patch-match的思路,计算背景与前景(前景即填充部分)patch粒度的相似性,形成背景和前景的Attention,再通过背景去填充前景,从而增强还原的逼真程度。

    具体的做法上,取背景中取3*3的patch并reshape,做为filter,与前景3*3的patch计算余弦相似度

    通过softmax函数将这个相似度的结果进行rescale,形成前景到背景的attention,之后再复用背景的patch和attention去重建前景。

    最后,参照传统方法中的propagation过程,以k为kernel size做了一次平滑处理。整个过程是可导的,可以通过回传误差进行参数学习。

    那么,Contextual attention layer如何融入原来的网络当中呢?作者将fine-network设计成两路结构,一路就是ContextualAttention layer,主要是用相似的背景去重建前景,另一路则通过layer-by-layer的孔洞卷积学习全局特征。两路特征进行合并后作为后面的全连接层的输入。

    上图中的Attention map color 显示填充的前景与背景部分(相应方向上)的响应。说明模型确实学到并复用了背景中的像素特征。

    训练过程及效果

    简单总结就是:从大量的训练数据中随机生成一些带孔洞的图,以原图作为ground-truth训练生成网络。

    最后再看一下效果的演示,左侧是原图,左二是随机扣图之后的带孔洞图像,左三是算法复原后的图,最右是填充部分与背景区域的响应。

    当然,虽然论文里给了很多good case,实际上效果并没有那么理想,因为在复杂场景下做补全确实很难。

    再给一个“有点丑”的case:

    其他相关工作:

    DeepFill v2

    DeepCreamPy:漫画修复

    DeOldify:旧照片着色和修复

    论文:Jiahui Yu et al, Generative Image Inpainting with ContextualAttention, CVPR 2018

    Gibhub:https://github.com/ JiahuiYu/generative_inpainting

    官网:http://jiahuiyu.com/deepfill/

    相关文章

      网友评论

        本文标题:论文阅读分享:图像修复--DeepFill-v1

        本文链接:https://www.haomeiwen.com/subject/uoljcqtx.html