【深度学习】【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.mzph.cn/news/8581.shtml

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

相关文章

【Java SE】类和对象

目录 【1】面向对象的初步认识 【1.1】什么是面向对象 【1.2】面向对象与面向过程 【2】类定义和使用 【2.1】简单认识类 【2.2】类的定义格式 【2.3】练习 【2.3.1】定义一个狗类 【2.3.2】定义一个学生类 【3】类的实例化 【3.1】什么是实例化 【3.2】类和对象的…

【Java基础学习打卡18】运算符(上)

目录 前言一、运算符和表达式1.运算符2.表达式 二、算术运算符1.加法运算符2.减法运算符3.乘法运算符4.除法运算符5.取余运算符6.表达式类型自动提升 总结 前言 本文主要介绍运算符和表达式,及运算符中的算术运算符。在 Java 编程中,运算符起着非常重要…

Java 使用 Google Guava 实现接口限流

一、引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version> </dependency>二、自定义注解及限流拦截器 自定义注解&#xff1a;Limiter package com.haita…

安装requests模块及其他依赖库的完美解决办法

业务场景 导入requests库时报错&#xff0c;单独离线下载安装requests&#xff0c;发现仍然报错&#xff0c;问题在于requests库有其他依赖库。 WARNING: Retrying (Retry(total1, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnect…

PgSQL-使用技巧-如何衡量网络对性能的影响

PgSQL-使用技巧-如何衡量网络对性能的影响 PG数据库和应用之间常见的部件有连接池、负载平衡组件、路由、防火墙等。我们常常不在意或者认为涉及的网络hops对整体性能产生的额外开销是理所当然的。但在很多情况下&#xff0c;它可能会导致严重的性能损失和拖累整体吞吐量。相当…

Set集合类详解(附加思维导图)

目录 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 2.2、TreeSet集合的使用 三、HashSet、LinkedHashSet、TreeSet的使用场景 四、list和set集合的区别 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 ①&#xff1a;add…

redis面试1

Redis基础面试题 1、为什么要使用Redis做缓存 缓存的好处 使用缓存的目的就是提升读写性能。而实际业务场景下&#xff0c;更多的是为了提升读性能&#xff0c;带来更好的性 能&#xff0c;带来更高的并发量。Redis 的读写性能比 Mysql 好的多&#xff0c;我们就可以把 Mysq…

【小白必看】利用Python生成个性化名单Word文档

文章目录 前言所需文件及文件格式说明excel数据如下word 模板如下文件目录格式及生成后的文件 导入所需的模块&#xff1a;打开 Excel 文件&#xff1a;选择工作表&#xff1a;获取数据列表&#xff1a;遍历数据并生成 Word 文档&#xff1a;完整代码结束语 前言 对于需要批量…

【MyBatis 学习一】认识MyBatis 第一个MyBatis查询

目录 一、认识MyBatis 1、MyBatis是什么&#xff1f; 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目 3、xml文件配置 &#xff08;1&#xff09;配置数据库连接 &#xff08;2&#xff09;配置 MyBatis 中的 XML 路径 三、测试&#x…

mysql(三)用户权限管理

目录 前言 一、概述 二、用户权限类型 三、用户赋权 四、权限删除 五、删除用户 前言 为什么要设置用户权限&#xff1f; MySQL设置用户管理权限的主要目的是为了确保数据库的安全性和数据的机密性。以下是一些原因&#xff1a; 1. 安全性&#xff1a;MySQL是一个开源的关系型…

Java集合之List

ArrayLsit集合 ArrayList集合的特点 ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素&#xff0c;index从0开始。 public class Test {public static void m…

dependency walker工具简介及使用

dependency walker工具 简介使用 简介 官方概述&#xff1a; Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. For each module found, …

C++ 核心编程

一、 内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理 全局区&#xff1a;存放全局变量和静态变量以及常量 栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值、…

gensim conherence model C_V 值与其他指标负相关BUG

在我用gensim3.8.3 conherence model分析京东评论主题模型时&#xff0c; C_V 与npmi、u_mass出现了强烈的皮尔逊负相关&#xff1a; 这些地方也反映了类似问题&#xff1a; https://github.com/dice-group/Palmetto/issues/12 https://github.com/dice-group/Palmetto/issue…

测等保2.0——安全区域边界

一、前言 今天我们来说说安全区域边界&#xff0c;顾名思义&#xff0c;安全区域边界就是保障网络边界处&#xff0c;包括网络对外界的边界和内部划分不同区域的交界处&#xff0c;我们的重点就是查看这些边界处是否部署必要的安全设备&#xff0c;包括防火墙、网闸、网关等安…

git相关

gerrit用户指南&#xff1a; 资料&#xff1a;Gerrit 用户指南 gerrit-user-guide 上述有介绍如何review&#xff0c;review并非修改代码之后如何重新提交等操作 jenkins介绍 Jenkins详细教程 - 知乎 一、jenkins是什么&#xff1f; Jenkins是一个开源的、提供友好操作界…

使用Ensp配置DHCP协议

如何使用Ensp配置DHCP协议&#xff0c;为PC自动分配IP地址 什么是DHCP&#xff1f; Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff0c;简单理解为自动分配IP地址&#xff0c;有了这个协议就不用手动配置IP地址了&#xff0c;如图 思路 给路由…

Ubuntu 上编译protobuf 指

欢迎大家关注我的B站主页MYVision_MY视界的个人空间-MYVision_MY视界个人主页-哔哩哔哩视频 下载protobuf GitHub - protocolbuffers/protobuf: Protocol Buffers - Googles data interchange format 根据需要从release 中下载指定的版本 下载完之后&#xff0c;根据提供的C…

Godot 4 着色器 - Shader调试

我之前用OpenCV进行图像相关处理&#xff0c;觉得已经很不错&#xff0c;结合GDI可以实现流畅的动画效果 直到近来用Shader后才发现&#xff0c;着色器更上一层楼&#xff0c;原来这是入了GPU的坑 Shader编程限制很多&#xff0c;各种不支持&#xff0c;看在它性能不错功能炫…

发布npm包流程

发布npm包的步骤如下&#xff1a; 在终端中通过 npm init 命令创建一个新的npm包&#xff0c;按照提示填写包的信息&#xff0c;如包名称、版本、描述、作者、许可证等。 在包的根目录下创建一个 index.js 文件&#xff0c;编写你的代码。 确认你已经注册了npm账号&#xff0…