《Hierarchical Text-Conditional Image Generation with CLIP Latents》閱讀筆記
概括
模型總述
本篇論文主要介紹DALL·E 2模型,它是OpenAI在2022年4月推出的一款模型,OpenAI在2021年1月推出了DALL·E模型,2021年年底推出了GLIDE模型。
DALL·E 2可以根據文本描述去生成原創性的、真實的圖像,這些圖像從來沒有在訓練集里出現過,模型真的學習到了文本圖像特征,可以任意地組合其概念、屬性、風格。
DALL·E 2除了根據文本生成圖像,還能根據文本對已有的圖像進行編輯和修改——可以任意添加或者移除圖像里的物體,修改時甚至可以把陰影、光線和物體紋理都考慮在內。
DALL·E 2可以在沒有文本輸入的情況下,做一些圖像生成的工作——比如給定一張圖像,它可以根據已有的圖像和它的風格,去生成很多類似這種風格的圖像。
DALL·E 2顛覆了人們對于AI的傳統理解——AI不止可以處理重復性工作,也能勝任創造性工作。
DALL·E 2和DALL·E相比,分辨率是前者的四倍,且生成的圖像更真實,與文本描述更貼切。
考慮到安全性和倫理性方面,DALL·E 2沒有開源,連API也沒有開放。
發展歷程

標題
基于CLIP的分層文本條件圖像生成——使用CLIP訓練好的特征,來做層級式的依托于文本的圖像生成工作。
所謂的層級式,意思是DALL·E 2模型是先生成一個64 * 64的小分辨率圖像,再利用一個模型上采樣到256 * 256,然后繼續利用一個模型上采樣到1024 * 1024,得到最終的一個高清大圖,所以說是一個層級式的結構。
摘要
本文提出了一個兩階段的模型:
- prior根據給定的文本描述,生成類似于CLIP的圖像特征,prior嘗試了自回歸模型和擴散模型,發現擴散模型效率高且效果好;
- decoder根據生成的圖像特征生成圖像,decoder用的是擴散模型。
該模型有兩個亮點:
- 生成的圖像的寫實程度和文本匹配度非常高;
- 可以實時利用文本信息引導模型生成、編輯各種圖像,且不需要訓練(zero-shot)。

引言
CLIP的優點:
- 對圖像分布的變化很敏感,具有很強的zero-shot能力,并經過微調,在各式的視覺和語言任務中表現優異。
生成擴散模型的優點:
- 很有前景,在近期的研究中,它利用了一種引導技術,通過犧牲一部分多樣性,從而達到更好的圖像保真度。

在圖示中,虛線的上半部分是CLIP的訓練過程,虛線的下半部分描述的DALL·E 2的訓練過程。
對于CLIP,在訓練時,將文本以及對應的圖像分別輸入文本編碼器和圖像編碼器,然后得到輸出的文本特征和圖像特征,這兩個特征就是一個正樣本,該文本特征與其他圖像生成的圖像特征就是負樣本,通過對比學習,訓練文本編碼器和圖像編碼器,從而實現文本的特征和圖像的特征聯系在一起,成為一個合并的多模態的特征空間。一旦CLIP模型訓練結束,文本編碼器和圖像編碼器就凍結了。在DALL·E 2的訓練過程中,CLIP就處于凍結狀態,沒有進行任何訓練和微調。
對于DALL·E 2,在訓練時,首先將文本和對應的圖像分別輸入CLIP的文本編碼器和圖像編碼器,在拿到文本特征后,將其喂入prior模型,由它生成圖像特征,在這個過程中,由CLIP圖像編碼器生成的圖像特征充當了ground truth的角色進行監督;在推理時,也就是只有文本沒有配對圖像的時候,其過程就是將文本輸入CLIP文本編碼器生成文本特征,文本特征通過prior模型生成圖像特征,圖像特征通過擴散模型生成最后的圖像。DALL·E 2其實就是把CLIP和GLIDE合在一起,GLIDE模型是一個基于擴散模型的文本圖像生成的方法。
DALL·E 2也被作者稱為unCLIP。對于CLIP來說,它是給定文本和圖像,然后得到特征,可以拿特征去做圖像匹配、圖像檢索之類的工作,是一個從輸入到特征的過程;對于DALL·E 2來說,它是通過文本特征,然后到圖像特征,最后到圖像的過程,其實就是CLIP的反過程,把特征又還原到數據,所以整個框架叫做unCLIP。
方法
訓練數據集采用圖像文本對,給定圖像x,用zi表示從CLIP出來的圖像特征,zt表示從CLIP出來的文本特征,整個模型的網絡結構被分成prior模型和decoder模型。

