【深度学习】【Image Inpainting】Generative Image Inpainting with Contextual Attention

Generative Image Inpainting with Contextual Attention

DeepFillv1 (CVPR’2018)

论文:https://arxiv.org/abs/1801.07892

论文代码:https://github.com/JiahuiYu/generative_inpainting

论文摘录

文章目录

  • 效果一览
  • 摘要
  • 介绍
  • 论文贡献
  • 相关工作
    • Image Inpainting
    • Global and local Wasserstein GANs
    • Spatially discounted reconstruction loss
  • Image Inpainting with Contextual Attention
    • Contextual Attention
    • Unified Inpainting Network
  • 训练
  • 模型大小和速度
  • 结论

效果一览

自然场景、人脸、纹理:
在这里插入图片描述

摘要

最近基于深度学习的方法在绘制图像中大块缺失区域的挑战性任务上显示出了有希望的结果。这些方法可以生成视觉上可信的图像结构和纹理,但往往会产生扭曲的结构或与周围区域不一致的模糊纹理。

这主要是由于卷积神经网络在明确地从distant spatial locations借用或复制信息时无效。另一方面,当需要从周围区域借用纹理时,传统的纹理和斑块合成方法尤其适用。

基于这些观察结果,我们提出了一种新的基于深度生成模型的方法,该方法不仅可以合成新的图像结构,还可以在网络训练中明确地利用周围图像特征作为参考来进行更好的预测。该模型是一个前馈、全卷积神经网络,可以在测试时间内处理任意位置的多个孔和不同大小的图像。在包括人脸(CelebA, CelebA- hq),纹理(DTD)和自然图像(ImageNet, Places2)在内的多个数据集上的实验表明,我们提出的方法比现有的方法产生更高质量的图像绘制结果。

介绍

Filling missing pixels of an image ,通常称为image inpainting or completion,是计算机视觉中的一项重要任务。它在照片编辑、基于图像的渲染和计算摄影中有许多应用[3,25,30,31,36,41]。图像绘制的核心挑战在于为缺失区域合成视觉上真实和语义上合理的像素,这些像素与现有区域一致(The core challenge of image inpainting lies in synthesizing visually realistic and semantically plausible pixels for the missing regions that are coherent with existing ones.)。

PS. 都会谈到早期基于diffusion和patch的工作,不能生成新的对象,比如脸部不能生成嘴巴,现在基于GAN的方式是更优的。

早期的工作[3,14]尝试使用类似于纹理合成texture synthesis[10,11]的思路来解决这个问题,即从低分辨率到高分辨率开始匹配和复制背景补丁到孔中,或者从孔边界传播。这些方法在背景绘制任务中效果很好,并且在实际应用中得到了广泛的应用[3]。然而,由于他们假设缺失的补丁可以在背景区域的某个地方找到,他们无法在具有挑战性的情况下产生新的图像内容,因为在绘制区域涉及复杂的,非重复的结构(例如面孔,物体)。此外,这些方法不能捕获高级语义。

深度卷积神经网络(CNN)和生成式对抗网络(GAN)[12]的快速发展启发了最近的研究[17,27,32,41],他们将inpainting定义为一个条件图像生成问题 conditional image generation problem ,其中高级识别和低级像素合成被制定为卷积编码器-解码器网络。与对抗网络联合训练,以促进生成和现有像素之间的一致性。这些作品被证明在高度结构化的图像中产生可信的新内容,如面孔、物体和场景。

