CVMJ 2024 | StyleDiffusion: 基于Prompt嵌入的真实图像反演和文本编辑

news2024/12/16 20:53:57

论文:《StyleDiffusion: Prompt-Embedding Inversion for Text-Based Editing》

代码:https://github.com/sen-mao/StyleDiffusion​icon-default.png?t=O83Ahttps://github.com/sen-mao/StyleDiffusion​

问题背景

已有一些工作利用预训练扩散模型进行真实图像的编辑。这些方法通常通过微调模型或在预训练模型的潜在空间中对图像进行反演。然而,它们面临两个主要问题:(1)在选定区域的编辑结果不理想(图 1. 第一行),同时在未选定区域出现意外变化(图 1. 第二行);(2)需要精心设计文本提示,确保文本提示涵盖输入图像中的所有元素(图 2. 第一行)。

标图 1. (1) 已有方法(例如NullText Inversion),选定区域的编辑结果不理想(第一行第四列),未选定区域出现意外变化(第二行第四列)题
图 2.(2)已有方法(例如NullText Inversion),需要精心设计文本提示(第一行),确保文本提示涵盖输入图像中的所有元素,这样才能确保编辑的稳定性

为了解决这些问题,我们提出了两个主要改进:(1)仅优化cross-attention层中value线性层的输入,已具有足够强的能力以重建真实图像;(2)提出了注意力正则化方法,以保持重建和编辑后的物体注意力图,从而实现精确的编辑,而不会产生显著的结构性变化。此外,我们还通过P2P 使用CFG时的无条件分支改进了编辑能力,提出P2Plus。 


对注意力机制的分析(重要观察)

为了解决提到的挑战,我们首先对扩散模型SD采样过程中的注意力机制进行了分析。我们观察到,key主导输出图像的结构(即"where"),而value决定了物体的风格(即"what")。接下来,我们通过实验证明value决定物体的风格(即"what")。如图 3.第一行和第二行)所示,我们使用提示嵌入\mathbf{c}_1\mathbf{c}_2生成了两组图像(\mathbf{c}_1=["Dog", "Dog", "Dog", "A man with glasses", "A dog holding flowers"], \mathbf{c}_2=["Cat", "Tiger", "Watercolor drawing of a cat", "A man in sunglasses", "A cat wearing sunglasses"])。随后,我们在同一注意力层中为key和值value的输入使用了两种不同的嵌入来进行分析。如图 3.第三行和第四行)所示,当交换key的输入并固定value的输入时,我们观察到生成图像的内容相似。例如,第一行和第三行的生成内容相似,第二行和第四行的内容相似。然而,如图 3.第五行和第六行)所示,当交换value的输入并固定key的输入时,我们发现内容发生了交换,同时保留了大部分结构。例如,最后一行的图像与第一行的图像在语义信息上相似,而与第二行的图像结构相似。需要注意的是,第一行、第三行和第五行共享相同的潜在编码(cross-attention中的query),第二行、第四行和第六行也共享相同的潜在编码。},因此图 3.中的第一行和第三行,第二行和第四行的结构变化不大。这一实验表明,cross-attention中的value决定了物体的风格(即"what")。

图 3. Value决定物体的风格(即内容)

方法(StyleDiffusion的真实图像反演)

因此,为了改进真实图像的反演,有效地利用value控制图像的风格(内容),我们提出StyleDiffusion。StyleDiffusion在真实图像反演时将真实图像映射到value的输入嵌入(我们将该嵌入称为Prompt-embedding,图 4.II. StyleDiffusion中v的输入),同时我们将文本嵌入作为key的输入(图 4.中II. StyleDiffusion中k的输入"dog"),使用\mathcal{L}_\mathrm{rec}对latent进行重构,这使我们能够在反演时不引入显著结构性变化,而在编辑时实现精确的风格(内容)编辑。

图 4. I. DDIM Inversion II. StyleDiffusion的真实图像反演过程 III. StyleDiffusion的编辑过程

同时,为了使局部注意力图更加精确,我们提出了一种注意力正则化方法,以获得更精确的重建和编辑能力。图 5.展示了注意力正则化\mathcal{L}_\mathrm{att}的重建效果。结合\mathcal{L}_\mathrm{att}重建图像的交叉注意力图(第二行,第五列)与输入图像的交叉注意力图(第二行,第一列)更为接近。同时,\mathcal{L}_\mathrm{att}可以改善Null-text的重建质量(第二行,第二列)。在最后两列中,cow被替换为elephant,说明\mathcal{L}_\mathrm{att}在增强重构效果的基础上,可以获得更精准的编辑效果。

图 5. 使用注意力正则化使重建图像的交叉注意力图(第二行,第五列)与输入图像的交叉注意力图(第二行,第一列)更为接近。同时,可以改善 Null-text 的重建质量(第二行,第二列)

方法(StyleDiffusion的真实图像的编辑P2Plus)

