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

news2024/11/18 9:50:03

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.coloradmin.cn/o/788761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据备份与恢复练习

目录 1.创建student和score表 2.为student表和score表增加记录 3.备份数据库school到/backup目录 4.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 5.直接将MySQL数据库压缩备份 6.备份MySQL数据库某个(些)表。此例备…

『Python学习笔记』Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号

Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号 文章目录 一. pip包的好处二. 简单小例子2.1. 创建Python包2.2. 构建Python包2.3. 上传到PyPI2.4. pip安装测试 三. CLIP多模态模型相关例子3.1. Chinese-CLIP例子3.2. CLIP-ONNX例子3.3. 问题1和问题…

vue使用driver.js完成页面引导的功能

需求:用户首次进入的时候肯定不知道一些功能是干什么在哪里,之后给用户一个页面引导,教他怎么做。 点击插件driver.js官方文档 效果: 1.下载driverjs 我默认下载的是最新版 "driver.js": "^1.0.5",&#x…

MySQL 高级SQL语句(一)

目录 一、高级SQL语句(进阶查询) 1.1 select 1.2 distinct 1.3 where 1.4 and 和 or 1.5 in 1.6 between 1.7 通配符 1.8 like 1.9 order by 一、高级SQL语句(进阶查询) 先准备2个表 一个location表: use m…

私人记账本程序cashbook

什么是 cashbook ? cashbook 是一个私人或家庭记账程序,支持私有化部署,商用或其他使用不受约束。建议使用者每年创建一个账本,图表功能可以起到分析全年数据的效果。 官方提供了演示站点,但不建议记录真实数据 演示账…

ardupilot 遥控的输入控制模式

目录 本节主要记录自己整理ardupilot的遥控器的输入控制模式:正常模式、简单模式、超简单模式的理解。 1.正常模式(有头模式) 在不用简单和超简单的模式的情况下,无人机操作员操作的控制输入是对应着不断旋转着的飞行器进行操作的。如上方图所示举例,当无人机操作员进行…

flask中的werkzeug介绍

flask中的werkzeug Werkzeug是一个Python库,用于开发Web应用程序。它是一个WSGI(Web Server Gateway Interface)工具包,提供了一系列实用功能来帮助开发者处理HTTP请求、响应、URLs等等。Werkzeug的设计非常灵活,可以…

基础入门-SpringBoot-自动配置特性

一、自动配好Tomcat 引入Tomcat依赖。配置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.3.4.RELEASE</version><scope>compile</sco…

同城跑腿小程序怎么做

同城跑腿小程序是一款基于地理位置的服务平台&#xff0c;为用户提供了便捷的日常生活服务。以下是该小程序的主要功能介绍&#xff1a; 1. 快速下单&#xff1a;用户可以通过小程序平台快速填写订单信息&#xff0c;包括取送地址、物品类型和重量等信息&#xff0c;然后选择合…

LabVIEW开发环境试验箱控制器

LabVIEW开发环境试验箱控制器 环境或气候试验箱是一种外壳&#xff0c;用于模拟各种材料&#xff08;包括工业产品、生物物质、复合材料、电子设备和航空航天部件&#xff09;的特定环境条件&#xff0c;并评估调节对这些材料的影响。 环境试验箱&#xff08;ETC&#xff09;…

存储过程——游标

1.游标 什么是游标&#xff0c;以及游标使用的相关语法。 #声明游标&#xff0c;存储查询结果集 #准备&#xff1a;创建表结构 #开启游标 #获取游标中的记录 #插入数据到新表中 #关闭游标 create procedure p11(in uage int) begindeclare uname varchar(100);declare upro …

Istio 故障注入与重试的实验

故障注入 Istio流量治理有故障注入的功能&#xff0c;在接收到用户请求程序的流量时&#xff0c;注入故障现象&#xff0c;例如注入HTTP请求错误&#xff0c;当有流量进入Sidecar时&#xff0c;直接返回一个500的错误请求代码。 通过故障注入可以用来测试整个应用程序的故障恢…

DYLD--动态链接器

概念 dyld&#xff08;the dynamic link editor&#xff09;是苹果的动态链接器&#xff0c;是苹果操作系统一个重要组成部分&#xff0c;在系统内核 XNU 完成 Mach-O 文件的加载&#xff0c;做好程序准备工作之后&#xff0c;交由 dyld 负责余下的工作。在 macOS 系统中&…

vue2引入lottie动画

说明下&#xff1a;如果你是vue3的话请移步&#xff1a;https://blog.csdn.net/qq_67801847/article/details/128386661&#xff0c;这里只针对vue2. 同时动画官网链接&#xff1a;lottie官网 实现思路&#xff1a; 1. 安装lottie-web (版本无所谓) 2. 在使用的页面引入组件 #…

一起来看看音频转文字怎么弄吧

从前有一个名叫小明的学生&#xff0c;他在学校里总是很喜欢录制各种有趣的音频&#xff0c;包括老师的讲课、同学们的笑声&#xff0c;以及校园里的各种声音。有一天&#xff0c;他在课堂上录下了老师的授课内容&#xff0c;想着晚上回家后再将它们转换成文字&#xff0c;便于…

网络安全(黑客)学习手册

1.什么是网络安全&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一是市场需求量高&#xff1b; 二则是发展…

Python+大数据开发拿到25k的offer!

随着95后、00后的登场&#xff0c;80后好似成为“古早”的存在&#xff0c;看似被生活磨平了棱角的他们&#xff0c;其实也在渴望重新“支棱”起来。今天分享的这位80后的逆袭故事&#xff0c;希望你能感受到他的力量…… 学科 | Python大数据开发 校区 | 北京 薪资 | 25k 我…

【深度学习之YOLO8】视频流推断

官方V8模型下载 需要准备两个东西 simsun.ttc字体包YOLOv8官方模型成品 ScreenCapture屏幕图像类 import cv2 import mss import numpy as npclass ScreenCapture:"""parameters----------screen_resolution : Tuple[int, int]屏幕宽高&#xff0c;分别为x&a…

5.2.11.添加读写接口

5.2.11.添加读写接口 5.2.11.1、在驱动中添加 5.2.11.2、在应用中添加 5.2.11.3、测试 1. app.c #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>#define FILE "/dev/test" // 刚才mknod创建的设…

K8S中网络如何通信

Kubernetes 提出了一个自己的网络模型“IP-per-pod”&#xff0c;能够很好地适应集群系统的网络需求&#xff0c;它有下面的这 4 点基本假设&#xff1a; 集群里的每个 Pod 都会有唯一的一个 IP 地址。Pod 里的所有容器共享这个 IP 地址。集群里的所有 Pod 都属于同一个网段。…