不幸的是,这些基于cnn的方法经常会产生边界伪影boundary artifacts,扭曲的结构distorted structures和与周围区域不一致的模糊纹理blurry textures inconsistent with surrounding areas。我们发现这可能是由于卷积神经网络在模拟远距离上下文信息(distant contextual information)和空洞区域之间的长期相关性方面的有效性出现了问题。例如,为了允许一个像素受到64像素外内容的影响,它需要至少6层3 × 3的卷积,膨胀因子为2或equivalent [17,42]。然而,dilated convolution从规则和对称网格中采样特征,因此可能无法权衡感兴趣的特征。请注意,最近的一项工作[40]试图通过优化已知区域中生成的补丁和匹配补丁之间的纹理相似性来解决外观差异。虽然提高了视觉质量,但这种方法被数百次梯度下降迭代所拖慢,并且在gpu上处理分辨率为512 × 512的图像需要几分钟。

我们提出了一种统一的前馈生成网络,该网络具有新颖的上下文注意层。我们提出的网络包括两个阶段。第一阶段是用重建损失训练一个简单的dilated convolutional network 来粗略地列出遗漏的内容( to rough out the missing contents)。 contextual attention 在第二阶段被整合。上下文注意力的核心思想是使用已知补丁的特征作为卷积滤波器来处理生成的补丁。它是通过卷积来设计和实现的,用于将生成的补丁与已知的上下文补丁进行匹配,通过channel-wise softmax 来加权相关补丁,并通过去卷积来重建具有上下文补丁的生成补丁。上下文注意力模块还具有 spatial propagation layer ,以鼓励注意力的空间连贯性。为了让网络能产生新内容(hallucinate novel contents),我们有另一个与上下文注意力通路平行的卷积通路。这两条路径被聚合并馈送到单个解码器中以获得最终输出。整个网络是以重建损失和两个Wasserstein GAN损失进行端到端训练的[1,13],其中一个critic 关注全局图像,而另一个则关注缺失区域的局部补丁。

论文贡献

1、我们提出了一种新的上下文注意力层(novel contextual attention layer ),以明确地关注遥远空间位置(distant spatial locations)的相关特征块。
2、我们介绍了几种技术,包括修复网络增强( inpainting network enhancements)、全局和局部WGAN[13](global and local WGANs)以及空间折扣重建损失(spatially discounted reconstruction loss ),以在当前最先进的生成图像修复网络[17]的基础上提高训练稳定性和速度。因此,我们能够在一周内而不是两个月内对网络进行训练。

博客上一篇读到的:
在这里插入图片描述
3、我们的统一前馈生成网络在各种具有挑战性的数据集上实现了高质量的修复结果,包括CelebA人脸[28]、CelebAHQ人脸[22]、DTD纹理[6]、ImageNet[34]和Places2[43]。

相关工作

Image Inpainting

传统的基于扩散或补丁的方法,如[2,4,10,11],通常使用变分算法或补丁相似性来将信息从背景区域传播到空穴。这些方法适用于平稳纹理,但仅限于自然图像等非平稳数据。Simakov等人[36]提出了一种基于双向补丁相似性的方案,以更好地为非平稳视觉数据建模,用于重新定位和修复应用。然而,密集计算补丁相似性[36]是一项非常昂贵的操作,这阻碍了这种方法的实际应用。为了应对这一挑战,提出了一种称为PatchMatch[3]的快速最近邻场算法,该算法对包括修复在内的图像编辑应用具有重要的实用价值。

最近,深度学习和基于GAN的方法已经成为图像修复的一种很有前途的范例。最初的努力[23,39]训练卷积神经网络用于小区域的去噪和修复。上下文编码器[32]首先训练用于修复大洞的深度神经网络。它被训练来完成128×128图像中64×64的中心区域,以“2像素的重建损失和生成对抗性损失”作为目标函数。最近,Iizuka等人[17]通过引入全局和局部鉴别器作为对抗性损失对其进行了改进。全局鉴别器评估完成的图像整体上是否连贯,而局部鉴别器聚焦于以生成区域为中心的小区域,以增强局部一致性。此外,Iizuka等人[17]在修复网络中使用扩张卷积来取代上下文编码器中采用的通道式全连接层,这两种技术都被提出用于增加输出神经元的感受野。同时,也有一些研究集中在生成性人脸修复。Yeh等人[41]在受损图像的潜在空间中搜索最接近的编码,并进行解码以获得完整的图像。李等人[27]介绍了用于人脸完成的额外人脸解析损失。然而,这些方法通常需要后处理步骤,例如图像混合操作,以增强孔边界附近的颜色一致性。 PS 这也是痛点。

