海德編碼器型號(hào)說明
2018年,一副由 AI 生成的藝術(shù)品《埃德蒙·貝拉米肖像》以大約300萬人名幣的高價(jià)成功拍賣,盡管質(zhì)疑聲不斷,從那時(shí)起,AI 藝術(shù)生成已經(jīng)開始走進(jìn)大眾的視野中。在過去一年里,出現(xiàn)了大量的文本生成圖像模型,尤其是隨著 Stable Diffusion 以及 Midjourney 的出現(xiàn),帶起了一股 AI 藝術(shù)創(chuàng)作熱潮,甚至很多藝術(shù)家也開始嘗試用 AI 來輔助藝術(shù)創(chuàng)作。在本文中,將會(huì)系統(tǒng)梳理近幾年出現(xiàn)的文本生成圖像算法,幫助大家深入了解其背后的原理。
?本圖由本文作者使用 Midjourney 創(chuàng)作生成
目 錄
?
AE
VAE
VQ-VAE
DALL-E
VQGAN
VQGAN-CLIP
DALL-E Mini
Parti
NUWA-Infinity
Diffusion Model
GLIDE
DALL-E2
Imagen
Stable Diffusion
?
?
基于VQ-VAE
在了解 VQ-VAE 的原理之前,需要先理解 AE (AutoEncoder)以及 VAE (Variational Autoencoders),這些模型都屬于自監(jiān)督學(xué)習(xí)方法,接下來,本文將對(duì)其進(jìn)行簡(jiǎn)要的介紹。
“
AE
自編碼器由編碼器以及解碼器組成(如下圖所示) [1] ,其首先對(duì)圖像進(jìn)行壓縮,之后,在對(duì)壓縮后的表征進(jìn)行重建。在實(shí)際應(yīng)用中,自編碼器往往會(huì)被用于降維,去噪,異常檢測(cè)或者神經(jīng)風(fēng)格遷移中。
展開全文
由于自編碼器的目標(biāo)是重建輸入,因此,其損失函數(shù)為: ,其中, 是輸入, 是對(duì) 的重建,只需要簡(jiǎn)單的端對(duì)端訓(xùn)練,即可得到一個(gè)自編碼器。
“
VAE
與 AE 不同的是,VAE 不再去學(xué)習(xí)一個(gè)連續(xù)的表征,而是 直接學(xué)習(xí)一個(gè)分布,然后通過這個(gè)分布采樣得到中間表征 ?去重建原圖 [2] 。
VAE 假設(shè)中間表征 是一個(gè)正態(tài)分布,因此,編碼器部分需要將原圖 映射為正態(tài)分布 ,通過重參數(shù)技巧,得到采樣后的中間表征 , 其中 ?? 采樣于標(biāo)準(zhǔn)整體分布 。緊接著,解碼器通過中間表征 z ?進(jìn)行解碼操作,得到原圖的重建。VAE 的損失函數(shù)定義為:
其中,
在 VAE 的損失函數(shù)中,第一項(xiàng)的目的是讓模型能夠重建輸入,而第二項(xiàng)的目的是讓解碼器輸出的分布盡量接近標(biāo)準(zhǔn)整體分布,這樣的好處是,迫使 接近于標(biāo)準(zhǔn)整體分布,這樣在生成的時(shí)候,就可以直接從正態(tài)分布中采樣, 然后通過解碼器部分進(jìn)行圖像生成了。
“
VQ-VAE
VAE 具有一個(gè)最大的問題就是使用了固定的先驗(yàn)(正態(tài)分布),其次是使用了連續(xù)的中間表征,這樣會(huì)導(dǎo)致圖片生成的多樣性并不是很好以及可控性差。為了解決這個(gè)問題,VQ-VAE ( Vector Quantized Variational Autoencoder)選擇使用 離散的中間表征,同時(shí),通常會(huì)使用一個(gè)自回歸模型來學(xué)習(xí)先驗(yàn)(例如 PixelCNN 或者 Transformer)。在 VQ-VAE 中,其中間表征就足夠穩(wěn)定和多樣化,從而可以很好的影響 Decoder 部分的輸出 ,幫助生成豐富多樣的圖片。因此,后來很多的文本生成圖像模型都基于 VQ-VAE [3] 。
VQ-VAE 的算法流程為:
VQ-VAE 最核心的部分就是 Codebook 查詢操作,通過使用具有高度一致性的 Codebook 來代替混亂的中間表征,可以有效的提高圖像生成的可控性和豐富度。VQ-VAE 的損失函數(shù)定義為:
其中,sg 為梯度暫停操作,也就是 sg 所處的模塊不會(huì)進(jìn)行梯度更新。
損失函數(shù)的第一項(xiàng)主要是針對(duì)編碼器和解碼器,在這個(gè)過程中,由于中間 codebook 查詢操作是離散的,因此,這里直接將 的梯度,復(fù)制給 ,從而形成梯度反向傳播。第二項(xiàng)被稱為 VQ loss,其目的是訓(xùn)練 codebook 模塊 e,由于 這里是固定的,因此會(huì)迫使 codebook 模塊 e 朝 靠近。第三項(xiàng)被稱為 commitment loss,這里只有 的梯度在變化,其目的是反過來讓 去靠近 codebook 模塊 ,從而使得 encoder 模塊的輸出能夠更加穩(wěn)定。
在 VAE 中,由于中間表征 服從標(biāo)準(zhǔn)正態(tài)分布,因此在生成的時(shí)候,只需要在標(biāo)準(zhǔn)正態(tài)分布中隨機(jī)采樣即可。而在 VQ-VAE 中,隨機(jī)選擇 N 個(gè) codebook 不能保證生成預(yù)期的圖像,因此,需要有一個(gè)模型來學(xué)習(xí)生成特定中間表征,這樣才能生成有效的圖像(也稱為學(xué)習(xí)先驗(yàn))。
因此,在原始的 VQ-VAE 論文中,作者通過使用 PixelCNN 來學(xué)習(xí)先驗(yàn),首先,使用訓(xùn)練好的 VQ-VAE 來得到訓(xùn)練數(shù)據(jù)的中間離散編碼,來作為自回歸模型 PixelCNN 的語料庫(kù)進(jìn)行訓(xùn)練。之后,在生成的時(shí)候,直接使用 PixelCNN 來生一個(gè)中間離散表征,然后通過匹配 Codebook,使用 Decoder 進(jìn)行圖片生成。
“
DALL-E
DALL-E 由 OpenAI 開發(fā),其第一代版本使用的是 VQ-VAE,是當(dāng)前非常流行的文本生成圖像模型之一。目前,DALL-E 第一代并沒有開放,因此,想要試玩可以直接去玩網(wǎng)友復(fù)現(xiàn)的 DALL-E-Mini 版本。
DALL-E 第一代最大的特色是 對(duì)語義的理解非常出色,以及可以生成各種非常規(guī)但是又符合語義信息的圖像 [4,5] 。
DALL-E 模型中的生成模塊使用的是 VQ-VAE,不同的是,其先驗(yàn)的學(xué)習(xí),使用的是 文本到中間離散表征的映射,具體步驟如下:
在生成過程中,直接輸入文本,通過 Transformer 預(yù)測(cè)中間表征 ,然后 dVAE 的 Decoder 模塊通過中間表征 來生成最終圖像。在 DALL-E 的文章中,作者還提出了很多技術(shù)上的細(xì)節(jié),例如,在最后挑選圖片的時(shí)候,可以使用 CLIP 模型來選擇與文本相似度最高的模型,以及分布式訓(xùn)練,混合精度訓(xùn)練等,具體細(xì)節(jié)可以查看原論文。
基于 GAN
生成對(duì)抗網(wǎng)絡(luò)( GAN,Generative Adversarial Networks) 由兩個(gè)主要的模塊構(gòu)成:生成器和判別器。生成器負(fù)責(zé)生成一張圖片,而判別器則負(fù)責(zé)判斷這張圖片質(zhì)量,也就是判斷是真實(shí)樣本還是生成的虛假樣本,通過逐步的迭代,左右互博,最終生成器可以生成越來越逼真的圖像,而判別器則可以更加精準(zhǔn)的判斷圖片的真假。GAN 的最大優(yōu)勢(shì)是其 不依賴于先驗(yàn)假設(shè),而是通過迭代的方式逐漸學(xué)到數(shù)據(jù)的分布[6] 。
最原始的GAN的定義為:
其中,
當(dāng)海德編碼器我們固定 的時(shí)候,最大化 的含義是,數(shù)據(jù)如果來源于真實(shí)數(shù)據(jù) ,我們需要 要接近于 1,而當(dāng)數(shù)據(jù)來源于生成器 的時(shí)候,我們需要它接近于 0,也就是說,判別器 需要將真實(shí)數(shù)據(jù)判斷為 1 而將生成數(shù)據(jù)判斷為 0,這個(gè)時(shí)候,可以對(duì)判別器 進(jìn)行優(yōu)化。而當(dāng)我們固定判別器 的時(shí)候,最小化 ,則需要生成器 生成的數(shù)據(jù)接近于真實(shí)數(shù)據(jù)。
簡(jiǎn)單來說, 一個(gè) GAN 的訓(xùn)練流程如下:
上文中介紹的 GAN 模型僅僅是最原始的 GAN,在后來的發(fā)展中,GAN 已經(jīng)逐漸被用到各個(gè)領(lǐng)域,也產(chǎn)生了非常多的變種,接下來將會(huì)介紹一個(gè)非常知名的基于 GAN 的文本生成圖像模型 VQGAN-CLIP。
“
VQGAN
上文中已經(jīng)介紹了 GAN 的基本原理,而 VQGAN ( Vector Quantized Generative Adversarial Networks )則是一種 GAN 的變種(如下圖所示) [7] ,其受到 VQ-VAE 的啟發(fā), 使用了 codebook 來學(xué)習(xí)離散表征。
具體來說,會(huì)預(yù)先定義 個(gè)向量作為離散的特征查詢表,當(dāng)一張圖片被送入到 CNN Encoder 中后,會(huì)得到 個(gè)圖像的中間表征 ,之后會(huì)在 Codebook 中去查詢與其最相似的表征向量,得到 個(gè)表征 ,其過程用公式可以描述為:
緊接著,CNN Decoder 會(huì)根據(jù)得到的表征 去重建圖像。
上述步驟跟 VQ-VAE 非常像,而 VQGAN 與之不同的是,上述步驟僅僅對(duì)應(yīng)于 GAN 中的生成器,因此,這里還需要一個(gè)判別器 ,來對(duì)生成的圖像進(jìn)行判斷,而與傳統(tǒng) GAN 不同的是, 這里的判別器不是對(duì)每張圖片進(jìn)行判斷,而是對(duì)每一個(gè)圖片的 Patch 進(jìn)行判斷。
對(duì)于 VQGAN 中生成器的訓(xùn)練,其損失函數(shù)與 VQ-VAE 非常相似,其公式為:
VQGAN的訓(xùn)練損失函數(shù)定義為:
結(jié)合上述生成器的訓(xùn)練的損失函數(shù),其完整公式可以表示為:
實(shí)際上,和 GAN 的損失函數(shù)還是非常一致的,不同的是, 這里的對(duì)于生成器部分的優(yōu)化,需要使用與 VQ-VAE 一樣的方法去進(jìn)行。
在訓(xùn)練好 VQGAN 之后,在生成的時(shí)候,可以直接初始化一個(gè) 去生成,然而,為了能夠得到穩(wěn)定的 ,需要使用一個(gè)模型對(duì)先驗(yàn)進(jìn)行學(xué)習(xí),這里使用了 Transformer 模型來學(xué)習(xí) 中離散表征的序列,可以簡(jiǎn)單的將其建模為自回歸模型 ,這樣,我們只需要給定一個(gè)初始的隨機(jī)向量,就可以通過 Transfomer 模型生成完整的 ,從而可以通過 CNN Decoder 模塊生成最終的圖像。
“
VQGAN-CLIP
VQGAN-CLIP 也是一個(gè)非常流行的文本生成圖像模型,一些開放的文本生成圖像平臺(tái)使用的就是 VQGAN-CLIP [8] 。
VQGAN-CLIP 通過文本描述信息來對(duì) VQGAN 模型進(jìn)行引導(dǎo),使其最終生成與文本描述非常相似的圖片,其具體過程如下圖所示:
具體來說,在最開始,需要初始化一張圖片,其像素為隨機(jī)生成,這個(gè)時(shí)候,模型是從 0 開始迭代,也可以初始化一張繪制好的原始圖片,這個(gè)時(shí)候,模型的迭代相當(dāng)于對(duì)這張圖片進(jìn)行重繪。通過 VQGAN 的 Encoder 模塊,可以得到中間表征離散 Z-vector,這個(gè)上文中 VQGAN 中的 是一樣的。
通過 CLIP 模型,來對(duì)比生成的圖像特征與指定文本的相似度,來調(diào)節(jié)中間表征向量 ?Z-vector,從而使得 VQGAN 模塊生成與文本描述一致的圖片,從上圖中看出,除了 VQGAN 和 CLIP 模塊,還有 Random Crops 以及 Augmented Images,這個(gè)操作是為了增加圖片的穩(wěn)定性,而且實(shí)驗(yàn)證明,加了這兩個(gè)操作之后,更利于優(yōu)化。
基于 VQGAN-CLIP 生成的模型如下圖所示,通過設(shè)置復(fù)雜的描述,可以生成質(zhì)量非常高的圖片。
“
DALL-E Mini
DALL-E Mini 是網(wǎng)友對(duì) DALL-E 的復(fù)現(xiàn)版本 [8] ,不同的是,DALL-E Mini 并沒有使用原始的 VQ-VAE,而是使用了 VQGAN, DALL-E-Mini 模型要遠(yuǎn)遠(yuǎn)小于原始 DALL-E 模型,使用的訓(xùn)練樣本也相對(duì)較少 [9] 。
DALL-E-Mini 首先使用 BART 模型(一種Sequence-to-Sequence模型)來學(xué)習(xí)文本到圖像的映射,將文本轉(zhuǎn)換為離散圖像表征。
在圖像生成步驟中,可以直接將文本輸入到 BART 中,然后得到圖片離散表征,緊接著使用 VQ-GAN Decoder 模塊,將離散圖像表征解碼為完整圖像,之后在使用 CLIP 對(duì)圖像進(jìn)行篩選,得到最終的生成結(jié)果。
“
Parti
在 Imagen 剛出來后沒多久(Imagen的介紹可以看擴(kuò)散模型部分),Google 又繼續(xù)提出了新的文本生成圖像模型 Parti,其全稱為「Pathways Autoregressive Text-to-Image」,直觀來看,就是使用了 Google 最新提出的 Pathway 語言模型 [10] 。
與 Imagen 不同的是, Parti 又回歸了原始文本生成圖像的做法,不是直接使用文本表征作為條件擴(kuò)散模型范式去生成圖像,而是使用 Pathway 語言模型,學(xué)習(xí)文本表征到圖像表征的映射,也就是像 DALL-E2 一樣,學(xué)習(xí)一個(gè)先驗(yàn)?zāi)P停瑫r(shí),Parti 使用的是基于 VQGAN 的方法,而不是擴(kuò)散模型。
具體來說,Parti 首先訓(xùn)練一個(gè) ViT-VQGAN 模型,之后使用 Pathway 語言模型學(xué)習(xí)文本到圖像 token 的映射,由于 Pathway 語言模型強(qiáng)大的序列預(yù)測(cè)能力,其輸出的圖像表征非常出色,在預(yù)測(cè)過程中,只需將文本映射為圖片表征,然后使用 ViT-VQGAN 解碼器模塊進(jìn)行解碼即可。
Parti 最大的特色就是 20B 的大模型,其參數(shù)量支持模型能夠進(jìn)行復(fù)雜語義理解,下圖是不同參數(shù)量模型對(duì)于文本描述:「 一張身穿橙色連帽衫和藍(lán)色太陽(yáng)鏡的袋鼠肖像照片站在悉尼歌劇院前的草地上,胸前舉著寫著“歡迎朋友”標(biāo)語的牌子海德編碼器!」 的生成效果,可以看出 20B 的大模型能夠非常精準(zhǔn)的理解 Prompt 的語義信息。
“
NUWA-Infinity
NUWA-Infinity 是微軟亞洲亞洲研究院 NUWA 團(tuán)隊(duì)基于之前工作,研發(fā)出的無限視覺生成模型,其特點(diǎn)是, 可以對(duì)已有的畫進(jìn)行續(xù)畫,尤其是對(duì)于風(fēng)景畫效果非常驚艷,同時(shí),該模型還支持文本生成圖像,動(dòng)畫生成等任務(wù),不過由于其主要?jiǎng)?chuàng)新點(diǎn)在于圖片續(xù)畫,因此在這里只對(duì)這一功能進(jìn)行詳細(xì)介紹 [11] 。
為了實(shí)現(xiàn)這一功能,作者提出了全局自回歸嵌套局部自回歸的生成機(jī)制,其中,全局自回歸建模視覺塊之間的依賴 (patch-level),而局部自回歸建模視覺 token 之間的依賴 (token-level)。其公式表達(dá)為:
也就是一個(gè)全局自回歸模型中(n個(gè)patch),嵌入了一個(gè)局部自回歸模型(m個(gè)token)。
在 NUWA-Infinity 中,作者還提出了兩個(gè)機(jī)制,Nearby Context Pool(NCP)和 Arbitrary Direction Controller (ADC)。其中,ADC 負(fù)責(zé)將圖片分割成 patch 并決定 patch 的方向,如下圖所示,左圖為訓(xùn)練的時(shí)候的順序定義,右圖是推理的時(shí)候的順序定義。
由于當(dāng)圖片尺寸變大之后,patch 的數(shù)量會(huì)超過自回歸模型所能接收的最大長(zhǎng)度,因此需要有一個(gè)增加新 patch 和移除舊 patch 的機(jī)制,這樣就保證了自回歸模型一直在需要生成的 patch 附近進(jìn)行序列學(xué)習(xí)。
在模型的訓(xùn)練過程中,首先將圖片分成 patch,然后,隨機(jī)選擇一種 patch 生成順序,這對(duì)應(yīng)于全局自回歸操作。而對(duì)于每一個(gè) patch,首先選擇其鄰近的 patch,加入位置編碼以及文本信息,一起送入到自回歸模型中,得到預(yù)測(cè)的中間離散表征 ,同時(shí),對(duì)于之前的 patch, 使用訓(xùn)練好的 VQ-GAN 生成中間離散表征 ,而模型的目標(biāo)則是讓 與 足夠接近。直觀來說,模型本質(zhì)上是在訓(xùn)練一個(gè)模型,其通過與當(dāng)前 patch 的鄰近的 patch 的中間離散表征,和文本表征,來預(yù)測(cè)當(dāng)前 patch 的中間離散表征。
在推理過程中,對(duì)于圖片續(xù)畫任務(wù),只需要將圖片輸入進(jìn)模型,選擇 K 個(gè) patch 作為條件,對(duì) NCP 進(jìn)行初始化,然后就可以通過已有的選擇的 patch 結(jié)合文本信息,來對(duì)下個(gè)patch進(jìn)行預(yù)測(cè),最后使用 VQGAN Decoder 來將預(yù)測(cè)的 patch 的中間離散表征解碼成圖片即可,通過不斷的迭代,最終實(shí)現(xiàn)對(duì)圖片的續(xù)畫功能。
基于Diffusion Model
不同于 VQ-VAE,VQ-GAN, 擴(kuò)散模型是當(dāng)今文本生成圖像領(lǐng)域的核心方法,當(dāng)前最知名也最受歡迎的文本生成圖像模型 Stable Diffusion,Disco-Diffusion,Mid-Journey,DALL-E2 等等,均基于擴(kuò)散模型。在這部分,會(huì)對(duì)擴(kuò)散模型的原理以及基于擴(kuò)散模型的算法進(jìn)行詳細(xì)的介紹。
“
Diffusion Model
回憶上文提到的 VQ-VAE 以及 VQ-GAN,都是先通過編碼器將圖像映射到中間潛變量,然后解碼器在通過中間潛變量進(jìn)行還原。實(shí)際上,擴(kuò)散模型做的事情本質(zhì)上是一樣的,不同的是,擴(kuò)散模型完全使用了全新的思路來實(shí)現(xiàn)這個(gè)目標(biāo) [12,13.14] 。
在擴(kuò)散模型中,主要有兩個(gè)過程組成, 前向擴(kuò)散過程,反向去噪過程,前向擴(kuò)散過程主要是將一張圖片變成隨機(jī)噪音,而逆向去噪過程則是將一張隨機(jī)噪音的圖片還原為一張完整的圖片。
為了幫助理解,這里選擇最經(jīng)典的擴(kuò)散模型進(jìn)行介紹,關(guān)于擴(kuò)散模型的具體推導(dǎo),可以參考 [13,14] 。
「前向擴(kuò)散過程」
前向擴(kuò)散過程的本質(zhì)就是 在原始圖像上,隨機(jī)添加噪音,通過 T 步迭代,最終將原始圖片的分布變成標(biāo)準(zhǔn)高斯分布 具體來說,給定初始數(shù)據(jù)分布 ,增加噪聲的過程可以定義為如下公式:
其中: ,在這個(gè)過程中,隨著 t 的不斷增大,最終數(shù)據(jù)分布 x 變成了一個(gè)各向獨(dú)立的高斯分布。
值得注意的是,這里正向擴(kuò)散的過程,由于參數(shù) 是預(yù)先定義好的,前向過程沒有任何需要學(xué)習(xí)的參數(shù),因此每一時(shí)刻的結(jié)果都可以直接計(jì)算出來,這里首先定義 , ,則:
因此得到前向擴(kuò)散過程的分布表達(dá)式為:
「逆向擴(kuò)散過程」
逆向過程就是還原的過程,也就是 從高斯噪聲中恢復(fù)原始分布的過程,實(shí)際上,只要學(xué)習(xí) 分布即可,可以通過一個(gè)可學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)來對(duì)其進(jìn)行擬合,其定義如下:
其中, 由于無法直接估計(jì),因此一般會(huì)使用神經(jīng)網(wǎng)絡(luò)模型來進(jìn)行逼近,需要注意的是,在原始論文中,方差是無需訓(xùn)練的,被預(yù)選設(shè)置好了: ,而這里
由于隱馬爾可夫的性質(zhì), 是條件獨(dú)立的,因此 ,而這里,后一項(xiàng)則可以直接使用一個(gè)表達(dá)式來表達(dá)出來,從而使得的們可以進(jìn)行后面的優(yōu)化計(jì)算,這里將表達(dá)式寫成:
通過推導(dǎo)可以得到:(詳細(xì)可以看 [13,14] )
擴(kuò)散模型本質(zhì)上也是在學(xué)習(xí)數(shù)據(jù)分布,因此其對(duì)數(shù)似然可以表示為:
最終,其 loss 可以表示為 [13,14] :
經(jīng)過化簡(jiǎn),可以得到最后 loss 表達(dá)形式,從公式形態(tài)來看,其目標(biāo)就是在預(yù)測(cè)每一步的噪音:
「訓(xùn)練流程」
直觀上理解,擴(kuò)散模型其實(shí)是通過一個(gè)神經(jīng)網(wǎng)絡(luò) ,來預(yù)測(cè)每一步擴(kuò)散模型中所添加的噪音,其算法流程如下:
在完成訓(xùn)練之后,只需要通過重參數(shù)化技巧,進(jìn)行采樣操作即可,具體流程如上邊右圖所示,通過不斷的「減去」模型預(yù)測(cè)的噪音,可以逐漸的生成一張完整的圖片。
「Classifier-Free Guidance Diffusion」
基于傳統(tǒng)的擴(kuò)散模型,后續(xù)又有一些改進(jìn)操作,這些改進(jìn)操作使得擴(kuò)散模型被廣泛的應(yīng)用于文本生成圖像任務(wù)中。其中,最常用的改進(jìn)版本為 Classifier-Free Guidance Diffusion [15] 。
上述擴(kuò)散模型通過 來對(duì)噪音進(jìn)行估計(jì),而引導(dǎo)擴(kuò)散模型,則需要將引導(dǎo)條件 ,加入到模型輸入中,因此到的 ,而 Classifier-Free Guidance Diffusion 則結(jié)和了條件和無條件噪聲估計(jì)模型,其定義為:
這樣做的優(yōu)點(diǎn)是 訓(xùn)練過程非常穩(wěn)定,且擺脫了分類器的限制(實(shí)際上等價(jià)于學(xué)習(xí)了一個(gè)隱含的分類器),缺點(diǎn)是,成本比較高,相當(dāng)于每次要生成兩個(gè)輸出,盡管如此,后面的大部份知名文本生成圖像模型,都是基于這個(gè)方法進(jìn)行的。
“
GLIDE
GLIDE 使用了 文本作為條件,來實(shí)現(xiàn)文本引導(dǎo)的擴(kuò)散模型,在文本引導(dǎo)上面,文中主要使用了兩種策略,Classifier-Free Diffusion Guidence 以及 CLIP 來作為條件監(jiān)督,同時(shí)使用了更大的模型,在數(shù)據(jù)量上,和DALL-E 相似 [16] 。
GLIDE 的核心就是 Classifier-Free Diffusion Guidence,其使用文本描述作為引導(dǎo),來訓(xùn)練一個(gè)擴(kuò)散模型,其定義為:
其中,y是一段文本描述。
由于 GLIDE 方法提出較早,相對(duì)于現(xiàn)有很多方法,GLIDE 模型的效果并不是很好,下面是 GLIDE 生成的圖像示例。
GLIDE 還支持通過 選取區(qū)域+文本Prompt來對(duì)圖像進(jìn)行編輯操作,可以看出效果也不錯(cuò)。使用過程中,只需要將遮蔽區(qū)域進(jìn)行 mask,以及剩下的圖片一起送入到網(wǎng)絡(luò)中,即可產(chǎn)生補(bǔ)全之后的圖片。
此外, GLIDE 的語義理解能力并不是很強(qiáng),在一些少見的文本描述下,很難產(chǎn)生合乎邏輯的圖像,而 DALL-E2 在這方面的能力上,要遠(yuǎn)超 GLIDE
“
DALL-E2
DALL-E2 是 OpenAI 最新 AI 生成圖像模型,其最大的特色是 模型具有驚人的理解力和創(chuàng)造力, 其參數(shù)大約 3.5B , 相對(duì)于上一代版本,DALL-E2 可以生成4倍分倍率的圖片,且非常貼合語義信息。作者使用了人工評(píng)測(cè)方法,讓志愿者看1000張圖,71.7% 的人認(rèn)為其更加匹配文本描述 ,88.8% 認(rèn)為畫的圖相對(duì)于上一代版本更加好看 [17,18] 。
DALL-E2 由三個(gè)模塊組成:
CLIP模型,對(duì)齊圖片文本表征
先驗(yàn)?zāi)P?,接收文本信息,將其轉(zhuǎn)換成 CLIP 圖像表征
擴(kuò)散模型,接受圖像表征,來生成完整圖像
DALL-E2 的訓(xùn)練過程為:
訓(xùn)練一個(gè) CLIP 模型,使其能夠?qū)R文本和圖片特征。
訓(xùn)練一個(gè)先驗(yàn)?zāi)P?,由自回歸模型或者一個(gè)擴(kuò)散先驗(yàn)?zāi)P停▽?shí)驗(yàn)證明,擴(kuò)散先驗(yàn)?zāi)P捅憩F(xiàn)更好),其功能是將文本表征映射為圖片表征。
訓(xùn)練一個(gè)擴(kuò)散解碼模型,其目標(biāo)是根據(jù)圖片表征,還原原始圖片。
在訓(xùn)練完成之后,推理過程就比較直接了,首先使用CLIP 文本編碼器,獲得文本編碼,之后使用先驗(yàn)?zāi)P蛯⑽谋揪幋a映射為圖片編碼,最后使用擴(kuò)散解碼器用圖片編碼生成完整圖片。注意這里擴(kuò)散解碼模型使用的是經(jīng)過修改的 GLIDE 擴(kuò)散模型,其生成的圖像尺寸為 64x64,然后使用兩個(gè)上采樣擴(kuò)散模型將其上采樣至 256x256,以及 1024x1024.
DALL-E2 原論文中也提到了其許多不足,例如容易將物體和屬性混淆,無法精確的將文本放置到圖像中,然而,這些都無法阻止大家對(duì)文本生成圖像的熱情,DALL-E2 也被廣泛應(yīng)用到各種藝術(shù)創(chuàng)作過程中。
“
Imagen
在 DALL-E2 提出沒多久,Google 就提出了一個(gè)新的文本生成圖像模型 Imagen [19] ,論文中提到, 其生成的圖片相對(duì)于 DALL-E2 真實(shí)感和語言理解能力都更加強(qiáng)大(使用一種新的評(píng)測(cè)方法 DrawBench)。
Imagen 的圖像生成流程和 DALL-E2 非常像,首先將文本進(jìn)行編碼表征,之后使用擴(kuò)散模型將表征映射成為完整圖像,同時(shí)會(huì)通過兩個(gè)擴(kuò)散模型來進(jìn)一步提高分辨率。與 DALL-E2 不同的是, Imagen 使用了 T5-XXL 模型直接編碼文本信息,然后使用條件擴(kuò)散模型,直接用文本編碼生成圖像。因此,在 Imagen 中,無需學(xué)習(xí)先驗(yàn)?zāi)P汀?/p>
由于直接使用 T5-XXL 模型,其語義知識(shí)相對(duì)于 CLIP 要豐富很多(圖文匹配數(shù)據(jù)集數(shù)量要遠(yuǎn)遠(yuǎn)少于純文本數(shù)據(jù)集數(shù)量),因此 Imagen 相對(duì)于 DALL-E2 在語義保真度上做的更好。同時(shí),作者也發(fā)現(xiàn),增大語言模型,可以有效的提高樣本的語義保真度。
“
Stable Diffusion
Stable Diffusion 是由 Stability.ai 于近期開放的文本生成圖像模型,由于其 交互簡(jiǎn)單,生成速度快,極大的降低了使用門檻,而且同時(shí)還保持了令人驚訝的生成效果,從而掀起了一股 AI 創(chuàng)作熱潮 [20] 。
?本文作者用Stable Diffusion 生成的圖片
Stable Diffusion 是基于之前 Latent Diffusion 模型進(jìn)行改進(jìn)的,上文中提到的擴(kuò)散模型的特點(diǎn)是反向去噪過程速度較慢,其擴(kuò)散過程是在像素空間進(jìn)行,當(dāng)圖片分辨率變大時(shí),速度會(huì)變得非常慢。而 Latent Diffusion 模型則考慮在較低維度的潛在空間中,進(jìn)行擴(kuò)散過程,這樣就極大的減輕了訓(xùn)練以及推理成本。
Stable Diffusion 由三個(gè)部分組成:
1. VAE
其作用是將圖像轉(zhuǎn)換為低維表示形式,從而使得擴(kuò)散過程是在這個(gè)低維表征中進(jìn)行的,擴(kuò)散完成之后,在通過VAE 解碼器,將其解碼成圖片。
2. U-Net 網(wǎng)絡(luò)
U-Net 是擴(kuò)散模型的主干網(wǎng)絡(luò),其作用是對(duì)噪音進(jìn)行預(yù)測(cè),從而實(shí)現(xiàn)反向去噪過程
3. 文本編碼器CLIP
主要負(fù)責(zé)將文本轉(zhuǎn)換為U-Net可以理解的表征形式,從而引導(dǎo)U-Net進(jìn)行擴(kuò)散。
Stable Diffusion 的具體推理過程如下圖所示 [19] ,首先使用 CLIP 將文本轉(zhuǎn)換為表征形式,然后引導(dǎo)擴(kuò)散模型 U-Net 在低維表征(64x64)上進(jìn)行擴(kuò)散過程,之后將擴(kuò)散之后的低維表征送入到 VAE 中的解碼器部分,從而實(shí)現(xiàn)圖像生成。
模型試玩
了解了文本生成圖像背后的算法原理,也可以試玩一下開源模型,這里列舉了一些當(dāng)前比較流行且易于使用的模型鏈接,其中,效果最好且交互最便捷的則是 Stable Diffusion 和 MidJourney。
VQGAN-CLIP
https://nightcafe.studio/
DALL-E-Mini
https://huggingface.co/spaces/dalle-mini/dalle-mini
DALL-E2
https://github.com/openai/dall-e ( 需要等 Waitlis t)
Stable Diffusion
https://beta.dreamstudio.ai/dream
Disco-Diffusion
https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb
MidJourney
https://www.midjourney.com/home/
NUWA
https://nuwa-infinity.microsoft.com/#/ (暫未開放,可以保持關(guān)注)
總 結(jié)
現(xiàn)有的文本生成圖像模型主要基于三類基礎(chǔ)算法:VQ-GAN,VQ-VAE 以及擴(kuò)散模型,由于擴(kuò)散模型能夠生成豐富多樣且質(zhì)量高的圖形,已經(jīng)成為文本生成圖像領(lǐng)域的核心方法。目前看來,擴(kuò)散模型由于每次生成需要迭代,因此速度較慢,這是限制擴(kuò)散模型廣泛使用的一個(gè)主要問題之一。但是隨著一些新的技術(shù)出現(xiàn),例如 Stable Diffusion 使用 Latent Diffusion, 擴(kuò)散模型的生成時(shí)間已經(jīng)被逐漸縮短,相信在未來,擴(kuò)散模型會(huì)給 AI 藝術(shù)生成領(lǐng)域帶來一場(chǎng)新的變革。
參考文獻(xiàn)
[1] An Introduction to Autoencoders
[3] Neural Discrete Representation Learning
[4] https://openai.com/blog/dall-e/
[5] Zero-Shot Text-to-Image Generation
[6] Generative adversarial nets
[7] Taming Transformers for High-Resolution Image Synthesis
[8] VQGAN-CLIP: Open Domain Image Generation and Editing with Natural Language Guidance
[9] https://wandb.ai/dalle-mini/dalle-mini/reports/DALL-E-mini--Vmlldzo4NjIxODA
[10] Scaling Autoregressive Models for Content-Rich Text-to-Image Generation
[11] NUWA-Infinity: Autoregressive over Autoregressive Generation for Infinite Visual Synthesis
[12] Denoising Diffusion Probabilistic Models
[13] https://lilianweng.github.io/posts/2021-07-11-diffusion-models/#nice
[14] https://huggingface.co/blog/annotated-diffusion
[15] Classifier-Free Diffusion Guidance
[16] GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
[17] Hierarchical Text-Conditional Image Generation with CLIP Latents
[18] https://openai.com/dall-e-2/
[19] Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding
[20] https://github.com/sd-webui/stable-diffusion-webui
[21] https://huggingface.co/blog/stable_diffusion
作者:胡鵬博
排版:朱思嘉
審校:十三維
更多閱讀
從Deepmind火烈鳥看多模態(tài)研究發(fā)展趨勢(shì)
基于大規(guī)模語言模型的進(jìn)化計(jì)算:一種新范式
對(duì)Lecun新論文解讀:大模型之外的數(shù)字心識(shí)探索
在社群中積極參與討論、為知識(shí)建設(shè)做出貢獻(xiàn)的社群成員將不定期地獲得 「社群專屬福利」
Mindverse Research
心識(shí)研究院
心識(shí)浩渺連廣宇
心識(shí)浩渺連廣宇
心識(shí)宇宙研究院,致力于在即將到來的元宇宙數(shù)字時(shí)代,研究和創(chuàng)造真正等價(jià)于人類意識(shí)水平的數(shù)字生命,目前已經(jīng)綜合多種研究進(jìn)路和方法規(guī)劃出一條通向AGI和人工意識(shí)的道路。在后續(xù)內(nèi)容運(yùn)營(yíng)上,我們也會(huì)介紹和創(chuàng)造更多有關(guān)人工智能、意識(shí)科學(xué)、元宇宙方面最新的研究成果和原創(chuàng)內(nèi)容。
歡迎有志者關(guān)注和加入我們的研究!