Null-text Inversion for Editing Real Images using Guided Diffusion Models

Null-text Inversion for Editing Real Images using Guided Diffusion Models (Paper reading)

Ron Mokady, Google Research, CVPR23, Paper, Code

1. 前言

在这里插入图片描述

在本文中,我们介绍了一种精确的反转技术,从而有助于直观地对图像进行基于文本的修改。我们提出的反演由两个新的关键组成部分组成:(i)扩散模型的关键反演。虽然目前的方法旨在将随机噪声样本映射到单个输入图像,但我们为每个时间戳使用一个关键噪声向量,并围绕它进行优化。我们证明,直接反演本身是不够的,但确实为我们的优化提供了一个很好的锚。(ii)空文本优化,其中我们只修改用于无分类器引导的无条件文本嵌入,而不是输入文本嵌入。这允许保持模型权重和条件嵌入的完整性,因此能够应用基于提示的编辑,同时避免对模型权重进行繁琐的调整。我们的空文本反转基于公开的SD模型,在各种图像和即时编辑上进行了广泛的评估,显示了真实图像的高保真编辑。

2. 整体思想

图像编辑需要保证非编辑位置的高度一致性,但是在T2I模型中不是容易的。Inversion可以提供扩散确定性的轨迹,但仅在无条件中成立。因为T2I需要提供文本prompts,如果编辑改变了prompts,就会导致偏离确定的轨迹。本文就是解决这个问题,提出在CFG中的无条件引入一个可优化的编码,这个编码通过提前对特定一张图片优化,使其可以适应高条件权重的轨迹,而不影响扩散模型的先验和文本编码。这是一篇值得认真思考的文章

3. 方法

3.1 DDIM Inversion

文本引导的扩散模型旨在将随机噪声向量 z t z_t zt和文本条件 P P P映射到输出图像 z 0 z_0 z0,该输出图像对应于给定的条件提示。DDIM具有确定性的采样:
z t − 1 = α t − 1 α t z t + ( 1 α t − 1 − 1 − 1 α t − 1 ) ⋅ ε θ ( z t , t , C ) z_{t-1}=\sqrt{\frac{\alpha_{t-1}}{\alpha_{t}}} z_{t}+\left(\sqrt{\frac{1}{\alpha_{t-1}}-1}-\sqrt{\frac{1}{\alpha_{t}}-1}\right) \cdot \varepsilon_{\theta}\left(z_{t}, t, \mathcal{C}\right) zt1=αtαt1 zt+(αt111 αt11 )εθ(zt,t,C)
那么给定一张图片 z 0 z_0 z0,对应的文本 P P P和一个预训练的扩散模型 ϵ θ \epsilon_\theta ϵθ,我们就可以由 z 0 − > z T z_0 ->z_T z0>zT,这就是DDIM Inversion。为什么DDIM可以反转呢?因为DDIM的采样步数 t t t较少,反转到 z T z_T zT比较快,且DDIM是确定性的采样,图片能找到唯一对应的 z T z_T zT。但是图片编辑时,就会产生如图1第二列的效果,也就是变化的文本导致了全局发生了变化。

3.2 Classifier-free Guidance

SD中的CFG的主要作用是尽可能生成与class相关的内容,而不引入其他东西。比如你想生成一个猫,无条件的模型可能给你生成一个人在旁边,虽然Classifier Guidance能生成一个猫,但是它需要重新额外训练一个分类器,因此就诞生了CFG,只不过CFG每一步需要两次采样,一个是无条件的,一个是有条件的。本文说明条件信息会影响重建,而无条件的会变现的很好,那对于CFG如何保证有文本条件下精确的重建图像呢?本文定义了一个Null嵌入入到无条件的模型中,如下:
ε ~ θ ( z t , t , C , ∅ ) = w ⋅ ε θ ( z t , t , C ) + ( 1 − w ) ⋅ ε θ ( z t , t , ∅ ) . \tilde{\varepsilon}_{\theta}\left(z_{t}, t, \mathcal{C}, \varnothing\right)=w \cdot \varepsilon_{\theta}\left(z_{t}, t, \mathcal{C}\right)+(1-w) \cdot \varepsilon_{\theta}\left(z_{t}, t, \varnothing\right) . ε~θ(zt,t,C,)=wεθ(zt,t,C)+(1w)εθ(zt,t,).

