Skip to main content

DreamFusion and Optimization-Based 3D

DreamFusion は、pretrained text-to-image diffusion model だけを使って、3D データなしで text-to-3D を実現した先駆的な研究です。Score Distillation Sampling (SDS) を 3D NeRF に適用することで、3D dataset への依存を取り除きました。

全体構成

  • NeRF をランダム視点から render する
  • Render 画像に noise を加える
  • Diffusion model で score を計算する
  • SDS gradient で NeRF parameter を更新する

これを多数 view で繰り返すことで、prompt に合った 3D NeRF が形成されます。

なぜ 3D データを必要としないのか

DreamFusion 以前の 3D generation は、ShapeNet のような 3D dataset で学習する必要がありました。DreamFusion は「2D diffusion が知っている世界の事前知識」を、SDS を通して 3D に蒸留することで、3D dataset への依存を切りました。

これは「foundation 2D model から foundation 3D へ」という流れを生み、その後の text-to-3D 爆発のきっかけになりました。

発展

Model主な改良
Magic3DCoarse NeRF → fine mesh の 2-stage 最適化
ProlificDreamerVariational Score Distillation で品質と多様性を改善
Fantasia3DGeometry と appearance の disentanglement
Latent-NeRFLatent diffusion 空間での SDS
Gaussian Dreamer / DreamGaussian3D 表現を 3DGS に置き換えて高速化

弱点

  • Per-asset で最適化が必要なため遅い
  • Janus problem (多方向に顔ができる)
  • 細部の geometry が崩れがち
  • 物理的整合性の保証はない
  • 評価指標が定まりにくい

これらの問題が、後述の feed-forwardLarge Reconstruction ModelsMulti-View Diffusion を生む動機になりました。

数式で見る Score Distillation Sampling

DreamFusion 系では、3D representation の parameter を θ\theta とし、camera view vv から render した画像を x=gθ(v)x=g_\theta(v) とします。Text-to-image diffusion model の noise prediction を ϵϕ(xt,t,y)\epsilon_\phi(x_t,t,y) とすると、SDS の勾配は概念的に次のように書けます。

θLSDS=Et,ϵ,v[w(t)(ϵϕ(xt,t,y)ϵ)xθ]\nabla_\theta \mathcal{L}_{\mathrm{SDS}} =\mathbb{E}_{t,\epsilon,v}\left[ w(t)\left(\epsilon_\phi(x_t,t,y)-\epsilon\right) \frac{\partial x}{\partial \theta} \right]

ここで、xtx_t は render 画像 xx に noise を加えたもの、yy は text prompt、w(t)w(t) は timestep ごとの重みです。この式の気持ちは、「diffusion model がこの画像を prompt らしくするにはどちらへ denoise したいかを読み取り、その方向へ 3D 表現を動かす」というものです。

SDS は text-to-image prior を 3D optimization に持ち込める強力な方法ですが、view ごとの整合性を diffusion model が直接保証するわけではありません。そのため、Janus 問題、過飽和、過度に smooth な geometry などが起こりやすくなります。

関連ページ

主なソース