当前位置: 首页 > news >正文

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

论文: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

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

相关文章:

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

论文:https://arxiv.org/abs/2304.03246 code:http://instinpaint.abyildirim.com/ 文章目录 AbstractIntroductionRelated WorkDataset GenerationMethodPS Abstract 图像修复任务是指从图像中擦除不需要的像素,并以语义一致且逼真的方式填充它们。传统…...

创建维基WIKI百科和建立百度百科有何不同?

很多企业有出口业务,想在互联网上开展全球性网络营销,维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科,经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容,可事实上两个平台的…...

Python小红书旋转验证码识别

本周免费接了一个用户的需求,研究了一下小红书旋转验证码。刚开始小瞧了它,觉得它应该没有百度旋转验证码那么难,毕竟图像没有干扰,需要的训练样本就可以很少。然而事情并没有这么简单,所以记录一下。 首先看一下最终…...

ELK搭建

ELK概述 ELK是elasticsearch Logstash Kibana 这种架构的简写。这是一种日志分平台析的架构, Elasticsearch Logstash filebeat Kibana 这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗…...

webyog最新社区版免费版下载地址

好用的sql管理工具分享: https://github.com/webyog/sqlyog-community/wiki/Downloads webyog最新社区版免费使用下载。从此不用在找mysql的管理工具而烦恼。...

[SQL挖掘机] - 窗口函数 - dense_rank

介绍: dense_rank() 是一种常用的窗口函数,它为结果集中的每一行分配一个密集排名(dense rank)。这个密集排名基于指定的排序顺序,并且在遇到相同的值时,不会跳过排名。 用法: dense_rank() 函数的语法如下&#xf…...

stable diffusion

一:安装。 stable diffusion 安装和使用全教程 - 知乎 Stable Diffusion安装 - 知乎 环境安装: 1:python 3.10安装。 Download Python | Python.org 切记要安装3.10版本,因为Stable diffusion是用3.10版本编写的,所…...

web3行业有哪些职业发展路径?

Web3 是一个相对较新的概念,因此其职业发展路径也在不断演变。一般来说,Web3 职业发展路径可以分为以下几个方向: 区块链开发工程师:区块链开发工程师需要掌握 Solidity 等语言和智能合约开发技能,负责开发和维护区块…...

MATLAB算法实战应用案例精讲-【自动驾驶】相控阵天线方向图

目录 前言 开源LIDAR原型制作平台 系统架构 硬件设计 HDL参考设计 软件...

ALLEGRO之View

本文主要介绍ALLEGRO中的View菜单。 (1)Zoom By Points:按照选型区域放大; (2)Zoom Fit:适合窗口放大; (3)Zoom In:放大; &#xf…...

【打造超酷的GitHub主页】

文章目录 Github状态信息-api账户信息统计最常用语言Repo卡片 社交统计统计访问次数徽标 首先上地址:https://gitee.com/java_wxid/giteeprofile/blob/master/README.md 为了照顾一部分网络较差的的朋友们,这里使用国内的gitee仓库将主页代码提供给大家&…...

Transformer 论文学习笔记

重新学习了一下,整理了一下笔记 论文:《Attention Is All You Need》 代码:http://nlp.seas.harvard.edu/annotated-transformer/ 地址:https://arxiv.org/abs/1706.03762v5 翻译:Transformer论文翻译 特点&#xff1…...

Open3D(C++) 根据索引提取点云

目录 一、功能概述1、主要函数2、源码二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重,把自己当个人 一、功能概述 1、主要函数 std::shared_ptr<PointCloud> SelectByIn...

企业服务器数据库中了_locked勒索病毒怎么解密,_勒索病毒简介与防护

网络技术的发展也为互联网安全带来了一定威胁&#xff0c;对于企业来说&#xff0c;数据安全是关系整个企业正常运行的基础&#xff0c;保护好计算机免受网络威胁的攻击成为大家的一致目标。不过&#xff0c;近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器数…...

面试题 什么是 MyBatis 的接口绑定,有什么好处?

1. 简化开发&#xff1a;接口绑定使得SQL操作变得更加简单和直观。你只需要定义一个接口&#xff0c;声明对数据库的操作方法&#xff0c;MyBatis会动态生成实现类&#xff0c;自动执行SQL语句&#xff0c;无需手动编写SQL或SQL映射文件。 2. 提高可维护性&#xff1a;使用接口…...

[RocketMQ] Consumer 负载均衡服务 RebalanceService入口源码 (十五)

RocketMQ一个消费者组中可以有多个消费者, 在集群模式下他们共同消费topic下的所有消息, RocketMQ规定一个消息队列仅能被一个消费者消费, 但是一个消费者可以同时消费多个消息队列。需要负载均衡服务RebalanceService来进行消息队列分配的重平衡。使用负载均衡服务RebalanceSe…...

