一、數(shù)學基礎
1. 正態(tài)分布標準化
對于一個服從高斯分布的隨機變量臣镣,計算其均值和標準差≈橇粒“標準正態(tài)分布”忆某,就是取、正態(tài)分布給出的阔蛉,其概率密度函數(shù)為:
對于任意一個正太分布的概率密度函數(shù)積分:
令弃舒,上邊公式就變成了:
可以得到新的隨機變量,符合標準正太分布状原。
所以對于一個服從高斯分布的隨機變量聋呢,取即可將其轉(zhuǎn)化為標準正態(tài)分布。
2. 參數(shù)重整化
若希望從高斯分布中采樣颠区,可以先從標準分布 采樣出削锰,再得到,這就是我們想要采樣的結(jié)果毕莱。這樣做的好處是將隨機性轉(zhuǎn)移到了這個常量上器贩,而和則當作仿射變換網(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ù)
:每一步產(chǎn)生的圖片仗阅,其中是原始圖片昌讲,是純高斯噪聲
:為每一步添加的高斯噪聲
:指通過向圖像中添加高斯噪聲减噪,得到
根據(jù)上面的流程圖短绸,有,根據(jù)公式筹裕,為了得到梦谜,需要sample好多次噪聲,可以使用重參數(shù)進行簡化脓斩。
2.2 重參數(shù)
在由加噪至的過程中香椎,噪聲的標準差/方差是以一個在區(qū)間內(nèi)的固定值來確定的,均值是以固定值和當前時刻的圖片數(shù)據(jù)來確定的抗斤,加噪過程可以寫成公式:
上式意思是:由得到的過程囚企,滿足分布。(這個分布是指以為均值瑞眼,為方差的高斯分布)龙宏。因此我們看到這個噪聲只由和來確定,是一個固定值而不是一個可學習過程伤疙。因此银酗,只要我們有了,并且提前確定每一步的固定值徒像,我們就可以推出任意一步的加噪數(shù)據(jù)黍特。這里加噪過程是一個馬爾科夫鏈過程。
借助參數(shù)重整化可以寫成:
其中锯蛀,是從標準高斯分布中采樣的噪聲灭衷。
2.3 任意時刻數(shù)據(jù)的計算
在逐步加噪的過程中,我們其實并不需要一步一步地從去迭代得到谬墙。事實上今布,我們可以直接從和固定值序列直接計算得到。
:一系列常數(shù)拭抬,類似于超參數(shù)部默,隨著T的增加越來越小
:一系列常數(shù),是我們直接設定的超參數(shù)造虎,隨著T的增加越來越大
定義傅蹂,根據(jù)上面的重參數(shù)得到的遞推公式,得到:
現(xiàn)在,只需要sample一次噪聲份蝴,就可以直接從得到了犁功。
-
逆擴散過程
由于加噪過程只是按照設定好的超參數(shù)進行前向加噪,本身不經(jīng)過模型婚夫,但去噪過程是真正訓練并使用模型的過程浸卦。定義表示去噪過程,其中表示模型參數(shù)案糙。
如上圖所示限嫌,從第T個timestep開始,模型的輸入為與當前timestep时捌。模型中蘊含一個噪聲預測器(UNet)怒医,它會根據(jù)當前的輸入預測出噪聲。然后奢讨,將當前圖片減去預測出來的噪聲稚叹,就可以得到去噪后的圖片。重復這個過程拿诸,直到還原出原始圖片為止扒袖。可以看到佳镜,每一步的預測需要前一步的圖片信息和timestep僚稿,timestep的表達類似于位置編碼,需要告訴模型蟀伸,現(xiàn)在進行的是哪一步去噪。
-
訓練與推理步驟
DDPM的訓練流程如下圖左邊部分缅刽,推理流程如下圖右邊部分:
4.1 訓練流程
由加噪過程可知:
在第t個時刻的輸入圖片可以表示為:啊掏。
噪聲真值表示為:在第t個時刻sample出來的噪聲。
預測出來的噪聲表示為:衰猛,其中為模型參數(shù)迟蜜,表示預測出的噪聲和模型相關(guān)。
loss:啡省,只需要最小化該loss即可娜睛。
由于不管對任何輸入數(shù)據(jù),不管對它的任何一步卦睹,模型在每一步做的都是去預測一個來自高斯分布的噪聲畦戒。因此,整個訓練過程可以設置為:
從訓練數(shù)據(jù)中结序,抽樣出一條
隨機抽樣出一個timestep障斋。(即)
隨機抽樣出一個噪聲。(即)
計算:
計算梯度,更新模型垃环,重復上面過程邀层,直至收斂。
4.2 推理流程
推理流程需要串行執(zhí)行遂庄,我們從最后一個時刻(T)開始寥院,傳入一個純噪聲(或者是一張加了噪聲的圖片),逐步去噪涛目。根據(jù) 秸谢,我們可以進一步推出和的關(guān)系(上圖的前半部分)。而圖中一項泌绣,則不是直接推導而來的钮追,是我們?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è)的和 是模型的輸入輸出怜庸,比如 的三維張量当犯,代表圖片的寬、高和通道數(shù)割疾。這里的 是模型訓練的原始圖片輸入嚎卫,推理時使用的是最右側(cè)的 Images 模塊。
像素空間與隱空間:
像素空間(Pixel Space)宏榕,上圖左側(cè)拓诸,紅框部分。通常是人眼可以識別的圖像內(nèi)容麻昼。
隱空間(Latent Space)奠支,上圖中央,綠框部分涌献。通常是人眼無法識別的內(nèi)容胚宦,但包含的信息量與像素空間相近。
像素 -> 隱空間:經(jīng)過Encoder,轉(zhuǎn)化為張量枢劝,即稱為隱空間井联。
隱空間 -> 像素空間:經(jīng)過Decoder,轉(zhuǎn)換回像素空間您旁。
Diffusion Process:
對隱向量添加噪聲烙常,按照DDPM模型的流程,采樣一組高斯分布噪聲鹤盒,通過公式推導蚕脏,得到 向量。
Denoising Process:
Conditioning:
對應圖中最右邊灰白色框侦锯,輸入類型包括text驼鞭、images等。在Conditioning模塊中尺碰,會執(zhí)行以下步驟:
這些“附加信息”會通過對應的編碼器 挣棕,轉(zhuǎn)換成向量表示。
轉(zhuǎn)換后的向量亲桥,會輸入給U-Net洛心,作為其中Attention模塊的K、V輸入题篷,輔助噪聲的預測词身。
2. 主要部分
2.1 VAE
作用就是將原始圖片轉(zhuǎn)換到隱空間,經(jīng)過處理再轉(zhuǎn)換回來番枚,使用的就是VAE的Encoder和Decoder法严。這個模塊是預訓練好的,固定住參數(shù)葫笼。
原理:
原始張量輸入渐夸,經(jīng)過非常簡單的網(wǎng)絡結(jié)構(gòu),轉(zhuǎn)換成較小的張量
在Latent張量上渔欢,加一點點噪聲擾動
用對稱的簡單網(wǎng)絡結(jié)構(gòu),還原回原始大小
對比輸入前后的張量是否相似
特點:
網(wǎng)絡計算復雜度比較低
Encoder和Decoder可以分開使用
無監(jiān)督訓練瘟忱,不需要標注輸入的label
有了噪聲擾動之后奥额,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)中,輸入是帶有噪聲的隱向量先朦、當前的時間戳缰冤,文本等Conditioning的張量表示,輸出是中的噪聲預測喳魏。
UNet是一個語義分割模型棉浸,其主要執(zhí)行過程與其它語義分割模型類似,首先利用卷積進行下采樣刺彩,然后提取出一層又一層的特征迷郑,利用這一層又一層的特征,其再進行上采樣迂苛,最后得出一個每個像素點對應其種類的圖像三热。Unet中網(wǎng)絡層越深得到的特征圖,有著更大的視野域三幻,淺層卷積關(guān)注紋理特征就漾,深層網(wǎng)絡關(guān)注本質(zhì)的那種特征,所以深層淺層特征都是有格子的意義的念搬;另外一點是通過反卷積得到的更大的尺寸的特征圖的邊緣抑堡,是缺少信息的,畢竟每一次下采樣提煉特征的同時朗徊,也必然會損失一些邊緣特征首妖,而失去的特征并不能從上采樣中找回,因此通過特征的拼接爷恳,來實現(xiàn)邊緣特征的一個找回有缆。
模型結(jié)構(gòu):
U-Net大致上可以分為三塊:降采樣層、中間層温亲、上采樣層棚壁。