小镇画室里有位远近闻名的绘画大师杜老师。他这辈子看过上亿张画,练就一双毒眼:不管画面被墨水泼得多脏,他都能猜出原画画的是什么。学徒阿石想雕一只橘猫,可他手里只有文字描述,没有现成的 3D 猫可以照着刻。他忽然想到:虽然杜老师不会刻雕像,但只要我把雕像转着圈拍成照片,杜老师就能点评“这张像猫、那张耳朵歪了”——我照着改不就行了吗? 这个聪明的“隔空拜师”套路,就是 Score Distillation Sampling(SDS)的核心思想:把一个已经在 2D 图像上练到极致的扩散模型当作“老师”,把正在优化的 3D 表示(比如 NeRF)当作“学生雕塑”。每次随机换个相机视角给雕塑拍照,再把照片拿给 2D 老师打分,最后把老师的修改意见反传回 3D 参数。DreamFusion 正是靠着这一招,让“输入一句话、生成一个 3D 模型”变成现实。下面我们就从数学角度拆开这张“修改意见单”。
对于做 3D 生成、NeRF 应用或 AIGC 平台开发的从业者,SDS 是连接 2D 扩散模型与 3D 世界的枢纽——理解了它,就抓住了文本生成 3D 这条技术主线的引擎。
目录
可视化演示
展示Score Distillation Sampling的核心流程:3D表示渲染为2D图像后送入扩散模型,梯度反传更新3D参数。切换模式查看SDS梯度计算和DreamFusion优化循环。
本节配有交互动效(进入视口后自动加载,约 3KB)。
SDS梯度计算流程 3D表示渲染为2D图像,添加噪声后送入扩散模型 利用U-Net预测噪声,省略Jacobian计算近似梯度 ∇SDS = w(t)·[ε_pred(x_t,t,y) - ε] SDS将2D扩散先验蒸馏到3D表示
需求起源:为什么 AI 造 3D 比画 2D 难
阿石想雕一只橘猫,但他手里只有一张杜老师写的字条:“胖橘猫,蜷成一团。”问题来了:他从来没见过真正的 3D 猫,也买不起昂贵的全套猫咪石膏像。其实整个 AI 行业也面临同样尴尬——互联网上有海量 2D 图片,却很少有成体系的、带标注的三维模型数据。3D 数据的采集要靠激光扫描、手工建模,价格贵得离谱,所以直接训练一个“文本到 3D”的模型,就像指望没有图册的学徒凭空刻出传世名作。
既然 3D 数据稀缺,而 2D 扩散模型已经在几亿张图片上练得炉火纯青,聪明的工程师们想到了“借力”:2D 生成模型不会直接造 3D,但它会评价一张图片“像不像”。而 3D 模型可以被“渲染”成 2D 图片——渲染就是架一台虚拟相机,从任意角度给立体物体拍照片。于是问题变成:我们能不能让 3D 表示不停地渲染出 2D 照片,再让 2D 大师点评,从而把大师的审美蒸馏进 3D 参数里?
这个思路的第一步,是把“拍照片”这件事写成可微的数学函数。一个 3D 表示由参数 $\theta$ 描述(比如神经网络的权重),相机位姿记为 $c$,渲染出的照片记为 $x$:
1. 3D 参数 $\theta$:它描述了雕塑的当前形状。在 NeRF 中,$\theta$ 是一个神经网络的权重,网络的输入是三维坐标,输出是颜色和密度。
2. 相机位姿 $c$:它决定了相机的位置和朝向。同一个雕塑,从正面拍和从侧面拍,得到的照片完全不同。
3. 渲染函数 $g$:它的任务是“拍照片”,把不可见的 3D 参数变成一张可见的 2D 图像。可微意味着我们可以计算出“相机图像上的每个像素,随着 $\theta$ 的变化会如何移动”。
4. 渲染照片 $x$:它是一张普通的 2D 图,可以被送到任何 2D 模型里做判断。
后来阿石想明白了一个道理:他不需要直接学会“立体雕刻”,他只需要让每次拍出来的照片都对得上杜老师心里的“橘猫”。照片对了,雕塑自然就对了一点点。这个朴素的直觉,正是 SDS 一切的起点。
扩散模型:阅图无数的大师如何工作
杜老师为什么能隔着墨迹看出原画?年轻时他做过一个古怪的练习:先画一张完好的画,然后往上泼一层墨,再让自己猜“我泼的是什么墨、原画是什么”。这个练习反复做了上亿次,他闭着眼都能从一团糟的墨迹里还原出画面轮廓。扩散模型的训练,就是这套“泼墨—猜墨—还原”的训练。
扩散模型包含两个过程:前向过程是给图片逐步加噪,把清晰的 $z_0$ 变成近似纯噪声的 $z_t$;反向过程则训练一个神经网络 $\epsilon_\phi$,它的任务是在给定加噪图片 $z_t$、噪声强度 $t$ 和文本条件 $y$ 时,预测出当初加进去的噪声。这里的 $\phi$ 是扩散模型的网络权重。训练目标非常直白——把预测噪声和真实噪声的距离压到最小:
1. 真实图片 $z_0$:这是训练集中一张完好的图片,相当于杜老师练习时先画好的原画。
2. 随机噪声 $\epsilon$:这是被泼上去的“墨迹”,通常来自标准正态分布,它和原画没有任何关系。
3. 加噪图片 $z_t$:原画和墨迹按一定比例混合后的结果。$t$ 越大,墨迹越多,画面越模糊。
4. 老师的预测 $\epsilon_\phi(z_t; y, t)$:老师看着被墨迹盖住的图,结合文字命题 $y$(比如“橘猫”),猜出墨迹的轮廓。
5. 误差最小化:如果老师猜的墨迹和真实墨迹一致,说明他完全看透了画面;误差越小,老师越可靠。
阿石听到这里兴奋地拍桌子:“所以杜老师其实有个神经网络分身!我只要把照片发给他,他就能说出照片里哪些墨迹不对劲——那不对的地方,不就是我该修的地方吗?”没错,下一个问题,就是怎么把老师的这句评语,变成雕塑上的每一刀。
SDS 原理:把老师的点评蒸馏给雕塑
这天阿石捧着刚捏出的土疙瘩,转着圈给它拍了很多照片。杜老师检验时戴上一副“时光眼镜”:他把阿石的照片随手撒上一层随机墨迹,再看这幅被污染的画,说出“这里应该是猫耳朵、那里应该有尾巴”。阿石发现,老师的评语其实是一个“噪声偏差”:如果我的照片已经是完美的猫,老师猜的墨迹就该和真实墨迹一模一样;如果照片拍歪了,老师的猜测就会明显跑偏,跑偏的方向恰好指出“照片哪儿不对”。
把这句话翻译成算法,就是 Score Distillation Sampling。设当前 3D 参数为 $\theta$,渲染出的照片为 $x$,给 $x$ 按扩散过程加噪得到 $z_t$。老师 $\hat{\epsilon}_\phi(z_t; y, t)$ 预测噪声,我们实际撒的噪声是 $\epsilon$,两者的差 $(\hat{\epsilon}_\phi - \epsilon)$ 就是“修改意见”。把它乘以渲染函数的导数 $\frac{\partial x}{\partial \theta}$,就能知道“为了消除这个偏差,3D 参数该怎么动”。于是 SDS 的梯度写作:
1. 渲染出照片 $x$:从当前 3D 参数 $\theta$ 出发,用可微渲染器生成一张照片。这是阿石递给老师看的作品。
2. 加噪得到 $z_t$:给照片撒上强度为 $t$ 的随机墨迹 $\epsilon$,形成“被污染的画”。
3. 老师预测噪声 $\hat{\epsilon}_\phi$:扩散模型看图说话,预测“墨迹是什么样”。注意它同时受到文本条件 $y$ 的引导。
4. 噪声残差 $(\hat{\epsilon} - \epsilon)$:老师猜的墨迹与我们实际撒的墨迹之差。差为 0 说明照片完全符合老师的预期;非零则指示修正方向。
5. 加权回传:$w(t)$ 按噪声强度给各步打分,$\frac{\partial x}{\partial \theta}$ 把像素层面的意见翻译成 3D 参数的调整量。
阿石恍然大悟:原来每次“老师点评”都是一次小型修行——拍照、撒墨、听评语、修雕塑。只要这个循环跑得足够多,土疙瘩就会在老师的骂声中慢慢长出猫耳朵来。
梯度解析:拆开那张修改意见单
阿石盯着老师的评语单发现了蹊跷:老师从不说“耳朵往左 3 毫米”,只写“你这张照片里墨迹撒得不对”。这不精确的评语为什么能当修改意见?因为扩散模型的预测里天然藏着“图片更像不像”的信息——学过扩散模型的人都知道,它的网络输出和数据的对数概率梯度(也就是 score function)只差一个缩放系数。SDS 的巧妙之处,就是把这个梯度关系直接借来用:
1. 分数函数 $\nabla_{z_t} \log p(z_t \mid y)$:这是数据的对数概率梯度,它指向“更像文本描述”的方向,是各种生成方法梦寐以求的指南针。
2. 噪声残差 $\hat{\epsilon}_\phi - \epsilon$:老师猜的墨迹和真实墨迹的差,它恰好是概率分数的带噪估计。翻译成人话:“这张图和老师心里的图,差在哪儿。”
3. 系数 $-\frac{1}{\sqrt{1-\bar{\alpha}_t}}$:把噪声尺度还原成图像梯度尺度。负号表示我们要朝着减少差异的方向走,而不是增加差异。
4. 近似与省略:SDS 真正使用时省略了 U-Net 对 $z_t$ 的雅可比矩阵,直接把残差当作对渲染图的梯度。这样省去了反传整个去噪网络的开销,但代价是梯度变得“有偏”。
打个比方:老师本该写下“每笔颜色变化会怎样影响我的判断”,那是一张巨大的偏导数表;但他说“算了,你就按这句话的大方向改吧”。SDS 把复杂的雅可比矩阵省略掉,速度飞快,但方向也因此带上了一点误差——这正是后来很多改进工作想修补的缝隙。
DreamFusion:阿石的数字雕刻车间
阿石攒齐了整套装备:一块永远不会用完的“数字黏土”,叫 NeRF(神经辐射场);一台可以瞬移的相机,叫可微渲染器;还有一位毒舌的 2D 老师,叫 Imagen。DreamFusion 这个名字听起来浪漫,其实干的就是把这三样东西用 SDS 串成流水线的活儿。
DreamFusion 是 2022 年 Google 提出的文本生成 3D 代表作,它把 SDS 应用到一个从零初始化的 NeRF 上。每一步迭代都很简单:随机采样一个相机位姿,让 NeRF 渲染出该视角下的照片;给照片加噪后送到预训练的 2D 扩散模型里,让它基于文本提示给出噪声预测;再用 SDS 梯度更新 NeRF 的权重。整个过程不训练任何新的 3D 扩散模型,NeRF 是唯一在更新参数的学生。NeRF 本身怎么渲染照片呢?它沿每条视线采样很多三维点,累加每个点的颜色与不透明度:
1. 视线 $\mathbf{r}$:从相机出发穿过一个像素的光线。每个像素对应一条视线,因此一条光线决定一个像素的颜色。
2. 采样点颜色 $\mathbf{c}_i$:第 $i$ 个三维点的颜色值。它由 NeRF 网络根据该点坐标计算出来。
3. 不透明度 $\sigma_i$ 与间距 $\delta_i$:$\sigma_i$ 表示这块“彩色玻璃”有多厚实,$\delta_i$ 表示相邻采样点之间的距离;两者相乘决定这层玻璃遮住了多少光。
4. 透射率 $T_i$:前面所有层玻璃累计透过的光线比例。前面的层越厚实,后面的层对照片的贡献就越小。
5. 累加求和:把所有层颜色乘以各自的遮挡权重加起来,就得到像素最终颜色。
阿石的车间终于运转起来了:相机咔嗒一响,照片出炉;老师瞄一眼,给出评语;黏土按照评语默默变形。几百上千步之后,一坨像素毛坯就被打磨成一只可以 360 度旋转的橘猫。整个流程里没有一行“3D 雕刻公式”,全靠 2D 老师在背后遥控。
引导参数:让老师的口味更挑剔
杜老师点评时有两种状态。平时他放松地看:“这画面大致合理就行。”可一旦阿石强调“我就要橘猫”,杜老师立刻戴起老花镜,挑刺般地寻找橘猫的每一个特征,连墨迹都往橘猫的方向猜。扩散模型中也存在这两种状态:有条件预测 $\epsilon_\phi(z_t; y, t)$ 和无条件预测 $\epsilon_\phi(z_t; \emptyset, t)$。要让老师更“较真”,就把两个预测的差放大 $s$ 倍再加回去:
1. 无条件预测 $\epsilon_\phi(z_t; \emptyset, t)$:老师不看命题,仅凭一般审美猜墨迹。相当于随口说“这画大概是棵树吧”。
2. 条件预测 $\epsilon_\phi(z_t; y, t)$:老师牢记“这是橘猫”,一切猜测都向猫的特征倾斜。
3. 二者之差:命题带来的“偏见方向”。它代表了“橘猫”这个文本到底希望图片往哪里走。
4. 缩放 $s$ 倍并合成:把偏见方向放大 $s$ 倍后,叠加到无条件预测上。$s$ 越大,老师的评语越激进,雕塑越贴文本。
阿石后来发现,把 $s$ 调得太大也有副作用:杜老师满脑子都是“橘猫”,恨不得把背景的桌子也挑成猫毛色。结果雕塑虽然形体像猫,整体颜色却浓艳得扎眼——这就是“SDS 过饱和”现象的由来。挑剔是好事,但太挑剔会让老师失真。
局限与展望:老师看走眼时怎么办
杜老师再厉害,终究是看 2D 照片的,他的立体感来自想象力,而不是真实的 3D 经验。于是阿石雕出来的猫经常闹笑话:从正面看是猫脸,转到背后再看,居然还是一张猫脸!更有甚者,雕塑的正面长出一个大鼻子,背面又长出一个——这种现象被称为 Janus 问题,就像罗马神话里那个两面神。同时,2D 老师习惯在小尺寸模糊图上打分,导致雕塑放大后细节糊成一团。
SDS 的另一个问题是“有偏”。前面说过它省略了 U-Net 的雅可比矩阵,省了计算,却也丢了精细的曲率信息,所以许多改进工作试图让老师“懂事一点”,最常见的思路是给扩散模型也装上立体视觉——把相机位姿 $v$ 作为额外条件输入老师网络,让它在点评时明确知道“我正在从侧面看”:
1. 视角条件 $v$:明确告诉老师“当前照片的相机朝向”,让点评与视角绑定,而不是对所有方向都给出同一套意见。
2. 条件噪声预测 $\epsilon_\phi(z_t; y, v, t)$:老师带着“我从侧面看”的意识去猜墨迹,从而避免把侧面也猜成正面。
3. 残差与回传:与 SDS 一样,用噪声残差 $\times$ 渲染导数把意见传回 3D 参数,但这次残差里包含了视角相关的修正。
4. 期望符号:表示训练时不仅要随机撒噪声,还要随机切换视角,让每个角度都被老师监督到。
阿石终于明白:师父虽然只会看平面图,但可以让师父戴着 VR 眼镜批作业。SDS 打开了“用 2D 先验生成 3D”的大门,而后续的 MVDream、DDS、ProlificDreamer 等工作,都在为这位 2D 老师装配越来越好的立体感知能力。
AI 应用场景
游戏与元宇宙资产生成
阶段:内容生成 / 3D 资产生成
解决的问题:传统 3D 建模依赖美术师手工雕刻,一个角色模型往往要数小时到数天,且 3D 素材库匮乏。SDS 让平台可以直接用文本描述驱动商品或角色的立体资产生成,大幅降低生产门槛和试错成本。
具体案例:在 Meshy、Tripo AI 等工具上,用户输入“低多边形风格的橘猫、厚涂质感”,系统先用 SDS 类方法快速生成粗模,再交给美术师在软件里精修。美术团队把过去一周的初期造型工作量压缩到半天。
电商商品三维展示
阶段:多模态内容生成 / 视觉呈现
解决的问题:电商平台希望把商品从静态图片升级为可旋转的 3D 展示,但为每件商品定制三维模型成本太高。SDS 利用预训练 2D 扩散先验,从商品描述和少量图片就能优化出一个可交互的 3D 预览。
具体案例:某家具电商用 DreamFusion 风格的流水线,为“橡木色圆形茶几”等商品批量生成 3D 预览,用户下单前可旋转查看全貌,退货率明显下降。
影视与动画概念设计
阶段:前期创意 / 分镜设计
解决的问题:导演口头描述“黄昏沙漠中的机械巨兽”,概念设计师很难快速给出多角度参考。SDS 可以从一段文本生成一个可旋转的三维粗模,让团队在几小时内就对形体、比例达成共识。
具体案例:某动画工作室在角色设定阶段,使用 SDS 类工具生成几十个候选粗模,美术组围绕这些三维草稿比选和迭代,再进入精雕环节。
Python 演示
import numpy as np T = 100 # 扩散时间步数VIEWS = ('front', 'back')LR = 0.06 # 老师在 16 像素照片上的"理想轮廓":一座微笑山丘t_axis = np.linspace(-2.0, 2.0, 16)target = np.clip(1.0 - (t_axis - 0.4) ** 2, 0.0, 1.0) def render(theta, view): """把 8 个控制点的雕塑插值成 16 像素的照片""" x = np.interp(np.linspace(0, 7, 16), np.arange(8), theta) return x if view == 'front' else x[::-1] def d_render(view): """渲染器对 theta 的雅可比矩阵 (16 x 8)""" J = np.zeros((16, 8)) pts = np.linspace(0, 7, 16) for i, p in enumerate(pts): low = int(np.floor(p)) high = min(low + 1, 7) frac = p - low J[i, low] = 1.0 - frac J[i, high] = frac return J if view == 'front' else J[::-1, :] def sds_update(theta): """单步 SDS: 拍照 -> 加噪 -> 老师点评 -> 回传梯度""" view = VIEWS[np.random.randint(2)] x = render(theta, view) eps = np.random.randn(16) t = np.random.randint(10, 80) alpha_bar = 1.0 - t / T # 简化的噪声计划 z_t = np.sqrt(alpha_bar) * x + np.sqrt(1.0 - alpha_bar) * eps clean = target if view == 'front' else target[::-1] eps_hat = (z_t - np.sqrt(alpha_bar) * clean) / np.sqrt(1.0 - alpha_bar) grad = (eps_hat - eps) @ d_render(view) # SDS 梯度 theta -= LR * grad return theta, float(np.mean((eps_hat - eps) ** 2)) def main(): theta = np.zeros(8) for step in range(500): theta, opinion = sds_update(theta) if step % 50 == 0: print("step %3d | 老师意见能量 %.4f | 雕塑前端 %.3f" % (step, opinion, render(theta, 'front')[0])) print("最终控制点:", np.round(theta, 3)) if __name__ == "__main__": main()
x = np.interp(np.linspace(0, 7, 16), np.arange(8), theta)把稀疏的 8 个控制点插值成 16 像素的“渲染照片”。z_t = np.sqrt(alpha_bar) * x + np.sqrt(1.0 - alpha_bar) * eps给照片撒墨迹(扩散加噪),alpha_bar 越大墨迹越轻。eps_hat = (z_t - np.sqrt(alpha_bar) * clean) / np.sqrt(1.0 - alpha_bar)模拟预训练扩散老师:根据当前脏图反推理想干净轮廓并预测噪声。grad = (eps_hat - eps) @ d_render(view)核心 SDS 梯度:噪声残差作为修改方向,通过渲染雅可比回传到控制点。theta -= LR * grad按梯度更新 3D 参数,相当于阿石照着评语修一刀。view = VIEWS[np.random.randint(2)]每个 step 随机换一个视角拍照,让每个角度都被老师监督。
常见误区
误区我以为 SDS 要另外训练一个能在 3D 数据上工作的扩散模型,所以成本特别高、门槛特别大。
正解恰恰相反,SDS 最大的魅力在于它完全复用预训练好的 2D 扩散模型,不更新扩散模型的任何参数。整个优化过程只更新 3D 表示(如 NeRF)的参数,扩散模型始终扮演一个“不动如山的评委”。用比喻说,杜老师不会去学雕刻,他只负责看照片骂人,真正动手改的是阿石手中的黏土。
为何常见:因为名字里带“蒸馏”和“采样”,很容易让人误以为要像微调大模型那样再训一个新模型;实际上蒸馏的是“先验知识”,而不是训练“新模型”。
误区我听说 SDS 的梯度来自扩散模型,以为它等于严格的 score function 梯度,是精确的数学最速下降方向。
正解SDS 省略了 U-Net 对 $z_t$ 的雅可比矩阵,把噪声残差直接当作梯度回传。这相当于老师说“你沿着这个方向改就行”,却没有告诉你“每一笔改动还会反过来影响我的判断”。它是一个有偏近似,方向大体正确、细节有误差。正是这个误差导致过饱和和过度平滑。
为何常见:扩散模型学到的确实是分数(score),但严格使用分数需要反传整个 UNet,显存和稳定性都吃不消;见到公式里没有雅可比,初学者容易忽略这一刀。
误区我觉得无分类器引导里的 $s$ 越大,模型越听文本的话,所以干脆把 $s$ 调到 1000,出来的东西一定更精美。
正解$s$ 过大时,老师对文本特征过度敏感,会把每一个细节都用力放大,导致颜色过饱和、对比度失真,甚至出现不自然的纹理。DreamFusion 里常用较大的 $s$ 是为了让形体快速对题,但同样饱受过饱和困扰,通常还需要配合损失权重或其他正则约束。
为何常见:在 2D 生成里调大引导强度确实能让图像更贴提示,很多人把这个经验盲目迁移到 3D 蒸馏上,却没意识到 3D 优化是一个多视角累积过程,误差会被放大。
误区我以为每次点评都会看不同视角,那么多视角加权平均下来,生成的 3D 模型肯定是各角度匀称的。
正解2D 扩散老师没有真正的 3D 感知,它只能评价“这张单张照片像不像”,无法判断“雕塑背面是否也合理”。于是模型常常投机取巧,在正面和背面各画一张脸来迎合所有视角,这就是 Janus 问题。改进方向是给老师加多视角条件,让它知道“我正在看背面”。
为何常见:人脑天然具备立体恒常性,初学者容易把 2D 评委也想象成拥有 3D 心智,忽略了它只是逐张照片打分。
面试题
Q1. 在 SDS 方法中,充当“老师”角色的是下列哪一项?
- A.预训练 2D 扩散模型← 正确答案
- B.预训练 3D 点云模型
- C.手工设计的形状损失
- D.高斯混合模型分类器
答案:A。SDS 利用预训练 2D 扩散模型作为评估器:它给渲染照片加噪后预测噪声,通过噪声残差传达“像不像”的指导。3D 点云模型、手工形状损失和高斯分类器都不是 SDS 定义的教师角色。
Q2. SDS 优化过程的直接对象是什么?
- A.扩散模型的网络权重
- B.3D 表示的参数 θ← 正确答案
- C.文本编码器的权重
- D.相机位姿的参数
答案:B。SDS 是“教师不动、学生动”:预训练扩散模型保持冻结,只有 3D 表示(如 NeRF)的参数 θ 在每一步迭代中被更新。相机位姿是随机采样的输入而非优化目标。
Q3. SDS 的全称是下列哪个?
- A.Stochastic Depth Sampling
- B.Score Distillation Sampling← 正确答案
- C.Style Density Synthesis
- D.Semantic Data Streaming
答案:B。SDS 即 Score Distillation Sampling,中文可译作“分数蒸馏采样”。它从扩散模型隐含的分数函数中蒸馏梯度,并用采样方式估计期望。其余三项都是干扰项。
Q4. SDS 梯度中噪声残差 (ε̂ − ε) 近似代表了什么?
- A.图像的像素值差距
- B.概率分数的梯度方向← 正确答案
- C.文本的相似度距离
- D.相机的姿态误差
答案:B。扩散模型的噪声预测差异近似指向数据对数概率梯度的方向:如果老师猜的噪声与真实噪声不同,说明当前图像偏离了老师的期望。ε̂−ε 正是这个“偏离量”的代理,等价于分数方向的估计。
Q5. SDS 为了省计算量,省略了下列哪个雅可比矩阵?
- A.U-Net 对渲染像素 z_t 的雅可比← 正确答案
- B.U-Net 对文本 y 的雅可比
- C.NeRF 对相机姿态的雅可比
- D.渲染器对 3D 参数的雅可比
答案:A。严格按分数函数反传需要计算扩散 U-Net 输出对输入像素 z_t 的雅可比矩阵,这会让梯度穿过整个去噪网络,显存和计算量都难以承受。SDS 将它省略为常数,因而梯度有偏但不影响大方向。
Q6. 运行 SDS 生成 3D 模型通常需要哪些组件?
- A.文本 prompt 作为生成条件← 正确答案
- B.预训练 2D 扩散模型← 正确答案
- C.可微渲染的 3D 表示← 正确答案
- D.大量人工标注的 3D 数据
答案:ABC。SDS 的三大件是文本条件、预训练 2D 扩散模型、可微 3D 表示(如 NeRF)。它刻意绕开 3D 数据稀缺问题,不需要大量人工标注的 3D 数据,这是它最重要的优势之一。
Q7. 关于无分类器引导,下列说法正确的有哪些?
- A.需要同时计算条件与无条件噪声预测← 正确答案
- B.引导强度越大越贴文本,但也可能过饱和← 正确答案
- C.引导强度只影响训练速度不影响质量
- D.引导强度增大可以提升生成多样性
答案:AB。无分类器引导的公式要求同时算 εφ(z_t;∅,t) 和 εφ(z_t;y,t),再取差放大 s 倍。s 越大越贴合提示,但过大会颜色过饱和、失真。引导增强的是条件一致,不是多样性,增大 s 反而降低多样性。
Q8. 下列哪些是 SDS 方法已知的局限性?
- A.生成结果颜色容易过饱和← 正确答案
- B.多视角下出现 Janus 问题← 正确答案
- C.任何文本提示都能完美生成
- D.渲染分辨率普遍较低← 正确答案
答案:ABD。SDS 有三大痛点:大引导强度导致过饱和;2D 老师缺乏立体感知导致正面背面都画脸(Janus 问题);老师适应低分辨率小图,导致细节模糊。它离“任何提示都完美”还差得远。
Q9. 在 SDS 的每次迭代中,扩散噪声水平 t 是如何确定的?
- A.每次随机均匀采样一个 t← 正确答案
- B.固定使用 t = 0 的干净图像
- C.由学习率线性衰减决定
- D.与迭代次数完全一致
答案:A。SDS 在每一步从噪声调度中随机采样 t,让老师在不同污染程度下点评,从而在粗轮廓和细节纹理之间取得平衡。固定 t=0 或让 t 随迭代变化都会破坏多尺度蒸馏的均衡性。
Q10. DreamFusion 中作为“学生”被优化的 3D 表示是什么?
- A.体素网格 voxel
- B.NeRF 神经辐射场← 正确答案
- C.显式三角网格 mesh
- D.点云 point cloud
答案:B。DreamFusion 使用 NeRF 作为可微分的 3D 表示:它接受三维坐标,输出颜色与密度,通过体积渲染得到照片。NeRF 的可微性让 SDS 梯度可以直接回传到网络参数上。体素与点云虽也可微,但不是 DreamFusion 原始选择。