Stable Diffusion模型基礎

一、數(shù)學基礎

1. 正態(tài)分布標準化

對于一個服從高斯分布的隨機變量x\sim N(\mu ,\sigma ^2)臣镣,計算其均值\mu和標準差\sigma≈橇粒“標準正態(tài)分布”忆某,就是取\mu=0\sigma ^2=1正態(tài)分布給出的阔蛉,其概率密度函數(shù)為:

f(x)=\frac{1}{\sqrt{2 \pi}} e^{\frac{-x^{2}}{2}}

對于任意一個正太分布的概率密度函數(shù)積分:

\begin{aligned} \int f(x) \mathrm66cswe6 x & =\int \frac{1}{\sqrt{2 \pi \sigma^{2}}} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}} \mathrm{~d} x \\ & =\int \frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{2}} \mathrm{~d} x \\ & =\int \frac{1}{\sqrt{2 \pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{2}} \mathrm{~d}\left(\frac{x-\mu}{\sigma}\right) \end{aligned}

z=\frac{x-\mu }{\sigma }弃舒,上邊公式就變成了:

\int \frac{1}{\sqrt{2 \pi}} e^{-\frac{z^{2}}{2}} \mathrm{~d} z

可以得到新的隨機變量z=\frac{x-\mu }{\sigma },符合標準正太分布状原。

所以對于一個服從高斯分布的隨機變量x\sim N(\mu ,\sigma ^2)聋呢,取z=\frac{x-\mu }{\sigma }即可將其轉(zhuǎn)化為標準正態(tài)分布z\sim N(0 ,1)

2. 參數(shù)重整化

若希望從高斯分布N(\mu ,\sigma ^2)中采樣颠区,可以先從標準分布 N(0,1)采樣出z削锰,再得到\sigma *z+\mu,這就是我們想要采樣的結(jié)果毕莱。這樣做的好處是將隨機性轉(zhuǎn)移到了z這個常量上器贩,而\sigma\mu則當作仿射變換網(wǎng)絡的一部分。

二朋截、DDPM模型

1. 模型總覽

DDPM(Denoising Diffusion Probalistic Models)是一種用于圖片生成的擴散模型蛹稍。如下圖所示,DDPM模型主要分為兩個過程:forward加噪過程(從右往左)和reverse去噪過程(從左往右)部服。

加噪過程:向數(shù)據(jù)集的真實圖片中逐步加入高斯噪聲唆姐,加噪過程滿足一定的數(shù)學規(guī)律,不進行模型學習廓八。

去噪過程:對加了噪聲的圖片逐步去噪奉芦,從而還原出真實圖片胆描,去噪過程則采用神經(jīng)網(wǎng)絡來學習。

2. 擴散過程(加噪)

2.1 定義

  • T :總步數(shù)

  • x_0,x_1,...,x_T:每一步產(chǎn)生的圖片仗阅,其中x_0是原始圖片昌讲,x_T是純高斯噪聲

  • \epsilon \sim N(0,I):為每一步添加的高斯噪聲

  • q(x_t | x_{t-1}):指通過向圖像x_{t-1}中添加高斯噪聲减噪,得到x_t

根據(jù)上面的流程圖短绸,有x_t=x_{t-1}+\epsilon=x_0+\epsilon_0+\epsilon_1+...+\epsilon,根據(jù)公式筹裕,為了得到x_t梦谜,需要sample好多次噪聲,可以使用重參數(shù)進行簡化脓斩。

2.2 重參數(shù)

在由x_{t-1}加噪至x_t的過程中香椎,噪聲的標準差/方差是以一個在區(qū)間(0,1內(nèi)的固定值\beta_{T}來確定的,均值是以固定值\beta_{T}和當前時刻的圖片數(shù)據(jù)x_{t-1}來確定的抗斤,加噪過程可以寫成公式:

\begin{array}{c} q\left(\mathbf{x}_{t} \mid \mathbf{x}_{t-1}\right)=\mathcal{N}\left(\mathbf{x}_{t} ; \sqrt{1-\beta_{t}} \mathbf{x}_{t-1}, \beta_{t} \mathbf{I}\right) \\ \\ q\left(\mathbf{x}_{1: T} \mid \mathbf{x}_{0}\right)=\prod_{t=1}^{T} q\left(\mathbf{x}_{t} \mid \mathbf{x}_{t-1}\right) \end{array}

上式意思是:由x_{t-1}得到x_t的過程q(x_t | x_{t-1})囚企,滿足分布\mathcal{N}\left(\mathbf{x}_{t} ; \sqrt{1-\beta_{t}} \mathbf{x}_{t-1}, \beta_{t} \mathbf{I}\right)。(這個分布是指以\sqrt{1-\beta_{t}} \mathbf{x}_{t-1}為均值瑞眼,\beta_{t} \mathbf{I}為方差的高斯分布)龙宏。因此我們看到這個噪聲只由\beta_{t}x_{t-1}來確定,是一個固定值而不是一個可學習過程伤疙。因此银酗,只要我們有了x_0,并且提前確定每一步的固定值\beta_{1},...,\beta_{T}徒像,我們就可以推出任意一步的加噪數(shù)據(jù)x_{1},...,x_{T}黍特。這里加噪過程是一個馬爾科夫鏈過程。

借助參數(shù)重整化\sigma *z+\mu可以寫成:

\mathbf{x}_{t}=\sqrt{1-\beta_{t}} \mathbf{x}_{t-1}+\sqrt{\beta_{t}} \epsilon

其中\epsilon \sim \mathcal{N}(\mathbf{0}, \mathbf{I})锯蛀,是從標準高斯分布中采樣的噪聲灭衷。

2.3 任意時刻數(shù)據(jù)x_t的計算

在逐步加噪的過程中,我們其實并不需要一步一步地從x_0,x_1,...去迭代得到x_t谬墙。事實上今布,我們可以直接從x_0和固定值\left\{\beta_{T} \in(0,1)\right\}_{t=1}^{T}序列直接計算得到。

  • \bar{\alpha}_{1},\bar{\alpha}_{2},...,\bar{\alpha}_{T}:一系列常數(shù)拭抬,類似于超參數(shù)部默,隨著T的增加越來越小

  • \beta_{1},\beta_{2},...,\beta_{T}:一系列常數(shù),是我們直接設定的超參數(shù)造虎,隨著T的增加越來越大

定義\alpha_{t}=1-\beta_{t}, \quad \bar{\alpha}_{t}=\prod_{i=1}^{T} \alpha_{i}傅蹂,根據(jù)上面的重參數(shù)得到的遞推公式,得到:

\begin{aligned} \mathbf{x}_{t}=\sqrt{\alpha}_{t} \mathbf{x}_{t-1}+\sqrt{1-\alpha}_{t} \epsilon \\ =\sqrt{\bar{\alpha}_{t}} \mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}} \epsilon \end{aligned}

