1. SD能做什么
最基本的功能是:文生圖(text-to-image)
2. 擴散模型
SD屬于擴散模型。擴散模型是一類生成式模型,它們被設計用于生成與訓練數(shù)據(jù)類似的新數(shù)據(jù)史飞。
擴散模型為什么叫“擴散”模型呢良哲?因為模型生成數(shù)據(jù)的過程類似物理上的擴散偿乖。下面以訓練生成????圖片的擴散模型為例,介紹訓練過程芋簿。
2.1 正向擴散
正向擴散(Forward Diffusion)是??/??圖片轉為無特點的噪聲圖的過程,從噪聲圖是看不出最初是??還是??的璃饱。
像一滴墨掉進一杯水与斤,不一會兒就會慢慢擴散,將自己隨機分布到水中帜平,就難以辨認出最初墨滴在邊緣幽告、中心還是別的哪里了。
2.2 逆向擴散
而逆向擴散(Reverse Diffusion)則從無意義的噪聲圖中復原出??或??冗锁,是正向擴散的“倒放”。
技術上嗤栓,每次擴散包括兩步:漂移(drift)和隨機運動(random motion)冻河。逆向擴散的漂移要么朝著復原出??的方向要么朝著復原出??的方向箍邮,而不會是一個中間值。
3. 逆向擴散怎么實現(xiàn)
逆向擴散這個idea無疑是聰明優(yōu)雅的叨叙。但價值千金的難題是:它怎么實現(xiàn)锭弊?
3.1 訓練noise predictor
為了將擴散過程逆過來,我們需要知道一張圖被添加了多少噪聲擂错。這可以通過訓練一個模型預測圖上的噪聲程度來實現(xiàn)味滞,noise predictor在SD中是由一個U-Net模型(一種全卷積神經(jīng)網(wǎng)絡)實現(xiàn)的。訓練過程分4步:
- 取一張訓練圖钮呀,比如一張??圖
- 生成一張噪聲圖
- 將噪聲圖以不同強度疊加到訓練圖上來破壞訓練圖像剑鞍。
- 教噪聲預測器告訴我們添加了多少噪聲
這是通過調整強度并顯示正確數(shù)值來實現(xiàn)的。
經(jīng)過訓練蚁署,我們得到了能預測圖中添加噪聲量多少的noise predictor。
3.2 逆向擴散步驟
有了noise predictor蚂四,我們用它實現(xiàn)逆向擴散光戈。
- 生成一個完全隨機的圖像,并要求noise predictor告訴我們噪聲
- 從原始圖像中減去預測的噪聲
重復1.和2.幾次遂赠,就獲得??或??的圖像久妆。
我們暫時還不能控制復原出的圖片是??還是??,控制輸出可以通過加條件來實現(xiàn)解愤。
4. Stable Diffusion
現(xiàn)在有一個壞消息镇饺。剛剛所說的不是SD的工作方式乎莉。擴散過程是在圖像空間進行的送讲。這在計算上慢到難以接受,而且在任何單個的GPU上都跑不了惋啃。512*512的RGB圖在786,432維的空間哼鬓。我們需要為一張圖指定的值太太太多。
Google的Imagen和Open AI的DALL-E是像素級的擴散模型边灭,它們有一些加速的技巧但還不夠异希。
而Stable Diffusion正是為解決圖像擴散模型的速度難題而設計的。
4.1 表征(Latent)擴散模型
Stable Diffusion是一個表征擴散模型绒瘦。它首先把圖像壓縮到表征空間称簿,以避免在高維的圖像空間進行操作。這就快多了惰帽。
4.2 圖像表征和復原
圖像到表征和表征到圖像的轉換是通過VAE(Variational Autoencoder)來實現(xiàn)的憨降。
VAE包括encoder和decoder兩部分。
encoder將圖片壓縮為較低維度的表征该酗,decoder從表征中復原圖片授药。
- 為什么使用表征是可行的
VAE為何可以將圖像壓縮為表征而不會丟失信息士嚎?這是因為是自然圖像不是隨機的。他們的規(guī)律性很高:比如臉遵循眼睛悔叽,鼻子莱衩,臉頰和嘴巴之間的特定空間關系。狗有四條腿娇澎,有特殊的形態(tài)笨蚁。
換句話說,圖像的高維度是人為的趟庄,有很多冗余信息赚窃。自然圖像可以輕松地壓縮到較小的潛在空間中,而不會丟失任何信息岔激。這稱為機器學習中的manifold hypothesis勒极。
4.3 SD的訓練
Stable Diffusion中對512*512的RGB圖像的表征是4*64*64
的。得到表征后虑鼎,之前說的擴散過程都在表征空間進行辱匿。所以訓練時,我們生成的噪聲不是噪聲圖而是一個表征空間的隨機tensor炫彩,這個tersor再和圖像的表征進行不同程度的疊加匾七,以訓練noise predictor并進行逆向擴散(逆向擴散sampling和samplers: 詳見link)。逆向擴散步驟如下:
- 生成一個隨機矩陣作為圖像表征江兢。
- noise predictor估計這個矩陣的噪聲昨忆,從圖像表征中減去估計的噪聲。
(重復2.直到特定的采樣步驟) - VAE的解碼器將圖像表征轉換為最終圖像
4.4 圖像分辨率
圖像分辨率在圖像表征的shape上有體現(xiàn)杉允,這也是生成大圖會耗費更多顯存和時間的原因邑贴。表征的大小是圖片大小的1/48(768*512的RGB圖像的表征是4*96*64
的)。
StableDiffusion v1是在512*512的圖像上微調的叔磷,因此生成比512*512的更大的圖會出現(xiàn)重復的物體(比如拢驾,兩個腦袋(with solution)))。
-
生成大圖
如果一定要生成大圖改基,需要至少保證寬/高中的一個是512繁疤,再用AI upscaler提高分辨率。
4.5 VAE file
VAE file用于Stable Diffusion v1中秕狰,以改善眼睛和面部稠腊。它們是經(jīng)過進一步微調的VAE decoder,該模型可以繪制更精細的細節(jié)鸣哀。
(之前提到的假說并非完全正確架忌。將圖像壓入潛在空間確實會丟失信息,因為原始VAE沒有恢復細節(jié)诺舔。取而代之的是鳖昌,VAE file中的decoder負責繪制精美的細節(jié)备畦。)
5. 條件控制(Conditioning)
上述對Stable Diffusion的理解還不完整。怎么通過文本提示來控制出圖呢许昨?
這就需要Conditioning懂盐,其目的是引導noise predictor,以便預測的噪聲從圖像中減掉后能得出我們想要的東西糕档。
5.1 文本條件(text-to-image)
下圖是文本提示(text prompt)被處理并喂給noise predictor的過程莉恼。Tokenizer先把提示中的每個詞切分出來作為token。每個token會被轉化為一個768維的embedding速那。隨后embedding被送入