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

【论文阅读】Prompt-to-Prompt Image Editing with Cross Attention Control

目录

  • 摘要
  • 1. 研究背景
  • 2. 方法
    • 补充介绍:
    • 2.1 文本引导扩散模型中的交叉注意力
    • 2.2 控制交叉注意力
      • 编辑操作:Prompt-to-Prompt 图像编辑框架
      • 具体编辑操作
        • 1. 词语替换(Word Swap)
        • 2. 添加新短语(Adding a New Phrase)
        • 3. 注意力加权(Attention Re-weighting)
  • 3. 应用场景
  • 总结

摘要

最近,大规模文本驱动的图像合成模型取得了显著进展,这些模型能够根据文本提示生成多样化的图像,且因其符合人类通过语言表达意图的习惯而广受关注。然而,文本驱动的图像编辑面临挑战,因为编辑时需要保留原始图像的大部分内容,而对文本提示的微小修改往往会导致图像发生较大变化。当前的主流方法通过要求用户提供空间掩码来定位编辑区域,从而忽略掩码区域内的原始图像内容。

本文提出了一种新的基于文本提示的编辑框架,编辑过程仅通过文本控制。作者分析了文本条件模型,发现交叉注意力层在控制图像空间布局与文本之间关系方面起着关键作用。基于这一发现,本文提出了几种编辑应用:通过替换单词进行局部编辑,通过添加描述进行全局编辑,甚至可以精细控制单词在图像中的表现程度。实验结果表明,模型能够在多样化的图像和文本提示下生成高质量的图像,并能保持对编辑提示的忠实度。

1. 研究背景

近年来,大规模的文本驱动图像生成模型(如Imagen、DALL·E 2和Parti)在生成图像方面展现出了强大的语义生成和组合能力,吸引了大量研究者和公众的关注。这些模型通过训练极其庞大的语言-图像数据集,并使用最先进的图像生成模型(包括自回归模型和扩散模型)。然而,这些模型在图像编辑上存在不足,特别是缺乏对图像中特定语义区域的控制。尤其是,当文本提示发生微小变化时,生成的图像可能会完全不同

为了克服这一问题,现有的文本驱动方法要求用户为图像编辑提供空间掩码,以便仅在掩码区域内进行修改,同时保持背景不变。尽管这种方法在某些情况下有效,但掩码操作比较繁琐,难以实现快速且直观的文本驱动编辑。而且,掩码会忽略被遮挡区域中的重要结构信息,这使得一些编辑功能(如修改特定物体的纹理)变得无法实现。

本文提出了一种直观且强大的文本编辑方法,允许通过修改文本提示(即“Prompt-to-Prompt”)来编辑图像。为了实现这一点,作者深入研究了交叉注意力层,并发现它们在控制图像生成过程中的语义作用。具体而言,交叉注意力图包含了将图像像素与文本提示中的单词联系起来的语义信息,这些信息对生成的图像有重要影响。

本文的核心思路是,通过在扩散过程中注入交叉注意力图来控制图像的生成。具体来说,控制哪些像素与文本中的哪些单词进行关联,并在扩散的不同步骤中调整这种关系。通过这种方法,作者提出了几种简单且语义化的编辑方式:例如,替换提示中的单个单词(如“狗”改为“猫”),保持交叉注意力图不变,从而保持场景构图;或者通过在提示中添加新词进行全局编辑(如改变图像的风格),同时将注意力固定在先前的单词上,允许新词接收新的注意力;还可以通过调整单词在图像中的语义影响力来精细控制生成效果
我们的方法提供了多种Prompt-to-Prompt编辑功能。用户可以调整形容词的影响程度(左上角),替换图像中的物体(右上角),指定图像的风格(左下角),或对生成的图像进行进一步的细化(右下角)。这些操作通过扩散模型的交叉注意力机制进行渗透,无需对图像像素空间进行任何额外的指定。
通过注意力注入进行内容修改。我们从一个由“柠檬蛋糕”提示生成的原始图像开始,并将文本提示修改为其他各种蛋糕。在顶部行中,我们在扩散过程中注入原始图像的注意力权重。底部则仅使用与原始图像相同的随机种子,而不注入注意力权重。这会导致一个完全不同的结构,几乎与原始图像无关。
与之前的方法不同,本文的方法只需要文本输入,通过利用生成模型内部层的空间信息,提供了一种更加直观的编辑体验。用户只需修改文本提示,就能实现局部或全局的图像编辑,而无需额外的模型训练、微调、数据或优化。实验结果表明,这种方法能够实现高质量的图像编辑,并且在多种图像上进行无缝编辑,展示了文本驱动图像编辑的巨大潜力。

