【深度学习】Inst-Inpaint: Instructing to Remove Objects with Diffusion Models,指令式图像修复

news2024/11/18 6:02:41

论文:https://arxiv.org/abs/2304.03246
code:http://instinpaint.abyildirim.com/

文章目录

  • Abstract
  • Introduction
  • Related Work
  • Dataset Generation
  • Method
  • PS

Abstract

图像修复任务是指从图像中擦除不需要的像素,并以语义一致且逼真的方式填充它们。传统上,希望被擦除的像素由二值化掩码定义。从应用的角度来看,用户需要为他们想要去除的对象生成这些掩码,这可能耗时且容易出错。在这项工作中,我们对一种图像修复算法感兴趣,它可以根据自然语言输入来估计要移除的对象,并且同时移除它。为此,首先,我们构建了一个名为GQA-Inpaint的数据集,用于这个任务,该数据集即将发布。其次,我们提出了一种新颖的修复框架,名为Inst-Inpaint,它可以根据以文本提示形式给出的指令从图像中去除对象。我们设定了各种基于GAN和扩散的基准模型,并在合成和真实图像数据集上进行实验。我们使用不同的评估指标来衡量模型的质量和准确性,并展示了显著的定量和定性改进。项目的网页链接:http://instinpaint.abyildirim.com/

该论文主要实现了以下工作:

  1. 提出了一项新的任务——指令式图像修复:研究了通过文本指令来执行图像修复任务,而无需使用传统的二值掩码。

  2. 构建了一个新的图像修复数据集——GQA-Inpaint:该数据集包含复杂的真实图像,而不需要任何人工标注,使用了GQA数据集的场景图信息。

  3. 开发了一种新颖的条件扩散模型——Inst-Inpaint:该模型可以在给定图像和文本指令的情况下执行图像修复,并将图像修复问题转化为条件扩散模型的训练任务。

  4. 使用U-Net架构:在模型中采用U-Net架构用于特征提取和图像修复。

  5. 使用交叉注意机制:为了实现文本条件的修复任务,使用了交叉注意机制将文本指令与模型的特征进行关联。

  6. 实现细节:详细描述了模型的实现和训练细节,包括对CLEVR和GQA-Inpaint数据集上的模型进行训练。

这篇论文提出了一种新的指令式图像修复任务,并开发了一种新颖的条件扩散模型,以在给定图像和文本指令的情况下执行图像修复。通过构建新的数据集并进行实验证明了该方法的有效性。

Introduction

图像修复指的是从图像中移除不需要的对象和/或填补图像中缺失的区域。这被认为是极具挑战性的,因为修复后的图像中的被修复区域应该与其他部分和谐一致。在进行像素填充时,修复方法应该考虑全局图像内容。传统的研究方法使用二值掩码来标示缺失区域。近期的图像修复方法利用深度学习框架,配备生成先验,并将修复任务构建为一个监督学习问题。训练数据包括作为源数据和目标数据的输入和被擦除图像对,并且模型通常使用基于重建的目标进行训练。尽管过去几年来图像修复方法在性能上不断改进,但这些方法仍然需要在推断时提供用户指定的掩码。这些掩码可以以细或厚的刷笔涂抹或方框的形式提供,但绘制这些掩码通常很繁琐且容易出错。

近期,基于文本的图像生成和编辑引起了广泛关注。特别是在训练时使用大规模的图像-文本数据,像DALL·E2、Stable Diffusion、Imagen和Parti等模型展示了卓越的生成能力,并有效地捕捉了图像的组成结构。此外,使用文本可以更自然和用户友好地控制图像。研究人员还表明这些方法可以通过额外条件化模型的方式轻松地用于图像修复,只需在模型上附加二值掩码,并告诉模型如何在掩码内填充内容。然而,这种方法更适合于操作对象的属性或添加新的场景元素,但可能不太适合于移除对象。例如,请参见Blended Latent Diffusion模型。

在本工作中,我们引入了一项称为"指令式图像修复"的新任务,其中只通过文本指令来指定要移除的不需要的对象,无需使用二值掩码(见图1)。为了解决这个问题,我们首先使用GQA数据集构建数据生成流程,创建一个新的基准数据集,称为GQA-Inpaint。其次,我们设计了一种单阶段深度修复网络,称为Inst-Inpaint,它可以使用文本指令从图像中移除对象。与现有的修复方法相比,我们的模型不需要掩码,也不需要明确地预测掩码。总体而言,我们的贡献如下:

  • 我们提出了一种端到端的图像修复框架,Inst-Inpaint,它可以仅基于文本指令对给定图像中的对象进行移除。我们的方法的一些示例输出如图1所示。

  • 我们生成了一个真实图像数据集,GQA-Inpaint,用于训练和评估所提出的指令式图像修复任务的模型。在这里,我们使用了最初用于视觉推理的GQA数据集,并利用提供的场景图使用了最先进的实例分割和修复方法生成配对的训练数据。

  • 我们进行了大量实验,展示了我们框架的有效性。为了比较结果,我们使用了多种指标来评估各种基准模型,其中包括一种基于CLIP的新型修复评分。我们在基于文本的图像修复方法方面取得了显著的改进,超越了现有的最先进方法。

