Cross-Attention Control

原链接

https://prompt-to-prompt.github.io/

自注意力机制

是一种用于序列数据(如文本、音频、视频)处理的机制,它允许模型在处理序列时将不同位置的信息相互关联起来。在自注意力机制中,每个输入位置的表示(例如词或时间步的嵌入)都将用于计算该位置与序列中其他所有位置的加权关联,这种加权关联受输入表示之间的相似性程度和它们之间的距离的影响。

自注意力机制的数学表达如下:

给定输入序列 X=[x1,x2,...,xn]X = [x_1, x_2, ..., x_n]

其中每个xix_i是输入序列中的元素,通过自注意力计算得到输出序列 Y=[y1,y2,...,yn]Y = [y_1, y_2, ..., y_n]

yi=j=1nαij(WQxj)y_i = \sum_{j=1}^{n} \alpha_{ij} \cdot (W^Q x_j)

其中

  • $ \alpha_{ij} $ 表示位置 i 和位置 j 之间的关联权重
  • $ W^Q$ 是用于将输入 $ x_j $ 转换为查询向量的权重矩阵
  • 输入 $ x_j $ 通过权重矩阵 $ W^Q $ 转换为查询向量,然后与位置 $ i $ 的关联权重相加以得到输出 $ y_i $

交叉注意力

是指在处理两个不同分布的输入序列(一个是文本,一个是图像),模型需要捕捉两个序列之间元素级的依赖关系。

它包含两个部分:查询序列和键序列来自于不同的输入序列,而值序列则来自于其中一个(通常是第二个)输入序列。通过使用查询序列和键序列之间的关联来得到输出。

交叉注意力的数学表达如下:

给定两个输入序列

$X_1 = [x_1^1, x_2^1, …, x_m^1] $ 和 $X_2 = [x_1^2, x_2^2, …, x_n^2] $

通过交叉注意力计算得到输出

$Y = [y_1, y_2, …, y_m] $: $ y_i = \sum_{j=1}^{n} \beta_{ij} \cdot (W^V x_j^2) $

其中

  • $\beta_{ij} $ 表示位置 i 和位置 j 之间的关联权重
  • $ W^V $ 是用于将输入 $x_j^2 $ 转换为值向量的权重矩阵
  • 输入 $ x_j^2$ 通过权重矩阵 WVW^V 转换为值向量,然后与位置 i 的关联权重相加以得到输出 $ y_i$ 。

交叉注意力图

因此,我们的主要想法是在Diffusion Model的过程中注入交叉注意力图,控制哪些像素在哪些Diffusion 过程中关注提示文本的哪些标记

为了将我们的方法应用于各种创意编辑应用程序,我们展示了几种通过简单的语义界面控制交叉注意力图的方法。 在单词交换控件中,我们修改提示中的标记(例如,将“狗”更改为“猫”),同时修复交叉注意力图,以保留场景组成。

在第二个“提示细化”控制中,我们向提示添加新单词并冻结对先前标记的注意力,同时允许新的注意力流向新标记。 这使我们能够执行全局编辑或修改特定对象。

在第三个“注意力重新加权”控制中,我们增加或减少指定标记的注意力权重。 这导致生成图像上标记的语义效果的放大或减弱。

img