Stable Diffusion
Stable Diffusion 是開放權重的潛在式文生圖系統,2022 年由 Stability AI 與 CompVis、Runway 首次發布,它把高品質影像生成帶到一般 GPU 上,也帶到大眾手中。它的意義在技術之外更具社會性:由於權重被公開釋出,一整個由微調、外掛(LoRA 轉接器、ControlNet)與工具組成的生態系圍繞它生長起來,這與只能透過 API 存取的封閉系統(如 DALL-E 或 Midjourney)形成對比。
在架構上,Stable Diffusion 是一個由三個協作元件組成的潛在擴散模型。一個 VAE 負責把影像編碼進一個緊湊的潛在空間、再從中解碼出來。一個去雜訊 U-Net 在那個潛在空間中執行擴散的反向過程,於每一步預測雜訊。還有一個凍結的文字編碼器,把提示詞轉成嵌入,透過交叉注意力為 U-Net 提供條件。生成時,文字編碼器讀取提示詞,U-Net 在無分類器引導下朝著該提示詞反覆對一個隨機潛在張量去雜訊,最後 VAE 解碼器把最終的潛在張量轉成圖片。SD 1.x 使用 OpenAI 的 CLIP 文字編碼器;SD 2 改用 OpenCLIP;SDXL(2023)放大了 U-Net,使用兩個文字編碼器串接以獲得更豐富的提示理解,並加入了一個精修階段。
理解哪個元件做什麼,是使用與除錯這個系統的關鍵。提示詞沒被遵循?那是文字編碼器與交叉注意力的問題。輸出在小尺寸下模糊或缺乏細節?常是 VAE 的問題,或是在低於模型訓練解析度的尺寸下生成。想要姿勢或邊緣控制?把一個 ControlNet 接到 U-Net 上。想要便宜地獲得新風格?用一個 LoRA 在 U-Net 的注意力層上微調。VAE、U-Net 與文字編碼器之間乾淨的分工,正是讓 Stable Diffusion 如此模組化、易於改造的原因。
「一名太空人騎馬,照片寫實風格」的端到端流程:(1) CLIP 文字編碼器 -> 77 個 token 的嵌入序列;(2) 從一個隨機的 64x64x4 潛在張量開始;(3) U-Net 進行約 30 個 DDIM 步驟的去雜訊,透過交叉注意力關注文字嵌入,引導強度為 7.5;(4) VAE 解碼器把最終的潛在張量展開成一張 512x512 的 RGB 影像。