• Semantic Image Inpainting with Deep Generative Models


    摘要

    论文来源:CVPR 2017

    论文提出的方法:给定一个训练好的生成模型,采用提出的两个损失函数$ context-loss和prior-loss$,通过在潜在的图像流寻找与需要修复图片最接近的编码来实现修复。

    优势之处:最新的方法需要有关缺失部分的一些特定信息,而此方法不管缺失部分如何,修复都是可能实现的。

    网络结构:理论上可以使用各种(GAN)网络结构,本论文采用(DCGAN)

    数据集:三个数据集分别为$the-Celeb-Faces-Attributes-Dataset (CelebA) , the -Street-View-House-Numbers (SVHN) 和the-Stanford-Cars-Dataset $

    Codesemantic_image_inpainting

    介绍

    语义修复(Semantic-inpainting)):是指根据图像的语义信息来推断图像中任意大的缺失区域内容。

    典型图像修复方法包括:基于局部信息和非局部信息来修复图像。现在大多数的修复方法是基于单个图像修复(利用图片局部信息)而设计的,利用输入图像提供的信息,并利用image priors来解决问题。

    图像修复的分类

    利用局部信息修复图片:利用图像本身的局部信息来修复图像。

    方法名称 实现思想
    base on total variation (TV)[34,1] 考虑了自然图像的平滑特性,有助于填充小的缺失区域或去除杂散噪声。
    引用[6] 纹理图像中的洞可以通过从同一图像中找到相似的纹理来填充。
    statistics of patch offsets[11], planarity [13] or low rank (LR) 能够有效的提高结果的效果
    PatchMatch (PM) [2] 在图像的未缺失部分搜索相似的补丁来进行填充
    利用局部信息修复图片缺点: 都要求在输入图像中包含适当的信息,例如类似的像素、结构或补丁。如果缺失区域很大且可能是任意形状的,则很难满足这一假设。

    利用非局部信息修复图片:利用一些外部信息,来预测图像中缺失部分的像素。

    方法名称 实现思想
    引用[10] 从一个巨大的数据库中剪切并粘贴一个语义相似的补丁。
    引用[37] 基于互联网的检索可用于替换场景的目标区域。
    以下为基于学习的方法
    引用[27],[28],[33],[22] 经过一个图像字典或者神经网络的学习,推理的时候不需要训练数据。
    缺点: 仅适用于缺失的部分教小或者是去取图片上的文本

    本文中创新思路:讲图像的语义修复问题,转换为受约束图像的生成问题,并且利用了生成模型的最新成果。在一个被训练深度生成(生成对抗网络GAN)模型,我们搜索在潜在空间中与图像“最接近”的需要修复图像的编码。然后使用编码来使用生成器重建图像。以处理损坏的图像为条件,通过加权上下文损失来定义“最接近”,并且通过prior损失来惩罚不现实的图像。

    与CE对比(2016 CVPR)优势:不需要MASK的数据集进行训练并且在推理的时候可以对任意结构的缺失区域使用。

    相关工作

    Generative Adversarial Networks (GANs)

    • 包括两个网络:generator (G), discriminator (D)(G)将从先验分布(P_z)采样的随机向量z映射到图像空间,而(D)将输入图像映射到似然。(G)的目的是生成真实的图像,而(D)起着对抗的作用,区分(G)生成的图像和从数据分布(P_{data})中采样的真实图像。
    • 损失函数:32Vgvq.jpg
    • (h)是来自(P_{data})分布的样本,(z)是潜在空间(latent space)的随机编码。
    • 生成对抗网络不能直接用作本文(图像语义修复)的原因:除非受到所提供的损坏图像的约束,否则它们很有可能生成完全不相关的图像。

    Autoencoders 和 Variational Autoencoders (VAEs)

    • 一种无监督学习的方法,作用是学习数据复杂的分布情况。
    • 与GAN网络相比,VAE更倾向生成过于平滑的图像,这不是图像修复的首要任务。通过讲VAE的训练结合一个adveserial loss会减少这种平滑,但是会出现更多的伪影。
    • Context Encoder(CE)这边论文,这篇文章的结果可以理解为缺失部分图像条件下的自编码器。当缺失部分结构固定时候,修复的效果还是比较好的。

    Back-propagation to the input data

    • 目的是为了寻找接近提供但是缺失部分图像的编码信息。

    • 应用Back-propagation的论文 用途
      引用[][][8,9,20] 纹理合成和样式转移
      引用[28] 创造梦幻般的图像
      引用[36,5,35,21] 在输入层上更新梯度来“反转”网络,用于可视化和理解经过训练的网络中学习到的特征
    • 因此,可以使用(Back-propagation)来实现语义修复任务,但是需要特别设计的损失函数。

    Semantic Inpainting by Constrained Image Generation

    (利用受限制的图片生成来实现图片语义修复)

    • 为了修复缺失部分大的图像,通过正常的图片训练生成器G和判别器D。

    • 经过训练,生成器(G)能够从(p_Z)中提取点z,并从(p_{data})中生成模拟图像的样本。

    • 我们假设如果判别器G是有效的,则不是来自(P_{data})的图像不应该在学习的编码流(Z)上。

    • 因此,我们的目标是在受限制的编码流(Z)上恢复最接近需要修复图像的编码(Zˆ)

    • 图三,我们利用二维空间上的t-SNE将隐藏编码流进行可视化,并在寻优步骤中得到中间结果,得到了寻优后,利用训练的生成模型G生成缺失的内容。323fNq.jpg

    • 更具体地说,我们将寻找(Zˆ)的过程公式转化为最优化问题。令(y)是待修复的图像,(M)是对于图片的二值MASK,与(y)对应,用来指出缺失的部分。图三(a)为一个例子。

    • 用符号(zˆ)来定义最近编码,即32Yib4.jpg

    其中(L_c)表示上下文损失(context loss),该上下文损失限制给定输入待修复图像(y)和孔掩码(M)的生成图像。

    (L_p)表示先验损失,它惩罚不切实际的图像。

    除了上述所说的最小化,还可以考虑使用(D)通过最大化(D(y))来更新y,类似于(DeepDream)中的反向传播或神经风格转移。然而,损坏的数据(y)既不是从真实图像分布中提取的,也不是从生成的图像分布中提取的。因此,最大化(D(y))可能会导致一个远离潜在图像流形的解,从而可能导致质量差的结果。

    Importance Weighted Context Loss(重要性加权上下文损失)

    • 为了填补较大缺失的图片,我们的方式是利用除去缺失部分剩余的像素,来捕获需要的信息。
    • 一个简单的方式采用(l2)规范计算生成的样本(G(Z))和输入图片(y)的非缺失部分的距离。但是这个损失平等的对待每个像素,这是不合理的。
    • 考虑特殊的情况:当图像的中间一小块像素缺失时,很大部分的损失计算损耗在远离孔的像素位置,例如面部后面的背景。为了找到正确的编码信息,我们更加注意靠近孔的缺失区域。
    • 为了实现这一目标,我们假设上下文损失中像素的重要性与周围像数正相关的假设。远离缺失部分的像素扮演很小的角色。
    • 我们用重要性加权来来承担每个像素的重要性,记为(W)
    • 32dnBT.jpg

    (i)是像素的下标,(W_i)表示下标为(i)的元素的重要性,(N(i))N是指像素(i)在局部窗口中的邻域集合,|$ N(i)(|是指)N (i)$的基数(个数)。我们定义窗口的大小为7个像素。

    • 凭经验,在实验中我们发现(l1)规范比(l2)规范更好一些。于是我们将两者都考虑了进来,我们将上下文损失定义为恢复的图像和未损坏部分之间的加权ℓ1-范数差。即,

    32wOyt.jpg

    其中⊙表示逐像素进行乘机。

    Prior Loss(先验损失)

    • 先验损失是指基于高级图像特征表示而不是逐像素差异的惩罚。先验损失鼓励修复的图像与从训练集中提取的样本相似。并且惩罚不真实的图像。

    • 回想一下,在GAN中,鉴别器(D)被训练为将生成的图像与真实图像区分开。 因此,我们选择先验损失与训练鉴别器(D)(GAN)损失函数相同,即32BuHf.jpg

      (λ)是平衡这两种损失的一个参数。(z)被更新为愚弄(D)并使相应生成的图像更真实。

    • 通过实验验证,我们发现添加了先验损失会使图像更加真实。如图4,略。

    Inpainting(修复)

    • 我们已经定义了上下文损失还用先验损失,待修复的图像可以映射到潜在的表示空间中最接近(Z),记为(Zˆ)(Z)被随机初始化并使用公式(2)中给出的总损耗的反向传播进行更新。
    • 图三(b)显示了一个例子,(Z)在潜在流形上接近期望解。
    • 生成(G(Zˆ))后,通过叠加输入的正常图片的像素,可以容易地获得修补结果。但是,我们发现,尽管内容正确且对齐良好,但预测像素可能无法完全保持周围像素的相同强度。Poisson blending [31]被应用在我们的最后结果上。关键是保持(G(Zˆ))的梯度以保持图像细节,同时移动颜色以匹配输入图像(y)中的颜色。
    • 我们最后的解决方案(xˆ)可以总结如下:

    32coRS.jpg

    其中,∇为梯度操作,最小化问题包含一个二次项,它具有唯一的解。

    Implementation Details(实施细节)

    • 一般来说,我们的贡献与特定的GAN结构是正交的,我们的方法可以利用任何生成模型G。

    • 本论文采用(DCGAN)

    • 生成模型(G)从[-1,1]之间的均匀分布中提取随机100维向量,并生成64×64×3图像。鉴别器模型(D)的结构基本上是逆序的。

    • 输入层是64×64×3,随后是一系列的卷积,图像的尺寸是前一层的一半,通道的数量是前一层的两倍,输出层是一个2类的softmax。采用Adam优化器,遵循引用[32]。λ = 0.003。

    • 我们还对训练图像执行随机水平翻转的数据增强。

    • 在修复阶段,我们需要利用反向传播在潜在空间中找到(zˆ)。我们使用Adam进行优化,并在每次迭代中将(z)限制为[-1,1],我们观察到这会产生更稳定的结果。我们在1500次迭代后终止反向传播。我们对所有测试数据集和MASK使用相同的设置。

    Experiments

    • 我们在试验阶段进行定性和定量的验证。

    Datasets and Masks

    • the CelebFaces Attributes Dataset (CelebA)

    • the Street View House Numbers (SVHN)

    • the Stanford Cars Dataset

    • 采用了5种不同的MASKS:1) central block masks; 2) random pattern masks, with approximately 25% missing; 3) 80% missing complete random masks; 4) half missing masks (randomly horizontal or vertical).

    Visual Comparisons

    • Comparisons with TV and LR inpainting.
    • Comparisons with NN inpainting.
    • Comparisons with CE.

    Quantitative Comparisons

    采用PSNR值来进行对比。

    发现与视觉比较中存在了一些矛盾,然后进行了一些介绍

    Discussion

    • 修复的效果,强烈依赖于生成模型和训练过程。
    • 有时候会存在很难在潜在空间中找到正确的(zˆ)
    • 当前GAN对于简单的结构表现比较好,对于现实真实存在的情况的代表性表现较弱。

    Conclusion

    我们提出了一种新的方法来实现图像的语义修复。与现在存在基于图像局部信息和PATCH的方法相比,还是很好的表现形式。与(CE)(2016 CVPR)相比,我们修复的图片更加真实。

  • 相关阅读:
    spoj227 树状数组插队序列问题
    hdu2838树状数组解逆序
    hdu2642二维树状数组单点更新
    hdu1556 树状数组区间更新单点查询板子
    hdu3015树状数组 poj1990的离散化版本
    poj1990两个树状数组
    Python中面向对象和类
    Python中面向对象和类
    Python中的字典dict
    Python中的字典dict
  • 原文地址:https://www.cnblogs.com/wenshinlee/p/12393201.html
Copyright © 2020-2023  润新知