(2024,CLIP 文本嵌入,属性解耦与控制,编辑迁移,SDXL)通过识别语义方向在 T2I 模型中进连续目标特定的属性控制

news2024/11/16 2:48:21

Continuous, Subject-Specific Attribute Control in T2I Models by Identifying Semantic Directions

公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

2. 相关工作

3. 方法

3.1 从文本/图像对中学习语义编辑

3.2 从对比提示中识别特定属性增量

3.3 学习稳健的细粒度属性增量

3.4 全局相关性

4. 实验

5. 结论


0. 摘要

近年来,文本到图像(T2I)扩散模型的进展大大提高了它们生成图像的质量。然而,由于自然语言提示的限制(例如在 “人” 和 “老人” 之间不存在连续的中间描述集),实现对属性的精细控制仍然是一个挑战。尽管引入了许多增强模型或生成过程以实现这种控制的方法,但不需要固定参考图像的方法仅限于启用全局细粒度属性表达控制或定位特定目标的局部属性表达控制,而不是同时具备两者。我们展示了在常用的基于 token 级别的 CLIP 文本嵌入中存在方向,使文本到图像模型中的高级属性的细粒度特定目标控制成为可能。基于这一观察结果,我们介绍了一种高效的无优化方法和一种稳健的基于优化的方法,用于从对比文本提示中识别出特定属性的这些方向。我们证明了这些方向可以以组合方式用于通过对特定目标的属性进行细粒度控制的提示文本输入(对单个目标的多个属性进行控制),而无需调整扩散模型。

项目页面:https://compvis.github.io/attribute-control

2. 相关工作

在 CLIP 空间中的全局编辑方向。大量先前的研究 [1-3,36] 调查了使用 CLIP 嵌入空间 [39] 来指导 StyleGAN [21] 图像生成过程的方法。这些研究确定了在 CLIP 的嵌入空间中对应于全局语义变化的方向,并利用这些方向来引导生成过程。

Edit One for All

注:本文使用与相似的思想,不同点在于,Edit One for All 利用 StyleGAN 的潜在空间,而本文 利用 CLIP 的文本嵌入空间。

3. 方法

对扩散模型中的生成过程施加控制。我们的目标是影响生成的样本 x_0 ∼ p_θ(x_0 | e),e = E_CLIP(prompt),更具体地说是特定目标 Sj ∈ S 的特定属性 Ai ∈ A 的表达 expr(Ai)。这个目标在提示 prompt[Sj] 中被描述(具有相应的嵌入 e[Sj]),并且位于生成的图像 x_(0,[Sj]) 中。目标在生成的图像 x_(0,[Sj]) 中的位置通常事先不知道,因为它是在生成过程中动态确定的。具体来说,我们的目的是改变目标 Sj 的属性 Ai 的表达。

为了控制属性 Ai 的表达,这种图像生成方法的性质使得有限数量的方面可以被用来影响生成过程。为了控制全局表达 expr_global(Ai),一种选择是通过重新定义属性在全局水平上的表达来修改扩散模型。另一种可能性是直接修改起始噪声潜变量 xT 或中间噪声潜变量 xt,可以使用动态预测或固定的辅助方向。或者,还可以影响扩散模型如何解释提示嵌入 e。这允许通过提示进行特定性,但不适用于连续属性表达控制。最后,可以影响文本编码器 E_CLIP 或修改原始 token 来直接修改提示嵌入 e。先前的方法已经调查了这种方法用于插入实例外观信息,但没有用于细粒度属性控制。