一些工作[37,40]遵循了图像风格化[5,26]的思想,将修复表述为一个优化问题。例如,Yang等人[40]提出了一种基于图像内容和纹理约束的联合优化的多尺度神经补丁合成方法,该方法不仅保留了上下文结构,而且通过匹配和调整深度分类网络中具有最相似中层特征相关性的补丁来产生高频细节。这种方法显示出有希望的视觉结果,但由于优化过程,速度非常慢。

在深度卷积神经网络中,已经有许多关于学习空间注意力的研究。在这里,我们选择回顾与所提出的上下文注意力模型相关的一些有代表性的模型。Jaderberg等人[19]首次提出了一种用于对象分类任务的参数空间注意力模块,称为空间变换网络(STN)。

该模型具有定位模块,用于预测全局仿射变换到扭曲特征的参数。然而,该模型假设全局变换,因此不适合对逐片注意力进行建模。周等人[44]引入了一种外观流来预测偏移向量,该偏移向量指定了输入视图中的哪些像素应该被移动以重建目标视图,用于新的视图合成。根据我们的实验,这种方法被证明对匹配相同物体的相关视图是有效的,但对预测从背景区域到洞的流场是无效的。最近,Dai等人[8]和Jeon等人[20]提出学习空间注意或主动卷积核。这些方法可以在训练过程中更好地利用信息来变形卷积核形状,但当我们需要从背景中借用确切的特征时,这些方法可能仍然受到限制。

我们首先通过复制和对最新的最先进的绘画模型[17]进行若干改进来构建基线生成图像绘画网络,该模型在面部、建筑立面和自然图像的绘画图像中显示出有希望的视觉效果。

我们改进的模型的网络架构如图2所示。对于训练和推理,我们遵循与[17]相同的输入和输出配置,即生成器网络将填充有洞的白色像素的图像和表示洞区域的二值掩码作为输入对,并输出最终完成的图像。我们将输入与相应的二进制掩模配对,以处理具有可变大小,形状和位置的孔。网络的输入是一张256 × 256的图像,在训练时随机采样一个矩形缺失区域,训练后的模型可以取不同大小的图像,其中有多个孔。

在图像绘制任务中,接受野的大小需要足够大,Iizuka等[17]为此采用了扩展卷积。为了进一步扩大接收域和稳定训练,我们引入了一种两阶段的从粗到细的网络架构,其中第一个网络进行初始粗预测,第二个网络将粗预测作为输入并预测精细结果。粗网络明确地使用重构损失进行训练,而精化网络则同时使用重构损失和GAN损失进行训练。从直观上看,细化网络比缺失区域的原始图像看到了更完整的场景,因此其编码器可以比粗网络学习到更好的特征表示。这种两阶段网络架构在精神上类似于残差学习[15]或深度监督[24]。

此外,为了提高效率,我们的inpainting网络采用了细而深的设计方案,其参数比文献[17]中的网络少。在层实现方面,我们对所有卷积层使用镜像填充,并删除批处理归一化层18。此外,我们使用elu[7]作为激活函数,而不是[17]中的ReLU,并剪辑输出滤波器值,而不是使用tanh或sigmoid函数。此外,我们发现在GAN训练中分离全局和局部特征表示比[17]中的特征连接效果更好。更多的细节可以在补充材料中找到。

在这里插入图片描述

Global and local Wasserstein GANs