現(xiàn)在,只需要sample一次噪聲份蝴,就可以直接從x_0得到x_t了犁功。

  1. 逆擴散過程

由于加噪過程只是按照設定好的超參數(shù)進行前向加噪,本身不經(jīng)過模型婚夫,但去噪過程是真正訓練并使用模型的過程浸卦。定義p_\theta (x_{t-1}|x_{t})表示去噪過程,其中\theta表示模型參數(shù)案糙。

如上圖所示限嫌,從第T個timestep開始,模型的輸入為x_t與當前timestept时捌。模型中蘊含一個噪聲預測器(UNet)怒医,它會根據(jù)當前的輸入預測出噪聲。然后奢讨,將當前圖片減去預測出來的噪聲稚叹,就可以得到去噪后的圖片。重復這個過程拿诸,直到還原出原始圖片x_0為止扒袖。可以看到佳镜,每一步的預測需要前一步的圖片信息和timestep僚稿,timestep的表達類似于位置編碼,需要告訴模型蟀伸,現(xiàn)在進行的是哪一步去噪。

  1. 訓練與推理步驟

DDPM的訓練流程如下圖左邊部分缅刽,推理流程如下圖右邊部分:

4.1 訓練流程

由加噪過程可知:

  • 在第t個時刻的輸入圖片可以表示為:\mathbf{x}_{t}=\sqrt{\bar{\alpha}_{t}} \mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}} \epsilon啊掏。

  • 噪聲真值表示為:在第t個時刻sample出來的噪聲\epsilon \sim \mathcal{N}(\mathbf{0}, \mathbf{I})

  • 預測出來的噪聲表示為:\epsilon_\theta (\sqrt{\bar{\alpha}_{t}} \mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}} \epsilon, t)衰猛,其中\theta為模型參數(shù)迟蜜,表示預測出的噪聲和模型相關(guān)。

  • loss:loss = \epsilon - \epsilon_\theta (\sqrt{\bar{\alpha}_{t}} \mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}} \epsilon, t)啡省,只需要最小化該loss即可娜睛。