在使用StyleDiffusion对真实图像进行反演后,就可以对真实图像进行编辑。在编辑阶段,我们主要基于使用广泛的编辑方法P2P 。P2P执行条件分支中交叉注意力图和自注意力图的替换,旨在保持源提示的结构(图 6.第二列)。然而,P2P仅在条件分支上操作,忽略了无条件分支。这导致在某些情况下编辑能力较弱,尤其是在编辑前后结构变化较大的情况下(例如,图 6.中的"…tent…"→"…tiger…")。

图 6. P2P和P2Plus的比较,当所需的编辑变化需要较大的结构性变化时(例如,帐篷、树木和自行车),P2P 会失败。通过减少对源提示的依赖,P2Plus 可以更好地处理此类情况。

为了解决这个问题,我们需要减少结构对源提示"…tent…"的依赖,并为根据目标提示生成结构提供更多自由度,以便根据目标提示"…tiger…"生成结构。因此,如图 7.所示,我们提出在无条件分支中进一步执行自注意力图替换,我们称为P2Plus,同时在条件分支中像P2P一样进行操作。P2Plus提供了更精确的编辑能力。

图 7. 给定相同的latent和cfg,(Top)SD的生成,(Middle)P2P将条件分支中的attention图从源提示复制到目标提示,黄色箭头表示,(Bottom)P2Plus除了替换条件分支的attention图外,还额外替换了无条件分支的attention图,黄色虚线箭头表示。

与P2P类似,我们引入了一个时间步参数\tau_u,用于确定注入应用的步骤范围。图 8. 展示了不同\tau_u值下的结果。P2P(第二列:w/o \tau_u)未能成功地将tent替换为tiger。添加注入参数\tau_u有助于成功编辑,尤其是当\tau_u=0.5时。我们使用与SD相同的分类器自由引导CFG参数w=7.5,此时无条件分支的权重1-w为负,随着\tau_u从0.2增加到1.0(从第三列到第八列),P2Plus可以逐渐减弱无条件分支中tent的影响。第一行和第二行的源图像来自SD,而第三行的源图像来自输入的真实图像(第一列)。从第一行到第三行的编辑分别为:"...tent..." → "...tiger...","...bike..." → "...motorcycle...",以及"...kitten..." → "...puppy..."。

图 8. P2Plus中注入参数的影响

实验结果

