Score Distillation SamplingSDS1. 使用背景这两年Text-to-3D很火但一个很现实的问题是高质量的2D图文数据很多高质量的3D图文数据很少。于是就有一个很自然的想法既然2D扩散模型已经学到了很强的图像先验能不能不重新训练一个3D扩散模型而是直接拿现成的2D扩散模型去指导3D表示的优化。DreamFusion里提出的Score Distillation SamplingSDS就是在这个背景下出现的。它的核心作用可以概括成一句话利用预训练的2D扩散模型给一个可微参数化器提供梯度监督从而直接优化出满足文本条件的3D结果。这里的“可微参数化器”可以是NeRF也可以是mesh、3D Gaussian Splatting甚至更一般的可微图像生成器。只要它能渲染出图像并且渲染过程对参数可导SDS理论上就能接进去。2. 理论基础1扩散模型里最核心的东西是什么在扩散模型里最常见的写法是对干净图像xxx加噪得到某个时刻ttt的带噪样本xtx_txtxtαtxσtϵ,ϵ∼N(0,I) x_t\alpha_t x\sigma_t \epsilon,\qquad \epsilon\sim\mathcal{N}(0,I)xtαtxσtϵ,ϵ∼N(0,I)然后训练一个网络ϵ^ϕ(xt,y,t)\hat\epsilon_\phi(x_t,y,t)ϵ^ϕ(xt,y,t)去预测噪声其中yyy表示条件比如文本提示词。经典训练目标通常写成LdiffEx,ϵ,t[∥ϵ^ϕ(xt,y,t)−ϵ∥22] \mathcal{L}_{\text{diff}}\mathbb{E}_{x,\epsilon,t}\left[\|\hat\epsilon_\phi(x_t,y,t)-\epsilon\|_2^2\right]LdiffEx,ϵ,t[∥ϵ^ϕ(xt,y,t)−ϵ∥22]这个式子大家都很熟了。网络看到带噪图像xtx_txt再结合条件yyy和时间步ttt输出预测噪声ϵ^ϕ\hat\epsilon_\phiϵ^ϕ然后和真实噪声ϵ\epsilonϵ做均方误差。所以从一个比较直观的角度看扩散模型里最重要的信息其实就是对于当前这张带噪图像模型觉得“应该往哪个去噪方向走”。2score是什么在生成模型里score一般指对数密度关于输入的梯度∇xlogp(x) \nabla_x \log p(x)∇xlogp(x)它描述的是如果当前位置xxx想往高概率区域走应该朝哪个方向动。对于扩散模型来说噪声预测ϵ^ϕ\hat\epsilon_\phiϵ^ϕ和score之间是紧密相关的所以预训练扩散模型其实已经学到了一个非常强的“图像分布方向感”。SDS本质上就是想把这个“方向感”拿出来用在别的可微参数化器优化上。3. DreamFusion的基本设定1把3D问题改写成“渲染图像再监督”假设我们有一个参数化的3D表示记作θ\thetaθ。比如它可以是一组NeRF参数。给定相机参数ccc通过可微渲染器可以得到一张图像xg(θ,c) xg(\theta,c)xg(θ,c)这里xxx不是数据集中现成的真实图像而是当前3D表示从某个视角渲染出来的结果。如果我们希望这个3D结果符合文本提示词yyy最自然的想法就是让渲染图像xxx在预训练的2D扩散模型看来越来越像“符合文本yyy的真实图像”。2关键问题问题在于我们现在手里没有真实目标图像只有一个文本提示词。也就是说这不是普通监督学习。我们不能写一个“渲染图像和目标图像做L2”的损失因为根本没有目标图像。这时候2D扩散模型就派上用场了。它本身已经从大规模图文数据中学到了“什么样的图像更符合这个文本”于是我们可以直接利用它提供的梯度来优化θ\thetaθ。4. SDS是怎么来的1先把渲染图像加噪对当前渲染图像xg(θ,c)xg(\theta,c)xg(θ,c)在随机时间步ttt加入噪声xtαtxσtϵ x_t\alpha_t x\sigma_t \epsilonxtαtxσtϵ然后把xtx_txt、文本条件yyy和ttt输入到冻结的2D扩散模型里得到噪声预测ϵ^ϕ(xt,y,t) \hat\epsilon_\phi(x_t,y,t)ϵ^ϕ(xt,y,t)如果当前渲染图像已经很符合文本那么模型预测的噪声应该和真实噪声更一致反过来如果当前渲染图像不太对预测噪声和真实噪声之间就会有更明显的偏差。2SDS最常见的梯度形式DreamFusion里最常见、后来也几乎成了默认写法的SDS梯度近似是∇θLSDS≈Et,ϵ,c[w(t)(ϵ^ϕ(xt,y,t)−ϵ)∂x∂θ] \nabla_\theta \mathcal{L}_{\text{SDS}} \approx \mathbb{E}_{t,\epsilon,c}\left[ w(t)\big(\hat\epsilon_\phi(x_t,y,t)-\epsilon\big)\frac{\partial x}{\partial \theta} \right]∇θLSDS≈Et,ϵ,c[w(t)(ϵ^ϕ(xt,y,t)−ϵ)∂θ∂x]其中xg(θ,c),xtαtxσtϵ xg(\theta,c),\qquad x_t\alpha_t x\sigma_t\epsilonxg(θ,c),xtαtxσtϵ这个式子很重要基本把SDS的核心都写出来了。它的意思是先把当前渲染图像xxx加噪成xtx_txt用扩散模型预测噪声ϵ^ϕ\hat\epsilon_\phiϵ^ϕ比较ϵ^ϕ\hat\epsilon_\phiϵ^ϕ和真实噪声ϵ\epsilonϵ的差把这个差作为图像空间里的指导信号再通过渲染器反传到3D参数θ\thetaθ。所以SDS并不是“直接生成3D”而是通过2D扩散模型给渲染图像打一个梯度然后把这个梯度链式传回3D表示。3为什么叫Score Distillation Sampling“Score Distillation”里的distillation指的是把2D扩散模型学到的图像先验蒸馏到另一个参数化对象上。“Sampling”这个词有点容易让人误解。它不是说像普通扩散模型那样在像素空间里逐步采样而更像是一种基于score guidance的优化过程。所以从直观上说SDS其实更像拿一个冻结的2D扩散模型当老师不断推动当前渲染结果往文本条件下的高概率图像区域靠近。5. 这个梯度到底该怎么理解1最直观的理解对于当前渲染结果xxx如果它从某个视角看起来不像“文本里描述的东西”那么扩散模型给出的噪声预测就会和真实噪声产生系统性偏差。这个偏差经过权重w(t)w(t)w(t)和链式法则传回去就会推动θ\thetaθ更新让下一次渲染更像文本条件对应的图像。所以SDS梯度可以粗略理解成“扩散模型觉得你这张图不对那就沿着它认为更对的方向改。”2为什么它特别适合3D优化因为SDS根本不要求你有3D配对数据。你只需要一个可微的3D表示一个可微渲染器一个冻结的2D扩散模型一个文本提示词。然后不断“渲染—加噪—扩散监督—反传”就行了。这也是DreamFusion当时最有冲击力的一点不用3D训练数据也能直接做文本到3D优化。6. 为什么SDS看起来像loss实际更像gradient trick1很多时候大家直接写SDS loss在不少代码或者博客里SDS经常被写成某种“loss”。但严格来说SDS更核心的是一个梯度估计而不是一个完全标准、严格可积的显式标量损失函数。实践里大家往往更关心的是如何构造一个稳定、有效的梯度把2D扩散模型的先验传给待优化参数。2为什么它能绕开“训练一个3D扩散模型”因为SDS并没有真的去学一个3D分布模型。它做的事情更接近在3D参数空间里做优化但优化方向来自2D扩散模型的先验。所以SDS的价值不在于“建立了一个完整的3D生成概率模型”而在于它提供了一种非常强的零样本2D到3D蒸馏机制。7. 和Score Jacobian ChainingSJC的关系1为什么会有人把SDS和SJC放在一起讲因为这两条线都在做同一件大事把预训练的2D扩散模型“抬升”到3D生成上。只不过它们的数学出发点不完全一样。2SJC在干什么Score Jacobian Chaining的核心说法更直接2D扩散模型已经给出了图像空间的score那就把这个score通过渲染器的Jacobian链式传回3D表示。从表面上看这和SDS很像因为最后也都是“2D监督 渲染反传 3D优化”。但二者的推导路径和一些具体估计方式并不相同。通常实际工作里SDS这一支影响更广也更成了后续Text-to-3D方法的基础。8. 为什么SDS有效12D扩散模型太强了SDS能成功一个根本原因是现在的2D扩散模型本身就很强。它们在大规模图文数据上训练过已经有非常丰富的语义、外观、材质、光照、构图先验。所以哪怕你没有3D数据只要你能把3D表示渲染成图像扩散模型就能对这些图像提供很强的监督。2可微渲染把2D和3D接上了另一个关键点是可微渲染。没有可微渲染扩散模型只能评价渲染图像好不好却没法把“哪里不好”传回3D参数。一旦渲染器可导2D图像空间里的梯度就能通过∂x∂θ \frac{\partial x}{\partial \theta}∂θ∂x传回3D表示。于是2D图像先验和3D参数优化就真正连起来了。9. SDS的问题出在哪1过饱和、过平滑后续很多工作都指出SDS虽然有效但很容易出现over-saturation和over-smoothing。也就是说颜色容易过艳细节又容易糊结果常常看起来“像是被强力往某个语义方向推过去了”但局部精细纹理和真实感不够。这也是为什么DreamFusion很震撼但后面大家又觉得“效果还远没到终点”。2多样性不足SDS通常是对一个确定的3D参数θ\thetaθ做优化所以很容易收敛到某种单一解。后来的ProlificDreamer就明确指出把3D参数当成常数会带来多样性和质量上的问题于是提出把3D参数看成随机变量发展成VSDVariational Score Distillation。3CFG过大带来的副作用在很多SDS式3D生成里常常会用比较大的Classifier-Free GuidanceCFG权重以增强文本条件约束。但这也会放大梯度噪声和偏差带来优化不稳定、颜色异常、纹理不自然等问题。4多视角不一致这一点虽然不是SDS公式本身单独决定的但在Text-to-3D里非常常见。因为2D扩散模型本来是图像模型不天然知道“这是同一个3D物体从不同视角看到的样子”。如果只是不断从随机视角渲染再分别用2D扩散去监督就可能出现各视角局部都像但合在一起3D一致性不够的问题。这也是后来很多工作不断引入更强几何约束、多视图一致性建模和更稳定蒸馏方式的原因。10. 后续几条重要改进线1ProlificDreamerVSDProlificDreamer对SDS做了一个非常关键的推进把3D参数从“一个固定常数”改成“一个随机变量”从而把SDS放进一个更完整的变分框架里。它提出Variational Score DistillationVSD并指出SDS可以看成VSD的一个特例。从结果上看这条线主要是为了解决SDS常见的过平滑过饱和多样性不足。2Stable Score DistillationSSDStable Score Distillation这篇工作更偏分析型。它把SDS里的训练信号拆成几个功能项去理解并分析为什么会出现过平滑和过饱和。这条线的价值在于它不是只说“SDS有问题”而是尝试解释“SDS为什么会这样”。这种分析后面其实很重要因为很多改进方法本质上都在修正SDS梯度里的偏差和噪声结构。3SDIScore Distillation via Reparametrized DDIM再往后像SDI这类工作会进一步指出SDS里随机采噪的方式本身会引入不稳定性和质量损失。它尝试用更贴近DDIM轨迹的方式来改写蒸馏过程从而减少SDS常见的模糊和“卡通化”问题。11. 从更高一层看SDS到底是什么1它不是普通意义上的采样器虽然名字里有Sampling但SDS更像是一种扩散先验驱动的优化机制。它并不是在3D空间里像DDPM那样一步步采样而是在参数空间里不断做梯度下降。所以SDS的本质可以理解为把一个冻结的2D扩散模型变成一个对任意可微参数化器都能施加先验约束的老师。2它最大的意义我觉得SDS最大的意义不只是DreamFusion做出了Text-to-3D结果而是它打开了一种很通用的范式如果你手里有一个强大的生成先验模型而你的目标对象本身又是可微的那么就可以考虑用“distillation of gradient / score”的方式去优化这个对象。这个思路后来也不只出现在3D里还被推广到编辑、重建、音频等别的方向。12. 一点理解1SDS最漂亮的地方我觉得SDS最漂亮的地方在于它非常“借力”。它没有试图从零开始解决Text-to-3D而是承认一个现实2D扩散模型已经学到了太强的视觉世界先验。那么与其重新训练一个巨大3D模型不如先想办法把这个先验接到3D优化里。SDS做成的就是这件事。2它为什么又强又别扭SDS很强因为它真的把2D扩散模型的先验接过来了。SDS也很别扭因为它毕竟不是一个“原生3D模型”而是在拿2D图像监督去逼一个3D表示收敛。所以它天然会有一些张力2D先验很强3D一致性不天然梯度有效但梯度也可能有偏。我觉得后面很多工作其实都在处理这个张力。3怎么记SDS这条线如果只是为了学习我觉得可以把这条线记成四句话2D扩散模型已经学到了很强的图像先验通过可微渲染可以把渲染图像接到2D扩散模型上SDS用扩散模型给出的噪声偏差信号来指导参数优化所以后面就能在没有3D数据的情况下做Text-to-3D但也会带来过平滑、过饱和和多视图不一致等问题。13. 参考鸣谢DreamFusion: Text-to-3D using 2D Diffusionhttps://arxiv.org/abs/2209.14988Score Jacobian Chaining: Lifting Pretrained 2D Diffusion Models for 3D Generationhttps://arxiv.org/abs/2212.00774ProlificDreamer: High-Fidelity and Diverse Text-to-3D Generation with Variational Score Distillationhttps://arxiv.org/abs/2305.16213Stable Score Distillation for High-Quality 3D Generationhttps://arxiv.org/abs/2312.09305Score Distillation via Reparametrized DDIMhttps://arxiv.org/abs/2405.1589114. 注这篇主要是个人学习整理重点放在主线理解文中对SDS推导做了简化实际实现里还涉及CFG、时间步采样、梯度缩放、渲染正则等细节才疏学浅欢迎批评、指导和交流有错误望大家及时指正
Score Distillation Sampling(SDS)
Score Distillation SamplingSDS1. 使用背景这两年Text-to-3D很火但一个很现实的问题是高质量的2D图文数据很多高质量的3D图文数据很少。于是就有一个很自然的想法既然2D扩散模型已经学到了很强的图像先验能不能不重新训练一个3D扩散模型而是直接拿现成的2D扩散模型去指导3D表示的优化。DreamFusion里提出的Score Distillation SamplingSDS就是在这个背景下出现的。它的核心作用可以概括成一句话利用预训练的2D扩散模型给一个可微参数化器提供梯度监督从而直接优化出满足文本条件的3D结果。这里的“可微参数化器”可以是NeRF也可以是mesh、3D Gaussian Splatting甚至更一般的可微图像生成器。只要它能渲染出图像并且渲染过程对参数可导SDS理论上就能接进去。2. 理论基础1扩散模型里最核心的东西是什么在扩散模型里最常见的写法是对干净图像xxx加噪得到某个时刻ttt的带噪样本xtx_txtxtαtxσtϵ,ϵ∼N(0,I) x_t\alpha_t x\sigma_t \epsilon,\qquad \epsilon\sim\mathcal{N}(0,I)xtαtxσtϵ,ϵ∼N(0,I)然后训练一个网络ϵ^ϕ(xt,y,t)\hat\epsilon_\phi(x_t,y,t)ϵ^ϕ(xt,y,t)去预测噪声其中yyy表示条件比如文本提示词。经典训练目标通常写成LdiffEx,ϵ,t[∥ϵ^ϕ(xt,y,t)−ϵ∥22] \mathcal{L}_{\text{diff}}\mathbb{E}_{x,\epsilon,t}\left[\|\hat\epsilon_\phi(x_t,y,t)-\epsilon\|_2^2\right]LdiffEx,ϵ,t[∥ϵ^ϕ(xt,y,t)−ϵ∥22]这个式子大家都很熟了。网络看到带噪图像xtx_txt再结合条件yyy和时间步ttt输出预测噪声ϵ^ϕ\hat\epsilon_\phiϵ^ϕ然后和真实噪声ϵ\epsilonϵ做均方误差。所以从一个比较直观的角度看扩散模型里最重要的信息其实就是对于当前这张带噪图像模型觉得“应该往哪个去噪方向走”。2score是什么在生成模型里score一般指对数密度关于输入的梯度∇xlogp(x) \nabla_x \log p(x)∇xlogp(x)它描述的是如果当前位置xxx想往高概率区域走应该朝哪个方向动。对于扩散模型来说噪声预测ϵ^ϕ\hat\epsilon_\phiϵ^ϕ和score之间是紧密相关的所以预训练扩散模型其实已经学到了一个非常强的“图像分布方向感”。SDS本质上就是想把这个“方向感”拿出来用在别的可微参数化器优化上。3. DreamFusion的基本设定1把3D问题改写成“渲染图像再监督”假设我们有一个参数化的3D表示记作θ\thetaθ。比如它可以是一组NeRF参数。给定相机参数ccc通过可微渲染器可以得到一张图像xg(θ,c) xg(\theta,c)xg(θ,c)这里xxx不是数据集中现成的真实图像而是当前3D表示从某个视角渲染出来的结果。如果我们希望这个3D结果符合文本提示词yyy最自然的想法就是让渲染图像xxx在预训练的2D扩散模型看来越来越像“符合文本yyy的真实图像”。2关键问题问题在于我们现在手里没有真实目标图像只有一个文本提示词。也就是说这不是普通监督学习。我们不能写一个“渲染图像和目标图像做L2”的损失因为根本没有目标图像。这时候2D扩散模型就派上用场了。它本身已经从大规模图文数据中学到了“什么样的图像更符合这个文本”于是我们可以直接利用它提供的梯度来优化θ\thetaθ。4. SDS是怎么来的1先把渲染图像加噪对当前渲染图像xg(θ,c)xg(\theta,c)xg(θ,c)在随机时间步ttt加入噪声xtαtxσtϵ x_t\alpha_t x\sigma_t \epsilonxtαtxσtϵ然后把xtx_txt、文本条件yyy和ttt输入到冻结的2D扩散模型里得到噪声预测ϵ^ϕ(xt,y,t) \hat\epsilon_\phi(x_t,y,t)ϵ^ϕ(xt,y,t)如果当前渲染图像已经很符合文本那么模型预测的噪声应该和真实噪声更一致反过来如果当前渲染图像不太对预测噪声和真实噪声之间就会有更明显的偏差。2SDS最常见的梯度形式DreamFusion里最常见、后来也几乎成了默认写法的SDS梯度近似是∇θLSDS≈Et,ϵ,c[w(t)(ϵ^ϕ(xt,y,t)−ϵ)∂x∂θ] \nabla_\theta \mathcal{L}_{\text{SDS}} \approx \mathbb{E}_{t,\epsilon,c}\left[ w(t)\big(\hat\epsilon_\phi(x_t,y,t)-\epsilon\big)\frac{\partial x}{\partial \theta} \right]∇θLSDS≈Et,ϵ,c[w(t)(ϵ^ϕ(xt,y,t)−ϵ)∂θ∂x]其中xg(θ,c),xtαtxσtϵ xg(\theta,c),\qquad x_t\alpha_t x\sigma_t\epsilonxg(θ,c),xtαtxσtϵ这个式子很重要基本把SDS的核心都写出来了。它的意思是先把当前渲染图像xxx加噪成xtx_txt用扩散模型预测噪声ϵ^ϕ\hat\epsilon_\phiϵ^ϕ比较ϵ^ϕ\hat\epsilon_\phiϵ^ϕ和真实噪声ϵ\epsilonϵ的差把这个差作为图像空间里的指导信号再通过渲染器反传到3D参数θ\thetaθ。所以SDS并不是“直接生成3D”而是通过2D扩散模型给渲染图像打一个梯度然后把这个梯度链式传回3D表示。3为什么叫Score Distillation Sampling“Score Distillation”里的distillation指的是把2D扩散模型学到的图像先验蒸馏到另一个参数化对象上。“Sampling”这个词有点容易让人误解。它不是说像普通扩散模型那样在像素空间里逐步采样而更像是一种基于score guidance的优化过程。所以从直观上说SDS其实更像拿一个冻结的2D扩散模型当老师不断推动当前渲染结果往文本条件下的高概率图像区域靠近。5. 这个梯度到底该怎么理解1最直观的理解对于当前渲染结果xxx如果它从某个视角看起来不像“文本里描述的东西”那么扩散模型给出的噪声预测就会和真实噪声产生系统性偏差。这个偏差经过权重w(t)w(t)w(t)和链式法则传回去就会推动θ\thetaθ更新让下一次渲染更像文本条件对应的图像。所以SDS梯度可以粗略理解成“扩散模型觉得你这张图不对那就沿着它认为更对的方向改。”2为什么它特别适合3D优化因为SDS根本不要求你有3D配对数据。你只需要一个可微的3D表示一个可微渲染器一个冻结的2D扩散模型一个文本提示词。然后不断“渲染—加噪—扩散监督—反传”就行了。这也是DreamFusion当时最有冲击力的一点不用3D训练数据也能直接做文本到3D优化。6. 为什么SDS看起来像loss实际更像gradient trick1很多时候大家直接写SDS loss在不少代码或者博客里SDS经常被写成某种“loss”。但严格来说SDS更核心的是一个梯度估计而不是一个完全标准、严格可积的显式标量损失函数。实践里大家往往更关心的是如何构造一个稳定、有效的梯度把2D扩散模型的先验传给待优化参数。2为什么它能绕开“训练一个3D扩散模型”因为SDS并没有真的去学一个3D分布模型。它做的事情更接近在3D参数空间里做优化但优化方向来自2D扩散模型的先验。所以SDS的价值不在于“建立了一个完整的3D生成概率模型”而在于它提供了一种非常强的零样本2D到3D蒸馏机制。7. 和Score Jacobian ChainingSJC的关系1为什么会有人把SDS和SJC放在一起讲因为这两条线都在做同一件大事把预训练的2D扩散模型“抬升”到3D生成上。只不过它们的数学出发点不完全一样。2SJC在干什么Score Jacobian Chaining的核心说法更直接2D扩散模型已经给出了图像空间的score那就把这个score通过渲染器的Jacobian链式传回3D表示。从表面上看这和SDS很像因为最后也都是“2D监督 渲染反传 3D优化”。但二者的推导路径和一些具体估计方式并不相同。通常实际工作里SDS这一支影响更广也更成了后续Text-to-3D方法的基础。8. 为什么SDS有效12D扩散模型太强了SDS能成功一个根本原因是现在的2D扩散模型本身就很强。它们在大规模图文数据上训练过已经有非常丰富的语义、外观、材质、光照、构图先验。所以哪怕你没有3D数据只要你能把3D表示渲染成图像扩散模型就能对这些图像提供很强的监督。2可微渲染把2D和3D接上了另一个关键点是可微渲染。没有可微渲染扩散模型只能评价渲染图像好不好却没法把“哪里不好”传回3D参数。一旦渲染器可导2D图像空间里的梯度就能通过∂x∂θ \frac{\partial x}{\partial \theta}∂θ∂x传回3D表示。于是2D图像先验和3D参数优化就真正连起来了。9. SDS的问题出在哪1过饱和、过平滑后续很多工作都指出SDS虽然有效但很容易出现over-saturation和over-smoothing。也就是说颜色容易过艳细节又容易糊结果常常看起来“像是被强力往某个语义方向推过去了”但局部精细纹理和真实感不够。这也是为什么DreamFusion很震撼但后面大家又觉得“效果还远没到终点”。2多样性不足SDS通常是对一个确定的3D参数θ\thetaθ做优化所以很容易收敛到某种单一解。后来的ProlificDreamer就明确指出把3D参数当成常数会带来多样性和质量上的问题于是提出把3D参数看成随机变量发展成VSDVariational Score Distillation。3CFG过大带来的副作用在很多SDS式3D生成里常常会用比较大的Classifier-Free GuidanceCFG权重以增强文本条件约束。但这也会放大梯度噪声和偏差带来优化不稳定、颜色异常、纹理不自然等问题。4多视角不一致这一点虽然不是SDS公式本身单独决定的但在Text-to-3D里非常常见。因为2D扩散模型本来是图像模型不天然知道“这是同一个3D物体从不同视角看到的样子”。如果只是不断从随机视角渲染再分别用2D扩散去监督就可能出现各视角局部都像但合在一起3D一致性不够的问题。这也是后来很多工作不断引入更强几何约束、多视图一致性建模和更稳定蒸馏方式的原因。10. 后续几条重要改进线1ProlificDreamerVSDProlificDreamer对SDS做了一个非常关键的推进把3D参数从“一个固定常数”改成“一个随机变量”从而把SDS放进一个更完整的变分框架里。它提出Variational Score DistillationVSD并指出SDS可以看成VSD的一个特例。从结果上看这条线主要是为了解决SDS常见的过平滑过饱和多样性不足。2Stable Score DistillationSSDStable Score Distillation这篇工作更偏分析型。它把SDS里的训练信号拆成几个功能项去理解并分析为什么会出现过平滑和过饱和。这条线的价值在于它不是只说“SDS有问题”而是尝试解释“SDS为什么会这样”。这种分析后面其实很重要因为很多改进方法本质上都在修正SDS梯度里的偏差和噪声结构。3SDIScore Distillation via Reparametrized DDIM再往后像SDI这类工作会进一步指出SDS里随机采噪的方式本身会引入不稳定性和质量损失。它尝试用更贴近DDIM轨迹的方式来改写蒸馏过程从而减少SDS常见的模糊和“卡通化”问题。11. 从更高一层看SDS到底是什么1它不是普通意义上的采样器虽然名字里有Sampling但SDS更像是一种扩散先验驱动的优化机制。它并不是在3D空间里像DDPM那样一步步采样而是在参数空间里不断做梯度下降。所以SDS的本质可以理解为把一个冻结的2D扩散模型变成一个对任意可微参数化器都能施加先验约束的老师。2它最大的意义我觉得SDS最大的意义不只是DreamFusion做出了Text-to-3D结果而是它打开了一种很通用的范式如果你手里有一个强大的生成先验模型而你的目标对象本身又是可微的那么就可以考虑用“distillation of gradient / score”的方式去优化这个对象。这个思路后来也不只出现在3D里还被推广到编辑、重建、音频等别的方向。12. 一点理解1SDS最漂亮的地方我觉得SDS最漂亮的地方在于它非常“借力”。它没有试图从零开始解决Text-to-3D而是承认一个现实2D扩散模型已经学到了太强的视觉世界先验。那么与其重新训练一个巨大3D模型不如先想办法把这个先验接到3D优化里。SDS做成的就是这件事。2它为什么又强又别扭SDS很强因为它真的把2D扩散模型的先验接过来了。SDS也很别扭因为它毕竟不是一个“原生3D模型”而是在拿2D图像监督去逼一个3D表示收敛。所以它天然会有一些张力2D先验很强3D一致性不天然梯度有效但梯度也可能有偏。我觉得后面很多工作其实都在处理这个张力。3怎么记SDS这条线如果只是为了学习我觉得可以把这条线记成四句话2D扩散模型已经学到了很强的图像先验通过可微渲染可以把渲染图像接到2D扩散模型上SDS用扩散模型给出的噪声偏差信号来指导参数优化所以后面就能在没有3D数据的情况下做Text-to-3D但也会带来过平滑、过饱和和多视图不一致等问题。13. 参考鸣谢DreamFusion: Text-to-3D using 2D Diffusionhttps://arxiv.org/abs/2209.14988Score Jacobian Chaining: Lifting Pretrained 2D Diffusion Models for 3D Generationhttps://arxiv.org/abs/2212.00774ProlificDreamer: High-Fidelity and Diverse Text-to-3D Generation with Variational Score Distillationhttps://arxiv.org/abs/2305.16213Stable Score Distillation for High-Quality 3D Generationhttps://arxiv.org/abs/2312.09305Score Distillation via Reparametrized DDIMhttps://arxiv.org/abs/2405.1589114. 注这篇主要是个人学习整理重点放在主线理解文中对SDS推导做了简化实际实现里还涉及CFG、时间步采样、梯度缩放、渲染正则等细节才疏学浅欢迎批评、指导和交流有错误望大家及时指正