首先準備一個CLIP模型,然后訓練DALL·E 2的圖像生成模型——給定任意文本將它通過CLIP的文本編碼器,得到一個文本特征,然后用prior模型把文本特征變成圖像特征,再通過一個解碼器,把圖像特征變成了幾張圖像。

P(x|y)表示給定一個文本y,生成圖像x的概率;
P(x,zi|y)表示給定一個文本y,生成圖像x和圖像特征zi的概率。因為圖像特征zi和圖像是一對一的關系,所以zi和x是對等的,所以左邊第一個等號成立;
P(x|zi,y)表示給定一個文本y和圖像特征zi去生成圖像x的概率(decoder);
P(zi|y)表示給定一個文本y,生成圖像特征zi的概率(prior)。
decoder
本文的解碼器其實就是GLIDE模型的變體,用了CLIP guidance和classifier-free guidance。
guidance信號要么來自CLIP模型,要么來自于文本,作者隨機設10%的時間令CLIP的特征為0,并且訓練的時候有50%的時間把文本直接丟棄。
在生成圖像時采用級聯式生成的方法,由64 * 64逐步生成得到1024 * 1024的高清大圖,為了訓練的穩定性,在訓練時加了很多噪聲。
prior

prior模型不論是用自回歸模型還是擴散模型,都使用了classifier-free guidance。
對于擴散prior來說,作者訓練了一個Transformer的decoder,因為它的輸入輸出是embedding,所以不合適用U-Net,選擇直接用Transformer處理這個序列。
應用
圖像生成
生成給定圖像的很多類似圖像,所生成的圖像風格和原始圖像一致,圖像中所出現的物體也大體一致。
其方法是當用戶給定一張圖像的時候,通過CLIP的圖像編碼器得到一個圖像特征,把圖像特征變成文本特征,再把文本特征輸入給prior模型生成另外一個圖像特征,這個圖像特征再生成新的圖像。

兩個圖像之間做內插
給定兩張圖像,在兩張圖像的圖像特征之間做內插,當插出來的特征更偏向于某個圖像時,所生成的圖像也就更多地具有該圖像的特征。

兩個文本之間做內插

結果

不足
不能很好地把物體和屬性聯系起來(很有可能是CLIP模型的原因)。

當生成的圖像里有文字時,文字是錯誤的(有可能是文本編碼器使用了BPE編碼)。

不能生成特別復雜的場景,很多細節生成不出來。