Related Work

基于扩散的生成模型。在配备大规模文本-图像配对数据集的情况下,扩散模型在图像合成方面取得了令人印象深刻的结果。这些模型的图像合成能力已扩展到视频生成和图像编辑任务。我们的工作解决了基于文本指令的修复任务,并与编辑任务更相关。SDEdit是首批使用文本提示和扩散模型对真实图像进行编辑的作品。它对输入图像应用噪声,然后根据文本提示对其进行去噪。鉴于加噪-去噪的过程,内容保留并没有严格实现。Prompt-to-prompt editing展示了通过对注意力机制应用操作,可以使用文本提示对生成的图像进行编辑。InstructPix2Pix通过Prompt-to-prompt生成数据集,并微调扩散模型以使用配对数据编辑图像。

图像修复。图像修复任务的常见设置包括使用二值掩码来定义被修复的像素。原始图像像素被去除,新的像素根据这些掩码来生成。此领域以前主要由生成对抗网络(GANs)主导。基于GAN的模型大多输出确定性结果,因为这些模型还通过重建损失进行训练以提高稳定性。最近也有使用GAN实现多样性的方法,但它们是在单个对象数据集(如面部数据)上训练的。它们并未扩展到修复多样的场景,因为GAN训练非常困难。

最近,扩散模型也进入了图像修复领域,并取得了令人期待的结果。已经证明,预训练的无条件扩散模型可以通过Repaint模型对图像进行修复。Repaint修改去噪过程,以使生成过程依赖于未被擦除的图像内容。

与我们工作同时进行的是X-Decoder,它可以同时处理输入图像和文本,用于指导分割。X-Decoder可以根据提示对图像进行分割,并在与扩散模型结合时,可以擦除分割的对象。

Dataset Generation

我们的目标是构建一个真实图像数据集,用于训练和评估基于指令的图像修复模型。

目前存在一些可以用于此任务的数据集,例如CoDraw和CLEVR数据集。然而,这些数据集中的图像都是由几何对象或剪贴艺术品组成的合成场景。虽然这些相对简单的图像可以被视为构建模型的很好工具,但在它们上面训练的模型并不直接适用于真实图像的编辑。

为了缓解现有数据集的这一缺点,在本工作中,我们提议构建一个新的图像修复数据集,其中包含复杂的真实图像,并且不使用任何人工标注。我们将这个数据集称为GQA-Inpaint,因为我们选择在GQA数据集的基础上构建它。

具体而言,GQA数据集包含85,000个真实世界图像及其对应的场景图。场景图通过以对象、属性和关系来表示图像的简化表示。场景图中的每个节点表示一个对象,并且其位置和大小由边界框指定。此外,每个对象都与一些属性相关联,编码了它的颜色、形状或材质。连接节点和对象的边通常表示这些对象之间的空间关系。

我们为所提议的数据集设计的数据生成流程如图2所示,严重依赖于场景图的表示。具体而言,在修复任务中,我们从场景图的节点中选择目标对象。虽然GQA数据集中已经提供了对象的边界框,但我们观察到直接将它们用作修复的掩码会导致不理想的结果。因此,为了获得更高质量的目标图像,我们提取每个对象的分割掩码,并将其用于从图像中移除对象。此外,我们从提供的场景图生成用作指令的文本提示。以下是所有这些步骤的简要描述。更多细节可以在补充材料中找到。

从场景图中选择对象。具体而言,在选择目标对象时,我们通常考虑数据集中最常见的对象,并忽略边界框太小或太大的对象。

提取分割掩码。我们使用Detectron2和Detic框架获得对象的分割掩码。为了涵盖广泛的对象类别,我们使用在COCO和LVIS数据集上训练的多个实例分割模型对对象进行分割。

我们选择最准确的分割结果。为了衡量准确性,我们利用数据集提供的边界框真值。我们比较IoU分数并选择较大的值。

从图像中移除对象。在这一步中,我们的目标是从图像中移除对象。为此,我们使用最先进的图像修复方法CRFill,因为它具有计算效率高和高质量结果的特点。

在进行修复之前,我们首先使用CascadePSP对预测的掩码进行优化,然后使用11×11像素的形态学膨胀来扩展边缘的分割掩码,以使掩码更好地捕捉对象。

