見出し画像

Score Distillation Sampling (DREAMFUSION)についてまとめたよ

こんにちは、Text To 3D モデル DREAMFUSION (2022)で提案された Score Distillation Sampling (SDS) が気になっていたのでまとめました。
これを書いた後に、近年(2024年)の技術についても書くつもりです。
今後のリファレンスが欲しいので、まず過去のことからまとめていきます。

DreamFusion とは

DreamFusionは、テキストから3Dモデルを生成する手法で技術です。
DreamFusionの大きな特徴は、画像生成モデルを活用して3Dモデルの生成が行える点にあります。
2024年の現在ではより性能が良いモデルが提案されてますが、当時は画像生成モデルだけで3Dデータが生成できることに驚きました。

生成方法としては、3D再現はNeRFを使用しています。NeRFで任意の角度からレンダリングした画像にノイズを加え、そのデータと生成時のプロンプトを画像拡散モデル(Imagen)に渡します。Imagenでノイズを除去した画像とNeRFのレンダリング画像の差分を損失としてNeRFのパラメータを更新します。つまり、NeRFのレンダリング結果がプロンプトに対するImagenの生成結果と近くなるほど損失が小さくなり、これによりNeRFが最適化されます。

Poole, Ben, et al. "Dreamfusion: Text-to-3d using 2d diffusion." arXiv preprint arXiv:2209.14988 (2022).

Score Distillation Sampling (SDS) 

SDSの詳細について説明していきます。

NeRFモデルとそのパラメータを$${g}$$と$${\theta}$$とし、
任意の角度からレンダリングした結果を $${x}$$ を $${x=g(\theta)}$$ とします。
ガイダンスパラメータ付きの拡散モデルを  $${\hat{\epsilon}_{\phi}}$$ とします。(後で詳しく説明します)
ここで目指しているのは、レンダリング結果にノイズを加えてプロンプトと一緒に拡散モデルに入力し、その推定ノイズが加えたノイズの差が小さくなることです。

$${w(t)}$$を拡散モデルの正規化パラメータとして、
ノイズ注入画像を$${z_{t}=\alpha_{t} x + \sigma \epsilon=\alpha_{t} g(\theta) + \sigma \epsilon}$$
とすると、
$${\hat{\epsilon}_{\phi}(z_{t}; y, t)-\epsilon}$$
が推定ノイズと元のレンダリング結果に入れられたノイズの差分なので、
最小化したいのは   $${E_{t,\epsilon}\lbrack w(t) (\hat{\epsilon}_{\phi}(z_{t}; y, t)-\epsilon)\rbrack}$$   となります。
($${t}$$, $${y}$$はそれぞれタイムステップパラメータとテキストプロンプト)
これを $${\theta}$$で微分してあげると、このようなロス関数が得られます。

$$
\displaystyle\nabla_{\theta}L_{Diff}(\phi, x=g(\theta))=E_{t,\epsilon}\bigg\lbrack w(t) (\hat{\epsilon}_{\phi}(z_{t}; y, t)-\epsilon) \frac{\partial\hat{\epsilon}_{\phi}(z_{t};y,t)}{z_{t}} \frac{\partial x}{\partial \theta} \bigg\rbrack
$$

ただし、U-Netヤコビアンの部分  $${\displaystyle\frac{\partial\hat{\epsilon}{\phi}(z{t};y,t)}{z_{t}}}$$  は計算コストが高く、ノイズレベルが低いと不安定になので省略してしまいます。

$$
\displaystyle\nabla_{\theta}L_{Diff}(\phi, x=g(\theta))=E_{t,\epsilon}\bigg\lbrack w(t) (\hat{\epsilon}_{\phi}(z_{t}; y, t)-\epsilon) \frac{\partial x}{\partial \theta} \bigg\rbrack
$$

この式こそ SDS で最適化する損失関数になります。$${x=g(\theta)}$$ であることを思い出すと、