我们对所提的方法(StyleDiffusion)对真实图像的编辑进行了验证,编辑时对非编辑区域的保持均超过了baselines。例如,我们使用Structure-dist和NS-LPIPS来评测编辑前后结构的保真度,StyleDiffusion在两个指标上表现最好(评测不使用P2Plus)。使用未编辑区域的掩码,我们计算真实图像与编辑后图像之间的未编辑区域LPIPS,我们将其称为NS-LPIPS(即未选区域的 LPIPS)。较低的NS-LPIPS得分意味着未编辑区域与输入图像更相似(提取未编辑区域和计算NS-LPIPS代码见GitHub - sen-mao/StyleDiffusion: Official Implementations "StyleDiffusion: Prompt-Embedding Inversion for Text-Based Editing" (CVMJ2024)Official Implementations "StyleDiffusion: Prompt-Embedding Inversion for Text-Based Editing" (CVMJ2024) - sen-mao/StyleDiffusionicon-default.png?t=O83Ahttps://github.com/sen-mao/StyleDiffusion#-ns-lpips虽然*DDIM,SDEdit和MasaCtrl取得了更好的Clipscore,但会显著影响结构的保证度(图 9.

表 1. Structure-dist和NS-LPIPS评测编辑前后结构的保真度
图 9. 我们方法的编辑效果最好(最后一行),且可以最大程度保持结构

图 10.图 11.展示了我们更多的编辑结果 

图 10. StyleDiffusion的更多结果

 

图 11. StyleDiffusion使用P2Plus的更多编辑结果

总结StyleDiffusion的贡献:
1. StyleDiffusion通过优化value输入和注意力正则化,实现了对真实图像更精确的重建和编辑
2. StyleDiffusion提出了P2Plus,解决了P2P的局限性,使P2P获得更强大的编辑能力,特别是在源对象与目标对象编辑前后结构变化较大时

 最后,强烈建议阅读原文,了解更多实现细节和实验结果。

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

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

相关文章

Cisco Packet Tarcer配置计网实验笔记

文章目录 概要整体架构流程网络设备互连基础拓扑图拓扑说明配置步骤 RIP/OSPF混合路由拓扑图拓扑说明配置步骤 BGP协议拓扑图拓扑说明配置步骤 ACL访问控制拓扑图拓扑说明配置步骤 HSRP冗余网关拓扑图拓扑说明配置步骤 小结 概要 一些环境配置笔记 整体架构流程 网络设备互连…

conda学习

参考: Anaconda 官网教程 https://freelearning.anaconda.cloud/get-started-with-anaconda/18202conda配置虚拟环境/conda环境迁移/python环境迁移 https://blog.csdn.net/qq_43369406/article/details/127140839 环境: macOS 15.2Anaconda Navigator 2.4.2 x.1…

C/C++中的宏定义

在C程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来像函数。预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL调用、返回参数、执行return等过程,从而提高了速度,避免函数…

JAVA:访问者模式(Visitor Pattern)的技术指南

1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…

【安卓开发】【Android Studio】启动时报错“Unable to access Android SDK add-on list”

一、问题描述 在启动Android Studio时,软件报错:Unable to access Android SDK add-on list,报错截图如下: 二、原因及解决方法 初步推测是由于网络节点延迟,无法接入谷歌导致的。点击Cancel取消即可。

安宝特分享 | AR技术助力医院总院与分院间的远程面诊

随着科技的迅猛发展,增强现实(AR)技术在各行各业的应用愈发广泛,特别是在医疗领域,其潜力和价值正在被不断挖掘。在现代医疗环境中,患者常常面临“看病难、看病远、看病急”等诸多挑战,而安宝特…

Android Studio新版本的一个资源id无法找到的bug解决

Android Studio新版本的一个资源id无法找到的bug解决 文章目录 Android Studio新版本的一个资源id无法找到的bug解决一、前言二、Android Studio的无法获取到资源id的bug1、一段简单的Java代码1、错误现象2、错误解决方法 三、其他1、小结2、gradle.properties文件 其他相关属性…

负载均衡器到底是个啥?

引言 目前在项目中,我们正在使用ELB(弹性负载均衡),我希望能够完全理解其内部功能,因此写了这篇文章。 关于本文 这篇文章的最终目标是深刻理解“ELB是什么?”,并达到能够自信解释的程度。 …

远程调试软件对比与使用推荐

远程调试软件对比与使用推荐 远程调试是现代软件开发中不可或缺的一部分,尤其是在处理分布式系统、云端服务或远程服务器上的问题时。以下是对几种常见远程调试工具的详细对比和推荐使用场景。 1. GDB (GNU Debugger) 特点 开源:完全免费且开源&…

【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!

在上一篇文章中,我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来,让我们开始新建一个项目吧! 新建项目 首先进入unityHub的项目页面,点击“新项目”: 我们这个系列将会以2D平台…

数据结构初阶---二叉树---堆

一、树 1.树的概念 树是一种非线性的数据结构,由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树,根朝上,分支向下。 根结点没有前驱结点,可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…

1. 机器学习基本知识(3)——机器学习的主要挑战

1.5 机器学习的主要挑战 1.5.1 训练数据不足 对于复杂问题而言,数据比算法更重要但中小型数据集仍然很普遍,获得额外的训练数据并不总是一件轻而易举或物美价廉的事情,所以暂时不要抛弃算法。 1.5.2 训练数据不具有代表性 采样偏差&#…

CentOS 上如何查看 SSH 服务使用的端口号?

我们知道,linux操作系统中的SSH默认情况下,端口是使用22,但是有些线上服务器并不是使用的默认端口,那么这个时候,我们应该如何快速知道SSH使用的哪个端口呢? 1、通过配置文件查看 cat /etc/ssh/sshd_confi…

【Java学习笔记】泛型

一、泛型的好处 好处:减少了类型转换的次数,提高了效率 二、泛型介绍 泛型:接受任何数据类型 的 数据类型 (特别强调: E 具体的数据类型在定义 Person 对象的时候指定,即在编译期间,就确定 E 是什么类型…

benchANT (Time Series: Devops) 榜单数据解读

近日,国际权威数据库性能测试榜单 benchANT 更新了 Time Series: Devops(时序数据库)场景排名,KaiwuDB 数据库在 xsmall 和 small 两类规格下的时序数据写入吞吐、查询吞吐、查询延迟、成本效益等多项指标刷新榜单原有数据纪录 &a…

多进程并发跑程序:pytest-xdist记录

多进程并发跑程序:pytest-xdist记录 pytest -s E:\testXdist\test_dandu.py pytest -s testXdist\test_dandu.py pytest -s :是按用例顺序依次跑用例 pytest -vs -n auto E:\testXdist\test_dandu.py pytest -vs -n auto,auto表示以全部进程…

网络层IP协议(TCP)

IP协议: 在了解IP协议之前,我们市面上看到的"路由器"其实就是工作在网络层。如下图: 那么网络层中的IP协议究竟是如何发送数据包的呢? IP报头: IP协议的报头是比较复杂的,作为程序猿只需要我们重…

前端传入Grule,后端保存到 .grl 文件中

前端传入Grule,后端保存到 .grl 文件中 通过简单的输入框,将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言,有 then 关键字…

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法,vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…

遗传算法与深度学习实战(27)——进化卷积神经网络

遗传算法与深度学习实战(27)——进化卷积神经网络 0. 前言1. 自定义交叉算子2. 自定义突变操作符3. 进化卷积神经网络小结系列链接 0. 前言 DEAP toolbox 中提供的标准遗传操作符对于自定义的网络架构基因序列来说是不够的。这是因为任何标准的交叉算子…