【K210】K210学习笔记六——MaixHub在线模型训练识别数字

【K210】K210学习笔记六——MaixHub在线模型训练识别数字 前言K210准备工作数据的获取MaixHub如何在线训练模型训练模型在K210上的测试小结 前言 本人大四学生&#xff0c;电赛生涯已经走到尽头&#xff0c;一路上踩过不少坑&#xff0c;但运气也不错拿了两年省一&#xff0c;…...

142. 环形链表 II

142. 环形链表 II 中等 2.2K 相关企业 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定…...

Flutter系列文章-Flutter进阶2

这一节我将再详细地为您介绍 Flutter 进阶主题&#xff0c;包括导航和路由、状态管理、异步处理、HTTP请求和Rest API&#xff0c;以及数据持久化。让我们逐个介绍这些主题。 1.导航和路由 在 Flutter 中&#xff0c;导航和路由是构建多页面应用的关键概念。导航是指从一个页…...

css实现鼠标滑动左下角弹框带动画效果

代码 <div classNamekuang></div> css代码 .kuang {height: 500px;width: 400px;// background-color: #fff;position: absolute;z-index: 10;bottom: 0;transform: translateX(-390px)}.kuang:hover {animation: myanimation 3s linear 1;animation-fill-mode:f…...

【Spring Cloud Alibaba】限流--Sentinel

文章目录 概述一、Sentinel 是啥&#xff1f;二、Sentinel 的生态环境三、Sentinel 核心概念3.1、资源3.2、规则 四、Sentinel 限流4.1、单机限流4.1.1、引入依赖4.1.2、定义限流规则4.1.3、定义限流资源4.1.4、运行结果 4.2、控制台限流4.2.1、客户端接入控制台4.2.2、引入依赖…...

ARM将常数加载到寄存器方法之LDR伪指令

一、是什么&#xff1f; LDR Rd,const伪指令可在单个指令中构造任何32位数字常数,使用伪指令可以生成超过MOV和MVN指令 允许范围的常数. 实现原理: (1)如果可以用MOV或MVN指令构造该常数,则汇编程序会生成适当的指令 (2)如果不能用MOV或MVN指令构造该常数,则汇编程序会执行下列…...

深入理解Gradle构建系统的工作原理

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

STM32F030C8T6输出3路PWM

1,常规套餐 上电初始化 SystemInit(); TIM1_Init(); 2,TIMI1初始化 TIM_TimeBaseInitTypeDef TIM1_TimeBaseStructure; TIM_OCInitTypeDef TIM1_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //记得打开时钟 RCC_AHBPeriphClo…...

如何理解原型及原型链?js的继承方式

原型与原型链 原型 在js中&#xff0c;每个对象都有一个原型&#xff08;prototype&#xff09;。原型是一个对象&#xff0c;其他对象可以通过原型来共享属性和方法。当我们创建一个对象时&#xff0c;它会自动关联到一个原型对象。 例如&#xff1a;function Person(name, a…...

C# 按表格中的某列排序/查询

using System; using System.Data; using System.Linq;class Program {static void Main(){// 创建一个示例的 DataTable 对象DataTable table new DataTable();table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.R…...

【Vue】】img使用 :src 动态绑定图片地址,但是加载图片不成功

问题复现&#xff1a; img标签直接动态绑定图片的相对路径的时候&#xff0c;图片不能正常显示。代码如下所示 <view style"margin: 20rpx" v-for"(item, index) in showSampleImage" :key"index"><u-image :src"item.src"…...

list模拟

之前模拟了string,vector&#xff0c;再到现在的list&#xff0c;list的迭代器封装最让我影响深刻。本次模拟的list是双向带头节点的循环链表&#xff0c;该结构虽然看起来比较复杂&#xff0c;但是却非常有利于我们做删除节点的操作&#xff0c;结构图如下。 由于其节点结构特…...

python字典:怎么取出key对应的值

目录 python中的字典是什么 怎么判断key是否在字典中 怎么取出key对应的值 总结 python中的字典是什么 在Python中&#xff0c;字典&#xff08;Dictionary&#xff09;是一种无序且可变的数据类型&#xff0c;用于存储键-值&#xff08;Key-Value&#xff09;对。字典通过…...

okvis

论文 Keyframe-Based Visual-Inertial SLAM Using Nonlinear Optimization 摘要 由于两种感知模式的互补性&#xff0c;视觉和惯性线索的融合在机器人中变得很流行。虽然迄今为止大多数融合策略都依赖于过滤方案&#xff0c;但视觉机器人界最近转向了非线性优化方法&#x…...