与之前依赖DCGAN[33]进行对抗性监督的生成式绘画网络[17,27,32]不同,我们建议使用改进版本的WGAN-GP[1,13]。受[17]的启发,我们将WGAN-GP损失附加到第二阶段细化网络的全局和局部输出上,以加强全局和局部一致性。众所周知,WGAN-GP损失在图像生成任务中优于现有的GAN损失,并且当与L1重建损失结合使用时效果很好,因为它们都使用L1距离度量。

PS. WGAN-GP https://blog.csdn.net/xiaoxifei/article/details/87542317 这是一个重要知识点。

WGAN(Wasserstein生成对抗网络)和WGAN-GP(Wasserstein生成对抗网络梯度惩罚)是生成对抗网络(GAN)的改进版本,它们主要通过引入Wasserstein距离来解决传统GAN中存在的训练不稳定和模式崩溃的问题。

区别在于:

损失函数:WGAN使用了Wasserstein距离作为生成器和判别器之间的训练目标。它通过最大化判别器对真实样本的期望输出与生成样本的期望输出之差来衡量两个分布之间的距离。而WGAN-GP在WGAN的基础上,通过引入梯度惩罚项来进一步限制判别器的Lipschitz连续性,使得训练更加稳定。

梯度惩罚:WGAN-GP使用梯度惩罚来替代WGAN中的权重裁剪。在WGAN-GP中,对判别器的输入数据和生成样本之间的随机线性插值进行采样,并计算这些样本对应的判别器梯度的范数。然后将这个范数减去1并求平均,作为生成器和判别器的梯度惩罚项。

训练稳定性:WGAN-GP相对于WGAN具有更好的训练稳定性。它通过梯度惩罚项来强制判别器满足Lipschitz连续性,避免了训练过程中梯度消失或爆炸的问题,从而提高了模型的收敛性和生成样本的质量。

总的来说,WGAN-GP是对WGAN的改进,通过引入梯度惩罚项解决了WGAN在训练稳定性上的一些问题,提高了生成对抗网络的性能和可靠性。

Spatially discounted reconstruction loss

绘画问题涉及到像素的幻觉,因此在任何给定的环境下都可能有许多看似合理的解决方案。在具有挑战性的情况下,看似完整的图像可能具有与原始图像中非常不同的补丁或像素。由于我们使用原始图像作为计算重建损失的唯一基础,因此在这些像素上强制执行重建损失可能会误导卷积网络的训练过程。

直观地说,靠近孔边界的缺失像素比靠近孔中心的那些像素具有更少的模糊性。这与在强化学习中观察到的问题类似。当长期奖励在采样过程中有较大变化时,人们在采样轨迹上使用时间贴现奖励[38]。受此启发,我们使用权重掩模M引入空间贴现重建损失Spatially discounted reconstruction loss。掩模中每个像素的权重计算为γ l,其中l是像素到最近的已知像素的距离。γ在所有实验中都被设置为0.99。
通过以上改进,我们的基线生成绘制模型的收敛速度比[17]快得多,绘制结果也更准确。对于Places2[43],我们将训练时间从[17]报道的11,520 gpu小时(K80)减少到120 gpu小时(GTX 1080),这几乎是100倍的加速。并且,不再需要后处理步骤(图像混合)[17]。

Image Inpainting with Contextual Attention

卷积神经网络用局部卷积核逐层处理图像特征,因此不是有效地从遥远的空间位置借用特征。为了克服这种局限性,我们考虑了注意机制,并在深度生成网络中引入了一种新的上下文注意层。在本节中,我们首先讨论上下文注意层的细节,然后讨论如何将其集成到我们unified inpainting network。

Contextual Attention

The contextual attention layer 学习在何处从已知的背景补丁中借用或复制特征信息以生成缺失的补丁。它是可微的,因此可以在深度模型中训练,并且是完全卷积的,这允许在任意分辨率上进行测试。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Unified Inpainting Network

