3D生成:DreamFusion Part 1: Diffusion Model

圖學玩家
7 min readJul 11, 2023

--

<圖學玩家 第023篇 原創文>

Demo of DreamFusion

Introduction

Diffusion Model已經被證實在Text-to-Image的生成上有顯著的效果,諸如OpenAI的DALL.E 2等。然而Text-to-3D由於3D Model的Dataset不足,導致直接訓練Text-to-3D的Diffusion Model相當困難。

DreamFusion跳脫這種訓練框架,利用Text-to-Image與NeRF這種Inverse Graphics的技術,來達到Text-to-3D的生成。

Diffusion Model Algorithm

Training

Diffusion Model在Training Noise Predictor時,會從目標分布中Sample一張圖片,接著在這張照片上疊加Noise。這裡可以注意到,Diffusion Model會假設一漸小的數列 (ᾱ1,ᾱ2…ᾱT),隨機疊加上對應的Noise

Referenced from YT

可以看到隨著ᾱT越大,雜訊加的就越兇狠。而整個Noise Predictor Network在做的事情,就是吃一張Noisy Image跟步驟3取樣的t作為Input,去預測步驟4取樣的雜訊。

Inference

而產生圖的過程如下圖所示。步驟4簡言之就是將一雜訊xt漸漸的Denoise回清楚的圖。這裡暗藏玄機的部分在於,每個t循環都會在最後加上一雜訊z(關於這部分,李宏毅教授在教學中有給出他的猜測)

Referenced from YT

影像生成模型的本質

不論是Diffusion Model,GAN或是VAE這類影像生成模型,他們的本質都是去Minimize影像生成模型產生的P分布蒐集到的Image Dataset產生的 Pdata(x)分布之間的某種Divergence (本質上也就是去尋找Pθ(x)與Pdata(x)之間的Maximum Likelihood)。

式子的推導如下:

雖然我們無法得知Pθ(x),但我們可用生成模型Output出Gaussian Distribution的方式去近似,我們先以VAE為例

Maximize LogPθ(x)的過程,經一番推導,可以改用Maximize ELBO (Evidence Lower BOund)去表示:

Diffusion Model

如下所示,Diffusion Model是一個馬可夫鍊,q(xt | xt-1)可以視為Encoder,p(xt | xt+1)則可以視為Decoder。

接著我們同樣去試著Maximize log p(x),可以得到ELBO如下:

ELBO的部分就可如下展開:

把推導的最後一項放大來看:

紅框內在做的事,就是去試著讓 q(xt-1 | xt, x0)和P(x-1 | xt)越接近越好,也就是下圖的粉紅色與綠色箭頭的部分:

而我們可以利用馬可夫性質與貝式定理,將q(xt-1 | xt, x0)表示為

由於我們知道整個Encoding的過程,其實就是在加Gaussian雜訊,因此可以得到下面關係式:

更改一下符號可以表示為

t-1這個時間點的圖片同上邏輯可以得到

透過遞歸的表示,我們可以得出q(xt | x0)

而這也就是我們在Diffusion Model Algorithm中看到的Noisy Image。接著我們繼續試著找出q(xt-1 | xt, x0) (中間過程省略,讀者可以自行參考論文)

這裡我們引入新符號來表示Variance的部分

如上,由於我們可以控制q(xt-1 | xt, x0)和P(x-1 | xt)的Variance (Hyper Parameter),故整個Minimize KL Divergence的過程其實就是在縮小
q(xt-1 | xt, x0)和p(x-1 | xt)之間的Mean:

詳細推導如下:

其中q(xt-1 | xt, x0)的Mean可以表示為

透過先前的定義,將上式右邊的x0取代

我們可以得到Mean為

上式有換過符號,βt為1- αt

而這個過程,實際上就是下圖Inference中紅框內的部分。其中ε即為我們的Noise Predictor Network。

詳細推導如下:

--

--