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-forward な Large Reconstruction Models や Multi-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 などが起こりやすくなります。

関連ページ​

主なソース​