为了集成注意力模块,我们在图2的基础上引入两个并行编码器,如图4所示。底部的编码器通过逐层(扩展)卷积专门关注幻觉内容,而顶部的编码器则试图关注感兴趣的背景特征。来自两个编码器的输出特征被聚合并馈送到一个单个解码器获得最终输出。为了解释上下文注意,我们以图4所示的方式将其可视化。

我们使用颜色来表示每个前景像素最感兴趣的背景补丁的相对位置。例如,白色(颜色编码图的中心)表示像素关注自身,左下角为粉色,右上角为绿色。偏移值根据不同的图像进行不同的缩放,以最好地显示最有趣的范围。

在这里插入图片描述

训练

在这里插入图片描述

模型大小和速度

在这里插入图片描述

结论

我们提出了一个从粗到精的生成图像绘画框架,并引入了我们的基线模型以及一个具有新颖上下文注意模块的完整模型。我们发现上下文注意模块通过学习明确匹配和关注相关背景补丁的特征表示,显著改善了图像绘制结果。作为未来的工作,我们计划将该方法扩展到非常高分辨率的绘画应用,使用类似于gan渐进生长的想法[22]。所提出的绘图框架和上下文关注模块也可以应用于条件图像生成、图像编辑和计算摄影任务,包括基于图像的渲染、图像超分辨率、引导编辑等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/50252.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity XML1——XML基本语法

一、XML 概述 ​ 全称:可拓展标记语言(EXtensible Markup Language) ​ XML 是国际通用的,它是被设计来用于传输和存储数据的一种文本特殊格式,文件后缀一般为 .xml ​ 我们在游戏中可以把游戏数据按照 XML 的格式标…

23款奔驰GLS450加装原厂香氛负离子系统,清香宜人,久闻不腻

奔驰原厂香氛合理性可通过车内空气调节组件营造芳香四溢的怡人氛围。通过更换手套箱内香氛喷雾发生器所用的香水瓶,可轻松选择其他香氛。香氛的浓度和持续时间可调。淡雅的香氛缓缓喷出,并且在关闭后能够立刻散去。车内气味不会永久改变,香氛…

maven编译报错

参考链接:mvn打包No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK_51CTO博客_mvn打包命令 在执行 yum install -y java-1.8.0-opensdk命令后,使用maven去编译打包,结果报错, …

STM32MP157驱动开发——按键驱动(工作队列)

文章目录 “工作队列”机制:内核函数work_struct 结构体定义 work使用 work :schedule_workworkqueue 其他函数 工作队列方式的按键驱动程序(stm32mp157)编程思路button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “工作队列”机制&#xff1…

找不到vcruntime140.dll无法继续执行代码怎么办?(详解)

1.vcruntime140.dll是什么?有什么作用? vcruntime140.dll是Windows操作系统中的一个动态链接库文件,它属于Microsoft Visual C Redistributable的一部分。DLL是Dynamic Link Library的缩写,它包含了一系列函数和资源,…

Linux 系列 常见 快捷键总结

强制停止 Ctrl C 退出程序、退出登录 Ctrl D 等价 exit 查看历史命令 history !命令前缀,自动匹配上一个命令 (历史命令中:从最新——》最老 搜索) ctrl r 输入内去历史命令中检索 # 回车键可以直接执行 ctrl a 跳到命令开头 …

【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?

文章目录 前言声明和初始化扩容时机源码分析go1.17go1.18内存对齐 总结 前言 在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装…

springboot+mybatis-plus+vue+element+vant2实现短视频网站,模拟西瓜视频移动端

目录 一、前言 二、管理后台 1.登录 2.登录成功,进入欢迎页 ​编辑 3.视频分类管理 4. 视频标签管理 5.视频管理 6.评论管理 ​编辑 7.用户管理 8.字典管理 (类似于后端的枚举) 9.参数管理(富文本录入) 10.管…

第12章 Linux 实操篇-Linux磁盘分区、挂载

