!
擴(kuò)散模型(Stable Diffusion)現(xiàn)在是生成圖像的首選模型。由于擴(kuò)散模型允許我們以提示( prompts)為條件生成圖像,我們可以生成我們所選擇的圖像。在這些文本條件的擴(kuò)散模型中,穩(wěn)定擴(kuò)散模型由于其開源性而最為著名。
在這篇文章中,我們將把Stable Diffusion
模型分解為構(gòu)成它的各個(gè)組成部分。此外,我們還將了解穩(wěn)定擴(kuò)散的工作原理。
熟悉Stable Diffusion的工作,將使我們也能理解其訓(xùn)練和推理的過(guò)程。在了解了Stable Diffusion的概念部分之后,我們將介紹它的不同版本和變化。
1. Stable Diffusion介紹
Latent Diffusion Model (LDM)是最初的文本-圖像模型,穩(wěn)定擴(kuò)散模型(Stable Diffusion)是一種擴(kuò)展。這意味著 "Stable Diffusion "也是一個(gè)文本-圖像模型。
CompVis和RunwayML的原始開放源代碼是基于Rombach等人的論文–“High-Resolution Image Synthesis with Latent Diffusion Models”。
對(duì)擴(kuò)散模型及其機(jī)制感到困惑嗎?不要著急,本文將會(huì)使用PyTorch從頭開始建立一個(gè)基本的擴(kuò)散模型。
正如你現(xiàn)在可能已經(jīng)猜到的,穩(wěn)定擴(kuò)散并不是唯一能生成圖像的擴(kuò)散模型。
在Stable Diffusion之前,有OpenAI的DALL-E 2。在這之后,谷歌發(fā)布了Imagen。這兩個(gè)都是文本到圖像的擴(kuò)散模型。
這就提出了一個(gè)相關(guān)的問(wèn)題–“穩(wěn)定擴(kuò)散與其他從提示語(yǔ)生成圖像的擴(kuò)散模型有何不同?”
1.1 Stable Diffusion與其他基于擴(kuò)散的圖像生成模型有何不同?
Stable Diffusion是在圖像的潛在空間而不是在圖像的像素空間工作的。
其他生成性擴(kuò)散模型,如DALL-E 2和Imagen,在圖像的像素空間上工作。這使得它們的速度變慢,而且在這個(gè)過(guò)程中,消耗了更多的內(nèi)存。
自動(dòng)編碼器模型有助于創(chuàng)建這個(gè)潛在空間,它也作為模型中的噪聲預(yù)測(cè)器。如果你看過(guò)之前的DDPM文章,那么你已經(jīng)知道噪聲預(yù)測(cè)器模型是LDM(潛伏擴(kuò)散模型)中不可缺少的一部分。
在這一點(diǎn)上,我想到了另外幾個(gè)問(wèn)題。
- UNet是穩(wěn)定擴(kuò)散模型中的一個(gè)組成部分/模型嗎?
- 該模型中還有其他組成部分嗎?如果是的話,它們是什么?
2. Stable Diffusion模型的組成部分
我們可以將Stable Diffusion模型分解為三個(gè)主要部分:
- 一個(gè)預(yù)先訓(xùn)練好的文本編碼器
- 一個(gè)UNet噪聲預(yù)測(cè)器
- 一個(gè)可變的自動(dòng)編碼器-解碼器模型。解碼器還包含一個(gè)用于生成最終高分辨率圖像的Upsampler網(wǎng)絡(luò)。
但在訓(xùn)練和推理過(guò)程中,所有的組件都參與其中。在訓(xùn)練期間,使用編碼器、UNet和預(yù)訓(xùn)練的文本編碼器。而在推理過(guò)程中,預(yù)訓(xùn)練過(guò)的文本編碼器、UNet和解碼器都參與其中。
廣義上講,一個(gè)預(yù)訓(xùn)練的文本編碼器將文本提示轉(zhuǎn)換為embeddings。
UNet模型作為噪聲預(yù)測(cè)器作用于潛在的空間信息。
自動(dòng)編碼器-解碼器有兩個(gè)任務(wù)。編碼器從原始圖像像素生成潛空間信息,解碼器從文本條件的潛空間預(yù)測(cè)圖像。
3. 訓(xùn)練 Stable Diffusion
訓(xùn)練Stable Diffusion模型包括三個(gè)階段(拋開反向傳播和所有數(shù)學(xué)上的東西):
- 根據(jù)prompt創(chuàng)建 token embeddings。從訓(xùn)練的角度來(lái)看,我們將文本prompt稱為標(biāo)題。
- 用embeddings對(duì)UNet進(jìn)行調(diào)節(jié)。潛在空間是使用自動(dòng)編碼器模型的編碼器部分生成的。這被稱為文本條件的潛空間。
- UNet會(huì)在潛在空間上工作。
- 從上述步驟中,UNet預(yù)測(cè)了添加到潛空間的噪聲,并試圖對(duì)其進(jìn)行去噪處理。
3.1 Text Encoder
一般來(lái)說(shuō),在所有的擴(kuò)散模型中,Text Encoder是一個(gè)大型的預(yù)訓(xùn)練的transformer語(yǔ)言模型。
Stable Diffusion使用CLIP
的預(yù)訓(xùn)練Text Encoder
部分進(jìn)行文本編碼。它把提示詞作為輸入,并輸出77×768維的 token embedding
。
在77個(gè)tokens,75個(gè)是來(lái)自prompt的text tokens ,1個(gè)為start token,另外1個(gè)為end token。
其他預(yù)訓(xùn)練的語(yǔ)言transformers模型,如T5
和BERT
也可以使用。但 "Stable Diffusion "使用CLIP
。
3.2 UNet噪聲預(yù)測(cè)器
在UNet之前,autoencoder-decoder模型的編碼器部分將輸入圖像轉(zhuǎn)換為其潛在的表示。
現(xiàn)在,重要的是要記住,UNET只作用于編碼后的latent 空間,根本不處理原始圖像像素。當(dāng)然,它是以文字提示為條件的。將文本提示添加到潛空間的過(guò)程被稱為文本調(diào)節(jié)(text conditioning)。
不僅僅是文本調(diào)節(jié)(text conditioning), latent information也要經(jīng)過(guò)一個(gè)噪音添加步驟,如上文所述。
從所有上述信息中,UNet試圖預(yù)測(cè)添加到圖像中的噪聲。
但這還不是全部。UNet的架構(gòu)比這更復(fù)雜。它包含了用于殘差連接Residual layers和用于將文本信息合并到圖像的潛在空間的Attention layers。
在合并merging步驟之后,殘余塊可以利用embedded信息去噪。
UNet輸出一個(gè)64×64(空間)維度的張量。
3.3 Autoencoder-Decoder 模型
如前所述,Autoencoder的編碼器encoder部分從原始圖像中創(chuàng)建潛伏空間。
最后,該模型的解碼器Decoder 部分負(fù)責(zé)生成最終圖像。
解碼器作用于4x64x64維的向量,生成3x512x512的圖像。原始的Stable Diffusion(直到2.0版)默認(rèn)生成512×512維的圖像。
3.4 訓(xùn)練Stable Diffusion的完整過(guò)程
正如最初的LDM論文中所示,整個(gè)過(guò)程可以總結(jié)為以下圖片。
我們可以看到,首先編碼器是如何將圖像編碼到一個(gè)潛伏空間中的(上半部分右側(cè)紅色塊)。并注意到我們?nèi)绾斡梦谋尽⒄Z(yǔ)義圖或甚至圖像來(lái)調(diào)節(jié)潛空間。
QKV塊代表了來(lái)自Transformer模型的交叉注意力。大的綠色塊顯示了UNet在潛空間上的工作,以預(yù)測(cè)噪音。
4 Stable Diffusion推理–從噪聲和提示中生成圖像
一旦我們有了訓(xùn)練好的Stable Diffusion模型,生成圖像就會(huì)經(jīng)歷一個(gè)與訓(xùn)練稍有不同的過(guò)程。
在推理過(guò)程中,我們最初并沒有圖像。相反,我們必須使用text prompt
來(lái)生成一個(gè)。此外,我們不需要自動(dòng)autoencoder-decoder
網(wǎng)絡(luò)的編碼器部分。這就把推理部分歸結(jié)為以下內(nèi)容:
- 預(yù)訓(xùn)練的文本編碼器text encoder。
- UNet噪聲預(yù)測(cè)器。
- 以及autoencoder-decoder網(wǎng)絡(luò)的解碼器部分。
4.1 從prompt中生成圖像的過(guò)程
我們不向圖像添加噪聲,而是直接從純高斯噪聲開始。然后Stable Diffusion對(duì)其進(jìn)行迭代去噪,生成最終的圖像。我們可以控制去噪步驟的數(shù)量,這被稱為采樣步驟。
如果是一個(gè)純擴(kuò)散模型(不以文本提示為條件),那么這個(gè)過(guò)程將類似于以下情況:
但在這里,我們有一個(gè)文本提示text prompt,而噪音需要以文本提示為條件。因此,這個(gè)過(guò)程看起來(lái)像這樣:
除了輸入圖像和編碼器(我們不再需要了),其他每個(gè)組件都保持不變。
但是,我們?cè)谏厦嬲劦搅瞬蓸硬襟E。這在整個(gè)過(guò)程中是如何體現(xiàn)的呢?
這可以通過(guò)擴(kuò)展UNet和展示去噪過(guò)程來(lái)更好地解釋。
我們可以把上述過(guò)程稱為反向擴(kuò)散過(guò)程,因?yàn)樵撃P蛷脑肼曋猩闪藞D像。
4.2 一些實(shí)際考慮的問(wèn)題
下面是一些要點(diǎn),以澄清關(guān)于推理階段的幾個(gè)概念:
- 輸入的提示不需要完全是75個(gè)字的長(zhǎng)度。我們也可以提供更短和更長(zhǎng)的提示。
- 在推理過(guò)程中,UNet仍然會(huì)生成一個(gè)空間尺寸為64×64的圖像。
- autoencoder的解碼器部分既是一個(gè)上采樣器,也是一個(gè)超分辨率模型的組合。這就產(chǎn)生了最終的512×512的圖像。
- 從完全實(shí)用的角度來(lái)看,只要我們能負(fù)擔(dān)得起GPU的內(nèi)存,我們就可以生成任何分辨率的圖像。
5. Stable Diffusion的不同版本
在這里,我們將討論在眾多的Stable Diffusion中一些比較顯著的變化。
所有這些模型都是通過(guò)對(duì)基本的Stable Diffusion版本之一進(jìn)行微調(diào)而得到的。
5.1 Arcane Diffusion
這種Stable Diffusion的變體在電視節(jié)目《Arcane》的圖像上進(jìn)行了微調(diào)。
在給模型提示的風(fēng)格信息,就能生成對(duì)應(yīng)風(fēng)格的圖像。
5.2 Robo Diffusion
Stable Diffusion的機(jī)器人擴(kuò)散版本可以生成非常酷的機(jī)器人圖像。
5.3 Open Journey
與基本的Stable Diffusion相比,這些圖像更具藝術(shù)性和動(dòng)態(tài)性。Openjourney模型已經(jīng)在Midjourney的圖像輸出上進(jìn)行了訓(xùn)練。
5.4 動(dòng)漫效果
總結(jié)
在這篇文章中,我們介紹了穩(wěn)定擴(kuò)散的整個(gè)架構(gòu)。除了訓(xùn)練和推理之外,我們還介紹了穩(wěn)定擴(kuò)散的實(shí)際應(yīng)用效果。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-496639.html
正如你從這篇文章中所理解的那樣,開源模型(如Stable Diffusion)讓AI社區(qū)擴(kuò)大了使用范圍。從非常簡(jiǎn)單的角色開始,到不同藝術(shù)風(fēng)格的復(fù)雜角色,這些模型讓我們探索我們的創(chuàng)造力。此外,微調(diào)這些模型所需的計(jì)算量正在減少。幾乎任何擁有非常普通的消費(fèi)級(jí)GPU的人都可以微調(diào)穩(wěn)定擴(kuò)散模型。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-496639.html
到了這里,關(guān)于Stable Diffusion-生式AI的新范式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!