谷歌的论文真的是惜墨如金啊 Σ(っ °Д °;)っ
之前其实已经简单介绍过了, prompt-to-prompt 的思路很简单——生成图片的 attention map 和输入的指令(prompt)之间有很大的联系。我们替换、更改 attention maps 中的某一部分的 map,其他的 map 维持不变,那么我们就可以保持生成图片的其他部分不变,而只更改我们想要变更的那一部分。
(思路可以参考 textual inversion), 所以在这里我们需要做一个逆映射(inversion),即把我们的原图片 转换为指令
的最佳编码;如果相同的道理套用到去噪扩散模型上的话,那就是针对每一个时间点,选取最佳的编码。
这种方式虽然能够得到不错的结果,但是很明显,非常低效率。
所以这里,我们使用 Piviotal Tuning(2106.05744)的方式。具体来说,我们先使用 perceptual loss(1801.03924):
. 但仅利用 latent 编码 生成的图像将会和原图有一些差别。所以下一步我们调整生成器(generator) G 的权重 , 让它生成的图片 和原图像 尽可能地接近。(如果改变不了自己,就改变世界).
DDIM 的逆映射(2105.05233)的迭代公式其实很简单,其实就是:
(反映 prompt 对合成图片的影响程度)通常是一个很大的数值。
的分布与高斯分布的接近程度)。
. 以及所有的中间步骤
作为一个参照目标,我们将 guidance scale 设置为一个比较大的数值(比如说 7.5),然后对于每一个中间步骤 我们最小化编码 和 之间的距离。即
以上的方法有一个很大的问题,就是我们针对每一个图片都要进行如上的 fune-tuning, 而调整去噪扩散模型是一个非常昂贵的过程。
这里论文里面用了一个很聪明的办法——针对每一个图片,我们把优化整个去噪扩散模型的目标,转变为优化我们的指令(prompt),而且只优化无条件的部分(即 null-text)——因为无条件的部分对于图片合成的影响较大。
, 然后我们每一步预测的噪声为,
.
以上的方法属于针对每一步优化相应的 null-text , 我们还可以采用另外一种办法,就是去优化一个全局的 null-text (也就是每一步优化的时候,对象都是同一个 ). 这种方法虽然算力要求低,但是收敛的速度慢。
完。
B站的公式编辑器经常抽风,如果遇到类似于 tex parse error 之类的异常时,一般刷新一下页面就可以解决。