2. 方法

假设有一张由文本引导的扩散模型生成的图像 I,它是通过文本提示 P 和随机种子 s 生成的。我们的目标是通过编辑后的文本提示 P ∗ P^* P来编辑输入图像 I,并生成编辑后的图像 I ∗ I^* I。例如,假设一张由提示“我的新自行车”生成的图像,用户可能希望改变自行车的颜色、材质,或者甚至将其替换为滑板车,同时保留图像的外观和结构。一个直观的界面是用户直接通过进一步描述自行车的外观,或者将其替换为另一个词(如滑板车)来修改文本提示。与之前的方法不同,我们希望避免依赖用户定义的掩膜来指示编辑的位置。一个简单但不成功的尝试是固定内部随机性,并使用编辑后的文本提示重新生成图像。然而,如图2所示,这会导致完全不同的图像,结构和构图也不同。
通过注意力注入进行内容修改。我们从一个由“柠檬蛋糕”提示生成的原始图像开始,并将文本提示修改为其他各种蛋糕。在顶部行中,我们在扩散过程中注入原始图像的注意力权重。底部则仅使用与原始图像相同的随机种子,而不注入注意力权重。这会导致一个完全不同的结构,几乎与原始图像无关。
我们的关键观察是:生成图像的结构和外观不仅取决于随机种子,还取决于通过扩散过程,像素与文本嵌入之间的相互作用。通过修改像素与文本交互发生的交叉注意力层,我们能够实现基于文本提示的图像编辑。更具体地说,通过注入输入图像 I 的交叉注意力图,我们能够保持原始的构图和结构。

补充介绍:

Imagen是一种基于文本生成图像的深度学习模型,由谷歌研究团队提出,目的是实现高质量、逼真的图像生成。Imagen的独特之处在于,它使用了以文本为条件的级联式扩散模型(Cascaded Diffusion Models),该模型通过多阶段处理来生成从低分辨率到高分辨率的精美图像。Imagen的核心思想是在文本和图像之间建立一个细致的映射,使得模型能够捕获文本提示中细腻的语义信息和风格特征,从而生成更具描述性和视觉效果的图像。

Imagen的模型结构由多个逐步递进的扩散模型组成。具体流程为:

  • 首先生成64x64的低分辨率图像。
  • 然后将64x64的图像通过超分辨率模型处理为256x256分辨率。
  • 最终生成1024x1024的高分辨率图像。

每个扩散阶段都使用独立的模型,并且级联的结构允许逐步提升图像的分辨率和细节,生成的图像可以达到极高的质量。

Imagen使用了强大的自然语言处理模型——T5文本编码器(Text-To-Text Transfer Transformer),这是一种由谷歌开发的大规模预训练模型。T5能够很好地处理文本的语义和上下文信息,Imagen通过T5将文本提示编码为特征向量,从而将复杂的文本信息传递给生成器。相比传统的Transformer模型,T5更适合处理多语言、多任务场景,因此它能够增强Imagen在多样化文本提示下生成图像的能力。

在生成过程中,Imagen模型在每个扩散阶段应用交叉注意力机制,使得文本特征与图像特征能够更有效地交互。交叉注意力能够帮助模型在不同像素位置上更好地理解每个文本标记的影响,使生成的图像不仅能够捕捉整体语义,还能体现出文本描述的细节,比如物体的形状、颜色、位置等。这一点在复杂场景和多层次描述的图像生成中尤为重要。

Imagen的图像质量在多个基准数据集上都达到了先进水平,例如COCO和DrawBench测试。DrawBench是谷歌团队设计的一个测试基准,包含多种复杂场景和描述,旨在评估生成模型在不同复杂提示下的表现。Imagen在该测试中展示了强大的生成效果,生成的图像在真实性、清晰度、细节和准确性上都得到了人类评估者的高度认可。

2.1 文本引导扩散模型中的交叉注意力