3.3 Pivotal Inversion

我们从研究DDIM反演开始。在实践中,每一步都会包含一个微小的错误。对于无条件扩散模型,累积误差可以忽略不计,DDIM反演成功。然而,请记住,使用稳定扩散模型进行有意义的编辑需要应用大引导尺度 w > 1 w>1 w>1的无分类器引导。我们观察到,这样的指导尺度放大了累积的误差。因此,在无分类器引导的情况下执行DDIM反演过程不仅会导致视觉伪影,而且所获得的噪声向量可能超出高斯分布。后者降低了可编辑性,即使用特定噪声矢量进行编辑的能力。在这里插入图片描述

如上图,我们用不同的制导标度值来评估DDIM反演。在左边,我们测量潜在向量 z T z_T zT相对于多元正态分布的对数似然。这估计了 z T z_T zT在理想情况下应该正态分布的可编辑性,并且与该分布的偏差降低了我们编辑图像的能力。在右边,我们使用PSNR来测量重建质量。可以看出,使用小的引导尺度,例如 w = 1 w=1 w1,导致更好的可编辑性和重建。这一部分作者发现, w = 1 w=1 w=1能够给予更精确的起点。也就是说,该优化最大限度地提高了与原始图像的相似性,同时保持了我们执行有意义编辑的能力。见算法1的3,4行。

在这里插入图片描述

但是想要更好的文本编辑,需要 w > 1 w>1 w>1。这与Inversion过程 w = 1 w=1 w=1逐步产生累计误差,为了弥补这部分的误差,作者提出Null-text optimization.

3.4 Null-text optimization

为了成功地将真实图像转换到模型的域中,最近的工作优化了文本编码、网络权重或两者。微调每个图像的模型权重涉及复制整个模型,这在内存消耗方面是非常低效的。此外,除非对每次编辑都进行微调,否则必然会损害模型的先验知识,从而损害编辑的语义。文本嵌入的直接优化导致不可解释的表示,因为优化的标记不一定与预先存在的单词匹配。因此,提示编辑的直观提示变得更具挑战性。

相反,我们利用了CFG的关键特征——无条件预测对结果的影响很大。因此,我们将默认的空文本嵌入替换为优化的嵌入,称为空文本优化。也就是说,对于每个输入图像,我们只优化无条件嵌入∅,用空文本嵌入初始化。模型和条件文本嵌入保持不变。这导致了高质量的重建,同时仍然允许通过简单地使用优化的无条件嵌入来使用提示进行直观的编辑。此外,在单个反转过程之后,相同的无条件嵌入可以用于对输入图像的多个编辑操作。由于空文本优化的表现力自然不如微调整个模型,因此它需要更有效的关键反转方案。

我们将优化单个无条件嵌入∅称为全局空文本优化。在我们的实验过程中,我们观察到,为每个时间戳优化不同的“零嵌入”∅t显著提高了重建质量,同时这非常适合我们的关键反演。因此,我们使用属性戳无条件嵌入 { ∅ t } t = 1 t \{∅t\}^t_{t=1} {t}t=1t,并用前一步的嵌入∅初始化 ∅ t + 1 ∅_{t+1} t+1
min ⁡ ∅ t ∥ z t − 1 ∗ − z t − 1 ( z ˉ t , ∅ t , C ) ∥ 2 2 \min _{\varnothing_{t}}\left\|z_{t-1}^{*}-z_{t-1}\left(\bar{z}_{t}, \varnothing_{t}, \mathcal{C}\right)\right\|_{2}^{2} tmin zt1zt1(zˉt,t,C) 22

