week-3
Stable Diffusion 特點
隱式擴散(Latent Diffusion)
由於圖片尺寸會和模型消耗計算資源強相關,特別是在 self-attention的情況下。為了解決這個情形,隱式擴散會使用一個特殊的模型—VAE(Variational Auto-Encoder)來壓縮圖片,它會將圖片映射到一個較低維的「隱式表徵」,然後進入UNet的擴散過程,接著透過VAE的解碼器來獲得原始分辨率的圖片。
// TODO: 程式碼範例
以文本為生成條件
Stable Diffusion使用了 CLIP的預訓練Transformer模型,CLIP會把文本轉換為特徵向量,這個特徵向量可以用於和圖片特徵向量進行相似度比較。 。。。TODO
無分類引導器
有時,模型在生成過程中,比較多的會是基於「帶噪」的圖片來預測、而不是基於文字(prompt),其主要是因爲該文字向量可能和圖片的相關度太低,所以模型還是基於帶噪圖片來預測生成。
這時有個小技巧:無分類器引導(Classifier-Free Guidance, CFG)。在訓練的時候,會時不時將文字條件設為空,讓模型生成無引導的圖像。這樣一來,模型會比較”有引導”和”無引導”的情況。”有引導”指的是有文字描述的情況,而”無引導”則是沒有文字描述的情況。通過調整這兩種情況生成圖像的”強度”,也就是在它們之間進行平衡,模型能夠更準確地生成與描述匹配的圖像。
其他類型的條件生成模型
- Img2Img
- 用於圖片到圖片的轉換,像是風格轉換、圖片超分辨率
- Inpainting
- 圖片修復。基本上就是基於un-masked的圖片區域,來預測生成masked的區域
- Depth2Img
DreamBooth進行微調
可以教會模型一些新的概念,不過DreamBooth的微調對Stable Diffusion模型十分敏感
Stable Diffusion的組成
- vae:隱式擴散,用於壓縮圖片
- text_encoder: 向量化prompt
- tokenizer: 將文本分解成模型可以處理的小單位
- unet:潛在空間向量和文本特徵向量結合,並開始生成圖像
- scheduler:指導UNet通過一系列加噪、去噪迭代過程,逐步精煉圖片
- safety_checker:安全檢查器的角色是確保生成的圖片不包含不合適的內容
- feature_extractor:
ChangeLog
- 20231105–初稿