一. Stable Diffusion核心基礎(chǔ)知識(shí)
1.1 Stable Diffusion模型工作流程
1. 文生圖(txt2img)
文生圖任務(wù)是指將一段文本輸入到SD模型中,經(jīng)過一定的迭代次數(shù),SD模型輸出一張符合輸入文本描述的圖片。
步驟一: 使用CLIP Text Encode模型將輸入的人類文本信息進(jìn)行編碼,生成與文本信息對(duì)應(yīng)的Text Embeddings特征矩陣;
步驟二: 輸入文本信息,再用random函數(shù)生成一個(gè)高斯噪聲矩陣 作為L(zhǎng)atent Feature(隱空間特征)的“替代” 輸入到SD模型的 “圖像優(yōu)化模塊” 中;
步驟三: 首先圖像優(yōu)化模塊是由U-Net網(wǎng)絡(luò)和Schedule算法 組成,將圖像優(yōu)化模塊進(jìn)行優(yōu)化迭代后的Latent Feature輸入到 圖像解碼器 (VAE Decoder) 中,將Latent Feature重建成像素級(jí)圖。
2. 圖生圖
圖生圖任務(wù)在輸入本文的基礎(chǔ)上,再輸入一張圖片,SD模型將根據(jù)文本的提示,將輸入圖片進(jìn)行重繪以更加符合文本的描述。
步驟一: 使用 CLIP Text Encode 模型將輸入的人類文本信息進(jìn)行編碼,生成與文本信息對(duì)應(yīng)的Text Embeddings特征矩陣;同時(shí),將原圖片通過圖像編碼器(VAE Encoder)生成Latent Feature(隱空間特征)
步驟二: 將上述信息輸入到圖像優(yōu)化模塊;
步驟三: 將圖像優(yōu)化模塊進(jìn)行優(yōu)化迭代后的Latent Feature輸入到 圖像解碼器 (VAE Decoder) 中,將Latent Feature重建成像素級(jí)圖。
3. 圖像優(yōu)化模塊
- 首先,“圖像優(yōu)化模塊”是由一個(gè)U-Net網(wǎng)絡(luò)和一個(gè)Schedule算法共同組成,U-Net網(wǎng)絡(luò)負(fù)責(zé)預(yù)測(cè)噪聲,不斷優(yōu)化生成過程,在預(yù)測(cè)噪聲的同時(shí)不斷注入文本語義信息。
- schedule算法對(duì)每次U-Net預(yù)測(cè)的噪聲進(jìn)行優(yōu)化處理(動(dòng)態(tài)調(diào)整預(yù)測(cè)的噪聲,控制U-Net預(yù)測(cè)噪聲的強(qiáng)度),從而統(tǒng)籌生成過程的進(jìn)度。
- 在SD中,U-Net的迭代優(yōu)化步數(shù)(Timesteps)大概是50或者100次,在這個(gè)過程中Latent Feature的質(zhì)量不斷的變好(純?cè)肼暅p少,圖像語義信息增加,文本語義信息增加)。
總結(jié):不管是文生圖還是圖生圖,核心模型都是圖像優(yōu)化模塊,圖像優(yōu)化模塊的輸入都是文字+圖片,輸出都是一張經(jīng)過優(yōu)化后的圖片。只不過文生圖任務(wù)中圖像優(yōu)化模塊的輸入是一張隨機(jī)生成的噪聲圖。模型對(duì)文字的編碼采用CLIP Text Encoder模型,對(duì)于圖片的編碼采用VAE Encoder。
1.2 Stable Diffusion模型核心基礎(chǔ)原理
與GAN等生成式模型一致的是,SD模型同樣學(xué)習(xí)擬合訓(xùn)練集分布,并能夠生成與訓(xùn)練集分布相似的輸出結(jié)果,但與GAN相比,SD模型訓(xùn)練過程更穩(wěn)定,而且具備更強(qiáng)的泛化性能。這些都?xì)w功于擴(kuò)散模型中核心的 前向擴(kuò)散過程(Forward Diffusion Process) 和反向擴(kuò)散過程(Reverse Diffusion Process)。
在前向擴(kuò)散過程中,SD模型持續(xù)對(duì)一張圖像添加高斯噪聲直至變成隨機(jī)噪聲矩陣。而在反向擴(kuò)散過程中,SD模型進(jìn)行去噪聲過程,將一個(gè)隨機(jī)噪聲矩陣逐漸去噪聲直至生成一張圖像。
- 前向擴(kuò)散過程(Forward Diffusion Process)
圖片中持續(xù)添加噪聲 - 反向擴(kuò)散過程(Reverse Diffusion Process)
持續(xù)去除圖片中的噪聲
1. 擴(kuò)散模型的基本原理
在Stable Diffusion這個(gè)擴(kuò)散模型中,無論是前向擴(kuò)散過程還是反向擴(kuò)散過程都是一個(gè)參數(shù)化的馬爾可夫鏈(Markov chain),如下圖所示:
2. 前向擴(kuò)散過程詳解
- 前向擴(kuò)散過程,其實(shí)是一個(gè)不斷加噪聲的過程。
- 對(duì)于初始數(shù)據(jù),我們?cè)O(shè)置K步的擴(kuò)散步數(shù),每一步增加一定的噪聲,如果我們?cè)O(shè)置的K足夠大,那么我們就能夠?qū)⒊跏紨?shù)據(jù)轉(zhuǎn)化成隨機(jī)噪音矩陣。
- 一般來說,擴(kuò)散過程是固定的,由上節(jié)中提到的Schedule算法進(jìn)行統(tǒng)籌控制。同時(shí)擴(kuò)散過程也有一個(gè)重要的性質(zhì):我們可以基于初始數(shù)據(jù) X 0 X_0 X0?和任意的擴(kuò)散步數(shù) K i K_i Ki? ,采樣得到對(duì)應(yīng)的數(shù)據(jù) X i X_i Xi?。
3. 反向擴(kuò)散過程詳解
- 反向擴(kuò)散過程和前向擴(kuò)散過程正好相反,是一個(gè)不斷去噪的過程。將隨機(jī)高斯噪聲矩陣通過擴(kuò)散模型的Inference過程,預(yù)測(cè)噪聲并逐步去噪,最后生成一個(gè)有效圖片。
- 其中每一步預(yù)測(cè)并去除的噪聲分布,都需要擴(kuò)散模型在訓(xùn)練中學(xué)習(xí)。
擴(kuò)散模型的前向擴(kuò)散過程和反向擴(kuò)散過程,他們的目的都是服務(wù)于擴(kuò)散模型的訓(xùn)練,訓(xùn)練目標(biāo)也非常簡(jiǎn)單:擴(kuò)散模型每次預(yù)測(cè)出的噪聲和每次實(shí)際加入的噪聲做回歸,讓擴(kuò)散模型能夠準(zhǔn)確的預(yù)測(cè)出每次實(shí)際加入的真實(shí)噪聲。
下面是SD反向擴(kuò)散過程的完整圖解:
4. 引入Latent思想
-
首先,我們已經(jīng)知道了擴(kuò)散模型會(huì)設(shè)置一個(gè)迭代次數(shù),并不會(huì)像GAN網(wǎng)絡(luò)那樣一次輸入一次輸出,雖然這樣輸出效果會(huì)更好更穩(wěn)定,但是會(huì)導(dǎo)致生成過程耗時(shí)的增加。
-
再者,Stable Diffusion出現(xiàn)之前的Diffusion模型雖然已經(jīng)有非常強(qiáng)的生成能力與生成泛化性能,但缺點(diǎn)是不管是前向擴(kuò)散過程還是反向擴(kuò)散過程,都需要在完整像素級(jí)的圖像上進(jìn)行,當(dāng)圖像分辨率和Timesteps很大時(shí),不管是訓(xùn)練還是前向推理,都非常的耗時(shí)。
-
而基于Latent的擴(kuò)散模型可以將這些過程壓縮在低維的Latent隱空間,這樣一來大大降低了顯存占用和計(jì)算復(fù)雜性,這是常規(guī)擴(kuò)散模型和基于Latent的擴(kuò)散模型之間的主要區(qū)別,也是SD模型火爆出圈的關(guān)鍵一招。
我們舉個(gè)形象的例子理解一下,如果SD模型將輸入數(shù)據(jù)壓縮的倍數(shù)設(shè)為8,那么原本尺寸為 [ 3 , 512 , 512 ] [3, 512, 512] [3,512,512]
的數(shù)據(jù)就會(huì)進(jìn)入 [ 3 , 64 , 64 ] [3, 64, 64] [3,64,64]的Latent隱空間中,顯存和計(jì)算量直接縮小64倍,整體效率大大提升。
總結(jié):
- SD模型是生成式模型,輸入可以是圖片,文本以及兩者的結(jié)合,輸出是生成的圖片。
- SD模型屬于擴(kuò)散模型,擴(kuò)散模型的整體邏輯的特點(diǎn)是過程分步化與可迭代,這給整個(gè)生成過程引入更多約束與優(yōu)化提供了可能。
- SD模型是基于Latent的擴(kuò)散模型,將輸入數(shù)據(jù)壓縮到Latent隱空間中,比起常規(guī)擴(kuò)散模型,大幅提高計(jì)算效率的同時(shí),降低了顯存占用,成為了SD模型破圈的關(guān)鍵一招。
1.3 Stable Diffusion訓(xùn)練全過程
1. 訓(xùn)練過程簡(jiǎn)介
Stable Diffusion的整個(gè)訓(xùn)練過程在最高維度上可以看成是如何加噪聲和如何去噪聲的過程,并在針對(duì)噪聲的“對(duì)抗與攻防”中學(xué)習(xí)到生成圖片的能力。
- 從數(shù)據(jù)集中隨機(jī)選擇一個(gè)訓(xùn)練樣本
- 從K個(gè)噪聲量級(jí)隨機(jī)抽樣一個(gè)timestep t t t
- 將timestep t t t對(duì)應(yīng)的高斯噪聲添加到圖片中
- 將加噪圖片輸入U(xiǎn)-Net中預(yù)測(cè)噪聲
- 計(jì)算真實(shí)噪聲和預(yù)測(cè)噪聲的L2損失
- 計(jì)算梯度并更新SD模型參數(shù)
2. SD訓(xùn)練集加入噪聲
-
SD模型訓(xùn)練時(shí),我們需要把加噪的數(shù)據(jù)集輸入模型中,每一次迭代我們用random函數(shù)生成從強(qiáng)到弱各個(gè)強(qiáng)度的噪聲,通常來說會(huì)生成0-1000一共1001種不同的噪聲強(qiáng)度,通過Time Embedding嵌入到SD的訓(xùn)練過程中。
-
Time Embedding由Timesteps(時(shí)間步長(zhǎng))編碼而來,引入Timesteps能夠模擬一個(gè)隨時(shí)間逐漸向圖像加入噪聲擾動(dòng)的過程。每個(gè)Timestep代表一個(gè)噪聲強(qiáng)度(較小的Timestep代表較弱的噪聲擾動(dòng),而較大的Timestep代表較強(qiáng)的噪聲擾動(dòng)),通過多次增加噪聲來逐漸改變干凈圖像的特征分布。
舉個(gè)例子,可以幫助大家更好地理解SD訓(xùn)練時(shí)數(shù)據(jù)是如何加噪聲的。
首先從數(shù)據(jù)集中選擇一張干凈樣本,然后再用random函數(shù)生成0-3一共4種強(qiáng)度的噪聲,然后每次迭代中隨機(jī)一種強(qiáng)度的噪聲,增加到干凈圖片上,完成圖片的加噪流程。
3. SD訓(xùn)練中加噪與去噪
- 在訓(xùn)練過程中,我們首先對(duì)干凈樣本進(jìn)行加噪處理,采用多次逐步增加噪聲的方式,直至干凈樣本轉(zhuǎn)變成為純?cè)肼暋?/li>
- 接著,讓SD模型學(xué)習(xí)去噪過程,最后抽象出一個(gè)高維函數(shù),這個(gè)函數(shù)能在純?cè)肼曋胁粩唷皟?yōu)化”噪聲,得到一個(gè)干凈樣本。
去噪過程是使用U-Net預(yù)測(cè)噪聲,并結(jié)合Schedule算法實(shí)現(xiàn)逐步去噪。
加噪和去噪過程都是逐步進(jìn)行的,我們假設(shè)進(jìn)行
K
K
K步,那么每一步,SD都要去預(yù)測(cè)噪聲.
那么怎么讓網(wǎng)絡(luò)知道目前處于
K
K
K的哪一步呢?本來SD模型其實(shí)需要K個(gè)噪聲預(yù)測(cè)模型,這時(shí)我們可以增加一個(gè)Time Embedding(類似Positional embeddings)進(jìn)行處理,通過將timestep編碼進(jìn)網(wǎng)絡(luò)中,從而只需要訓(xùn)練一個(gè)共享的U-Net模型,就讓網(wǎng)絡(luò)知道現(xiàn)在處于哪一步。
總結(jié):
SD訓(xùn)練的具體過程就是對(duì)每個(gè)加噪和去噪過程進(jìn)行計(jì)算,從而優(yōu)化SD模型參數(shù),如下圖所示分為四個(gè)步驟:
- 從訓(xùn)練集中選取一張加噪過的圖片和噪聲強(qiáng)度(timestep)
- 然后將其輸入到U-Net中,讓U-Net預(yù)測(cè)噪聲(下圖中的Unet Prediction),
- 接著再計(jì)算預(yù)測(cè)噪聲與真實(shí)噪聲的誤差(loss),
- 最后通過反向傳播更新U-Net的參數(shù)。
4. 語義信息對(duì)圖片生成的控制
SD模型在生成圖片時(shí),需要輸入prompt,那么這些語義信息是如何影響圖片的生成呢?
答案非常簡(jiǎn)單:注意力機(jī)制。
在SD模型的訓(xùn)練中,每個(gè)訓(xùn)練樣本都會(huì)對(duì)應(yīng)一個(gè)標(biāo)簽,我們將對(duì)應(yīng)標(biāo)簽通過CLIP Text Encoder輸出Text Embeddings,并將Text Embeddings以Cross Attention的形式與U-Net結(jié)構(gòu)耦合,使得每次輸入的圖片信息與文字信息進(jìn)行融合訓(xùn)練。
5. SD模型訓(xùn)練時(shí)的輸入
小結(jié)一下SD模型訓(xùn)練時(shí)的輸入,一共有三個(gè)部分組成:圖片,文本,噪聲強(qiáng)度。其中圖片和文本是固定的,而噪聲強(qiáng)度在每一次訓(xùn)練參數(shù)更新時(shí)都會(huì)隨機(jī)選擇一個(gè)進(jìn)行疊加。
二. SD模型核心網(wǎng)絡(luò)結(jié)構(gòu)解析
2.1 SD模型整體架構(gòu)初識(shí)
Stable Diffusion模型整體上是一個(gè)End-to-End模型,主要由以下三個(gè)核心組件構(gòu)成。
- VAE(變分自編碼器,Variational Auto-Encoder),
- U-Net
- CLIP Text Encoder
Stable Diffusion整體架構(gòu)圖
2.2 VAE模型
在Stable Diffusion中,VAE(變分自編碼器,Variational Auto-Encoder)是基于Encoder-Decoder架構(gòu)的生成模型。VAE的Encoder(編碼器)結(jié)構(gòu)能將輸入圖像轉(zhuǎn)換為低維Latent特征,并作為U-Net的輸入。VAE的Decoder(解碼器)結(jié)構(gòu)能將低維Latent特征重建還原成像素級(jí)圖像。
1. Stable Diffusion中VAE的核心作用
總的來說,在Stable Diffusion中,VAE模型主要起到了圖像壓縮和圖像重建的作用。
為什么VAE可以將圖像壓縮到一個(gè)非常小的Latent space(潛空間)后能再次對(duì)圖像進(jìn)行像素級(jí)重建呢?
因?yàn)殡m然VAE對(duì)圖像的壓縮與重建過程是一個(gè)有損壓縮與重建過程,但圖像全圖級(jí)特征關(guān)聯(lián)并不是隨機(jī)的,它們的分布具有很強(qiáng)的規(guī)律性:比如人臉的眼睛、鼻子、臉頰和嘴巴之間遵循特定的空間關(guān)系,又比如一只貓有四條腿,并且這是一個(gè)特定的生物結(jié)構(gòu)特征。
2. Stable Diffusion中VAE的高階作用
與此同時(shí),VAE模型除了能進(jìn)行圖像壓縮和圖像重建的工作外,如果我們?cè)赟D系列模型中切換不同微調(diào)訓(xùn)練版本的VAE模型,能夠發(fā)現(xiàn)生成圖片的細(xì)節(jié)與整體顏色也會(huì)隨之改變(更改生成圖像的顏色表現(xiàn),類似于色彩濾鏡)。
3. Stable Diffusion中VAE模型的完整結(jié)構(gòu)圖
SD VAE模型中有三個(gè)基礎(chǔ)組件:
- GSC組件:GroupNorm+Swish+Conv
- Downsample組件:Padding+Conv
- Upsample組件:Interpolate+Conv
-
同時(shí)SD VAE模型還有兩個(gè)核心組件:ResNetBlock模塊和SelfAttention模型,兩個(gè)模塊的結(jié)構(gòu)如上圖所示。
-
SD VAE Encoder部分包含了三個(gè)DownBlock模塊、一個(gè)ResNetBlock模塊以及一個(gè)MidBlock模塊,將輸入圖像壓縮到Latent空間,轉(zhuǎn)換成為Gaussian Distribution。
-
而VAE Decoder部分正好相反,其輸入Latent空間特征,并重建成為像素級(jí)圖像作為輸出。其包含了三個(gè)UpBlock模塊、一個(gè)ResNetBlock模塊以及一個(gè)MidBlock模塊。
4. Stable Diffusion中VAE的訓(xùn)練過程與損失函數(shù)
在Stable Diffusion中,需要對(duì)VAE模型進(jìn)行微調(diào)訓(xùn)練,主要采用了L1回歸損失和感知損失(perceptual loss,Learned Perceptual Image Patch Similarity,LPIPS)作為損失函數(shù),同時(shí)使用了基于patch的對(duì)抗訓(xùn)練策略。
2.3 U-Net模型
1. Stable Diffusion中U-Net的核心作用
在Stable Diffusion中,U-Net模型是一個(gè)關(guān)鍵核心部分,能夠預(yù)測(cè)噪聲殘差,并結(jié)合Sampling method(調(diào)度算法:PNDM,DDIM,K-LMS等)對(duì)輸入的特征矩陣進(jìn)行重構(gòu),逐步將其從隨機(jī)高斯噪聲轉(zhuǎn)化成圖片的Latent Feature。
具體來說,在前向推理過程中,SD模型通過反復(fù)調(diào)用 U-Net,將預(yù)測(cè)出的噪聲殘差從原噪聲矩陣中去除,得到逐步去噪后的圖像Latent Feature,再通過VAE的Decoder結(jié)構(gòu)將Latent Feature重建成像素級(jí)圖像。
2. Stable Diffusion中U-Net模型的完整結(jié)構(gòu)圖
Stable Diffusion中的U-Net,在傳統(tǒng)深度學(xué)習(xí)時(shí)代的Encoder-Decoder結(jié)構(gòu)的基礎(chǔ)上,增加了ResNetBlock(包含Time Embedding)模塊,Spatial Transformer(SelfAttention + CrossAttention + FeedForward)模塊以及CrossAttnDownBlock,CrossAttnUpBlock和CrossAttnMidBlock模塊。
上圖中包含Stable Diffusion U-Net的十四個(gè)基本模塊:
1. GSC模塊:Stable Diffusion U-Net中的最小組件之一,由GroupNorm+SiLU+Conv三者組成。
2. DownSample模塊:Stable Diffusion U-Net中的下采樣組件,使用了Conv(kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))進(jìn)行采下采樣。
3. UpSample模塊:Stable Diffusion U-Net中的上采樣組件,由插值算法(nearest)+Conv組成。
4. ResNetBlock模塊:借鑒ResNet模型的“殘差結(jié)構(gòu)”,讓網(wǎng)絡(luò)能夠構(gòu)建的更深的同時(shí),將Time Embedding信息嵌入模型。
5. CrossAttention模塊:將文本的語義信息與圖像的語義信息進(jìn)行Attention機(jī)制,增強(qiáng)輸入文本Prompt對(duì)生成圖片的控制。
6. SelfAttention模塊:SelfAttention模塊的整體結(jié)構(gòu)與CrossAttention模塊相同,這是輸入全部都是圖像信息,不再輸入文本信息。
7. FeedForward模塊:Attention機(jī)制中的經(jīng)典模塊,由GeGlU+Dropout+Linear組成。
8. BasicTransformer Block模塊:由LayerNorm+SelfAttention+CrossAttention+FeedForward組成,是多重Attention機(jī)制的級(jí)聯(lián),并且也借鑒ResNet模型的“殘差結(jié)構(gòu)”。通過加深網(wǎng)絡(luò)和多Attention機(jī)制,大幅增強(qiáng)模型的學(xué)習(xí)能力與圖文的匹配能力。
9. Spatial Transformer模塊:由GroupNorm+Conv+BasicTransformer Block+Conv構(gòu)成,ResNet模型的“殘差結(jié)構(gòu)”依舊沒有缺席。
10. DownBlock模塊:由兩個(gè)ResNetBlock模塊組成。
11. UpBlock_X模塊:由X個(gè)ResNetBlock模塊和一個(gè)UpSample模塊組成。
12. CrossAttnDownBlock_X模塊:是Stable Diffusion U-Net中Encoder部分的主要模塊,由X個(gè)(ResNetBlock模塊+Spatial Transformer模塊)+DownSample模塊組成。
13. CrossAttnUpBlock_X模塊:是Stable Diffusion U-Net中Decoder部分的主要模塊,由X個(gè)(ResNetBlock模塊+Spatial Transformer模塊)+UpSample模塊組成。
14. CrossAttnMidBlock模塊:是Stable Diffusion U-Net中Encoder和ecoder連接的部分,由ResNetBlock+Spatial Transformer+ResNetBlock組成。
2.4 CLIP Text Encoder模型
1. CLIP模型介紹
CLIP模型是一個(gè)基于對(duì)比學(xué)習(xí)的多模態(tài)模型,主要包含Text Encoder和Image Encoder兩個(gè)模型。
其中Text Encoder用來提取文本的特征,可以使用NLP中常用的text transformer模型作為Text Encoder;
而Image Encoder主要用來提取圖像的特征,可以使用CNN/vision transformer模型(ResNet和ViT)作為Image Encoder。
與此同時(shí),他直接使用4億個(gè)圖片與標(biāo)簽文本對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練,來學(xué)習(xí)圖片與本文內(nèi)容的對(duì)應(yīng)關(guān)系。
CLIP如何訓(xùn)練
CLIP在訓(xùn)練時(shí),從訓(xùn)練集中隨機(jī)取出一張圖片和標(biāo)簽文本。CLIP模型的任務(wù)主要是通過Text Encoder和Image Encoder分別將標(biāo)簽文本和圖片提取embedding向量,然后用余弦相似度(cosine similarity)來比較兩個(gè)embedding向量的相似性,以判斷隨機(jī)抽取的標(biāo)簽文本和圖片是否匹配,并進(jìn)行梯度反向傳播,不斷進(jìn)行優(yōu)化訓(xùn)練。文章來源:http://www.zghlxwxcb.cn/news/detail-851754.html
2. CLIP在Stable Diffusion中的使用
在Stable Diffusion中主要使用了Text Encoder模型。CLIP Text Encoder模型將輸入的文本Prompt進(jìn)行編碼,轉(zhuǎn)換成Text Embeddings(文本的語義信息),通過U-Net網(wǎng)絡(luò)中的CrossAttention模塊嵌入Stable Diffusion中作為Condition,對(duì)生成圖像的內(nèi)容進(jìn)行一定程度上的控制與引導(dǎo)。
特此感謝
https://zhuanlan.zhihu.com/p/632809634
https://blog.csdn.net/weixin_47748259/article/details/135502977
https://zhuanlan.zhihu.com/p/679152891文章來源地址http://www.zghlxwxcb.cn/news/detail-851754.html
到了這里,關(guān)于Stable Diffusion之核心基礎(chǔ)知識(shí)和網(wǎng)絡(luò)結(jié)構(gòu)解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!