12.1 Linux 分区 12.1.1 原理介绍 (1) Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构, Linux中每个分区都是用来组成整个文件系统的一部分。 (2) Linux采用了一种叫“载入”的处理方法,…

LeetCode 75 第十三题(1679)K和数对的最大数目

题目: 示例: 分析: 给一个数组,两个和为K的数为一组,问能凑成几组。 既然一组是两个数,那么我们可以使用双指针分别指向数组首尾,然后再判断能否凑成和为K的组. 在使用双指针寻找之前,我们应当先将数组排序(升序降序都无所谓),…

Python Web开发技巧VII

目录 装饰器inject_serializer 装饰器atomic rebase git 清理add的数据 查看git的当前工作目录 makemigrations文件名称 action(detailTrue, methods["GET"]) 如何只取序列化器的一个字段进行返回 Response和JsonResponse有什么区别 序列化器填表和单字段如…

红黑树与平衡二叉树

文章目录 前言一、平衡二叉树二、红黑树区别 前言 数据库的底层用到了多种树结构,这里简单记录一下红黑树与平衡二叉树。 一、平衡二叉树 满足二叉树。任何节点的两个子树的高度最大差为1。如果对平衡二叉树进行删除和新增,那么会破坏平衡,…

JavaSE - Sting类

目录 一. 字符串的定义 二. String类中的常用方法 1. 比较两个字符串是否相等(返回值是boolean类型) 2. 比较两个字符串的大小(返回值是int类型) 3. 字符串查找 (1)s1.charAt(index) index:下标&…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机当前实时帧率(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来计算相机的实时帧率(C#) Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在BGAPI SDK里通过函数获取相机帧率 Baumer工业相机通过BGA…

剑指 Offer 26. 树的子结构

思路: 先统计B数的非空节点数countB。然后前序遍历A,当遇到A的值和B的第一个值相等时,则进行统计左右结构和值都相等的节点数和sum,如果sum countB,则true。 /*** Definition for a binary tree node.* public class…

CSS 高频按钮样式

矩形与圆角按钮 正常而言&#xff0c;我们遇到的按钮就这两种 -- 矩形和圆角&#xff1a; 它们非常的简单&#xff0c;宽高和圆角和背景色。 <div classbtn rect>rect</div><div classbtn circle>circle</div>.btn {margin: 8px auto;flex-shrink: 0;…

网络设备中的配置文件管理

建立强大网络的第一步是为灾难和网络中断做好准备&#xff0c;许多企业在中断期间遭受损失&#xff0c;因为他们缺乏备份计划并且配置管理不达标&#xff0c;使用配置文件管理工具进行适当的配置文件管理不仅有助于处理网络中断&#xff0c;还有助于优化网络性能。 使用配置文…

Redis 集群部署

Redis 3.0 版本后正式推出 Redis 集群模式,该模式是 Redis 的分布式的解决方案,是一个提供在多个 Redis 节点间共享数据的程序集,且 Redis 集群是去中心化的,它的每个 Master 节点都可以进行读写数据,每个节点都拥有平等的关系,每个节点都保持各自的数据和整个集群的状态…

QT控件通过qss设置子控件的对齐方式、大小自适应等

一些复杂控件&#xff0c;是有子控件的&#xff0c;每个子控件&#xff0c;都可以通过qss的双冒号选择器来选中&#xff0c;进行独特的样式定义。很多控件都有子控件&#xff0c;太多了&#xff0c;后面单独写一篇文章来介绍各个控件的子控件。这里就随便来几个例子 例如下拉列…

Java | 数组排序算法

一、冒泡排序 冒泡排序的基本思想是对比相邻的元素值&#xff0c;如果满足条件就交换元素值&#xff0c;把较小的元素移到数组前面&#xff0c;把较大的元素移到数组后面&#xff08;也就是交换两个元素的位置&#xff09;&#xff0c;这样较小的元素就像气泡一样从底部升到顶…