Imagic: Text-Based Real Image Editing with Diffusion Models

news2024/11/28 20:59:22

Imagic: Text-Based Real Image Editing with Diffusion Models

Bahjat Kawar, Google Research, CVPR23, Paper, Code

1. 前言

在本文中,我们首次展示了将复杂(例如,非刚性)基于文本的语义编辑应用于单个真实图像的能力。例如,我们可以改变图像中一个或多个对象的姿势和组成,同时保留其原始特征。我们的方法可以让站着的狗坐下,让鸟展开翅膀,等等——每一个都在用户提供的高分辨率自然图像中。与之前的工作相反,我们提出的方法只需要单个输入图像和目标文本(所需的编辑)。它对真实图像进行操作,并且不需要任何额外的输入(例如图像遮罩或对象的额外视图)。我们的方法称为Imagic,利用预先训练的文本到图像扩散模型来完成这项任务。它生成与输入图像和目标文本对齐的文本嵌入,同时微调扩散模型以捕捉图像特定的外观。我们在来自不同领域的大量输入上展示了Imagic的质量和多功能性,展示了大量高质量的复杂语义图像编辑,所有这些都在一个统一的框架内。为了更好地评估性能,我们引入了TEdBench,这是一个极具挑战性的图像编辑基准。我们进行了一项用户研究,其结果表明,与TEdBencch上以前的领先编辑方法相比,人类评分者更喜欢Imagic。

在这里插入图片描述

2. 整体思想

如下图,首先冻结扩散模型然后用目标Prompt优化出一个匹配Prompt,然后用这个Prompt微调扩散模型,最后在目标和匹配之间插值的Prompt生成图片。这里的关键在于第一步,第一步确保了优化的Prompt的语义和图片匹配,当然目标Prompt需要编辑的属性可以被区别出来,这对插值这步很重要。

在这里插入图片描述

3. 方法

Text embedding optimization:目标文本首先通过文本编码器,该文本编码器输出其相应的文本嵌入 e t g t ∈ R T × d e_{t_{gt}} \in R^{T \times d} etgtRT×d,其中 T T T是给定目标文本中的标记数量, d d d是标记嵌入维度。然后,我们冻结生成扩散模型的参数,并使用去噪扩散目标优化目标文本嵌入。这导致文本嵌入尽可能与我们的输入图像匹配。我们运行这个过程的步骤相对较少,以便保持接近初始目标文本嵌入,获得 e o p t e_{opt} eopt。这种接近性使得能够在嵌入空间中进行有意义的线性插值,这对于遥远的嵌入来说不会表现出线性行为

Model Fine-tuning: 请注意,当通过生成扩散过程时,所获得的优化嵌入 e o p t e_{opt} eopt并不一定会精确地导致输入图像,因为我们的优化只需少量步骤。因此,在我们方法的第二阶段,冻结优化的嵌入,微调模型。该过程移动模型以拟合点 e o p t e_{opt} eopt处的输入图像 x x x。同时,我们微调基础生成方法中存在的任何辅助扩散模型,如超分辨率模型。我们用相同的重建损失对它们进行微调,但以 e t g t e_{tgt} etgt为条件,因为它们将对编辑后的图像进行操作。这些辅助模型的优化确保了基本分辨率中不存在的 x x x的高频细节的保留。经验上,我们发现在推理时,将 e t g t e_{tgt} etgt输入到辅助模型比使用 e o p t e_{opt} eopt表现得更好。

Text embedding interpolation: 由于生成扩散模型被训练为在优化的嵌入 e o p t e_{opt} eopt处完全重新创建输入图像 x x x,我们使用它通过向目标文本嵌入 e t g t e_{tgt} etgt的方向前进来应用所需的编辑。更正式地说,我们的第三阶段是 e t g t e_{tgt} etgt e o p t e_{opt} eopt之间的简单线性插值。对于给定的超参数 η ∈ [ 0 , 1 ] η \in \left[ 0,1 \right] η[0,1],我们得到:

e ˉ = η ⋅ e t g t + ( 1 − η ) ⋅ e o p t \bar e = \eta ·e_{tgt} + (1-\eta) ·e_{opt} eˉ=ηetgt+(1η)eopt

其是表示期望的编辑图像的嵌入。然后,我们使用微调模型,以̄e为条件,应用基底生成扩散过程。这导致了低分辨率的编辑图像,然后使用微调的辅助模型对其进行超分辨率处理,以目标文本为条件。这个生成过程输出我们最终的高分辨率编辑图像 x x x.

4. 实验

在这里插入图片描述

上图是没有fine-tuned的,重建效果较差。可以看到上面无法保证背景一致性,下面可以非常好的保证。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

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

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

相关文章

Java NIO ByteBuffer 使用方法