$$
\nabla_{\theta}L_{Diff}(\phi, x=g(\theta))=E_{t,\epsilon}\bigg\lbrack w(t) (\hat{\epsilon}_{\phi}(z_{t}; y, t)-\epsilon) \frac{\partial g}{\partial \theta} \bigg\rbrack
$$

なので、gの勾配にノイズの差分を掛けたものになっています。
さらにこの式を変形してくとこのように書くこともできます。

$$
\displaystyle\nabla_{\theta} \mathcal{L}_{\text{SDS}}(\phi, x = g(\theta)) = \nabla_{\theta} \mathbb{E}_{t} \left[ \frac{\sigma_{t}}{\alpha_{t}} w(t) \, \text{KL}\left(q(z_{t} \mid g(\theta); y, t) \parallel p_{\phi}(z_{t}; y, t)\right) \right]
$$

真の分布と拡散モデルの確率分布のKLダイバージェンスになっていますね。

補足

Classifier-Free Guidance / ガイダンスパラメータ

SDSの説明でガイダンスパラメータ付きの拡散モデル $${\hat{\epsilon}_{\phi}}$$ としていましたが、これについて説明します。

Classifier-Free Guidance(CFG) は、テキストプロンプトに基づく条件付きと条件なしのタスクを同じ拡散モデルで学習する方法です。
CFGでは、ガイダンススケールパラメータ $${\omega}$$ を用いて、条件付き拡散モデルと無条件付き拡散モデルの出力を混合します。
具体的にはこのように混合しています。

$$
\hat{\epsilon}_{\phi}:= (1 + {\omega}){\epsilon}_{\phi}(z_{t}; y, t) − {\omega}{\epsilon}_{\phi}(z_{t};t)\\\ =  {\epsilon}_{\phi}(z_{t}; y, t) + {\omega} ({\epsilon}_{\phi}(z_{t}; y, t) - {\epsilon}_{\phi}(z_{t};t))
$$

($${t}$$はタイムステップ,$${y}$$はプロンプトです。)

式を見ると条件付きの出力に、条件付きと条件なしの出力の差分 ($${{\epsilon}_{\phi}(z_{t}; y, t) - {\epsilon}_{\phi}(z_{t};t)}$$ )を 重み $${\omega}$$ だけ足し合わせています。

条件付きから条件なしの推定量を引くことで、プロンプトに忠実な方向にノイズを推定できます。これを足すことで生成モデルからよりプロンプトに従った生成結果を得ることができます。
$${\omega}$$ が大きいほど、生成される画像はプロンプトに近づきますが、多様性が減少します。逆に、パラメータが小さいほど、画像はテキストプロンプトから離れ、より多様な結果が得られます。

Ho, Jonathan, and Tim Salimans. "Classifier-free diffusion guidance." arXiv preprint arXiv:2207.12598 (2022).
左:ガイダンスなし, 右: ガイダンスあり
山という条件のガイダンスを入れた右の方がより山を再現しているのがわかる

画像生成では、通常5~30の範囲のガイダンスパラメータが使われますが、DreamFusionでは100と非常に大きな値が使用されています。これは、大きなパラメータにより、異なる角度からの見た目の一貫性を保つことができるからです。

要約すると、ガイダンススケールパラメータは、生成される画像のプロンプトへの忠実度と多様性を調整するためのパラメータです。DreamFusionでは、高品質な3Dモデルを生成するために、大きなガイダンススケールパラメータが使用されています。

まとめ

今回は DreamFusion の Score Distillation Sampling についてまとめました。
Score Distillation Sampling ではガイダンスパラメータを大きくしているのでプロンプトに対する多様性は少なく、この部分が今後の課題になってきそうです。
実は、このガイダンスパラメータをどう扱うのかが今後の研究に関わってきます。今後、その部分についても書いていきたいなと思います。


この記事が気に入ったらサポートをしてみませんか?