当前位置:首页|资讯|AIGC|谷歌|提示词

AIGC: Null-Text Inversion 笔记

作者:刹那-Ksana-发布时间:2023-09-12

谷歌的论文真的是惜墨如金啊 Σ(っ °Д °;)っ

回顾 Prompt-to-Prompt

之前其实已经简单介绍过了, prompt-to-prompt 的思路很简单——生成图片的 attention map 和输入的指令(prompt)之间有很大的联系。我们替换、更改 attention maps 中的某一部分的 map,其他的 map 维持不变,那么我们就可以保持生成图片的其他部分不变,而只更改我们想要变更的那一部分。

这里是我们可以对 attention maps 进行的三种操作——文字替换(即替换一部分 attention map), 加入新的文字(即加入新的 attention map),调整侧重点(即调整不同 attention map 的比重)
实际的一个示意图,我们把 bicycle 对应的 attention map 替换成 car 的 attention map, 然后保持输入的噪音和其他 attention map 不变,那么我们就得到了如上的替换。

Pivotal Tuning

%5Cmathcal%7BP%7D(思路可以参考 textual inversion), 所以在这里我们需要做一个逆映射(inversion),即把我们的原图片 %5Cmathcal%7BI%7D 转换为指令 %5Cmathcal%7BP%7D

%5Cmathcal%7BI%7D 的最佳编码;如果相同的道理套用到去噪扩散模型上的话,那就是针对每一个时间点,选取最佳的编码。

这种方式虽然能够得到不错的结果,但是很明显,非常低效率。

所以这里,我们使用 Piviotal Tuning(2106.05744)的方式。具体来说,我们先使用 perceptual loss(1801.03924):

w_p%2Cn%3D%5Carg%5Cmin_%7Bw%2Cn%7D%20%5Cmathcal%7BL%7D_%7BLPIPS%7D(x%2CG_%7B%5Ctheta%7D(w%2Cn))%2B%5Clambda_n%20%5Cmathcal%7BL%7D_n(n)

w_p. 但仅利用 latent 编码 w_p 生成的图像将会和原图有一些差别。所以下一步我们调整生成器(generator) G 的权重 %5Ctheta , 让它生成的图片 x%5Ep%20%3D%20G_%7B%5Ctheta%7D(w_p) 和原图像 x 尽可能地接近。(如果改变不了自己,就改变世界).

DDIM Inversion

DDIM 的逆映射(2105.05233)的迭代公式其实很简单,其实就是:

x_%7Bt%2B1%7D-x_t%3D%5Csqrt%7B%5Cbar%7B%5Calpha%7D_%7Bt%2B1%7D%7D%20%5Cleft(%20(%5Csqrt%7B1%2F%5Cbar%7B%5Calpha%7D_%7Bt%7D%7D-%5Csqrt%7B1%2F%5Cbar%7B%5Calpha%7D_%7Bt%2B1%7D%7D)x_t%2B%20(%5Csqrt%7B1%2F%5Cbar%7B%5Calpha%7D_%7Bt%2B1%7D-1%7D-%5Csqrt%7B1%2F%5Cbar%7B%5Calpha%7D_%7Bt%7D-1%7D)%5Cepsilon_%7B%5Ctheta%7D(x_t)%20%5Cright)

w(反映 prompt 对合成图片的影响程度)通常是一个很大的数值。

z%5ET 的分布与高斯分布的接近程度)。

横坐标是 guidance scale w, 左侧是 w 和可编辑性的关系(log似然,越高越好),右侧是 w 和图像还原度的关系(峰值信噪比,越高越好)

z%5E*_T. 以及所有的中间步骤 z%5E*_%7BT-1%7D%2Cz%5E*_%7BT-2%7D%2C...%20z%5E*_1  

z%5E*_%7BT-1%7D%2Cz%5E*_%7BT-2%7D%2C...%20z%5E*_1 作为一个参照目标,我们将  guidance scale 设置为一个比较大的数值(比如说 7.5),然后对于每一个中间步骤 t%3D1%2C...%2CT 我们最小化编码 z_%7Bt-1%7D 和 z_%7Bt-1%7D%5E* 之间的距离。即 %5Cmin%20%7B%5Cvert%20%5Cvert%20%7Bz_%7Bt-1%7D%5E*-z_%7Bt-1%7D%7D%20%5Cvert%20%5Cvert%20%7D%5E2_2

Null Text Optimization

以上的方法有一个很大的问题,就是我们针对每一个图片都要进行如上的 fune-tuning, 而调整去噪扩散模型是一个非常昂贵的过程。

这里论文里面用了一个很聪明的办法——针对每一个图片,我们把优化整个去噪扩散模型的目标,转变为优化我们的指令(prompt),而且只优化无条件的部分(即 null-text)——因为无条件的部分对于图片合成的影响较大。

%5C%7B%5Cvarnothing%5C%7D_%7Bt%3D1%7D%5E%7BT%7D, 然后我们每一步预测的噪声为%5Ctilde%7B%5Cepsilon%7D_%5Ctheta(z_t%2Ct%2C%5Cmathcal%7BC%7D%2C%5Cvarnothing_t)%20%3D%20w%20%5Ccdot%20%5Cepsilon_%5Ctheta(z_t%2Ct%2C%5Cmathcal%7BC%7D)%20%2B%20(1-w)%20%5C%20%5Ccdot%20%5Cepsilon_%5Ctheta(z_t%2Ct%2C%5Cvarnothing_t)

%5Cmin_%7B%5Cvarnothing_t%7D%20%7B%5Cvert%20%5Cvert%20%7Bz_%7Bt-1%7D%5E*-z_%7Bt-1%7D%7D%20%5Cvert%20%5Cvert%20%7D%5E2_2.

流程示意图,这里我们只对 null-text 所对应的 ∅ 进行优化

以上的方法属于针对每一步优化相应的 null-text %5C%7B%5Cvarnothing%5C%7D_%7Bt%3D1%7D%5E%7BT%7D, 我们还可以采用另外一种办法,就是去优化一个全局的 null-text %5Cvarnothing(也就是每一步优化的时候,对象都是同一个 %5Cvarnothing. 这种方法虽然算力要求低,但是收敛的速度慢。

完。

B站的公式编辑器经常抽风,如果遇到类似于 tex parse error 之类的异常时,一般刷新一下页面就可以解决。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1