[图像编辑03] Prompt-to-Prompt
Table of Contents

Prompt-to-Prompt Image Editing with Cross Attention Control Link to Prompt-to-Prompt Image Editing with Cross Attention Control

From: ICLR2023

先给一个编辑的示例如下

image-20250327223029008

Motivation Link to Motivation

文生图模型的随机性有2个来源:

  • 扩散初始噪声zTz_{T}的随机性,该随机性由随机种子seedseed决定;

  • Prompt。Prompt的不同会改变Unet层的cross-attention。

在文生图模型中,同样的seed+同样的prompt可以生成一样的图片,但是如果同样的seed+prompt轻微改动,则生成图片大相径庭。

示例如下:

image-20250317203741445

关于为什么prompt轻微改动,则生成图片大相径庭,做一点解释如下,参考自该博客的图片:

首先回顾在cross-attention层,text embedding作为cross-attention的key和value,如下图所示(灰色的块表示mask)

11

假定当prompt的第二个token发生改变时,根据下图的计算流,可以看到整个attention score的数值都会发生改变。随着采样步长的增加,最终输出结果会偏离的越来越远.

22

通过对diffusion model网络内部的观察,作者发现生成图片的空间布局和几何形状都是由内部的cross-attention层的attention map决定(上图的attention)。下图是由prompt: “a furry bear watching a bird”生成的图片,我们分别看每一个token对应的attention map对应生成图片的相应位置。并在time step的早期这个对应关系就已形成。

33 image-20250317211000700

Method Link to Method

既然cross-attention的attention map决定生成图片的结构信息,那我们维持原始的attention map即可。

算法如下:

image-20250317211304568

在每一个时间步 tt 分别计算原始 prompt P\mathcal{P} 的 attention map MtM_t 和新的 prompt P\mathcal{P}^* 的 attention map MtM_t^*,并用特定的替换规则Edit(Mt,Mt,t)Edit(M_t, M_t^*, t)​替换后再进行生成。

作者根据不同的编辑类型,设计了不同的替换方式

image-20250317211733270

以下是3个不同的任务:

  • Word Swap

    这个编辑类型是指将原始 prompt 中的某个 token 用新的 token 进行替换。 P="photo of a cat riding on a bicycle"\mathcal{P} = \text{"photo of a cat riding on a \textcolor{teal}{bicycle}"} , P="photo of a cat riding on a motorcycle"\mathcal{P}^* = \text{"photo of a cat riding on a \textcolor{red}{motorcycle}"}​ 此时的替换规则是:

    Edit(Mt,Mt,t):={Mtif t<τMtotherwiseEdit(M_t, M_t^*, t) := \begin{cases} M_t^* & \text{if } t < \tau \\ M_t & \text{otherwise} \end{cases}

    τ\tau 表示某一时间步。当时间步小于 τ\tau 时不做替换,否则用原始 prompt 的 attention map 做替换。(当两个词的长度不同时,可以对少的进行复制)引入 τ\tau 的目的是:有一些编辑对图像的几何改变会很大,可以通过引入控制时机 τ\tau​​ 来缓和。

    image-20250317212511121
  • Adding a New Phrase

    指的是在原始 prompt P\mathcal{P} 新增一些 token。如P="a photo of a house on a mountain"\mathcal{P} = \text{"a photo of a house on a mountain"} \quad,P="a photo of a house on a mountain at winter"\quad \mathcal{P}^* = \text{"a photo of a house on a mountain \textcolor{red}{at winter}"} 。此时的替换规则是:

    (Edit(Mt,Mt,t))i,j:={(Mt)i,jif A(j)=None(Mt)i,A(j)otherwise\left( Edit(M_t, M_t^*, t) \right)_{i,j} := \begin{cases} (M_t^*)_{i,j} & \text{if } A(j) = \textit{None} \\ (M_t)_{i,A(j)} & \text{otherwise} \end{cases}

    ii 表示 visual token 的索引位置,jj 表示 P\mathcal{P}^* 中 text token 的索引位置;A(j)A(j) 表示,P\mathcal{P}^* 的 text token jjP\mathcal{P} 中的索引位置。

    这种类型的 control 同样可以引入 word swap 中的 τ\tau​ 来控制 control 的时机。用这个方法可以对图像进行全局的编辑,如下面例子的改变风格整体图片的风格为 “winter”。

    image-20250317212838960
  • Attention Re–weighting

    基于p2p还可以精细的控制prompt每一个token的控制强度。这个场景PPPP^∗是相同的,可以更改特定token的权重来控制图像。此时的替换规则是:

    (Edit(Mt,Mt,t))i,j:={c(Mt)i,jif j=j(Mt)i,jotherwise(Edit(M_t, M_t^*, t))_{i,j} := \begin{cases} c \cdot (M_t)_{i,j} & \text{if } j = j^* \\ (M_t)_{i,j} & \text{otherwise} \end{cases}
    image-20250317213105972
Thanks for reading!

[图像编辑03] Prompt-to-Prompt

Mon Mar 17 2025
974 words · 10 minutes