AIGC: Null-Text Inversion 筆記
谷歌的論文真的是惜墨如金啊 Σ(っ °Д °;)っ
回顧 Prompt-to-Prompt
之前其實已經(jīng)簡單介紹過了,?prompt-to-prompt?的思路很簡單——生成圖片的?attention map 和輸入的指令(prompt)之間有很大的聯(lián)系。我們替換、更改?attention maps 中的某一部分的 map,其他的 map 維持不變,那么我們就可以保持生成圖片的其他部分不變,而只更改我們想要變更的那一部分。


Pivotal Tuning
基于以上的設(shè)定再進一步,如果我們想要編輯我們自己的圖像呢?那么我們必須要得到我們原圖像所對應(yīng)的指令?(思路可以參考?textual inversion), 所以在這里我們需要做一個逆映射(inversion),即把我們的原圖片?
?轉(zhuǎn)換為指令?
假設(shè)現(xiàn)在我們有一個無條件的(unconditional)?GAN.?一般來說,我們進行逆映射時,我們會在 GAN 的每一個 latent 層,找到能還原原圖??的最佳編碼;如果相同的道理套用到去噪擴散模型上的話,那就是針對每一個時間點,選取最佳的編碼。
這種方式雖然能夠得到不錯的結(jié)果,但是很明顯,非常低效率。
所以這里,我們使用 Piviotal Tuning(2106.05744)的方式。具體來說,我們先使用?perceptual loss(1801.03924):
噪聲 n 只在優(yōu)化過程中起作用,我們的目的是獲得 latent 編碼?. 但僅利用?latent 編碼?
?生成的圖像將會和原圖有一些差別。所以下一步我們調(diào)整生成器(generator) G 的權(quán)重
, 讓它生成的圖片?
和原圖像?
盡可能地接近。(如果改變不了自己,就改變世界).
DDIM Inversion
DDIM 的逆映射(2105.05233)的迭代公式其實很簡單,其實就是:
有趣的是,在 classifier-free guidance 的框架下,我們的 guidance scale (反映 prompt 對合成圖片的影響程度)通常是一個很大的數(shù)值。
而只有在很小的?guidance scale 下,我們逆映射的編碼才能有很高的還原程度,以及很高的可編輯性(editability, 意味著編碼 ?的分布與高斯分布的接近程度)。

這個時候,我們先考慮圖像的還原準確度,所以將?guidance scale 設(shè)置為 1, 然后獲得一個還原程度比較高的編碼 . 以及所有的中間步驟?
??
接下來,我們把??作為一個參照目標,我們將 ?guidance scale 設(shè)置為一個比較大的數(shù)值(比如說 7.5),然后對于每一個中間步驟
我們最小化編碼?
?和?
?之間的距離。即?
Null Text Optimization
以上的方法有一個很大的問題,就是我們針對每一個圖片都要進行如上的 fune-tuning, 而調(diào)整去噪擴散模型是一個非常昂貴的過程。
這里論文里面用了一個很聰明的辦法——針對每一個圖片,我們把優(yōu)化整個去噪擴散模型的目標,轉(zhuǎn)變?yōu)閮?yōu)化我們的指令(prompt),而且只優(yōu)化無條件的部分(即 null-text)——因為無條件的部分對于圖片合成的影響較大。
所以我們用 null-text embedding 初始化我們的無條件文本?, 然后我們每一步預(yù)測的噪聲為
,?
將這個預(yù)測結(jié)果帶入到上一節(jié)的迭代公式中,然后最小化我們的目標,即?.

以上的方法屬于針對每一步優(yōu)化相應(yīng)的 null-text , 我們還可以采用另外一種辦法,就是去優(yōu)化一個全局的 null-text
(也就是每一步優(yōu)化的時候,對象都是同一個?
). 這種方法雖然算力要求低,但是收斂的速度慢。

完。
B站的公式編輯器經(jīng)常抽風(fēng),如果遇到類似于 tex parse error 之類的異常時,一般刷新一下頁面就可以解決。