生成文本提示。GQA数据集中包含对象之间的关系表示,如图2所示。如果所选择的对象是其类别的单个实例,我们不使用任何关系,简单地创建提示为“移除[对象]”。如果图像中存在多个相同对象类别的实例,我们根据场景图中的关系构建提示,以指定特定的实例。

在这里插入图片描述

Method

为了解决提出的指令式图像修复任务,我们开发了一种新颖的条件扩散模型,命名为Inst-Inpaint,它接受图像和文本指令作为输入。训练这个模型需要一个配对数据集,其中包括源图像和目标图像以及相应的文本提示。我们基于潜在扩散模型构建我们的模型,因为它具有计算效率高的优点。具体而言,潜在扩散模型包括一个编码器E和一个解码器D,分别用于将图像投影到较低的潜在维度并对图像进行重构。这是一个变分自编码器,并作为第一步进行单独训练。

在这里插入图片描述

如上所述,我们用于指令式图像修复的模型可以解释为条件扩散模型。也就是说,我们用两个额外的条件来训练我们的模型;源图像和文本提示。在训练过程中,目标图像通过编码器得到z0,如图2所示。源图像s也使用第一阶段的相同预训练编码器进行编码。编码特征E(s)在每个时间步骤与zt进行拼接。对于文本条件,我们使用交叉注意机制。基于指令的对象去除的目标如下:

在这里插入图片描述

实现和训练细节。Inst-Inpaint将从前向扩散过程中获得的目标图像潜在编码zt在时间步骤t上与源图像特征E(s)进行拼接,以预测上一个时间步骤zt−1的潜在编码。对于文本条件的修复任务,Inst-Inpaint使用BERT tokenizer对文本进行分词,并通过使用这些标记作为输入,从头开始学习一个Transformer模型来获取指令嵌入。这些嵌入在特定U-Net层的交叉注意机制中使用。

我们在CLEVR和GQA-Inpaint数据集上分别训练了两个Inst-Inpaint模型。CLEVR模型的第一阶段模型是一个变分自编码器,从头开始训练,使用数据集中所有指令的源图像和目标图像的组合进行训练。与CLEVR模型不同,GQA-Inpaint模型使用预训练的VQGAN模型1,在Open Images数据集上进行训练,并具有16384个码书条目。

在CLEVR模型的第二阶段模型中,我们定义了一个包含八层的Transformer,用于获得指令嵌入,并使用四个注意头的交叉注意机制来学习指令嵌入和用于修复过程的激活层之间的关系。GQA-Inpaint模型的架构比CLEVR模型更复杂,由十六层Transformer和八个注意头的交叉注意机制组成。更多的训练细节可以在补充材料中找到。

PS

这篇论文的实现效果肯定不容易实现,读读有一定启发就好。论文后面的内容这里不再翻译。

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

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

相关文章

C++基础知识 (引用)

⭐️ 往期相关文章 ✨ 链接:C基础知识(命名空间、输入输出、函数的缺省参数、函数重载) ⭐️ 引用 引用从语法的层面上讲:引用不是定义一个新的变量,而是给已存在的变量取了一个别名,编译器不会为引用变…

黑马大数据学习笔记3-MapReduce配置和YARN部署以及基本命令

目录 部署说明MapReduce配置文件YARN配置文件分发配置文件集群启动命令开始启动YARN集群 查看YARN的WEB UI页面保存快照YARN集群的启停命令一键启动脚本单进程启停 提交MapReduce任务到YARN执行提交wordcount示例程序查看运行日志提交求圆周率示例程序 p41~43 https://www.bili…

无线温湿度信息中继器模块的组成和工作状态及编程与组网建议

在无线温湿度信息收集系统中,信息中继器模块是连接终端信息点与互联网的重要节点。本文将详细介绍该模块的组成和工作状态,并给出编程和组网的建议。 一、组成 该无线温湿度信息中继器模块由以下几个核心组成部分构成: STM32F103ZET6主控芯片…

17- C++ const和异常-5 (C++)

第六章 C对C的拓展2 6.1 const详解 6.1.1 const 修饰普通变量 被修饰的对象是只读的 const int a; //a的值是只读的 int const a; const int * p; 该语句表示指向整形常量的 指针,它指向的值不能修改。 int const * p; 该语句与b的含义相同,表…

adobe ps beta的使用方法

1、人物换发型。 1)套索套选出来相关的头发。 2)点击生成,输入“red hair” 按“生成”键。 2、人物换眼睛。 1)套索套选出来相关的眼睛区域,大一点范围。 2)点击生成,输入“blue eyes"…

【Golang 接口自动化03】 解析接口返回XML