相關概念
Generative Adversarial Networks(GAN):生成對抗網絡
GAN包含有兩個模型,一個是生成模型(generative model),一個是判別模型(discriminative model)。
生成模型的任務是生成看起來自然真實的、和原始數據相似的實例。判別模型的任務是判斷給定的實例看起來是自然真實的還是人為偽造的(真實實例來源于數據集,偽造實例來源于生成模型)。
這可以看做一種零和游戲,生成模型像“一個造假團伙,試圖生產和使用假幣”,而判別模型像“檢測假幣的警察”。生成器(generator)試圖欺騙判別器(discriminator),判別器則努力不被生成器欺騙。模型經過交替優化訓練,兩種模型都能得到提升,但最終我們要得到的是效果提升到很高很好的生成模型(造假團伙),這個生成模型(造假團伙)所生成的產品能達到真假難分的地步。因為GAN的目標函數是用來以假亂真的,所以截至目前為止,GAN生成的圖像保真度非常高,引燃了DeepFakes的火爆,但是它的多樣性不好,且不太具備原創性,這也是最近的模型如DALL·E 2和Imagen都是用擴散模型的原因,因為擴散模型多樣性好,還有創造力。
GAN的缺點
- 訓練不夠穩定,最主要的原因是要同時訓練兩個網絡,所以有一個平衡的問題,容易發生模型的訓練坍塌;
- 生成圖像的多樣性不好,本質是創造性不好;
- 不是一個概率模型,它的生成都是隱式的,就是通過一個網絡去完成,無法獲知它到底做了什么、遵循了什么分布,所以GAN在數學上不如后續的VAE,或者擴散模型。
Auto-Encoder(AE):自編碼器
是一種無監督式的學習模型,它基于反向傳播算法與最優化方法(如梯度下降法),利用輸入數據X本身作為監督,來指導神經網絡嘗試學習一個映射關系,從而得到一個重構輸出XR。
算法模型包含Encoder(編碼器)和Decoder(解碼器)。
編碼器的作用是把高維輸入X編碼成低維隱變量h從而強迫神經網絡學習最有信息量的特征;
解碼器的作用是把隱藏層的隱變量h還原到初始維度,最好的狀態就是解碼器的輸出能夠完美地或者近似恢復出原來的輸入, 即XR≈X 。

從輸入層 ->隱藏層的原始數據X的編碼過程:

從隱藏層 -> 輸出層的解碼過程:

算法的優化目標函數:

