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