目录 解析接口返回数据 定义结构体 解析函数: 测试 优化 资料获取方法 上一篇我们学习了怎么发送各种数据类型的http请求,这一篇我们来介绍怎么来解析接口返回的XML的数据。 解析接口返回数据 定义结构体 假设我们现在有一个接口返回的数据resp如…

分布式软件架构——内容分发网络

内容分发网络(CDN,Content Distribution Network或Content Delivery Network) 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现…

【数据结构与算法】归并排序

归并排序 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而…

LaTex语法(常用数学符号的语法和注意事项)

说明:[]括号表示把语法括起来,并不表示LaTex语法。 1. 求和符号(Σ) 这个符号的基本语法为:[\sum_{}^{}]。 符号有两种模式:内联数学模式(inside math mode)和显示数学模式(displayed math mode)。 内联数学模式:排版时使用各…

CAN通信的位定时与同步

位定时与同步 1.位时间 1.1相关基本概念 1)系统时钟:记为 t c l k t_{clk} tclk​; 2)CAN时钟周期:CAN时钟是由系统时钟分频而来的一个时间长度值,表示CAN控制器的工作时钟,实际上就是一个时…

【前端知识】React 基础巩固(四十二)——React Hooks的介绍

React 基础巩固(四十二)——React Hooks的介绍 一、为什么需要Hook? Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。 class组件 VS 函数式组件: class的优势…

C语言每日一题:9.《数据结构》链表的中间节点+链表的倒数第k个节点。

第一题: 题目链接: >思路一: 1.第一遍遍历链表,直到找到尾结束第一次遍历,遍历的过程中记录链表长度。定义长度为k。 2.确定中间是第几个节点,计算是k/21根据题目要求。 3.再一次去遍历我们的数组&…

iOS开发-格式化时间显示刚刚几分钟前几小时前等

iOS开发-格式化时间显示刚刚几分钟前几小时前等 在开发中经常遇到从服务端获取的时间戳,需要转换显示刚刚、几分钟前、几小时前、几天前、年月日等格式。 主要用到了NSCalendar、NSDateComponents这两个类 NSString *result nil;NSCalendarUnit components (NSC…

minGPT 代码详解(训练 GPT 模型执行两位数加法)

文章目录 1. MinGPT 项目简介2. 相关论文2.1 GPT-12.2 GPT-22.3 GPT-3 3. 代码详解3.1 项目结构3.2 GPT 模型代码详解3.2.1 Transformer block3.2.2 GPT 3.3 两位数加法实验3.3.1 数据集构造3.3.2 训练器3.3.3 模型参数设置3.3.4 训练过程 1. MinGPT 项目简介 MinGPT 是 GPT 模…

【Linux】关于Bad magic number in super-block 当尝试打开/dev/sda1 时找不到有效的文件系统超级块

每个区段与 superblock 的信息都可以使用 dumpe2fs 这个指令来查询的! 不过可惜的是,我们的 CentOS 7 现在是以 xfs 为默认文件系统, 所以目前你的系统应该无法使用 dumpe2fs 去查询任何文件系统的。 因为目前两个版本系统的根目录使用的文…

Servlet文件的下载

第一种方法直接在前端使用超链接,也就是a标签 浏览器不能识别会直接下载(像压缩文件不能直接下载),浏览器能识别,想要下载加一个download属性。download可以不写任何信息。 首先在web下建一个文件,放需要…

Vue 3:玩一下web前端技术(七)

前言 本章内容为VUE生命周期与相关技术讨论。 上一篇文章地址: Vue 3:玩一下web前端技术(六)_Lion King的博客-CSDN博客 下一篇文章地址: Vue 3:玩一下web前端技术(八)_Lion Ki…

9、测试Service组件和使用模拟组件辅助测试

测试Service组件和使用模拟组件辅助测试 测试Service组件 测试Service组件无需启动Web服务器,所以使用SpringBootTest(webEnvironment WebEnvironment.NONE)修饰测试用例类即可 (用NONE表示不启动Web服务器)。 Service组件其实就是一个普…

【002 操作系统】进程的状态及状态转换图?

一、进程的状态 1. 创建状态 2. 就绪状态 3. 运行状态 4. 阻塞状态 5. 终止状态 图源:进程、线程基础知识全家桶,30 张图一套带走_Linux_小林coding_InfoQ写作社区 NULL -> 创建状态:一个新进程被创建时的第一个状态; 创建状态…

python+django+mysql项目实践一(环境准备)

python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 创建Pycharm项目 安装Django 在pycharm文件—设置进行安装 新建Django项目 注意项目创建目录 项目默认目录文件说明: __init__.py asgi.py 【异步接受网络…