Stable Diffusion工作原理(How does Stable Diffusion work?中文版)

翻譯自How does Stable Diffusion work?

1. SD能做什么

最基本的功能是:文生圖(text-to-image)


SD以文字提示為輸入壹堰,輸出與提示相配的圖像

2. 擴散模型

SD屬于擴散模型。擴散模型是一類生成式模型,它們被設計用于生成與訓練數(shù)據(jù)類似的新數(shù)據(jù)史飞。

擴散模型為什么叫“擴散”模型呢良哲?因為模型生成數(shù)據(jù)的過程類似物理上的擴散偿乖。下面以訓練生成????圖片的擴散模型為例,介紹訓練過程芋簿。

2.1 正向擴散

正向擴散(Forward Diffusion)是??/??圖片轉為無特點的噪聲圖的過程,從噪聲圖是看不出最初是??還是??的璃饱。
像一滴墨掉進一杯水与斤,不一會兒就會慢慢擴散,將自己隨機分布到水中帜平,就難以辨認出最初墨滴在邊緣幽告、中心還是別的哪里了。

一張??圖經(jīng)過正向擴散裆甩,變成隨機噪聲

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步:

  1. 取一張訓練圖钮呀,比如一張??圖
  2. 生成一張噪聲圖
  3. 將噪聲圖以不同強度疊加到訓練圖上來破壞訓練圖像剑鞍。
  4. 教噪聲預測器告訴我們添加了多少噪聲
    這是通過調整強度并顯示正確數(shù)值來實現(xiàn)的。
每一步中疊加更多噪聲爽醋,讓noise predictor估計每一步圖像中的噪聲

經(jīng)過訓練蚁署,我們得到了能預測圖中添加噪聲量多少的noise predictor。

3.2 逆向擴散步驟

有了noise predictor蚂四,我們用它實現(xiàn)逆向擴散光戈。

  1. 生成一個完全隨機的圖像,并要求noise predictor告訴我們噪聲
  2. 從原始圖像中減去預測的噪聲

重復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實現(xiàn)圖像與表征的相互轉換

  • 為什么使用表征是可行的
    VAE為何可以將圖像壓縮為表征而不會丟失信息士嚎?這是因為是自然圖像不是隨機的。他們的規(guī)律性很高:比如臉遵循眼睛悔叽,鼻子莱衩,臉頰和嘴巴之間的特定空間關系。狗有四條腿娇澎,有特殊的形態(tài)笨蚁。
    換句話說,圖像的高維度是人為的趟庄,有很多冗余信息赚窃。自然圖像可以輕松地壓縮到較小的潛在空間中,而不會丟失任何信息岔激。這稱為機器學習中的manifold hypothesis勒极。

4.3 SD的訓練

Stable Diffusion中對512*512的RGB圖像的表征是4*64*64的。得到表征后虑鼎,之前說的擴散過程都在表征空間進行辱匿。所以訓練時,我們生成的噪聲不是噪聲圖而是一個表征空間的隨機tensor炫彩,這個tersor再和圖像的表征進行不同程度的疊加匾七,以訓練noise predictor并進行逆向擴散(逆向擴散sampling和samplers: 詳見link)。逆向擴散步驟如下:

  1. 生成一個隨機矩陣作為圖像表征江兢。
  2. noise predictor估計這個矩陣的噪聲昨忆,從圖像表征中減去估計的噪聲。
    (重復2.直到特定的采樣步驟)
  3. 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被送入

將文本提示特征化俐银,并送入noise predictor以控制文本生成

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市端仰,隨后出現(xiàn)的幾起案子捶惜,更是在濱河造成了極大的恐慌,老刑警劉巖荔烧,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吱七,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹤竭,警方通過查閱死者的電腦和手機踊餐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臀稚,“玉大人吝岭,你說我怎么就攤上這事“伤拢” “怎么了窜管?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撮执。 經(jīng)常有香客問我微峰,道長,這世上最難降的妖魔是什么抒钱? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮颜凯,結果婚禮上谋币,老公的妹妹穿的比我還像新娘。我一直安慰自己症概,他們只是感情好蕾额,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彼城,像睡著了一般诅蝶。 火紅的嫁衣襯著肌膚如雪退个。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天调炬,我揣著相機與錄音语盈,去河邊找鬼。 笑死缰泡,一個胖子當著我的面吹牛刀荒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棘钞,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼缠借,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宜猜?” 一聲冷哼從身側響起泼返,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姨拥,沒想到半個月后符隙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡垫毙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年霹疫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片综芥。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡丽蝎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膀藐,到底是詐尸還是另有隱情屠阻,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布额各,位于F島的核電站国觉,受9級特大地震影響,放射性物質發(fā)生泄漏虾啦。R本人自食惡果不足惜麻诀,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傲醉。 院中可真熱鬧蝇闭,春花似錦、人聲如沸硬毕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吐咳。三九已至逻悠,卻和暖如春元践,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背童谒。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工单旁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惠啄。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓慎恒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撵渡。 傳聞我的和親對象是個殘疾皇子融柬,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容