为什么有效?或者为什么这种方式可以准确改变编辑区域不影响全局?当 w = 1 w=1 w=1时,相当于Inversion过程中没有了无条件的输出,轨迹全部来自于有条件的,也就是该估计与prompts高度相关。在你不改变prompt和添加CFG的情况下,可以高度重建。其实无条件部分的作用是提供高保真度和全局信息的,条件更注重语义。那么我们引入Null-text优化的作用就是,让无条件部分对整体高度重建,同时加强prompt的语义关联。简单而言就是,这个优化过程就是削弱条件部分对全局重建的期望,主要Inversion的时候仅用了条件部分。因此,针对特定一张图片的优化是在绑定text的语义和无条件部分的过拟合。

4. 实验

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

鸿蒙开发之ArkUI组件常用组件文本输入

TextInput、TextArea是输入框组件,通常用于响应用户的输入操作,比如评论区的输入、聊天框的输入、表格的输入等,也可以结合其它组件构建功能页面,例如登录注册页面。 TextInput为单行输入框、TextArea为多行输入框 TextArea 多行…

Oracle数据库管理:从基础到高级应用【文末送书-45】

文章目录 入门篇:初识Oracle进阶篇:深入学习Oracle精通篇:掌握Oracle高级技术Oracle从入门到精通(第5版)(软件开发视频大讲堂)【文末送书-45】 在当今数字化时代,数据是企业成功的关…

django orm DateTimeField 6位小数精度问题

from django.db.backends.mysql.base import DatabaseWrapperDatabaseWrapper.data_types[DateTimeField] "datetime"意思就是重写源码里面的DateTimeField字段

xxl-job 适配人大金仓数据库 V8R6

前言 由于一些众所周知的原因&#xff0c;项目需要需要进行改造使其适配人大金仓的数据库。 xxl-job适配人大金仓 特此说明&#xff1a; 当前修改的xxl-job版本 为 2.4.1-SNAPSHOT mysql上的xxl-job库 迁移到 人大金仓数据库上pom中新增依赖 kingbase8 驱动 注意版本<!-…

充钱也不能任性,今天用百度AI又骂街了

今天在用文心一言的时候又翻车了&#xff0c;应该是又骂街了。 cao&#xff0c;充钱也不能任性啊&#xff0c;不能手贱去看百度的新功能&#xff0c;垃圾的一批。 本来付费用了用4.0&#xff0c;感觉Chat功能还是可以的&#xff0c;不论是简单的代码&#xff0c;还是一些通用的…

性价比高一点的diy台式主机怎么搭配?

怎么搭配一台性价比高一点的台式机 建议&#xff1a; 选择合适的CPU和GPU。根据实际需求选择相对较新的CPU和GPU型号&#xff0c;以确保能够运行目标应用程序和游戏。 合理选择内存和存储。根据预算选择适当的内存和存储容量。8GB或16GB内存对于一般计算和游戏使用足够了&…

由浅到深认识Java语言(31):阶段性练习

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

市场复盘总结 20240327

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 14% 最常用…

Mysql数据库命令大全

目录 mysql服务器处理客户端请求 Mysql数据库常用命令 三种删除方式&#xff1a; mysql服务器处理客户端请求 首先MySQL是典型的c/s架构&#xff0c;即client/Server架构&#xff0c;不论客户端进程和服务器进程是采用哪种方式进行通信&#xff0c;最后实现的效果都是&…

Qt C++ | QTimer经验总结

QTimer Class QTimer类提供重复计时器和单次计时器 头文件: #include <QTimer> qmake: QT += core 继承自: QObject 定时器信号 void timeout() 公共函数 Qt::TimerType 枚举定义了 Qt 中不同类型的定时器。它包含以下值: **Qt::PreciseTimer:**高精度定时器,用…

netty构建udp服务器以及发送报文到客户端客户端详细案例

目录 一、基于netty创建udp服务端以及对应通道设置关键 二、发送数据 三、netty中的ChannelOption常用参数说明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、Ch…

App Inventor 2 实现商业级APP启动屏幕效果(SplashScreen)

启动屏幕效果 实现的功能包括&#xff1a;启动App时展示启动屏&#xff0c;右上角展示5秒倒计时&#xff0c;中途可点击跳过。倒计时结束或点击跳过&#xff0c;则跳转到主界面。效果如下&#xff1a; 实现原理 App启动屏效果的实现原理及详细步骤要点如下&#xff1a; Scree…