我们使用 Imagen [38] 作为基础模型。在图像的64×64分辨率下,图像的构图和几何形状基本已经确定,因此我们仅适配文本到图像的扩散模型超分辨率过程保持不变。回顾每个扩散步骤 t ,我们通过一个 U 型网络来预测噪声 ϵ \epsilon ϵ 从一个带噪声的图像 z t z_t zt 和文本嵌入 ψ ( P ) \psi(P) ψ(P) 开始。最终,扩散过程会生成图像 I = z 0 I = z_0 I=z0。最重要的是,两个模态的交互发生在噪声预测过程中,视觉和文本特征的嵌入通过交叉注意力层进行融合,产生针对每个文本标记的空间注意力图。

具体来说,如图 3(顶部)所示,带噪声图像的深度空间特征 ϕ ( z t ) \phi(z_t) ϕ(zt) 被投影到查询矩阵 Q = Q ( ϕ ( z t ) ) Q = Q(\phi(z_t)) Q=Q(ϕ(zt)),而文本嵌入被投影到键矩阵 K = K ( ψ ( P ) ) K = K(\psi(P)) K=K(ψ(P))和值矩阵 V = V ( ψ ( P ) ) V = V(\psi(P)) V=V(ψ(P)),通过学习的线性投影 Q , K , 和 V 完成。接着,计算注意力图 M :

M = Softmax ( Q K T d ) , M = \text{Softmax}\left( \frac{Q K^T}{\sqrt{d}} \right), M=Softmax(d QKT),

其中 M i j M_{ij} Mij 表示第 j 个标记在像素 i 上的权重,d 是键和值的投影维度。最终,交叉注意力的输出 ϕ b ( z t ) = M V \phi_b(z_t) = M V ϕb(zt)=MV,并将其用于更新空间特征 ϕ ( z t ) \phi(z_t) ϕ(zt)

方法概述。顶部:将视觉和文本嵌入通过交叉注意力层融合,这些层为每个文本标记生成空间注意力图。底部:通过使用源图像的注意力图控制生成图像的空间布局和几何结构,从而实现仅编辑文本提示即可完成的各种编辑任务。在提示中交换一个词时,将源图像的注意力图 注入,覆盖目标图像的注意力图 ,以保留空间布局。如果添加一个新短语,仅注入对应于未更改部分提示的注意力图。通过重新调整相应注意力图的权重,可以增强或减弱特定词语的语义效果。

在实际操作中,为了提高表达能力,通常使用多头注意力 [44],然后将结果拼接并通过线性层得到最终输出。

2.2 控制交叉注意力

返回到我们之前的观察:生成图像的空间布局和几何形状依赖于交叉注意力图。这种像素和文本之间的交互过程在图4中得到了体现,其中显示了每个标记的平均注意力图。
文本条件下扩散图像生成的交叉注意力图。第一行展示了提示中每个词的平均注意力掩码,这些掩码生成了左侧的图像。下方的行展示了针对单词 “bear”(熊)和 “bird”(鸟)在不同扩散步骤中的注意力图。

我们可以看到,像素会更多地与描述它们的单词相关联。例如,熊的像素与“熊”这个单词相关联。注意,图中的平均是为了可视化目的,实际中每个头的注意力图是分开的。

有趣的是,图像的结构在扩散过程的早期步骤就已经确定。因此,我们可以将从原始提示 P 生成的交叉注意力图 M 注入到使用编辑后的提示 P ∗ P^* P 生成的新图像中。这使得生成的编辑图像不仅根据编辑后的提示进行修改,而且保持了输入图像 I 的结构。

编辑操作:Prompt-to-Prompt 图像编辑框架

算法 1: Prompt-to-Prompt 图像编辑

  1. 输入:源提示 P ,目标提示 P ∗ P^* P,随机种子 s。
  2. 输出:源图像 x s r c x_{src} xsrc 和编辑图像 x d s t x_{dst} xdst
  3. 初始化随机高斯噪声 z T z_T zT
  4. 进行扩散步骤,计算每个步骤的注意力图 M t M_t Mt 和相应的图像 z t z_t zt
  5. 使用修改后的提示 P ∗ P^* P 生成新的图像,并注入新的注意力图。
  6. 返回最终的图像。

具体编辑操作

1. 词语替换(Word Swap)

