從頭開始學習Stable Diffusion:一個初學者指南
Stable Diffusion 原理
Stable Diffusion 在2022年發表,一種基於Latent Diffusion Models的新興機器學習技術。它基於擴散過程,利用數學模型將機器學習中的高維度數據降低到低維度空間,並在該空間中進行訓練。Stable Diffusion的原理涉及到以下三個組件:
- Text Encoder 文字特徵化:為了輸入文字的內容,我們要先有一個powerful的文字特徵萃取器,可以是GPT、BERT等常見的主流Transformer model,總之能把文字特徵做得好,就好的是 Encoder。
- Diffusion Model 擴散模型:透過降躁過程,將一個潛在空間Latent Space的圖像,逐步轉回真實圖像的技術,裡面用到 U-Net架構及Attenation技術,來提高模型表現,與傳統的 Diffusion略有不同。
- VAE (Variational Autoencoder):變分自編碼器,負責圖像在潛在空間的壓縮與重建,壓縮後的圖像能讓模型學得更快更好。
以功能來切,大概可以這樣理解
以模型的學習與訓練來看,可以這樣理解:
深度技術就給有興趣自行研究,論文連結:
將高維特徵壓縮到低維,然後在低維空間上進行操作的方法具有泛用性,可以很容易推廣到文本、音頻、影像等數據。
Stable Diffusion模型中,有幾種不同的sampling方法可以用來生成數據,以下是一些常見的sampling方法:
- Gaussian sampling:是Stable Diffusion中最常用的一種sampling方法。它通過將高斯噪聲添加到數據中來生成新的樣本。這種方法可以幫助模型更好地理解數據的分佈和特徵。
- Langevin sampling:一種基於隨機梯度下降的sampling方法。它通過將隨機噪聲添加到梯度中來生成新的樣本。這種方法可以幫助模型更好地處理高度非線性的數據。
- Metropolis-Hastings sampling:一種Markov Chain Monte Carlo(MCMC)方法,它可以生成一個序列來表示數據的分佈。這種方法可以幫助模型更好地理解數據的複雜性和不確定性。
- Hamiltonian Monte Carlo sampling:一種MCMC方法,它可以利用動態系統的特性來生成數據樣本。這種方法可以幫助模型更好地理解數據中的隱含結構和特徵。
- Diffusion Process Model:DPM是基於擴散過程的理論原理,通過對數據樣本中的噪聲進行建模,可以幫助消除數據中的噪聲和偏差,提高模型的準確性和泛化能力。
這些方法在Stable Diffusion的參數中都可以調整,其中Sampling step更會影響圖片生成的運算時間及效果,原則上會根據採樣方法不同而有所差異。
Dreambooth 原理
Google在2022年提出的技術,可以保留你想想要的圖片特徵,基於GAN模型的核心思想,即通過將生成器和判別器部分相互對抗,從而提高生成器生成圖像的質量和真實度。在Dreambooth中,生成器部分利用深度學習技術從文字描述中學習生成圖像的能力,而判別器部分則利用深度學習技術評估圖像的真實度,從而驅動生成器不斷地優化生成圖像的效果。
透過對Stable Diffusion的微調,讓圖片可以在保留特徵的情況下生成更多樣式,這也是近期很多藝術家反彈的藝術風格道德問題,如果你喜歡某個畫師的風格,就能用這個技術將之模仿並創作。
如Civitai上的Checkpoint Model,就是Stable Diffusion用來生成圖片的主模型,可以快速找到你想要的風格。
LoRA 原理
Low-rank adaptation of large language models,又稱 LoRA,微軟開發的局部調整模型,非常輕量,可以在Stable Diffusion主模型的基礎上,增加局部特徵。
主要原理是將低秩矩陣分解應用到大型語言模型中,將模型中的權重矩陣分解成低秩的兩個矩陣,從而減少存儲需求和計算成本。此外模型還通過自適應學習的方法來調整模型的參數,以更好地適應不同的語言模型和文本數據。
如Civitai上的LoRA Model,就能將想要的風格加進主模型中,你就可以建立各種表情、服裝的Tifa之類的。
ControlNet 原理
ControlNet模型通常由兩個部分組成:一個稱為系統動態的部分,用於處理非線性問題,另一個稱為控制器的部分,用於調節模型的輸出。控制器的輸出可以根據系統動態的狀態和期望輸出值進行調整,從而提高模型的性能和準確度。
ControlNet應該是Stable Diffusion目前最夯的應用,主要可以控制人物的動作,或是物體結構,不需要打一堆咒語,快速讓AI懂你要的東西。
後面還有 Embedding 或是 Hypernetworks 之類的技術,但礙於篇幅及所需要的知識量,就不再展開說明。
簡單理解這些原理後,下一篇就讓我們進入Stable Diffusion的安裝吧。