行业知识
浅析扩散模型与图像生成【应用篇】(七)——Prompt-to-Prpmpt
7. Prompt-to-Prompt Image Editing with Cross Attention Control
���文提出一种利用交叉注意力机制实现文本驱动的图像编辑方法,可以对生成图像中的对象进行替换,整体改变图像的风格,或改变某个词对生成图像的影响程度,如下图所示。
之前的文本驱动的图像生成方法很难对图像的内容进行精细地编辑,哪怕只改变了一点文本提示的内容都可能让生成的结果发生非常大的改变,而无法保留原有的内容和结构。为了保留图像整体的结构,只对特定目标进行修改,有些方法通过让使用者给出要修改对象的掩码,引导算法只针对掩码的内容进行修改。但这种方式不仅非常麻烦,而且无法对整体风格进行编辑。因此作者希望提出一种只需修改文本提示内容,就可以直接编辑生成图像,且保持原本生成结果的内容和结构特征。
作者发现在交叉注意力层建立了文本提示和图像像素之间的联系,通过在生成过程中插入或者修改交叉注意力层就可以实现对对应像素点的修改。实现的过程如下
首先,我们先回顾一下文本驱动的图像生成过程中,交叉注意力层是如何工作的。包含噪声的图像 z t z_t zt其对应的特征图 ϕ ( z t ) \phi(z_t) ϕ(zt),经过一个线性层映射为一个query矩阵 Q = ℓ Q ( ϕ ( z t ) ) Q=\ell_{Q}(\phi(z_t)) Q=ℓQ(ϕ(zt)),而文本提示 P \mathcal{P} P的特征向量 ψ ( P ) \psi(\mathcal{P}) ψ(P)被分别映射为key和value矩阵, K = ℓ K ( ψ ( P ) ) K =\ell_K(\psi(\mathcal{P})) K=ℓK(ψ(P))和 V = ℓ V ( ψ ( P ) ) V =\ell_V(\psi(\mathcal{P})) V=ℓV(ψ(P))。则注意力图为 M = Softmax ( Q K T d ) M=\operatorname{Softmax}\left(\frac{Q K^{T}}{\sqrt{d}}\right) M=Softmax(d QKT)其中的元素 M i j M_{ij} Mij表示第 j j j个token对于第 i i i个像素的权重值。交叉注意力层的输出为 ϕ ^ ( z t ) = M V \hat{\phi}(z_t)=MV ϕ^(zt)=MV,其被用于更新 ϕ ( z t ) \phi(z_t) ϕ(zt)。注意力层中每个单词和图像像素之间的对应关系如下图所示,可见即便在生成过程的早期阶段,单词和对应的像素之间已经具备较为明确的匹配关系。因此通过修改交叉注意力层就能够针对性的改变生成图像的内容。
假设原本的文本提示 P \mathcal{P} P生成的图像为 I \mathcal{I} I,其对应的注意力图 M M M中包含着生成结果的主要内容信息。在根据修改后的文本提示 P ∗ \mathcal{P}^* P∗对图像进行编辑时,通过将 M M M插入到生成过程中,则可以保证修改后的生成结果 I ∗ \mathcal{I}^* I∗能够保留原有结果的主要内容。整个算法流程如下图所示
其中 D M ( z t , P , t , s ) DM\left(z_{t}, \mathcal{P}, t, s\right) DM(zt,P,t,s)表示根据噪声图 z t z_t zt,文本提示 P \mathcal{P} P,时刻 t t t和随机数种子 s s s进行单步反向去噪生成 x t − 1 x_{t-1} xt−1的过程。 M t M_t Mt和 M t ∗ M_t^* Mt∗分别表示原始文本和修改后文本对应的注意力图,对二者进行编辑可以得到 M t ^ \hat{M_t} Mt^,使用其取代 M t ∗ M_t^* Mt∗再进行反向去噪即可生成编辑后的图像。不同的修改方式对应了不同的编辑方法,下面将详细的介绍对注意力层进行编辑的方法 E d i t ( M t , M t ∗ , t ) Edit(M_t,M_t^*,t) Edit(Mt,Mt∗,t)。
1. 更换单词(Word Swap)
对于更改生成文本中某个单词的修改方式,如把“dog”换成“cat”。可以在某个生成步骤 τ \tau τ之后,直接用 M t ∗ M_t^* Mt∗取代 M t M_t Mt,如下式所示 Edit ( M t , M t ∗ , t ) : = { M t ∗ if t