【資料圖】
作者|Jay Alammar
翻譯|楊婷、徐佳渝
最近,AI圖像生成引人注目,它能夠根據(jù)文字描述生成精美圖像,這極大地改變了人們的圖像創(chuàng)作方式。Stable Diffusion作為一款高性能模型,它生成的圖像質(zhì)量更高、運(yùn)行速度更快、消耗的資源以及內(nèi)存占用更小,是AI圖像生成領(lǐng)域的里程碑。
在接觸了AI圖像生成以后,你可能會好奇這些模型背后的工作原理。
下面是對Stable Diffusion工作原理的概述。
Stable Diffusion用途多樣,是一款多功能模型。首先它可以根據(jù)文本生成圖像(text2img)。上圖是從文本輸入到圖像生成的示例。除此之外,我們還可以使用Stable Diffusion來替換、更改圖像(這時(shí)我們需要同時(shí)輸入文本和圖像)。
下面是Stable Diffusion的內(nèi)部結(jié)構(gòu),了解內(nèi)部結(jié)構(gòu)可以讓我們更好地理解Stable Diffusion的組成、各組成部分的交互方式、以及各種圖像生成選項(xiàng)/參數(shù)的含義。
1Stable Diffusion的組成
Stable Diffusion并不是一個(gè)單一模型,而是由多個(gè)部分和模型一起構(gòu)成的系統(tǒng)。
從內(nèi)部來看,首先我們可以看到一個(gè)文本理解組件,這個(gè)組件將文本信息轉(zhuǎn)化為數(shù)字表示(numeric representation)以捕捉文本意圖。
這部分主要對ML進(jìn)行大概介紹,文章后續(xù)還會講解更多細(xì)節(jié)??梢哉f這個(gè)文本理解組件(文本編碼器)是一個(gè)特殊的Transformer語言模型(嚴(yán)格來說它是一個(gè)CLIP模型的文本編碼器)。將文本輸入到 Clip 文本編碼器得到特征列表,對于文本中的每一個(gè)word/token 都有會得到一個(gè)向量特征。
然后將文本特征作為圖像生成器的輸入,圖像生成器又由幾部分組成。
圖像生成器兩步驟:
1-圖像信息創(chuàng)建器(Image information creator)
圖像信息創(chuàng)建器是Stable Diffusion特有的關(guān)鍵部分,也是其性能遠(yuǎn)超其他模型的原因。
圖像信息創(chuàng)建器運(yùn)行多個(gè)step生成圖像信息。Stable Diffusion接口(interfaces)和庫(libraries)的step參數(shù)一般默認(rèn)為50或100。
圖像信息創(chuàng)建器完全在圖像信息空間(亦稱潛在空間)上運(yùn)行,這讓Stable Diffusion比以前在像素空間(pixel space)上運(yùn)行的擴(kuò)散模型速度更快。從技術(shù)上講,圖像信息創(chuàng)建器由UNet神經(jīng)網(wǎng)絡(luò)和調(diào)度算法組成。
“擴(kuò)散”一詞描述了圖像信息創(chuàng)建器中發(fā)生的事情。因?yàn)閳D像信息創(chuàng)建器對信息作了逐步處理,所以圖像解碼器(image decoder)才能隨后產(chǎn)出高質(zhì)量圖像。
2-圖像解碼器(Image Decoder)
圖像解碼器根據(jù)圖像信息創(chuàng)建器的信息繪制圖像,它只用在過程結(jié)束時(shí)運(yùn)行一次,以生成最終的像素圖像。
這樣就構(gòu)成了Stable Diffusion的三個(gè)主要組成部分,每個(gè)部分都有自己的神經(jīng)網(wǎng)絡(luò):
ClipText:?用于文本編碼。輸入: 文本。輸出: 77個(gè)token embeddings向量,每個(gè)向量有768維。
UNet+調(diào)度程序:?在信息(潛在)空間中逐步處理信息。輸入: 文本embeddings和一個(gè)初始化的多維數(shù)組(結(jié)構(gòu)化的數(shù)字列表,也稱為張量)組成的噪聲。輸出:經(jīng)過處理的信息數(shù)組。
自動編碼解碼器(Autoencoder Decoder):?使用經(jīng)過處理的信息數(shù)組繪制最終圖像。輸入:經(jīng)過處理的信息數(shù)組(維數(shù):(4,64,64))輸出: 生成的圖像(維數(shù):(3,512,512),即(紅/綠/藍(lán);寬,高))。
2
到底何為擴(kuò)散(Diffusion)?
擴(kuò)散是發(fā)生在粉色區(qū)域圖像信息創(chuàng)建器組件中的過程。這一部分有一個(gè)表示輸入文本的token embeddings和一個(gè)隨機(jī)初始化的圖像信息數(shù)組,這些數(shù)組也被稱為latents,在這個(gè)過程中會產(chǎn)生一個(gè)信息數(shù)組,圖像解碼器(Image Decoder)使用這個(gè)信息數(shù)組生成最終圖像。
擴(kuò)散是循序漸進(jìn)逐步發(fā)生的,每一步都會增加更多的相關(guān)信息。為了更加直觀地了解這個(gè)過程,我們可以檢查隨機(jī)latents數(shù)組,看它是否轉(zhuǎn)化為了視覺噪音(visual noise)。在這種情況下,視覺檢查(Visual inspection)是通過圖像解碼器進(jìn)行的。
擴(kuò)散分為多個(gè)step,每個(gè)step都在輸入的latents數(shù)組上運(yùn)行,并且會產(chǎn)生另一個(gè)latents數(shù)組,這個(gè)數(shù)組更類似于輸入文本以及模型在模型訓(xùn)練時(shí)的所有圖像中獲取的所有視覺信息。
我們可以對一組這樣的latents數(shù)組執(zhí)行可視化,看看每一步都添加了什么信息。這一過程令人嘆為觀止。
視頻鏈接:
在這種情況下,步驟2和4之間發(fā)生了一些特別有意思的事情,就好像輪廓是從噪音中浮現(xiàn)出來的。
關(guān)鍵詞: Diffusion