其中dist為二者的距離度量函數,通常用MSE(均方方差)。
自編碼可以實現類似于PCA等數據降維、數據壓縮的特性。如果輸入層神經元的個數n大于隱層神經元個數m,那么就相當于把數據從n維降到了m維;然后可以利用這m維的特征向量,重構原始的數據。這個跟PCA降維一模一樣,只不過PCA是通過求解特征向量進行降維,是一種線性的降維方式,而自編碼是一種非線性降維。
Denoising Auto-Encoder(DAE):去噪自編碼器
先向輸入注入噪聲,然后把經過擾亂的輸入傳給編碼器,讓解碼器重構不含噪聲的輸入。
這種方法可以讓訓練的模型非常穩健,不容易過擬合,部分原因是因為圖像像素冗余度太高了,所以即使把原來的圖像做一些污染,模型還是能抓住它的本質,將它重建出來。
Variational Auto-Encoder(VAE):變分自編碼器
VAE其實跟AE很不一樣,它不再是學習固定的隱藏層特征了,而是在學習一種分布,比如假設這個分布是一個高斯分布,可以用均值和方差描述,編碼器不再直接輸出h,而是輸出h分布的均值和方差,再從這個分布中采樣得到h,然后h再通過解碼器。簡而言之,VAE預測的是一個分布。
Vector Quantized VAE(VQ-VAE):向量量化的變分自編碼器
就是把VAE做量化,它采用的是離散的隱變量,不像VAE那樣采用連續的隱變量。
VQ-VAE2
把隱空間分成了兩個,一個上層隱空間(top latent space),一個下層隱空間(bottom latent space)。上層隱向量 用于表示全局信息,下層隱向量 用于表示 局部信息。
DALL·E
由OpenAI提出的能根據文本描述生成類似超現實主義圖像的圖像生成器。
autoregressive models(AR):自回歸模型
自回歸模型是統計上一種處理時間序列的方法,用同一變數例如x的之前各期,亦即x1至xt-1來預測本期xt的表現,并假設它們為線性關系。因為這是從回歸分析中的線性回歸發展而來,只是不用x預測y,而是用x預測 x(自己),所以叫做自回歸。神經網絡中的自回歸模型,將聯合概率拆成了條件概率累乘的形式。
diffusion models:生成擴散模型
diffusion models名字來源于熱力學的啟發,工作原理從本質上來說是通過連續添加高斯噪聲來破壞訓練數據,然后通過反轉這個噪聲過程,來學習恢復數據。
它是Encoder-Decoder架構的模型,分為擴散階段和逆擴散階段。
-
在擴散階段,通過不斷對原始數據添加噪聲,使數據從原始分布變為我們期望的分布,例如通過不斷添加高斯噪聲將原始數據分布變為正態分布。
-
在逆擴散階段,使用神經網絡(U-Net,一個CNN)將數據從正態分布恢復到原始數據分布。
訓練后,可以使用該模型將原始輸入的圖像去噪生成新圖像。
優點是正態分布上的每個點都是真實數據的映射,模型具有更好的可解釋性。缺點是迭代采樣速度慢,導致模型訓練和預測效率低。
擴散模型早在2015年或者更早的時候就被提出來了,但當時只是一個想法,一直到2020年6月DDPM提出來后,擴散模型才開始火爆,DDPM算是擴散模型的開山之作。
DDPM對原始的擴散模型做了一些改進,把優化過程變得簡單,有兩個最重要的貢獻:
- 之前大家都是xt預測xt-1,做圖像到圖像的轉化,而DDPM預測xt-1到xt的噪聲是怎么加的,有點像ResNet,本來是直接用x預測y,現在理解成y=x+residual,轉而預測殘差residual就可以了;
- 原本預測一個正態分布,要去學它的均值和方差,作者提出可以把方差視為一個常數,只要去預測均值就可以了,再次降低了模型優化的難度。
DDPM和VAE有很多相似之處,都是編碼器、解碼器的結構,不同點在于:
- 在擴散模型中,編碼器的一步步運算是一個固定的過程,對于VAE來說,編碼器則不是這樣;
- 在擴散模型中,每一步中間過程的輸出跟剛開始的輸入都是同樣維度的大小,對于VAE來說,它中間的bottleneck特征往往比輸入小得多;
- 在擴散模型中,從隨機噪聲開始,要經過很多步才能生成一個圖像,所以它有time step、time embedding的概念,而且在所有的time step里面它的U-Net模型都是共享參數的,在VAE里就不存在這一點。
improved DDPM相較于DDPM做了一些改進:
- 學習了正態分布里的方差,效果更好;
- 把添加噪聲的schedule改了,從一個線性的schedule改成了余弦的schedule,效果更好;
- 簡單嘗試了一下給擴散模型上更大的模型,效果更好。
基于improved DDPM的第三個改進,有人發表了論文《Diffusion model beats GAN》,即擴散模型比GAN強。在文中:
- 作者把模型加大加寬,增加自注意力頭(attention head)的數量;
- 發現single-scale的attention不夠用,改用multi-scale的attention;
- 提出新的歸一化方式,叫做adaptive group normalization,根據步數去做自適應的歸一化;
- 使用classifier guidance的方法,去引導模型做采樣和生成,這不僅讓生成的圖像更加逼真,而且也加速了方向采樣的速度。論文中表明做25次采樣,就能從一個噪聲生成一個非常好的圖像。