前言 最近在使用spring boot websocket xterm.js 给 k8s pod做了个在线的 web 终端,发现websocket的类核心方法,用的都是ByteBuffer传递数据,如下: OnMessagepublic void onMessage(Session session, ByteBuffer byteBuffer) {…

MySQL-分组函数

041-分组函数 重点:所有的分组函数都是自动忽略NULL的 分组函数的执行原则:先分组,然后对每一组数据执行分组函数。如果没有分组语句group by的话,整张表的数据自成一组。 分组函数包括五个: max:最大值mi…

智造新篇章:MicroAlign融资助推高精度FA技术革新

随着智能化浪潮的汹涌澎湃,全球制造业正经历着前所未有的技术革新。MicroAlign,一家专注于高精度功能组装(FA)技术的创新企业,近日宣布完成了高达100万欧元的种子轮融资。这一轮融资不仅为MicroAlign注入了加速商业化的…

java基于Vue+Spring boot前后端分离架构开发的一套UWB技术高精度定位系统源码

java基于VueSpring boot前后端分离架构开发的一套UWB技术高精度定位系统源码 系统采用UWB高精度定位技术,可实现厘米级别定位。UWB作为一种高速率、低功耗、高容量的新兴无线局域定位技术,目前应用主要聚焦在室内外精确定位。在工业自动化、物流仓储、电…

【产品经理】发票系统简述

一、发票类型 增值税电子普通发票:简称电票 增值税普通发票和增值税专用发票,简称:纸票 蓝票:开票金额为正值的发票。红票:发票金额为负值的发票。 注:专票电子化系统国家目前在推,后续有更新…

digit 手写数据库笔记 (机械学习)

参考书籍 第三章内容 digit 手写数据库 # 最初的分类器 # digits 手写数字库import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn import tree # 性能评价相关的库 from sklearn import metrics# digits 数据加载 digits datase…

人工智能-机器学习算法是什么?

人工智能和机器学习是紧密相关的概念,可以说机器学习是人工智能的一个重要分支。机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类…

一个小的画布Canvas页面,记录点的轨迹

Hello大家好,好久没有更新了,最近在忙一些其他的事,今天说一下画布canvas,下面是我的代码,实现了一个点从画布的(0,0)到(canvas.width,canvas.height)的一个实…

MYSQL数据库下载和安装(详细)

1.点击MySQL官网(后续照着图走) 2.软件下载完点击进入安装 设置要安装的路径然后点击OK,后面点击下一步 再点击下一步 MySQL推荐使用最新的数据库和相关客户端,mysql8换了加密插件,所以如果选第一种方式,很可能导致你的navicat等客户端连不上…

手把手教你,怎么用手机开发一个H5整蛊小游戏

前言: 相信在大家的认知里,做软件,做应用肯定都是通过电脑来进行开发的吧。但是你听说过用手机也可以开发软件吗?今天就教大家如何用手机轻松的开发出一款整蛊的H5小游戏。 首先我们需要借助一个工具CodeFlying,它能够…

为什么要分析电商用户数据?详解两大用户数据分析维度

零售电商行业的蓬勃发展带来了海量的客户数据,这些数据不仅记录了消费者的每一次点击、浏览、购买行为,还蕴含着巨大的商业价值。如何从这些数据中提炼出有价值的信息,成为电商企业提升竞争力、优化客户体验、实现可持续发展的关键。本文将深…

跟着AI学AI_08 NumPy 介绍

NumPy(Numerical Python)是一个用于科学计算的基础库,它为 Python 提供了支持大规模多维数组和矩阵 NumPy 介绍 NumPy(Numerical Python)是一个用于科学计算的基础库,它为 Python 提供了支持大规模多维数…

异常体系及自定义路径

异常( Exception) 定义: 异常代表程序出现的问题 图来自黑马程序员 分类: 运行时异常:RuntimeException以及其子类,编译阶段不会出现异常提醒,运行时出现的异常(如数组越界异常)编译时异常&am…

C++ 11 之 参数传递

c11参数传递.cpp #include <iostream> using namespace std;void swap1(int a, int b) {int temp a;a b;b temp;cout << "函数的a: " << a << endl;cout << "函数的b: " << b << endl; }void swap2(int *a,…

JUC并发编程第十一章——Synchronized与锁升级机制

1 入门知识介绍 synchronized锁&#xff0c;是不是默认实现了锁升级。代码中只需要直接使用synchronized&#xff0c;至于怎么从偏向锁升级为轻量锁再升级为重量级锁&#xff0c;这些底层jvm已经实现了。不需要程序员担心。 是的&#xff0c;Java 8中的synchronized关键字确实默…

为什么代理IP很难做到100%可用性?

在当今高度互联的网络环境中&#xff0c;代理IP已成为许多网络活动的重要支撑工具&#xff0c;从数据收集到业务推广&#xff0c;无所不包。然而&#xff0c;代理IP在很多场景中发挥着重要作用&#xff0c;却很难实现100%的可用性。 这种情况并非偶然&#xff0c;而是受到多重复…

如何给自己的项目实现在线测试的接口文档knife4j

配置实现Knife4j在线接口测试文档 为什么要是实现这个东西呢&#xff1f;肯定是对我们有用的&#xff0c;后端主要编写的就是接口&#xff0c;然后我们将接口编写好了之后肯定还是需要进行调试看是否能够正常使用且按照规范返回对应的数据。相信大家测试都是基本上使用的是一些…

JavaScript的数组(一维数组、二维数组、数组常用的方法调用)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Java MyBatis实战:QueryWrapper中的and和or拼接技巧

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、引言 在Java Web开发中&#xff0c;MyBatis是一个非常流行的持久层框架。它通过XML或注解的方式将Java对象与数据库表进行映射&#xff0c;从而实现数据的增删改查操作。在使用MyBatis的过程中&#xff0c;经常…

景联文科技:打造亿级高质量教育题库,赋能教育大语言模型新未来

随着人工智能技术的持续进步&#xff0c;从广泛的通用大语言模型到针对各行业的垂直大语言模型&#xff0c;已成为人工智能大语言模型技术深化演进的必然趋势。 教育大语言模型是适用于教育场景、具有庞大规模参数、融合了广泛的通用知识和专业知识训练形成的人工智能模型。能为…