用户可以通过替换原始提示中的某些词语来改变图像内容,例如将“一个大红色的自行车”改为“一个大红色的汽车”。为了保持原始构图的同时适应新的内容,我们将源图像的交叉注意力图注入到生成过程中。

2. 添加新短语(Adding a New Phrase)

如果用户向提示中添加新词语(例如,将“河边的城堡”改为“儿童画中的河边城堡”),为了保留共通的细节,我们仅在相同词汇上进行注意力注入。

3. 注意力加权(Attention Re-weighting)

用户还可以调整每个词语在生成图像中的影响。例如,用户想要让“红色的毛绒球”更加蓬松,可以通过调整“毛绒”词语的注意力权重来达到这个效果。

通过以上操作,我们可以灵活地进行图像编辑,既能修改图像内容,又能保持图像的结构和外观。
通过不同数量的扩散步骤进行注意力注入。顶部显示了源图像和提示词。在每一行中,我们通过更改文本中的一个词来修改图像内容,并将源图像的交叉注意力图注入不同的扩散步骤范围,从左侧的 0% 到右侧的 100%。需要注意的是,一方面,如果不使用我们的方法,源图像的内容可能无法得到保留;另一方面,在所有扩散步骤中注入交叉注意力可能会过度限制图像的几何结构,导致对文本提示的忠实度降低。例如,第三行中的“汽车”在完全注入交叉注意力后变成了一辆“自行车”。

3. 应用场景

以下是第 3 节方法的一些应用示例,展示了如何通过控制文本提示中每个单词的空间布局,实现直观的仅文本编辑。

  1. 局部编辑(只用文字,无需遮罩)
    我们可以直接修改提示词实现局部编辑,无需为图像手动添加遮罩。例如在图 2 中,我们使用提示“柠檬蛋糕”生成图像。在更换提示中的“柠檬”为“南瓜”时,此方法能保留原图的布局、几何和语义(如背景与左上角柠檬变为南瓜)。而直接使用“南瓜蛋糕”提示生成的图像则具有完全不同的布局。此方法甚至可在复杂的提示下(如“意面蛋糕”)生成合理图像:蛋糕由意面层和番茄酱组成。
    通过注意力注入进行内容修改。我们从一个由“柠檬蛋糕”提示生成的原始图像开始,并将文本提示修改为其他各种蛋糕。在顶部行中,我们在扩散过程中注入原始图像的注意力权重。底部则仅使用与原始图像相同的随机种子,而不注入注意力权重。这会导致一个完全不同的结构,几乎与原始图像无关。
    另一个例子(图 5)中,部分注入“蝴蝶”单词的注意力,保留原图蝴蝶,同时更改其他内容。
    在这里插入图片描述

更多结果见附录(图 13)。
在这里插入图片描述