由于 token 化的提示嵌入 e 已经直接实现了基于文本的实例特定粗略属性控制,因此 token 化的提示嵌入 e 是一种自然的选择作为细粒度属性控制方法的基础,无论是在表达还是实例特定性方面。为了使这种方法实用,必须满足多个要求:

  • i) 扩散模型必须能够解释修改后的提示嵌入 e',这些嵌入不直接对应于可能的文本提示。
  • ii) 对 token 化提示嵌入的细粒度变化必须在其影响的范围内定位(特别是与提示嵌入 e 和图像 x0 中的目标 Sj 相关)。这种定位必须是可发现和可解释的。
  • iii) 扩散模型解释的 token 化 CLIP 嵌入空间必须在围绕实际词汇的锚点周围近似于一个欧几里得流形,这个流形在类似的锚点之间表现出类似的行为,以便沿着固定的类别特定方向 Δe 进行可组合的平滑局部编辑。
  • iv) 这些方向 Δe 必须是实际可发现的。

我们将在第 3.1 节中调查要求 i-iii),在第 3.2 节和第 3.3 节中调查要求 iv)。 

3.1 从文本/图像对中学习语义编辑

现在让我们调查先前提到的条件 i-iii)是否被满足,并且在 token 化的 CLIP 嵌入空间中是否存在可以应用于实际标题嵌入之上的语义方向。

先前的大量研究 [13, 16, 32, 48] 发现,预训练的 T2I 扩散模型的重建损失可以用于反向传播实例外观信息到提示嵌入。然后,这些实例文本嵌入可以在生成过程中启用各种个性化和图像编辑用例。这意味着 条件 i)(扩散模型可以解释不完全位于 CLIP 文本嵌入空间中的点)是给定的。否则,基于梯度下降学习非常具体的实例外观信息将是不合理的。

尽管目标函数仅基于像素级重建信息,但我们发现这种一般方法也可以直接学习语义信息。使用单个图像/标题对(x0,prompt),我们对图像施加随机量的噪声,并通过扩散模型 ˆx0(·) 反向传播重建损失:

我们更新可学习的增量 Δe,将其添加到提示嵌入 e 中,以最小化正则化的重建损失。一个关键的细节是噪声 ϵ 在每一步都是随机重新绘制的。

我们发现,这种方法确实导致学习到的提示嵌入增量捕捉到仅通过提示给出的生成图像集与目标图像之间的语义差异。图 2 显示了它们显着减小了使用原始提示生成的图像与目标图像之间的语义差距。此外,原始提示嵌入和应用增量的嵌入之间的线性插值显示了从最初生成的图像向目标图像的明显语义进展。这表明了 token 化的 CLIP 嵌入空间在语义意义上至少在局部是平滑的  (条件iii)。然而,我们也观察到了 “相变”,即在大的改变下,图像在插值轨迹的短时间内发生了显著变化,这表明嵌入空间在全局上不是平滑的

语义编辑增量的目标特异性。我们现在调查了这些学习到的 token 化语义编辑增量 Δe 与初始提示之间的关系。从高(语义)层次上看,我们的训练方法最初产生了完全提示嵌入的调整,大大缩小了最初生成的图像与目标图像之间的差距。我们发现(见图 2),仅应用于学习编辑增量 Δe 的目标特定 token 编辑 Δe[Sj] 就足以获得 Sj 充分解耦的编辑。这种部分编辑在语义上与完整编辑接近,仅对其余图像进行最小干扰。值得注意的是,我们仅在训练后掩盖增量。这意味着我们的训练过程将语义信息与每个目标 Sj 对应的特定 token 相关联,并且这些特定于 token 的增量 Δe[Sj] 可以直接用于在语义级别上影响目标的属性表达 expr_(Sj) (A)。这提供了一种简单可解释的方式来定位修改(条件ii)

