[技術筆記]Stable Diffusion 閱讀營第三週筆記

簡單使用Diffusion模型與生成圖片

Posted by 李定宇 on Sunday, November 5, 2023

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–初稿