在图 6 中,方法不仅能修改纹理,还能执行结构性更改,如将“自行车”变为“汽车”。左列不使用交叉注意力,单词变化导致结果差异大;逐步注入注意力提高对原图忠实度,但注入所有步骤未必最佳,通过调节注入步骤数为用户提供更好的控制。
通过不同数量的扩散步骤进行注意力注入。顶部显示了源图像和提示词。在每一行中,我们通过更改文本中的一个词来修改图像内容,并将源图像的交叉注意力图注入不同的扩散步骤范围,从左侧的 0% 到右侧的 100%。需要注意的是,一方面,如果不使用我们的方法,源图像的内容可能无法得到保留;另一方面,在所有扩散步骤中注入交叉注意力可能会过度限制图像的几何结构,导致对文本提示的忠实度降低。例如,第三行中的“汽车”在完全注入交叉注意力后变成了一辆“自行车”。
另外,用户可在生成图像中增加新的描述词,此时保留原提示词的注意力,仅对新增词生成图像。例如图 7(顶部),增加“压碎的车”,生成包含额外细节的图像,但背景仍保留。更多示例见附录(图 14)。
在这里插入图片描述
在这里插入图片描述

  1. 全局编辑
    这种编辑不仅可以改变局部,还可用于图像整体的改变,但仍保留了基本的构图,如对象的位置和特征。图 7(底部)展示了在原图上添加“雪”或更改光照的例子,其他示例如将草图转为真实感图像或添加艺术风格见图 8。
    在这里插入图片描述
    在这里插入图片描述

  2. 注意力渐变控制
    虽然编辑提示词能有效控制生成图像,但某些情况下需要更精确的控制。例如,对“雪山”场景可能希望调整雪量,这通过文字很难实现。为此,我们提出渐变控制(Fader Control),让用户调节特定词汇的影响程度,如图 9 所示,通过重缩放对应词的注意力实现此控制。附录中提供更多结果(图 15)。
    在这里插入图片描述
    在这里插入图片描述

  3. 真实图像编辑
    编辑真实图像需在扩散过程中找到生成该图像的初始噪声向量,这称为“反演”,最近在 GAN 领域得到关注,但对文本指导的扩散模型尚未完全实现。在此部分展示基于常用反演技术的初步编辑结果。简单方法是给输入图像添加高斯噪声,再进行预定的扩散步数,但此方法会导致显著失真。我们采用改进反演方法,基于确定性 DDIM 模型而非 DDPM,按反方向扩散,即从 x 0 x_0 x0 x T x_T xT,其中 x 0 x_0 x0 为输入图像。
    在这里插入图片描述

    虽然该反演方法在某些情况下效果满意(图 10),但在许多情况下准确性不够(如图 11)。这部分由于失真-可编辑性平衡问题,即降低分类器自由指导(减弱提示词影响)可改善重建,但限制显著编辑的可能性。为减轻此问题,我们提出利用遮罩还原原图未编辑区域,遮罩直接从注意力图生成且无需用户指导。正如图 12 所示,即便使用简单的 DDPM 反演方案(加噪后再去噪),此方法也有效。猫的身份在各种编辑操作下得以保留,遮罩仅根据提示词生成。
    在这里插入图片描述

总结

本研究揭示了文本生成图像扩散模型中交叉注意力层的强大功能。我们发现,这些高维层中包含可解释的空间映射,将文本提示词和生成图像的空间布局紧密关联。基于此发现,我们展示了通过提示词的各种操作可以直接控制生成图像的属性,为局部和全局编辑等应用铺平了道路。这项工作为用户提供了一种直观的图像编辑方式,通过文本语义来控制图像内容,而无需每次都重新生成图像。

尽管展示了通过文本控制语义的有效性,但该方法仍有一些局限性需进一步研究。首先,目前的反演过程在部分测试图像上可能产生明显的失真,同时用户需自行设计合适的提示词,这对于复杂场景可能较难。此外,由于当前交叉注意力位于网络的瓶颈层,导致注意力图分辨率较低,从而限制了精确的局部编辑。为改善这一点,我们建议在高分辨率层中加入交叉注意力,尽管这需深入研究训练过程,超出了本研究的范围。最后,本方法目前无法在图像中空间上移动现有对象,这种控制也将留待未来研究。


http://www.kler.cn/a/399858.html

相关文章:

  • 七、箭头函数及简写、arguments、剩余参数、展开运算符、解构数组与对象、数组常见方法(forEach、map、join、reduce)
  • 一体化运维监控管理平台:产品架构与功能解析
  • Uniapp 引入 Android aar 包 和 Android 离线打包
  • 如何进入python交互界面
  • vuex和pinia的区别
  • 006.精读《Apache Paimon Docs - Concepts》
  • 【拥抱AI】人工智能驱动下的电商革命:创新应用与策略实践
  • RPC安全可靠的异常重试
  • OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!
  • Vue 3 组合式 API 中的组件生命周期函数详解
  • 正则表达式完全指南,总结全面通俗易懂
  • Elasticsearch:管理和排除 Elasticsearch 内存故障
  • MySQL 中有哪几种锁?
  • 【Mysql】函数--日期函数(上)
  • hive复杂数据类型Array Map Struct 炸裂函数explode
  • day-17 反转字符串中的单词
  • 【FacePoke人像表情调整】如何在本地和远程使用FacePoke进行AI人像表情调整
  • 后端-Result.java工具类和SystemCode.java工具类
  • 5. ARM_指令集
  • 如何手写实现 JSON Parser
  • 自己动手写Qt Creator插件
  • 电脑插入U盘, 电脑显示新增了,但是双击却显示 请将磁盘插入
  • 如何在 gdb 中执行命令
  • css 使用图片作为元素边框
  • shell脚本命令1,保姆级别---清风
  • 【jvm】G1垃圾收集器的特点,为什么低延迟