back to index
【生成式AI】淺談圖像生成模型 Diffusion Model 原理

link |
今天這堂課是要跟大家簡略的介紹Diffusion Model的基本概念
link |
其實Diffusion Model有很多不同的變形
link |
以下的說明主要來自最知名的Denoising Diffusion Probabilistic Model
link |
今天比較成功的那些用Diffusion Model做的影像生成系統
link |
比如說DALY、Google Imaging、Stable Diffusion
link |
基本上都是用差不多的方法來作為他們的Diffusion Model
link |
這個Diffusion Model是怎麼運作的呢?
link |
在生成圖片的第一步是你要去Sample一個都是雜訊的圖片
link |
就是你Sample出一個從Gaussian Distribution裡面
link |
這個Vector的Dimension跟你要生成的圖片大小是一模一樣的
link |
假設你今天要生一張256x256的圖片
link |
從Normal Distribution Sample出來的那個Vector
link |
它的Dimension就要是256x256那麼多
link |
那就把你Sample到的256x256的Vector排成一張圖片的樣子
link |
然後接下來你就有一個Denoise的Module
link |
那等一下會講說這個Denoise的Network內部長什麼樣子
link |
這個Denoise的Network從它的名字裡面就可以知道說
link |
那這個Denoise的次數是事先訂好的
link |
那我們通常會給每一個Denoise的步驟給它一個編號
link |
所以我們這邊就從1999一直排到2排到1
link |
它叫做Reverse的Process
link |
Diffusion Model做的事情就是一樣的
link |
我本來是想用Meat Journey把這句話的意境呈現出來啦
link |
我直接把這句話丟到Meat Journey裡面
link |
就ChangeBT有一個專門把Pump改成Meat Journey
link |
Meat Journey還是沒有很懂這個意境
link |
它沒有辦法畫一個大胃相在石頭裡面的感覺
link |
你如果看那個Meat Journey的Discord
link |
沒有辦法把我心中想要表達的意境畫出來
link |
就要講這個Denoise的Model了
link |
你可能會想說這個Denoise的Model
link |
是不是同一個Denoise的Model
link |
是 我們這邊是把同一個Denoise的Model
link |
在這個狀況你輸入的東西就是一個純雜訊
link |
它除了吃要被Denoise的那張圖片以外
link |
這個輸入代表現在Noise嚴重的程度
link |
然後1000代表剛開始Denoise的時候
link |
然後1代表說現在Denoise的步驟快結束了
link |
那這個Denoise的Model希望它可以根據我們現在輸入
link |
所以我們確實只有用一個Denoise的Model
link |
但是這個Denoise的Model會吃一個額外的數字
link |
告訴它說現在是在Denoise的哪一個Step
link |
它實際上有一個Noise Predictor
link |
這個Noise Predictor做的事情
link |
就是去預測說在這張圖片裡面的雜訊長什麼樣子
link |
這個Noise Predictor就吃這個要被Denoise的圖片
link |
也就是我們現在進行到Denoise的第幾個步驟的代號
link |
為什麼不直接認一個End-to-End的Model
link |
還是選擇認一個Noise的Predictor
link |
如果你今天你的Denoise的Model
link |
所以直接認一個Noise Predictor
link |
認一個End-to-End的Model
link |
怎麼訓練這個Noise Predictor呢
link |
現在在Denoise的Step的數目
link |
是一個Noise的Predictor
link |
你需要告訴Noise Predictor
link |
好 這個Noise Predictor
link |
你就Random從Gaussian Distribution裡面
link |
又叫做Diffusion Process
link |
做完這個Diffusion Process以後
link |
你就有Noise Predictor的訓練資料了
link |
對Noise Predictor來說
link |
就是Network應該要Predict的輸出
link |
所以你在做完這個Diffusion Process以後
link |
你就告訴Noise Predictor說
link |
你的光束就是一個長這個樣子的Noise
link |
接下來就跟訓練一般的Network一樣
link |
不是像CatCat in the snow
link |
ImageNet你可能以為已經很大了
link |
Noise Predictor要怎麼改呢
link |
你就要讓Noise Predictor
link |
做完Diffusion的Process以後
link |
不只要給你的Noise Predictor