classifier guidance diffusion是說在我們訓練擴散模型的同時,再訓練一個圖像分類器,這個分類器是在ImagNet上的圖像加上噪聲訓練來的。分類器的作用是對于圖像xt,它可以計算一個交叉熵目標函數,得到一些梯度,然后使用這個梯度,去幫助模型進行采樣和圖像生成。分類器可以根據需求進行選擇,把分類器換成CLIP模型,那么文本和圖像就聯系起來了,此時我們不光可以利用梯度去引導模型的采樣和生成,甚至可以利用文本去控制圖像的采樣和生成。
classifier guidance diffusion的成本很高,它要求我們要么有一個pre-trained的模型,要么得重新訓練一個模型,所以引出來后續的classifier-free guidance。
classifier-free guidance不使用分類器,而是在訓練模型的時候讓它生成兩個輸出,一個是在有條件時生成的,一個是在無條件時生成的。比如用圖像文本對訓練的時候,用文本去做這個guidance信號,生成一個圖像,然后不用這個文本,而用一個空的序列,再去生成另外一個圖像。假設生成的兩個圖像在一個空間里,那么就會有一個方向能從這種無文本得到的圖像指向有文本得到的圖像,通過訓練得到二者之間的距離,那么等到反向擴散的時候,即使我們的圖像輸出是沒有使用文本生成的,我們也能做出一個比較合理的推理,從一個沒有條件生成的x變成一個有條件生成的x,擺脫分類器的限制。這個方法因為產生兩個輸出,模型的訓練成本是很大的。在GLIDE、DALL·E 2、Imagen都使用了classifier-free guidance。
Contrastive Learning:對比學習
是一種自監督學習方法,用于在沒有標簽的情況下,通過讓模型學習哪些數據點相似或不同來學習數據集的一般特征。
zero-shot learning:零次學習
它是利用訓練集數據訓練模型,使得模型能夠對測試集的對象進行分類,但是訓練集類別和測試集類別之間沒有交集,期間是借助類別的描述,來建立訓練集和測試集之間的聯系,從而使得模型有效。對于要分類的類別對象,是一次也不學習的。
PCA( Principal Component Analysis ):主成分分析
是一種使用最廣泛的數據降維算法。PCA的主要思想是將n維特征映射到k維上,這k維是全新的正交特征也被稱為主成分,是在原有n維特征的基礎上重新構造出來的k維特征。PCA的工作就是從原始的空間中順序地找一組相互正交的坐標軸,新的坐標軸的選擇與數據本身是密切相關的。其中,第一個新坐標軸選擇是原始數據中方差最大的方向,第二個新坐標軸選取是與第一個坐標軸正交的平面中使得方差最大的,第三個軸是與第1,2個軸正交的平面中方差最大的。依次類推,可以得到n個這樣的坐標軸。
Embedding:嵌入層
它能把萬物嵌入萬物,是溝通兩個世界的橋梁。數學定義即:它是單射且同構的。
簡單來說,我們常見的地圖就是對于現實地理的Embedding,現實的地理地形的信息其實遠遠超過三維,但是地圖通過顏色和等高線等來最大化表現現實的地理信息。通過它,我們在現實世界里的文字、圖像、語言、視頻就能轉化為計算機能識別、能使用的語言,且轉化的過程中信息不丟失。
可以通過矩陣乘法進行降維,假如我們有一個100W X10W的矩陣,用它乘上一個10W X 20的矩陣,我們可以把它降到100W X 20,瞬間量級降了10W/20=5000倍;也可以進行升維,對低維的數據進行升維時,可能把一些其他特征給放大了,或者把籠統的特征給分開了。
Feature Embedding:特征嵌入
將數據轉換(降維)為固定大小的特征表示(矢量),以便于處理和計算(如求距離)。
Image Embedding:圖像嵌入
將圖像轉換成n維的特征向量。
Word Embedding:詞嵌入
將非結構化的文本轉換為n維結構化的特征向量。
- 可以將文本通過一個低維向量來表達,不像 one-hot 那么長;
- 語意相似的詞在向量空間上也會比較相近;
- 通用性很強,可以用在不同的任務中。
latent space:潛在空間
原始數據壓縮(編碼)后的表示(即特征向量)所在的空間,即為潛在空間。
- 潛在空間只是壓縮數據的表示,其中相似的數據點在空間上更靠近在一起;
- 潛在空間對于學習數據特征和查找更簡單的數據表示形式以進行分析很有用;
- 可以通過分析潛在空間中的數據(通過流形,聚類等)來了解數據點之間的模式或結構相似性;
- 可以在潛在空間內插值數據,并使用模型的解碼器來“生成”數據樣本(比如生成新圖像);
- 可以使用t-SNE和LLE之類的算法來可視化潛在空間,該算法將潛在空間表示形式轉換為2D或3D。
State Of The Art (SOTA)
表示效果最好的方法。
主要參考
- DALL·E 2【論文精讀】;
- 網上相關參考資料。

浙公網安備 33010602011771號