由于不管對任何輸入數(shù)據(jù),不管對它的任何一步卦睹,模型在每一步做的都是去預測一個來自高斯分布的噪聲畦戒。因此,整個訓練過程可以設置為:

  • 從訓練數(shù)據(jù)中结序,抽樣出一條x_0(即x_0\sim q(x_0))

  • 隨機抽樣出一個timestep障斋。(即t \sim Uniform(1,...,T)

  • 隨機抽樣出一個噪聲。(即\epsilon \sim \mathcal{N}(\mathbf{0}, \mathbf{I})

  • 計算:loss = \epsilon - \epsilon_\theta (\sqrt{\bar{\alpha}_{t}} \mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}} \epsilon, t)

  • 計算梯度,更新模型垃环,重復上面過程邀层,直至收斂。

4.2 推理流程

推理流程需要串行執(zhí)行遂庄,我們從最后一個時刻(T)開始寥院,傳入一個純噪聲(或者是一張加了噪聲的圖片),逐步去噪涛目。根據(jù) \mathbf{x}_{t}=\sqrt{\bar{\alpha}_{t}} \mathbf{x}_{0}+\sqrt{1-\bar{\alpha}_{t}} \epsilon秸谢,我們可以進一步推出x_tx_{t-1}的關(guān)系(上圖的前半部分)。而圖中\sigma_t z一項泌绣,則不是直接推導而來的钮追,是我們?yōu)榱嗽黾油评碇械碾S機性,而額外增添的一項阿迈≡模可以類比于GPT中為了增加回答的多樣性,不是選擇概率最大的那個token苗沧,而是在topN中再引入方法進行隨機選擇刊棕。

三、SD模型

SD是一個基于latent的擴散模型 待逞,它在UNet中引入text condition來實現(xiàn)基于文本生成圖像甥角。基于latent的擴散模型的優(yōu)勢在于計算效率更高效识樱,因為圖像的latent空間要比圖像pixel空間要小嗤无,這也是SD的核心優(yōu)勢。

1. 結(jié)構(gòu)介紹

整體輸入輸出:

上圖中最左側(cè)的x\tilde{x}是模型的輸入輸出怜庸,比如 [W,H,C] 的三維張量当犯,代表圖片的寬、高和通道數(shù)割疾。這里的 x 是模型訓練的原始圖片輸入嚎卫,推理時使用的是最右側(cè)的 Images 模塊。

像素空間與隱空間:

  • 像素空間(Pixel Space)宏榕,上圖左側(cè)拓诸,紅框部分。通常是人眼可以識別的圖像內(nèi)容麻昼。

  • 隱空間(Latent Space)奠支,上圖中央,綠框部分涌献。通常是人眼無法識別的內(nèi)容胚宦,但包含的信息量與像素空間相近。

  • 像素 -> 隱空間:經(jīng)過Encoder,轉(zhuǎn)化為張量z枢劝,即稱為隱空間井联。

  • 隱空間 -> 像素空間:經(jīng)過Decoder,轉(zhuǎn)換回像素空間您旁。

Diffusion Process:

對隱向量添加噪聲烙常,按照DDPM模型的流程,采樣一組高斯分布噪聲鹤盒,通過公式推導蚕脏,得到 z_T 向量。

Denoising Process:

Conditioning:

對應圖中最右邊灰白色框侦锯,輸入類型包括text驼鞭、images等。在Conditioning模塊中尺碰,會執(zhí)行以下步驟:

  • 這些“附加信息”會通過對應的編碼器 挣棕,轉(zhuǎn)換成向量表示\tau_\theta

  • 轉(zhuǎn)換后的向量亲桥,會輸入給U-Net洛心,作為其中Attention模塊的K、V輸入题篷,輔助噪聲的預測词身。

2. 主要部分

2.1 VAE

作用就是將原始圖片轉(zhuǎn)換到隱空間,經(jīng)過處理再轉(zhuǎn)換回來番枚,使用的就是VAE的Encoder和Decoder法严。這個模塊是預訓練好的,固定住參數(shù)葫笼。