语义编辑增量的可传递性。最后,我们调查了学习到的 Δe[Sj] 对其他提示的可传递性。我们将在一个新提示中学习到的增量应用于同一目标的另一个提示中。首先,我们测试将从一个目标 Sj(如“女人”)学习到的增量 Δe[Sj] 转移到新提示中相同单词的目标 S'_j,如图 3a 所示。这导致新目标 S'_j 上的属性表达 expr_(S'_j) (A) 发生了语义上类似于在原始提示中看到的改变(见图 2)。这些增量也可以转移到相似类别的其他目标 S_k(例如从 “女人” 到 “男人”,见图 3b)。在那里,它们再次导致了与属性表达 expr_(S_k) (A) 的相似变化,但保持了基(base)文本 token 中的基础(underlying)目标变化(例如在此示例中的性别变化)不变。这表明我们先前定义的 条件 iii)得到了有效履行。

3.2 从对比提示中识别特定属性增量

第 3.1 节展示了可以通过修改与目标对应的名词的 token 来实现特定目标的属性修改,而无需额外的单词。这意味着 CLIP 文本编码器很可能已经将语义属性聚合到相应的目标中,这得到了 [41] 的证实。否则,扩散模型可能不会学会以这种方式解释 token 化的嵌入。这也得到了 Li 等人的证实。[26] 发现概念将出现在 token 化嵌入的多个位置,而不仅仅局限于其特定的 token。尽管通常添加影响多个 token 嵌入的属性,但我们先前的发现表明,仅修改 token e[Sj] 就足以实现重大的语义变化。

受到这一发现的启发,我们提出在 token 化嵌入空间中识别影响特定属性 Ai 的语义方向,这些方向来自类似于 [14] 的对比提示(例如,“年轻人” 与 “老人” 对于 “年龄” 属性,两个提示使用相同的名词 Sj)。我们首先获得正提示和负提示的 token 化 CLIP 嵌入 E_CLIP(prompt_Ai,+) 和E_CLIP(prompt_Ai,−)。然后,我们计算两个嵌入中目标的 token 嵌入之间的差异。

这直接产生了一个与目标属性 Ai 对应的方向。为了获得更稳健的这个方向的估计,我们将其平均化,涵盖了描述相同概念的大量对比提示对。

采样。在采样过程中,我们简单地将这些学习到的增量 Δe_Ai 添加到目标 Sk 的 token 化提示嵌入e[Sk] 中,并使用所需的比例 αi。然后,我们将修改后的提示嵌入传递给扩散模型以生成图像,与标准采样相比没有额外的计算成本。这产生了类似于在提示中为目标添加 “老” 或 “年轻” 等形容词的行为,但同时保留了目标特异性的平滑比例控制。

图 4 显示了这些学习到的方向的两个示例。它们说明了这种方法可以识别影响车辆价格等属性的方向,但也经常表现出无关的相关性,如汽车方向或自行车尺寸。由于 CLIP 文本编码器是因果的,因此这种方法也仅限于可描述为目标名词的前缀的属性。

3.3 学习稳健的细粒度属性增量

受到第 3.1 节发现的启发,我们引入了一种用于在 T2I 生成中进行有针对性的、细粒度的、目标特定的属性控制的方法。我们先前发现,直接编辑特定目标 Sj 的 token 嵌入会调节其语义属性表达expr_(Sj) (A),并且这些编辑是可传递的。因此,我们提出利用这种方法在不修改 T2I 模型的情况下引入细粒度控制,即学习到与特定目标的细粒度调制直接对应的嵌入提示 e 的编辑方向 Δe_(Ai),用于调节特定属性 Ai 的表达 expr_(Sj) (Ai)。

一般来说,为了将 Δe_(Ai) 限制为适用于特定目标 Sj,我们只修改与 Sj 对应的 e 的部分:

然后将这个修改后的嵌入传递给扩散模型,替代 e。

训练。训练过程中,我们利用扩散模型的世界知识,具体来说是关于生成的图像 x0 中哪些变化对应于特定高级属性 Ai 调制的信息。我们继续使用描述目标属性 Ai 的对比文本提示,以引发模型噪声预测空间中与该属性对应的细粒度方向。然后,我们通过扩散模型反向传播这个方向,将其提取为我们的增量 Δe_(Ai)。与 [14] 中一样,这种方法从仅一组对比提示中学习到了强大的增量 Δe_(Ai),并且不需要训练图像。

对于每个优化步骤,我们首先使用随机提示(例如 “一个人的照片”)和标准采样设置从目标类别生成一个随机图像 x_(0,a)。这个图像将作为优化过程的锚点。从这个图像 x_(0,a) 的噪声版本 x_(t,a) 开始,我们然后使用扩散模型生成三个预测:一个预测 ˆx_(0,a) 使用原始的锚点提示,另外两个预测 ˆx_(0,+), ˆx_(0,-) 使用修改后的提示。对于这些预测,添加形容词会增加(例如“一张老年人的照片”)或减少(例如“一张年轻人的照片”)目标属性 expr(Ai)(例如年龄)的表达。

众所周知,无分类器的指导可以有效地将多个这样的预测合并为一个新的预测,从而允许连续应用不同的预测。从 ˆx_(0,a) 开始,我们可以使用下式增加或减少 expr(Ai)

其中,指导比例 αi 控制属性表达变化的方向(符号)和幅度(数值)。然后,我们可以使用这些目标来训练我们的语义编辑增量 Δe_Ai。在训练过程中随机采样 αi 使得我们能够可靠地在以后连续调节属性 Ai。当最小化扩散模型的预测与目标预测之间的差异时,我们通过 αi 调整 Δe_Ai,得到我们的增量训练损失公式:

使用描述目标属性 Ai 增加和减少表达的一组合适的提示,该目标学习到了强大的属性增量 Δe_Ai。

在采样过程中,我们使用与 3.2 节中相同的方法来应用它们。与使用 CLIP 文本嵌入差异获得的结果相比(见图 4),这些结果(见图 5)也成功地捕捉到了目标属性,但展现出较少的伪影,例如汽车的方向翻转和年龄变化(见第 4.1 节)。

3.4 全局相关性

一般来说,图像生成模型学习到了图像不同部分之间的相关性。由于我们不修改扩散模型本身,直接将我们学到的编辑增量 Δe_Ai 应用于特定目标 Sj 会导致目标属性表达 expr_(Sj) (A) 的所需变化,但同时也捕捉了基于扩散模型世界知识的、该目标的属性与生成图像的其余部分的属性之间的纠缠关系。这意味着这种属性变化不仅适用于对应于 Sj 的图像部分 x_(0,[Sj]),还适用于图像的其余部分(见图 6a)。这有助于生成合理的图像,因为这种纠缠基于现实世界的依赖关系。然而,对这些相关性的建模可能并不总是可取的。

如果不希望对目标与其周围环境之间的依赖关系进行建模,我们可以在推断时增强我们的采样方法(而无需重新学习 Δe_Ai)。按照 [14,31] 的方法,在扩散生成过程的前几步中简单地不应用编辑增量就可以大大减少这些相关性的表达,而且不会增加额外的计算成本。这尤其有助于保持原始的全局图像结构,因为它是在生成过程的最初步骤中确定的。图 6b 显示了一个示例。由于我们的模型只改变了文本嵌入,我们还可以将其直接与 Prompt-to-Prompt [17] 配对,以进一步改善外观和结构的分离,而编辑的成本是将推理成本加倍。图 6c 显示了相应的示例。

4. 实验

我们在各种设置下评估我们提出的方法,主要是在 Stable Diffusion XL [38] 上,这是一个标准的现成的大规模 T2I 扩散模型。

由于我们的属性编辑增量是双向的,我们将其与描述正向方向(如“老年人”)的提示 prompt+ 和描述负向方向(“年轻人”)的提示 prompt− 进行比较。我们计算这个双向相对 CLIP 分数如下:

然后我们测量相对于未应用增量的参考图像 I_ref 的相对变化如下:

将这个分数与图像的整体变化进行比较,可以看出在正向属性表达方向(图8)中,学习到的和基于差异的编辑增量的性能相似。然而,在负向方向上,基于差异的方法在成功捕捉属性表达方面表现不佳,而且往往会大幅改变图像的整体外观。

图 9 显示,对于相同级别的属性表达,延迟应用学习到的增量有助于在采样过程中大幅减少图像中的无关变化(特别是以 LPIPS 衡量),而且没有额外的成本。将我们的方法与 Prompt-to-Prompt [17] 结合使用可以进一步减少这些无关变化,但代价是采样时间加倍。 

5. 结论

​本研究揭示了基于逐 token (tokenwise) CLIP [39] 文本嵌入在 T2I 扩散模型中对图像生成过程施加控制的强大能力。我们发现,扩散模型能够以语义上有意义的方式解释逐 token CLIP 文本嵌入空间中的局部偏差,而不仅仅是作为单词嵌入的离散空间。我们利用这一洞察力,通过识别与特定属性相对应的语义方向,将通常相当粗糙的提示增强为对特定目标的属性表达进行细粒度、连续控制。由于我们只在预先识别的方向上修逐 token CLIP 文本嵌入,我们在生成过程中实现了更细粒度的操作,而无需额外成本。

局限性和未来工作。本研究是向公共大规模扩散模型的文本嵌入输入揭示隐藏能力的一步,并使其以简单直接的方式可用。虽然我们的方法适用于不同的现成模型而无需修改,但它也受到它们能力的固有限制。具体来说,我们的方法继承了扩散模型有时会混淆不同目标之间属性的限制。补充方法 [7, 41] 在很大程度上减少了这些问题,未来的工作可以深入研究它们与我们方法的结合。

影响声明。本研究旨在通过引入一种高效、简单易用的方法来影响生成图像中特定目标的属性表达,以细粒度的方式改善文本到图像(T2I)扩散模型的能力。虽然在一般情况下,通过利用对原始生成的图像进行基于编辑的方法,可以实现类似的有针对性控制,其中生成的图像被反转并使用自定义编辑掩码进行局部更改,但这种方法的简单性和效率可能为更广泛的受众提供了这种水平的控制。与改善图像合成模型控制能力的其他作品一样,这也带来了进一步促使生成有害或欺骗性内容的风险。

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

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

相关文章

LLM-base版本和chat版本的比较

突然想到了这个问题,网上搜集了一些资料,自己也总结一下 首先放一张llama2论文当中的图,可以很直观的看到区别 面试回答版 问题: 大语言模型base版和chat版的区别是什么? 回答: base版本更适合文本补全…

【Python】文件操作和异常

Python基础 读文件操作写文件操作异常异常处理else 和 finally 模块安装第三方包 使用 open() 方法打开一个文件,返回一个文件对象。对应 close() 就是文件关闭。 完整格式:open(file, mode‘r’, buffering-1, encodingNone, errorsNone, newlineNone, …

Android Studio学习16——Activity跳转时的参数传递

传递数据——example 传递对象类型的数据——example 传递 接收 回传数据——example

Numpy数组转换为csv文件

参考:Converting Numpy Array to CSV 在数据分析和处理中,经常会涉及到将数据从一个形式转换为另一个形式的操作。 其中,将Numpy数组转换为csv文件是一种常见的操作,因为csv文件是一种通用的数据存储格式,方便与其他软…

图数据库技术:知识图谱的存储与查询

图数据库技术:知识图谱的存储与查询 一、引言 在探索知识的宇宙中,知识图谱是组织和理解海量信息的星系图。在这张图中,每一个概念、实体与事物不再是孤立的点,而是通过关系与边相互连接,形成一个复杂而有机的网络。图…

Python景区票务人脸识别系统(V2.0),附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

链表实验.

#include<stdio.h> #include<stdlib.h>// 定义单链表节点结构体 struct Node {int data;struct Node* next; };struct Node* initList() {struct Node* list (struct Node*)malloc(sizeof(struct Node));list->data 0;list->next NULL;return list; }void…

CLIP模型 图片问答

先简短介绍一下CLIP模型&#xff1a; CLIP (Contrastive Language–Image Pretraining) 是由 OpenAI 开发的先进的多模态视觉模型&#xff0c;结合了图像和文本处理能力。 CLIP 模型的主要特色在于它不仅可以理解图像&#xff0c;同时也能理解描述这些图像的文本。通过这样的方…

uniapp:聊天消息列表(好友列表+私人单聊)支持App、H5、小程序

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 文章简介&#xff08;效果图展示&#xff…

Python小白入门教程:手把手教你安装最新版本Anaconda及运行第一个程序

1、Anaconda是什么&#xff1f; 其实通过百度搜索就能了解到&#xff0c;再次可以看下它自己官网的介绍&#xff1a;如下 简单的说&#xff0c;它就是一个集成的管理软件&#xff0c;管理很多工具包 2、为什么安装Anaconda&#xff1f; 简单的说&#xff0c;就是为了方便&am…

QMC5883芯片I2C驱动开发指南

这个芯片纯国产挺好用的&#xff0c;电路很好设计&#xff0c;我这垃圾焊功&#xff0c;纯手焊&#xff0c;&#xff0c;居然能用。 第一部分 硬件连接 画的很简陋&#xff0c;看看就可以了。 第二部分 软件驱动 I2C的具体时序实现需要自己搞定&#xff01;&#xff01; 2…

软件设计师30--数据库系统章节回顾

软件设计师30--数据库系统章节回顾 章节重要内容考情分析 章节重要内容 考情分析

【QT+QGIS跨平台编译】056:【pdal_json_schema+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal_json_schema介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_json_schema介绍 pdal_json_schema 是与 PDAL(Point Data Abstraction Library)相关的 JSON 模式文件。PDAL 是一个用于处理和分析点云数据的开源库。JSON 模式…

Win UI3开发笔记(九)关于图标Win10乱码问题

1、最开始的问题&#xff0c;winui3 gallery软件的左侧全是乱码&#xff0c;使用icon的时候&#xff0c;设置name属性出现的全是乱码&#xff0c;所以开发涉及到这部分使用Text.Glyph属性。 2、后来出现的问题&#xff0c;靠 textbox右键有各种操作&#xff0c;前面的图标乱码…

pandas(day6 图表)

一. 计算效率 1. 测量代码运行时间 %%time %%timeit 单纯计算 代码块执行的时长 %%time _sum(np.arange(6)) CPU times: total: 0 ns Wall time: 1.66 ms用于多次运行代码块并计算平均执行时间 %%timeit _sum(np.arange(6))738 ns 10.7 ns per loop (mean std. dev. of 7…

多线程4

死锁 想获取到第二把锁&#xff0c;就需要执行完第一层大括号&#xff0c;想要执行完第一层大括号&#xff0c;就要先获取到第二层的锁。 synchronized (counter2){ synchronized (counter2){} } 例子:t2先启动&#xff0c;t2进行加锁后一定成功&#xff0c;但是如果t2进行二…

Revit模型进入虚幻引擎UE5教程

一、背景 小伙伴们是否有Revit进入虚幻引擎交互的需求呢&#xff1f; 二、实现功能 1.Revit进入虚幻UE5,包含模型属性&#xff0c;材质等 2.实现BIM构件点选&#xff0c;高亮&#xff0c;属性展示 3.实现BIM模型分层显示&#xff0c;爆炸等效果 三、教程地址 教程&#x…

JavaEE——手把手教你实现简单的 servlet 项目

文章目录 一、什么是 Servlet二、创建一个简单的 Servlet 程序1. 创建项目2.引入依赖3. 创建目录4.编写代码5. 打包程序6. 部署7.验证整体过程总结 三、使用 Smart Tomcat 插件简化项目创建四、创建项目时可能遇到的几个问题。 一、什么是 Servlet Servlet 是一种实现 动态页面…

“Java泛型” 得所憩,落日美酒聊共挥

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…