原理:

  1. 原始張量輸入渐夸,經(jīng)過非常簡單的網(wǎng)絡結(jié)構(gòu),轉(zhuǎn)換成較小的張量

  2. 在Latent張量上渔欢,加一點點噪聲擾動

  3. 用對稱的簡單網(wǎng)絡結(jié)構(gòu),還原回原始大小

  4. 對比輸入前后的張量是否相似

特點:

  1. 網(wǎng)絡計算復雜度比較低

  2. Encoder和Decoder可以分開使用

  3. 無監(jiān)督訓練瘟忱,不需要標注輸入的label

  4. 有了噪聲擾動之后奥额,Latent Space的距離具有實際物理含義,可以實現(xiàn)例如“(滿杯水+空杯子)/ 2 = 半杯水”的操作

2.2 CLIP

文本信息轉(zhuǎn)化為向量访诱,此模塊是預訓練好的垫挨,固定住參數(shù)。

訓練方式:

圖像以及它的描述文本触菜,經(jīng)過各自的Encoder轉(zhuǎn)換為向量表示九榔,希望轉(zhuǎn)換后的向量距離相近。經(jīng)過訓練后,文本描述可以映射到向量空間的一個點哲泊,其代表的物理含義與原始圖像相近剩蟀。

2.3 U-Net

作為核心組件,U-Net是模型訓練過程中切威,唯一需要參數(shù)更新的部分育特。在這個結(jié)構(gòu)中,輸入是帶有噪聲的隱向量z_t先朦、當前的時間戳t缰冤,文本等Conditioning的張量表示E,輸出是z_t中的噪聲預測喳魏。

UNet是一個語義分割模型棉浸,其主要執(zhí)行過程與其它語義分割模型類似,首先利用卷積進行下采樣刺彩,然后提取出一層又一層的特征迷郑,利用這一層又一層的特征,其再進行上采樣迂苛,最后得出一個每個像素點對應其種類的圖像三热。Unet中網(wǎng)絡層越深得到的特征圖,有著更大的視野域三幻,淺層卷積關(guān)注紋理特征就漾,深層網(wǎng)絡關(guān)注本質(zhì)的那種特征,所以深層淺層特征都是有格子的意義的念搬;另外一點是通過反卷積得到的更大的尺寸的特征圖的邊緣抑堡,是缺少信息的,畢竟每一次下采樣提煉特征的同時朗徊,也必然會損失一些邊緣特征首妖,而失去的特征并不能從上采樣中找回,因此通過特征的拼接爷恳,來實現(xiàn)邊緣特征的一個找回有缆。

模型結(jié)構(gòu):

U-Net大致上可以分為三塊:降采樣層、中間層温亲、上采樣層棚壁。

參考文獻

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市栈虚,隨后出現(xiàn)的幾起案子袖外,更是在濱河造成了極大的恐慌,老刑警劉巖魂务,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曼验,死亡現(xiàn)場離奇詭異泌射,居然都是意外死亡,警方通過查閱死者的電腦和手機鬓照,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門熔酷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颖杏,你說我怎么就攤上這事纯陨。” “怎么了留储?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵翼抠,是天一觀的道長。 經(jīng)常有香客問我获讳,道長阴颖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任丐膝,我火速辦了婚禮量愧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帅矗。我一直安慰自己偎肃,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布浑此。 她就那樣靜靜地躺著累颂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凛俱。 梳的紋絲不亂的頭發(fā)上紊馏,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音蒲犬,去河邊找鬼朱监。 笑死,一個胖子當著我的面吹牛原叮,可吹牛的內(nèi)容都是我干的赫编。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼奋隶,長吁一口氣:“原來是場噩夢啊……” “哼沛慢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起达布,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逾冬,沒想到半個月后黍聂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躺苦,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年产还,在試婚紗的時候發(fā)現(xiàn)自己被綠了匹厘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡脐区,死狀恐怖愈诚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牛隅,我是刑警寧澤炕柔,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站媒佣,受9級特大地震影響匕累,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜默伍,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一欢嘿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧也糊,春花似錦炼蹦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捕捂,卻和暖如春瑟枫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背指攒。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工慷妙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人允悦。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓膝擂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親隙弛。 傳聞我的和親對象是個殘疾皇子架馋,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348