"Real-time rendering of dynamic scenes with view-dependent effects remains a fundamental challenge in computer graphics. While recent advances in Gaussian Splatting have shown promising results separately handling dynamic scenes (4DGS) and view-dependent effects (6DGS), no existing method unifies these capabilities while maintaining real-time performance. We present 7D Gaussian Splatting (7DGS), a unified framework representing scene elements as seven-dimensional Gaussians spanning position (3D), time (1D), and viewing direction (3D). Our key contribution is an efficient conditional slicing mechanism that transforms 7D Gaussians into view- and time-conditioned 3D Gaussians, maintaining compatibility with existing 3D Gaussian Splatting pipelines while enabling joint optimization. Experiments demonstrate that 7DGS outperforms prior methods by up to 7.36 dB in PSNR while achieving real-time rendering (401 FPS) on challenging dynamic scenes with complex view-dependent effects. The project page is: gaozhongpai.github.io/7dgs/."
- 把三个维度合成一个高斯:每个场景元素是一个七维高斯(位置 3D + 时间 1D + 方向 3D),协方差矩阵的非对角块专门用来记「空间与时间怎么一起变」「空间与方向怎么一起变」,这些块就是「运动高光」这类现象的数学落点。
- 切片是全文的枢纽:渲染时按当前时间 t 与相机方向 d 求条件分布,得到一个普通的三维高斯(均值、协方差、不透明度都变成 t 与 d 的函数)。切完之后,投影、泼溅、致密化全是 3D 高斯泼溅现成的代码,这是它能到百帧量级的原因。
- 一笔质量账:在自建的 7DGS-PBR 上,点数只用 4DGS 的 15.3%,平均 PSNR 从 27.79 涨到 32.50(+4.71 dB);心脏场景 heart1 是 27.30 → 35.48(+8.18 dB),点数 694,006 → 82,813。
- 一笔代价账:完整版平均帧率 174.7 FPS(7DGS-PBR),比 4DGS 的 192.6 还低;摘掉自适应精修模块后升到 376.0 FPS,质量仍比 4DGS 高 +3.98 dB。速度与质量各属于哪一个配置,读这篇时不能混着用。
1一帧 2.5 毫秒,与一帧 8 秒的参考图
一帧 2.5 毫秒,与一帧 8 秒的参考图
要看清这篇在做什么,先把原文首图里的四个读数摆在一起。心脏场景里,本方法输出 PSNR 34.66,同一场景的 4DGS 是 27.30;云场景里是 29.26 对 24.63。图内另一组数字是速度:401.0 帧与 386.2 帧,而图右上角那张参考图,是逐条光线做物理渲染出来的,标着 0.125 帧和 0.003 帧。
原文要处理的问题,引言里说得很直白:动态场景的高保真实时渲染,目前没人把「动态」和「视角依赖」一起做下来。 它点出的两条既有路线是这样的:4D 高斯泼溅(4DGS)把表示扩到「空间 + 时间」,方向维度空着;6D 高斯泼溅(6DGS)把表示扩到「空间 + 方向」,时间维度空着。各自在自己的赛道上都成立,合起来却没有人真正跑通。
「合起来」为什么不止是拼接,引言给的理由是这样的:这三个维度并不彼此独立,它们互相牵动。原文举的例子是移动物体上的镜面高光——它出现在哪里,同时取决于相机方向与物体当时的位置。你可以把时间和方向分别做成两个模块,但那种做法默认「方向上的变化与时间无关」,而这个假设在运动高光上正好不成立。这句话是全文的起点:要处理的是它们的相互依赖,所以表示必须同时握住三个维度。
这就是七维高斯的位置:三样东西不分开存,一起放进一个联合分布里,让协方差的非对角块去承载「谁与谁一起变」。
这件事的实用背景,引言也交代了:虚拟现实、增强现实、内容创作、数字孪生这几类应用都想拿到「一段会动、又有真实光照的场景,随时从任意角度看」。它们要的其实是一个很朴素的组合:画面要对(视角依赖)、动作要对(时间)、还要能实时出图(帧率)。已有的两条路线各自放弃了其中一项:动态高斯这类方法把时间做进去了,视角依赖仍靠球谐这类「与时间无关的外观函数」近似;六维高斯这类方法把视角依赖做进去了,时间那一维压根不在表示里。所以「合起来」要付的代价落在两个维度之间的交叉项上:这些项也得学出来,开销记在一个更大的协方差上。
2一个高斯怎么同时装下时间与视角
先把地基铺清楚,因为后面的切片全部长在这套记号上。
最底层是 3D 高斯泼溅。每个高斯有均值 µ(空间位置)和一个 3×3 的协方差矩阵 Σ(形状、尺度、朝向)。为了让优化过程里 Σ 始终是合法的协方差矩阵,实践中不直接学 Σ 的九个数字,而是把它拆成旋转与缩放两部分:
颜色不存成固定值,而是存一组球谐系数,渲染时按观察方向 d 取值:
这两条用了几年的老配方,处理的是「空间 + 一点方向感」。6DGS 从这里往外走了一步,把方向也写成一个随机变量 Xd,与位置 Xp 拼成一个六维联合高斯,两块之间的交叉协方差 Σpd 专门记「位置与方向怎么相互影响」:
这里有个工程上的坑要先说清:六维协方差有 21 个自由数字,随便学很容易学出非正定的矩阵(行列式为负、或者某个方向方差为负),一旦如此,条件分布那一步就会算出负的方差。6DGS 的解法是做 Cholesky 分解,把矩阵写成一个下三角矩阵与自己的转置相乘,并强制三角矩阵的对角元为正:
这个写法看起来只是换了个参数化,实际解决了两件事:合法性由构造保证(L Lᵀ 天生半正定),求逆也更省(三角矩阵的求逆是回代,比一般矩阵便宜)。7DGS 把同一招沿用到七维,因此这一步沿用的是同一团队此前工作(6DGS)的路子,原文相关工作与预备知识两节都把这条线交代得很清楚,读的时候不要把 6DGS 的贡献记到这篇头上。
7DGS 的正式定义是把时间那一个维度插进中间:
三个对角块各管一件事:Σp 管这块几何有多大、朝哪儿;Σt 是一个标量方差,管它在时间轴上「活跃」多宽;Σd 管它的方向偏好有多挑。三个非对角块才是这篇的着力点:Σpt 记空间与时间的联动(一个点随时间怎么走),Σpd 记空间与方向的联动(同一点在不同视角下长什么样),Σtd 记时间与方向的联动(高光随时间与视角的联合漂移)。
参数账要在这里算一次,它后面还会用到。三维高斯的协方差是对称 3×3,六个自由数字(实践里拆成三个缩放加三个旋转);七维协方差是对称 7×7,下三角要存 28 个数字,是前者的近五倍。再算上四个额外均值(时间一个、方向三个),同一个高斯携带的参数多了好几倍。这条账解释了第 11 章之外的一件事:这篇论文只报「点数」这一个规模指标,没有报显存与训练峰值内存。点数少与内存少是两件事,七维把每个点的成本抬高了。
颜色这里做了一个明确的取舍:仍然只用球谐、不额外挂时间依赖。原文给的理由是动态信息已经写在高斯参数里了。这句话等于承认球谐那部分没有吃到七维表示的红利,后面第 13 章会把它算成一处边界。
七维结构与三个模块的衔接关系,原文用一张流程图交代。
图上那两个模块的先后次序要看清:精修在网络里做,切片在精修之后。这个顺序决定了第 5 章的残差网络能改到哪些量,它改的是切片之前的七维参数,因此形状与朝向才有机会随时间动。
3把七维分布切回三维图纸的那一刀
现在到全文最关键的一步。
渲染一张图,需要给定两个具体值:时刻 t 与相机方向 d。七维高斯是一个分布,而泼溅管线要的是一组三维高斯。把「分布里 Xt = t、Xd = d」这个条件代进去,剩下的空间部分仍然是高斯分布——这是多元高斯的经典性质,原文直接引用并写出结果:
条件均值与条件协方差两块要分块来做。先把七维协方差按「空间」与「时间 + 方向」切成四块,记 Σ(t,d) 为时间与方向那块的 4×4 矩阵(内部含 Σt、Σtd、Σd),记 Σp,(t,d) 为空间与它们的 3×4 交叉块([Σpt, Σpd]),于是:
这两个式子的读法可以直接从形状上判断,不必展开矩阵。
先看均值那一项:[t − µt; d − µd] 是「实际时刻与方向」偏离「这个高斯偏好的时刻与方向」多少。偏离量乘上交叉块,再乘时间方向块的逆,得到的就是这次偏离应该把空间位置推多远。原文给的解释就是这个意思:这一项按偏离量把空间均值 µp 挪一下。举个能落地的例子:一个高斯比较喜欢在 t=0.4 附近出现,并且它的 Σpt 表示「越晚出现、位置越往右」。渲染 t=0.6 这一帧时,偏离量是正的,均值就被往右推;渲染 t=0.2 时被往左推。时间维度对空间的作用,是通过这个平移量实现的。
协方差那一项可以反过来读:Σcond 是「从空间自己的方差里,减掉已经被时间与方向解释掉的那部分」。原文的说法是移除由时间与方向分量解释的方差。这一步在直觉上等于:一个高斯如果「它的位置变化全都能由时间解释」,那么给定时刻之后,它在空间上剩下的不确定性就很小,切出来的高斯就更瘦更实。切片做的事,是用掉条件信息之后看还剩下多少三维不确定性。
这套切法有两个工程后果,要单独说。
第一个是切完的东西是标准件。 µcond 是三维向量,Σcond 是 3×3 矩阵,两个都是从「高斯参数 + 当前 (t, d)」算出来的普通数字。它能直接喂给透视投影,变成一组二维高斯,再用可微光栅化做深度感知的混合。原文在渲染管线那一节就是这么写的,并且明确说了「与 3DGS 完全兼容」。这句话的意思是,这篇论文不需要写新的泼溅器。 这一点很实用:渲染速度的量级不是它重新争取来的,是继承来的。
第二个是切法的成败全压在那些交叉块上。 如果 Σpt、Σpd 学成了接近零的矩阵,那么公式 3-2 的修正项近似为零、公式 3-3 的减项近似为零,切出来的高斯就是一个静止的三维高斯——七维表示退化回三维,动态与视角依赖全部丢失。交叉块非零,才是这套表示「有内容」的判据,这也是第 6 章分裂判据要直接读 Σpt 的原因。
成本账也在这里记一笔。每个高斯、每一帧都要算一次时间方向块 Σ(t,d) 的逆(一个 4×4 矩阵)加两次矩阵乘。这块矩阵每个高斯都不一样,整场景没法共用一次计算,所以这是一笔随点数线性增长的固定开销。原文没有单独报这一步占多少帧时间,第 9 章那组对照给了一个侧面读数:完整版与去掉精修版之间的帧率差,说明切片之外的模块花掉了近一半帧时间。另一处省下来的开销写在算法第 7 步:对 Σcond 做奇异值分解,只是为了取出缩放与旋转供致密化使用,因此它标着「可选」,单帧渲染路径上不必做。
原文把整条流程写成了算法 1,共七步,顺序要对一遍:先把特征向量拼出来(第 5 章)、做自适应精修、重建精修后的协方差、按块切开、算条件统计量、算条件不透明度、最后可选地对 Σcond 做一次奇异值分解,取出缩放 S 与旋转 R 供致密化使用。注意第 7 步标着「可选」,它只在需要致密化时才做——单帧渲染不需要它,这是一个有意省下来的开销。原文还提到这套切片目前是在框架层实现的,后续可以写进 CUDA 进一步加速(第 13 章会把它算成一处「读数还有余量」的证据)。
4偏离期望的高斯,自己就把权重让出去
切片解决了「位置与形状」,还剩一个量:不透明度 α。
这里的做法带着明确的目的:让一个高斯在当前时刻或当前视角「不属于它」的时候,少往画面上贡献。 原文定义了两个指数衰减的因子。时间方向是一个标量:
方向那一个要把三维的偏离量按 Σd 归一化,再取内积:
两者乘在基础不透明度上:
三个角色分得很清楚。µt、µd 是这个高斯「什么时候、从哪个方向看最明显」;Σt−1 与 Σd−1 决定了这个「明显窗口」有多窄——方向协方差越小,说明这个高斯越挑视角,稍微偏一点就迅速衰减;λt 与 λd 是两个额外的灵敏度旋钮,原文按数据集分别取初值(自建数据集 0.5,D-NeRF 0.05,Technicolor 0.1),并在 15,000 次迭代后转为可训练。
拿一个运动高光来验一遍这三个因子的配合:那颗高光的 µd 指向它反射相机的那一小片方向,Σd 很小(挑方向);同时它的 Σt 也不大、µt 落在它出现的那个时刻附近。相机转到别处、或者时间走过那段,两个因子一起衰减,这颗高光就自动消失。它不需要单独一套「高光图层」,高光的出现与消失就是这两个因子的乘积在起作用。
把数字代进去,看这个窗口有多陡。取 λt = 0.5、Σt = 0.01(相当于一个标准差 0.1 个时间单位的活跃窗口),指数里的量是 (t − µt)²/Σt 再乘 −½λt:偏离 0.1 时 ftemp = exp(−0.25) ≈ 0.78;偏离 0.2 时 exp(−1.0) ≈ 0.37;偏离 0.3 时 exp(−2.25) ≈ 0.11。偏离两倍标准差,贡献掉到三分之一;三倍标准差,掉到十分之一。 方向因子按同一套逻辑再乘一次,所以一个高斯要「时间对、方向也对」才能满额贡献;两处各掉一半,乘起来只剩四分之一。λ 的初值按数据集分档(0.5 / 0.05 / 0.1)调的就是这个窗口的陡度,λ 越小窗口越宽容。
这套乘积还有一个连带的账,第 6 章会动到它:所有高斯的有效不透明度都被压了一到两层,而 3DGS 原本按不透明度剪枝(默认阈值 0.005,原文只说「提高」,没有给出旧值)。
这里要停一下,因为 αcond 的引入带来了一个容易被忽略的连锁反应,原文在优化那节主动交代了:因为条件不透明度是两个小于 1 的因子乘出来的,所有高斯的有效不透明度都变小了。 3DGS 原本会剪掉不透明度低于 0.005 的点,阈值不动的话,七维表示下会有大量点因为「被调制」而被误删。原文的对策是把最小不透明度阈值提高到 τmin = 0.01。这是全文里改动最小、但读起来最有信息量的一处细节:它说明这套表示与既有管线的兼容不是零成本的,代价落在一个剪枝阈值上。
5形状不会自己变,所以补了一个小网络
切片把均值与不透明度都变成了 (t, d) 的函数,但有一个量它没动:协方差本身。原文把这一点直接点明——高斯的固有形状由协方差决定,而这个形状在时间上保持静态。后果很具体:非刚体形变(一块布、一颗跳动的心肌、一团被搅动的烟)会表现为「形状自己在变」,而公式 3-3 只把方差减小,不会把它改写成另一种形状。
补上这一块的做法是用几个小网络预测残差。
先把每个高斯的上下文拼成一个特征向量,包含空间均值、时间均值、方向均值,以及一段对时间的高频编码:
γ(t) 是这套设计里要单说的一项。时间是一个标量,直接喂给网络的话,网络很难从一个数字里分辨出「第 0.42 秒」与「第 0.43 秒」这种细粒度差别(这类差别在 15 个或 60 个时间戳的数据集里恰恰是关键)。把 t 展开成 10 个不同频率的正弦余弦对(共 20 维),高频项负责放大细微差别、低频项负责给出全局走势,这与位置编码在同一篇团队工作里用过的手法是同一套思路。
然后是四个两层的小网络,它们输出的残差按元素加到原参数上:
其中 l 是七维协方差下三角分解 L 里的那些元素(公式 2-6 的 L 向量化之后)。四个网络结构相同,都是「输入维 × 64 × 输出维」的两层 MLP,其中最后的 φl 动的是协方差因子,这就是「形状与朝向随时间变」的落点。
四个残差各买一件事,要分开看。φp 让位置可以随时间与视角漂移,运动轨迹的一部分交给网络补;φt 让这个高斯「活跃的时刻」本身可以挪,用来吸收时间戳稀疏带来的对齐误差;φd 让它的偏好方向可以转,高光的反射方向就随时间摆动;φl 改的才是形状与朝向。前三项都在把高斯搬到更合适的位置,只有第四项真动了切片动不了的那一维,这就是 AGR 存在的直接理由。
代价是几个手选的数字:两个冻结时点(精修网络 3,000 次迭代开始训练、λ 在 15,000 次迭代后转为可训练)和 λ 的三个初值(0.5 / 0.05 / 0.1)。原文没有对它们做敏感性实验,第 13 章会把这一点算成复现风险:换一套时间戳密度完全不同的序列,这几个数字该取什么,原文给不出依据。
这里有一个次序上的细节,前面提过一次,在公式旁边再确认一遍:精修发生在切片之前(算法 1 的第 2 步在第 5 步之前)。所以网络修的是七维参数,修完之后才按 (t, d) 切片。如果反过来,网络就只能在一个已经定型的条件高斯上做修补,形状与朝向的调整空间会小很多。
训练安排上原文交代得很细,这些数字决定了复现的难度:精修网络在 3,000 次迭代之后才开始训练(前期让几何先成型),学习率 2×10−4;时间与方向均值的学习率是 2.5×10−2,协方差对角元 5×10−2,下三角非对角元 1×10−2,其余沿用 3DGS 默认值;λt、λd 在 15,000 次迭代后从常数转为可训练。两个「先冻结再放开」的时点(3k 与 15k)说明作者在训练稳定性上做了取舍,代价是这些时点本身也成了需要人工设定的超参。
6在哪里生点:按时空相关性而不是只看梯度
致密化这一步,操作没有换:克隆与分裂两个动作照旧保留。换掉的是判据。
原文先把依赖关系讲清:要把点加在哪儿,得先知道每个点随时间怎么走。3DGS 那套自适应密度控制框架被沿用下来,7DGS 多加了一路线索,原文的原话是「除了空间梯度之外,还用了时间线索」。空间这本账老方法手里已经有,时间这本账记在七维协方差里。
动手之前,要先拆开一个量。致密化作用在缩放与旋转上,而切片吐出来的是 3×3 的条件协方差 Σcond,得把它换成这两个量。原文对 Σcond 做奇异值分解 Σcond = U D U⊤,取旋转 R = U、缩放 S = √diag(D)。Σcond 是对称矩阵,这一步的 U D U⊤ 与特征分解的写法重合,D 里装的就是特征值。
后面跟了一句小修正:把 R 的最后一列乘上 sign(det(R))。正交矩阵的行列式可能是 −1,那表示的是一个镜像;翻过符号之后 det(R) = 1,坐标架回到右手系。原文给的理由是「确保 R 表示右手坐标系」。这一句读起来像例行体检,它决定了 S 与 R 乘回去还能不能还原出原来那个椭球。
判据本身读的是 Σpt 这一块。门槛是两个条件同时成立:Σpt 的量级超过 0.05(相对屏幕范围),并且由 Σt 归一化出的时间尺度大于 0.25。两条都过,这个点才分裂。
两个数各管一件事。0.05 管空间与时间的联动强不强:Σpt 大,说明这个点的位移跟时间绑得紧,它不是一个钉着不动的点。0.25 管这个点在时间轴上活跃多宽:除以 Σt 归一化之后,不同尺度的场景被拉到同一把尺子上比,时间尺度越长,它在更多帧里都算数。单看一条都会误判:只过 0.05 的可能是猛动一下就消失的瞬态点,只过 0.25 的可能是活得久却基本没挪过的背景点。两条合起来,圈出来的才是动得多、还一直动的区域。原文对这一点的说明只有一句,运动剧烈的区域因此被更密的点覆盖。这两个阈值怎么定出来的,原文没交代,也没有给敏感性实验,第 13 章会把它算成一处空白。
剪枝那一侧有一个连锁反应要先接上。第 4 章讲过,αcond 是两个小于 1 的因子乘出来的,所有点的有效不透明度都被压小了一截。此时若沿用旧阈值,会有大量只是被调制过的点被当成废点剪掉。原文的处置是把最小不透明度阈值提高,新值是 τmin = 0.01。原文只写了「提高」,没有说原来的值是多少;3DGS 原版的默认阈值是 0.005,这一处对比是原文之外的常识,拿来把量级摆清楚。
训练上有两个先冻结、后放开的时点。精修网络(AGR)的参数在第 3,000 次迭代才开始训练;λt 与 λd 起初是常数,到第 15,000 次迭代转为可训练。安排的意思大致是先让几何成型,再让网络与两个灵敏度跟着动。
学习率按参数分四档:时间与方向的均值 µt、µd 拿 2.5 × 10−2,协方差对角元 5 × 10−2,协方差下三角的非对角元 1 × 10−2,精修网络参数 2 × 10−4,其余沿用 3DGS 的默认值。硬件是一张 V100(16 GB 显存),优化器 Adam;除 Technicolor 之外都按 4DGS 的配置跑,批量 4、下采样 2,Technicolor 不下采样、批量降到 1。
把这些改动并成一张清单,会看到它很短:损失函数、优化器、超参都没动,动的只有两处,一处是剪枝的最小不透明度阈值,另一处是致密化判据里多加的那两路时间条件。「与 3DGS 兼容」这句话落到代码层,就是这个形状。
原文对这一节的定位写得很清楚:致密化的目标是空间、时间、方向三个维度上都被覆盖到。空间那一维靠 3DGS 原有的机制,时间那一维就靠上面那条读 Σpt 的判据,方向那一维则落在方向协方差 Σd 上。另外,SVD 那一步在算法 1 里标着「可选」,它只在需要致密化的轮次里做,单帧渲染不必付这份开销——这一点在第 3 章提过,放到这里看更清楚:致密化与渲染两条路径共用同一套切出来的量,但额外的那次分解只挂在致密化上。
7三个数据集,其中一个是为了「视角依赖」自己渲的
三个数据集里,两个是公开的,一个是作者自己渲的。
D-NeRF 是合成数据:8 个场景、单目视频、分辨率 800 × 800。Technicolor 是实拍,用同步的 4 × 4 相机阵列拍下的多视角视频,2048 × 1088;表 1 里它出现 5 个场景,birthday、fabien、painter、theater、train。这五个场景名原文正文没有列,是从表 1 的行里读出来的。7DGS-PBR 是自建的,6 个场景,原文给它的定语是「复杂视角依赖效果」。三个数据集里只有它专门为这件事而做,这一点先记住。
7DGS-PBR 的六个场景来自四路:heart1 与 heart2 从真实 CT 扫描导出心动周期,各 15 个时间戳;cloud 基于 Disney 动画工作室的体积云数据,一个完整的昼夜循环,60 个时间戳;dust 与 flame 取自 Blender Market 的 VDB 素材,分别是 79 帧与 101 帧;suzanne 是 Blender 的标准测试网格,贴半透明 Glass BSDF 材质,60 帧的果冻式形变。
采集口径这样切:每个时间戳在六个场景上分别采 300、60、20、10、10、10 个视角,训练与测试按 9:1 划分。按这套数字加总,六个场景合计 9000 张参考图,其中 8,100 张进训练、900 张进测试。渲染走 Blender 的 Cycles,heart1 是 1000 × 1000,其余五个是 1600 × 1600。
把六个场景的图量摊开看:heart1 4500 张、heart2 900 张、cloud 1200 张、dust 790 张、flame 1010 张、suzanne 600 张。heart1 一个场景就占了整个数据集的一半,它每个时间戳采 300 个视角,是六个场景里采得最密的;cloud 每个时间戳 20 个视角,其余四个场景各 10 个。时间戳那一头正好反过来:heart1 与 heart2 各 15 个,cloud 与 suzanne 各 60 个,dust 79 个,flame 101 个。两个心脏场景是时间点少、每个时间点看得多;dust 与 flame 是时间点多、每个时间点看得少。 9:1 落成具体数字,是 900 张进测试,而原文没有交代测试集是按时间戳切还是按视角抽——这两种切法对应「新时刻」与「新视角」两种不同的难度,读表时先留着这个口子。
成本这一笔要算清。单张参考图在 V100 上的离线渲染耗时是:heart1 8 秒、heart2 18 秒、cloud 311 秒、dust 16 秒、flame 28 秒、suzanne 26 秒。
云场景那 311 秒落到地上:一个时间戳 20 个视角,就是 6220 秒,接近 1.7 小时;60 个时间戳乘下来是 373,200 秒,约 103.7 小时,四天多。再把它放进整个数据集里比:六个场景 9000 张图按这张价目表渲完,合计 481,920 秒,约 134 小时、5.6 天;云只占其中 1200 张(13.3%),却吃掉 77% 的总耗时。另一头是 heart1:4500 张图,占了全数据集的一半,只花 36,000 秒,占 7.5%。
第 1 章那张参考图上的「0.125 帧」与「0.003 帧」也对得上。1 ÷ 0.125 = 8 秒,对应的就是 heart1 的单张耗时;1 ÷ 0.003 ≈ 333 秒,与云的 311 秒同一量级。物理渲染的参考图不是一份现成数据,它是一张一张算出来的,云场景那张比心脏场景那张贵 39 倍。
另外两个数据集的参考图不在这笔账里。原文只报了自建数据集六个场景的离线耗时;D-NeRF 的图来自数据集自带的合成渲染,Technicolor 的图是 4 × 4 相机阵列实拍下来的,两者都不需要这篇再花离线时间。311 秒那一档只属于自建数据集,把它读成「这篇渲染了三份数据集」会把成本算高一个量级。
点云初始化分三种:heart1 与 heart2 走 marching cubes,沿用同团队 DDGS 的做法;其余场景在包围盒里撒 10 万个随机点;Technicolor 用 COLMAP 稀疏重建。原文最后补了一句,7DGS-PBR 会公开。
这三种做法对得上三种处境。heart1 与 heart2 手里有 CT 体数据,能算出等值面,于是走 marching cubes;cloud、dust、flame、suzanne 是合成场景,手里没有真值几何可依,就在包围盒里撒 10 万个随机点;Technicolor 是实拍,只能先用 COLMAP 做稀疏重建,把相机位姿和一批稀疏点估出来。真实数据比合成数据多一道估计工序。(这层对应关系是从三种做法里读出来的,原文只写了做法,没有给理由。)
最后把三个数据集的角色对齐:D-NeRF 是合成的单目视频,Technicolor 是真实的多机位视频,7DGS-PBR 是物理渲染出来的六场景多视角数据。三者的参考图来源也不一样——自建数据集的图是体积路径追踪算出来的(第 1 章标为 Volumetric Ray Tracing),另外两个数据集的图来自数据集本身。第 8 章的增益会集中落在第三个数据集上,读那张表时把这条口径带上。
8主结果逐行读:点数只剩 15.3%,PSNR 涨 4.71 dB
先摆骨架。Table 1 分三块,一块一个数据集;每块里三组列,依次是 4DGS / 7DGS(完整版)/ 7DGS(去掉 AGR);每块最后一行是 avg。这个 avg 是该数据集内部逐场景的平均,不是三个数据集的总平均,三块各挂一行。每组列里跟着 PSNR、SSIM、LPIPS、Train(分钟)、FPS、# points 这几项,第三组列比前两组少一列 Train(第 9 章细说),表头的箭头就是方向:PSNR ↑、SSIM ↑、LPIPS ↓、Train ↓、FPS ↑、# points ↓,朝着箭头走都是变好。
7DGS-PBR 是增益的主场。平均 PSNR 从 27.79 到 32.50,涨 +4.71 dB;点数从 641,960 掉到 98,440,只剩 15.3%。六个场景全部上涨:heart1 +8.18 dB(27.30 → 35.48),点数 694,006 → 82,813,只剩 11.9%;heart2 +6.67;cloud +4.97;suzanne +3.81;flame +3.19;dust +1.42。
点数那一列在同一块内部也有粗有细:flame 从 947,786 压到 16,544,只剩 1.7%;cloud 从 216,878 到 44,858(20.7%);heart1 与 heart2 分别剩 11.9% 与 11.3%;suzanne 剩 43.9%。质量那一列也不是只有 PSNR 在动,同一块里 heart1 的 SSIM 从 0.949 升到 0.986、LPIPS 从 0.046 降到 0.020,cloud 的 LPIPS 从 0.100 降到 0.075。点数压到 1.7% 的 flame,PSNR 还涨了 3.19 dB,这一格是整张表里最刺眼的性价比。
增益的分布有规律可循。六个数从 +8.18 排到 +1.42,而 4DGS 那边的基线 PSNR 大致从 24.45 排到 35.88。基线越低,涨得越多:两个心脏场景与云场景在 4DGS 下都只有 24 到 27 dB,拿走了 +4.97 dB 以上的增益;dust 的基线 35.88 是六个场景里最高的,增益也最小,只有 +1.42。suzanne 是这条规律的例外,它的基线 24.45 最低,增益却只有 +3.81。
D-NeRF 那块读起来是两个方向。平均 33.21 → 34.34,涨 +1.13 dB,点数 47,378,剩 18.6%。八个场景六个涨两个跌:涨得最多的是 lego(25.58 → 28.86,+3.28)与 j.jacks(+2.43),跌的是 h.warrior(34.10 → 32.96,−1.14)与 hook(32.93 → 31.57,−1.36)。两处退步原文一个字没提。
Technicolor 那块的名次是倒过来的。平均 33.25 → 33.58,只涨 +0.33 dB,点数 416,390,约一半。五个场景里三个涨两个跌:painter 35.09 → 36.54(+1.45)、birthday 31.28 → 32.31(+1.03)、train 32.58 → 32.64(+0.06),下跌的是 fabien 35.48 → 34.87(−0.61)与 theater 31.84 → 31.54(−0.30)。那个 +0.33 的平均,靠 painter 与 birthday 两处扛出来。
点数在这一块是最不整齐的:fabien 从 705,106 砍到 107,240,只剩 15.2%,PSNR 却跌了 0.61 dB;train 从 1,412,917(全表最大的一格)砍到 1,043,645,还剩 73.9%,PSNR 只涨 0.06 dB。五个场景的点数比从 15.2% 铺到 73.9%,砍得最狠的那一格与涨得最多的那一格不在同一个场景上。
训练时长那一列的数字是:7DGS-PBR 从 127.2 到 116.7 分钟,D-NeRF 从 52.6 到 50.7,Technicolor 从 358.9 到 112.1。三个降幅不在一个量级上:Technicolor 从接近 6 小时压到不到 2 小时,D-NeRF 省下不到 2 分钟。4DGS 那一侧在 7DGS-PBR 上的跨度也不小,dust 97.0 分钟到 suzanne 222.5 分钟,差 2.3 倍;7DGS 把它收到 69.8 到 193.9 分钟,suzanne 仍然是六个场景里最慢的一个。
把三块的平均摆到一起:27.79 → 32.50(+4.71)、33.21 → 34.34(+1.13)、33.25 → 33.58(+0.33)。增益的分布跟数据集来源绑在一起。涨得最多的 7DGS-PBR 是作者为自己要做的那件事专门渲的,也是 4DGS 基线最低的一块(27.79,另两块都在 33 dB 上下);两个公开数据集上基线本来就高,能挤出来的都在 1 dB 以内。
SSIM 与 LPIPS 两列的平均值也可以顺着三块看一遍:7DGS-PBR 的 SSIM 从 0.934 到 0.958、LPIPS 从 0.079 到 0.051;D-NeRF 是 0.969 到 0.972、0.036 到 0.032;Technicolor 是 0.905 到 0.912、0.216 到 0.198。六个读数全是朝着好的方向走的,其中挪得最小的是 Technicolor 的 SSIM,只动了 0.007。
表上还有一列要盯住:FPS 那一列的完整版。7DGS-PBR 平均 174.7,4DGS 是 192.6;D-NeRF 194.2 对 296.4;Technicolor 79.2 对 84.2。三块全输。Technicolor 的 train 是最极端的一格:它的点数 1,043,645 是全表最大的,完整版帧率 18.6 是全表最小的,比 4DGS 在同一场景上的 58.3 还低一半多。速度的赢面不在这组列里。
9把 AGR 摘掉:+3.98 dB 还在,帧率翻倍
Table 1 最右边那组列是全文信息量最大的一组:把自适应高斯精修(AGR)整个摘掉。
先看 7DGS-PBR:PSNR 平均 31.77 dB,比 4DGS 的 27.79 高 +3.98 dB;点数 88,393,是 4DGS 的 13.8%;平均帧率 376.0。同一个数据集上,完整版是 32.50 dB、98,440 点、174.7 帧。D-NeRF 是 33.26 dB,比 4DGS 高 +0.05 dB,点数 43,823(17.2%),帧率 377.8。Technicolor 是 33.30 dB(+0.05),点数 406,637(48.5%),帧率 278.0。
把三个数据集的增益拆成两笔,方向就清楚了。每一笔都等于「完整版减掉去掉 AGR」加上「去掉 AGR 减掉 4DGS」:7DGS-PBR 是 0.73 + 3.98 = 4.71;D-NeRF 是 1.08 + 0.05 = 1.13;Technicolor 是 0.28 + 0.05 = 0.33。
同一套网络,在三个数据集上补的份量完全不同。 在自建的 7DGS-PBR 上,4.71 dB 里有 3.98 dB 来自七维表示本身,网络只补 0.73;换到 D-NeRF 上正好反过来,1.13 dB 里 1.08 来自网络,七维表示只贡献 0.05。
代价那一侧是帧率。7DGS-PBR 上平均帧率从 376.0 掉到 174.7,只剩 46.5%:AGR 换来 +0.73 dB,价钱是速度砍掉一半多。逐场景看,这个代价还不均匀:suzanne 从 317.9 掉到 62.5,掉八成,62.5 是 7DGS-PBR 那一块里最低的一格;heart1 从 401.0 到 155.7;heart2 从 384.6 到 139.5;cloud 从 386.2 到 199.2;dust 从 394.8 到 243.9;flame 从 371.6 到 247.2。收益最大的两个场景,付得也最多:suzanne 净赚 +1.12 dB(27.14 → 28.26),flame +0.86 dB(31.67 → 32.53),其余场景的净收益依次是 heart1 +0.82、heart2 +0.81、dust +0.43、cloud +0.31。
另外两个数据集付出的代价更大:D-NeRF 从 377.8 掉到 194.2,剩 51.4%;Technicolor 从 278.0 掉到 79.2,只剩 28.5%。
原文对速度的总结是「约为完整版的两倍」。逐数据集核一下:7DGS-PBR 是 376.0 ÷ 174.7 = 2.15,D-NeRF 是 377.8 ÷ 194.2 = 1.95,都落在两倍上下;Technicolor 是 278.0 ÷ 79.2 = 3.51,明显超过两倍。
跟 4DGS 比速度也要分块看。7DGS-PBR 去掉 AGR 之后的帧率落在 317.9 到 401.0 之间,4DGS 那一列是 141.8 到 296.1,去掉 AGR 那组里最慢的一格(suzanne 的 317.9)比 4DGS 最快的一格(dust 的 296.1)还快。D-NeRF 是 213.1 到 432.8 对 169.2 到 366.0,Technicolor 是 237.1 到 364.0 对 58.3 到 110.5,三块方向一致。
「400 帧以上」这句话要按格读。去掉 AGR 之后,7DGS-PBR 里越过 400 的只有 heart1 一格(401.0),三个数据集的平均帧率分别是 376.0、377.8、278.0,全在 400 之下;D-NeRF 块里有三格越过(431.5、432.8、432.4),Technicolor 一块也没有。结论里那句「超过 400 FPS」在单个场景上成立,在平均线上不成立。
两个公开数据集上,去掉 AGR 的版本还有一个特点:质量跟 4DGS 基本打平(各高 0.05 dB),速度与点数却是净赚。D-NeRF 上 377.8 对 296.4,快 27%;Technicolor 上 278.0 对 84.2,快 3.3 倍,点数还只要 48.5%。公开数据集上这一版的赢面在速度与点数,自建数据集上赢面才轮到质量。
D-NeRF 上 AGR 的收益也不均匀:j.jacks +2.20、standup +2.15、mutant +1.77、b.balls +1.05、hook +0.62、trex +0.59、h.warrior +0.18、lego +0.14。八个场景里两个吃掉大头,其余六个几乎不动,这就是它平均下来只剩 +1.08 的原因。原文解释 AGR 存在的必要性时举的是非刚体形变与运动引起的形状变化,没有逐场景归因;这里只报数字。
去掉 AGR 不只是 PSNR 在退,SSIM 与 LPIPS 也跟着退一点:7DGS-PBR 的 SSIM 从 0.958 退到 0.955、LPIPS 从 0.051 涨到 0.055;D-NeRF 是 0.972 到 0.969、0.032 到 0.037;Technicolor 是 0.912 到 0.908、0.198 到 0.206。三处的退幅都很小,这一列付出的代价主要落在帧率上。
表里另有一格是空的:第三组列按原文表头只列了 PSNR、SSIM、LPIPS、FPS、点数五项,没有训练时长那一列。因此「去掉 AGR 之后训练是更快还是更慢」,这张表答不了,原文正文也没有给数。
点数那一列跟着出现一个反向的现象:带着 AGR 的点数反而更多。7DGS-PBR 平均 98,440 对 88,393(多 11.4%),D-NeRF 47,378 对 43,823(多 8.1%),Technicolor 416,390 对 406,637(多 2.4%)。原文没有解释这个方向,只给了数字;一个可能的解释是 AGR 改动了 Σ 与均值,致密化判据读到的量跟着变,不过这一句属于推测,原文没有给说法。
图 1 里还有一处交叉能对上。首图标着的心脏场景读数 34.66 dB 与 401.0 帧,与 Table 1 里 heart1 的「去掉 AGR」两格逐位相同;云场景的 386.2 帧也在同一组里,PSNR 29.26 与表里的 29.29 差 0.03。首图讲的那个故事,属于去掉 AGR 的那套配置。
声明口径也顺带对齐一下:摘要写的是「401 FPS」,没有带条件;结论写的是「超过 400 FPS(去掉自适应精修)」,把条件补上了。同一组数字,两处的完整度不一样。
最后把这一列读成一句话:七维表示自己扛住了大头(自建数据集上 3.98 占 4.71),网络补的是形变那一块(D-NeRF 上 1.08 占 1.13)。
10与 SOTA 比:PSNR 赢、SSIM 与 LPIPS 各有输赢
Table 2 是上下排的两块小表:上块 D-NeRF,下块 Technicolor;每块七行方法、三列指标,PSNR ↑、SSIM ↑、LPIPS ↓。
* 的方法(4DGS*、Ex4DGS*)是作者用官方代码自己复现的结果;原文表注提醒,D-NeRF 这一块里各方法的 LPIPS 只有两位小数,0.03 与 0.04 之间的差落在精度里,不宜细读。另外下块表头写的是 LPIPS-Alex、上块写的是 LPIPS,两块的标注口径不同,原文没有展开解释。
来源:7DGS (arXiv:2503.07946v1), Table 2, p.8 · © 2025 Zhongpai Gao 等 · arXiv 预印本许可(非 CC)· 原样引用,未修改 · 残留风险:arXiv 为非独占许可,正式出版后条款可能变更。
D-NeRF 这一块,PSNR 那一列赢得干净:34.34 dB 领先,比 4DGaussians 的 33.30 高 1.04 dB,比复现的 4DGS*(33.21)高 1.13 dB,比 DaReNeRF 的 31.95 高 2.39,比这个数据集的原方法 D-NeRF(29.67)高 4.67。
SSIM 那一列就让了一步:4DGaussians 的 0.98 排第一,7DGS 的 0.97 与 HexPlane、K-Planes、DaReNeRF、4DGS* 并列排在它后面。LPIPS 那一列是 0.03,与 DaReNeRF、4DGaussians 并列最好,4DGS* 与 HexPlane 是 0.04。原文的表注在这里踩了一脚刹车:这一块里各方法只保留两位小数,0.03 与 0.04 的差在精度之内,顺着这 0.01 讲故事不合适。这一块的行序基本就是名次序,29.67、31.05、31.61、31.95、33.21、33.30,最后一行是本方法 34.34,从上往下读等于从差到好读。下面那一块不是这个顺序,4DGaussians 的 30.79 排在第三行,比它前面两行的 31.80 与 32.73 都低。
Technicolor 这一块,PSNR 还是第一,但领先变薄了:33.58 dB,比复现的 Ex4DGS*(33.49)高 0.09 dB,比 STG(33.23)高 0.35,比复现的 4DGS*(33.25)高 0.33。
SSIM 和 LPIPS 在这一块各让一格。SSIM 上 Ex4DGS* 的 0.917 最高,7DGS 的 0.912 与 STG 完全相同,后面是 HyperReel 0.906、4DGS* 0.905、4DGaussians 0.843。LPIPS 上 STG 的 0.085 最好,Ex4DGS* 0.094,7DGS 的 0.101 掉到第三,再往后是 HyperReel 0.109、4DGS* 0.110、DyNeRF 0.142、4DGaussians 0.178。原文自己也是拆开写的:PSNR 用「state-of-the-art」,SSIM 用「competitive」,LPIPS 直接承认「slightly higher (worse)」。三个指标在 Technicolor 上不朝一个方向。
表里还有空格:K-Planes 那一行没有 LPIPS,DyNeRF 那一行没有 SSIM,原文没有说明原因。一个方法少报一列,它在那一列上的名次就无从比,遇到空格只能跳过,不要当成零或当成最优。两块之间能横着比的方法也不多:只有 4DGaussians 与 4DGS* 两行同时出现在上下两块里,HexPlane、K-Planes、DaReNeRF 只在上块,DyNeRF、HyperReel、STG、Ex4DGS* 只在下块。跨数据集的可比性,实际只有那两行能提供。
另外记一处表与文献对不上的地方:下块有一行的行名是 HyperReel,紧跟的编号是 [26],而文献表里 [26] 对应的是 HyperNeRF。按原文文本读,行名与编号对不上号;碰到这一行,按行名认方法、按编号查出处都要留意。
带 * 的标记还有一个用处:4DGS* 在 D-NeRF 上是 33.21、在 Technicolor 上是 33.25,这两个数与 Table 1 里 4DGS 的两个 avg 逐位相同,同一套读数出现在两张表里,跨表引用是通的。同时出现的那两行正好也能说明「4D 高斯」不是一个数:4DGaussians 与 4DGS* 在 D-NeRF 上分别是 33.30 与 33.21,只差 0.09;到 Technicolor 上变成 30.79 与 33.25,差 2.46。两个都往四维扩的做法,在野外多视角数据上拉开了两 dB 多。
最后看一个反差。4DGaussians 在 D-NeRF 那块是 33.30 / 0.98 / 0.03,三列都靠近榜首;到了 Technicolor 那块变成 30.79 / 0.843 / 0.178,PSNR 最低、SSIM 最低、LPIPS 也最差。同一个方法在合成数据与野外多视角数据上差这么远,Technicolor 这块的门槛不在同一个档上。7DGS 在 D-NeRF 上赢的幅度是 1.04 dB,在 Technicolor 上只剩 0.09 dB,这两块表放在一起读,等于把「质量增益跟数据集难度绑在一起」这句话又说了一遍。
把名次摆一摆会更清楚。D-NeRF 块的七行里,7DGS 是 PSNR 第 1、SSIM 并列第 2(0.97 那一档有五家)、LPIPS 并列第 1;Technicolor 块的七行里,7DGS 是 PSNR 第 1、SSIM 并列第 2(0.912 与 STG 同分)、LPIPS 第 3。PSNR 两处第一,另外两列各让一格,这张表的结论就这么两条。 原文在这一节末尾还留了一句展望:7DGS 的模块化设计允许把别的方法接进来,比如 Ex4DGS 用关键帧插值显式建模大尺度运动的那套做法。这一句是设想,原文没有给对应的实验,读的时候按「作者自陈的扩展方向」对待。
11复算:论文自己的数字,用它的表算一遍
第 10 章把两张表读完了,这一章换一种读法:不转述原文的说法,把表里能核的数字自己算一遍。能核的项目分三类,点数比、训练时长、PSNR 增益。三类都是除法或减法,分子分母都摆出来,读的人可以自己按计算器对。原文在正文与摘要里给了一批结论性数字,这里逐条比过去,看看哪些站得住。自己算一遍有很实际的理由:摘要里的数字会被后来的文章反复转引,原文某处一旦口径含糊,错误就会一路传下去。
先交代口径,免得算的时候取错列。表 1 的列按三个配置分成三组:4DGS、完整版 7DGS、去掉 AGR 的 7DGS。每组里有 PSNR、SSIM、LPIPS、训练时长(Train,单位分钟)、帧率(FPS)与点数(# points)。Train 与 LPIPS、# points 的箭头朝下,越低越好;PSNR、SSIM、FPS 的箭头朝上,越高越好。同一行里,三组之间横着比,得出的是「换方法」的差;同一组里上下比,得出的是「换场景」的差。这一章的复算只做第一种比,也就是把「本方法相对 4DGS」的差算出来。
先说点数比,三个数据集各一条,对应表 1 里 # points 那一列。7DGS-PBR 上,完整版的平均点数是 98,440,4DGS 是 641,960,两者相除得 15.33%,原文写 15.3%。D-NeRF 是 47,378 除以 255,319,得 18.56%,原文写 18.6%。Technicolor 是 416,390 除以 838,892,得 49.64%,原文的措辞是「约一半」。三条都对得上,四舍五入的位差都在一两位小数之内。顺手把 heart1 也算一遍:82,813 除以 694,006 得 11.93%,原文写 11.9%,也站得住。
Technicolor 这里出现两个数,要分清它们各自的位置。49.64% 出自完整版那一列,是完整版的点数比,也对应原文正文里那句「约一半」。去掉 AGR 的那一列,平均点数是 406,637,除以同一个分母 838,892,得 48.47%,原文正文里写的 48.5% 就是这个数。两个读数分属两列,若混着用,就会把「约一半」和「48.5%」看成互相矛盾的说法,实际没有矛盾。读这种逐场景大表,先确认自己在读哪一列,比记住具体数字更重要。
训练时长那一列,单位是分钟。7DGS-PBR 从 127.2 降到 116.7,减少 10.5 分钟,除以 127.2 得 8.25%,原文写「平均减少 8.3%」。数字对得上,口径要留意:8.3% 只是 7DGS-PBR 一个数据集的数,原文那句话就写在 7DGS-PBR 的叙述段里,并没有对三个数据集取平均。同表另外两个数据集,D-NeRF 是 52.6 降到 50.7,减少 3.61%;Technicolor 是 358.9 降到 112.1,减少 68.77%。三个数差得很开,Technicolor 能砍掉近七成,与它本身数据最重、4DGS 在那里训练最慢(358.9 分钟,是三个数据集里最高的一档)有关。把 8.3% 当成「三个数据集的平均降幅」是误读。
PSNR 那一组是纯减法。7DGS-PBR 平均 32.50 减 27.79,得 4.71,对上原文的 +4.71 dB。heart1 是 35.48 减 27.30,得 8.18,对上原文的 +8.18 dB。去掉 AGR 后的 31.77 减 27.79 得 3.98,对上 +3.98 dB。D-NeRF 是 34.34 减 33.21 得 1.13,Technicolor 是 33.58 减 33.25 得 0.33。这五条也都对得上。算术层面全部核完,一共十三条,没有一条算错。
把上面的账聚一下。算术层面十三条全部对得上:15.33%、18.56%、49.64%、48.47%、8.25%、3.61%、68.77%、4.71、8.18、11.93%、3.98、1.13、0.33。原文正文与摘要里出现的结论性数字,凡是能从表里复算的,没有一条是错的。这说明这张表的数字经得起核对,需要打问号的地方在围绕它写的那几句结论上,也就是下面两处。
第一处对不上的是「最高 7.36 dB」。这句话在摘要和结论里各出现一次,两处都写本方法在 PSNR 上比既有方法高「最多 7.36 dB」。翻回表 1,单场景里增益最大的是 heart1,35.48 减 27.30 得 8.18 dB,比 7.36 高出 0.82 dB。表里第二大的增益是 heart2 的 25.13 到 31.80,即 6.67 dB;第三为 cloud 的 24.63 到 29.60,即 4.97 dB。7.36 落在 8.18 与 6.67 之间,与表内任何一个场景都对不上。表里的最大值反而比摘要里的最大值更大,两处不自洽。原文没有交代 7.36 是怎么来的,它可能出自另一次实验,也可能用的是另一套基线口径(对比对象从 4DGS 换成别的 SOTA),还可能是笔误,我们无法仅凭表内数据判定。能判定的是:按表内数据自己算,最大值落在 8.18。引用时应以可复算的 8.18 为准,并把这里的差额记成一处存疑。
第二处对不上的是 401 帧。摘要写本方法「实现实时渲染(401 FPS)」,结论写「保持超过 400 帧的渲染速度(不使用自适应精修)」。结论那句带了括号限定,摘要那句没带。翻表,401.0 是 heart1 在去掉 AGR 那一列的读数。完整版的平均帧率是 7DGS-PBR 174.7、Technicolor 79.2,而 4DGS 在这两个数据集上分别是 192.6 与 84.2,都比本方法的完整版高。401 帧这个数字只能挂在去掉精修的那套配置上,完整版方法的平均速度低于 4DGS。这两处对不上的方向相反:一处把表里的成绩说得比表小(7.36 对 8.18),一处把速度成绩说得比实际配置好(401 帧对完整版),读的时候要各自归位。第 9 章已经把这一列的代价与收益算清,本章后半会把它列成一条边界。
12边界与反例:两个场景退步、完整版更慢、无消融无局限节
全文只有这一张定性图,它要顶的是「画面到底像不像」这类问题。数字那一栏由表 1 与表 2 负责,这张图负责把数字落到能被眼睛检验的画面上。
原文用这张图说两件事。第一件是 4DGS 的伪影更重,原文的说法是「在有复杂视角依赖的场景上尤其明显」。第二件是本方法重建出的点云更干净,对时间动态与视角依赖外观的处理更好。原文点名了两个场景作为例子:透明的 suzanne 与体积云的 cloud,理由是这两处的几何、运动、外观三者绑得最紧。把这两个例子记在心里,回头去看图上的对应格子,就容易找到差异点。
按上面那个两步读法走一遍,能看出这两条论断在图上有没有落点。找 GT 那一列定标准,再横着比 4DGS 列与本方法列,重点看透明材质的部分。透明体的颜色随视角变化最剧烈,若表示里没有方向维度,这一块最容易出问题。云的场景同理,体积介质的散射随视角与时间同时变化,把这两样分开建模的做法在这里会显出短板。看的时候还可以把图与表对照:suzanne 在表 1 里是 24.45 涨到 28.26(+3.81 dB),cloud 是 24.63 涨到 29.60(+4.97 dB),这两个场景恰好在图里被点名,图上的观感与表里的数字是对得上的一对。
点云那一行容易被跳过,它其实有用。看 RGB 画面只能判断颜色与纹理像不像,判断不了几何是不是干净的;点云那一行专门管这件事,看的是点的分布有没有散成一片雾、结构有没有塌掉、有没有多余的浮点飘在物体外面。这一行与表里的点数还有一层呼应:本方法的点数比 4DGS 少了一个量级(7DGS-PBR 上 98,440 对 641,960),少掉的点如果换来更干净的结构,才说明砍得对;如果点少了结构反而更糊,那就是砍错了地方。
三个分区的排布也影响读法。三块分区里,一块是作者为视角依赖专门渲的自建数据集 7DGS-PBR,另两块是 Technicolor 与 D-NeRF:前者是真实多机位拍摄、视角与光照都复杂,后者是合成的单目视频、视角依赖最弱。按难易排,7DGS-PBR 最能体现方法的卖点,D-NeRF 最能看出方法在简单场景上还剩多少优势。读的时候按这个顺序看,先看最难的那块。
还有一处可以自我校验:把图上每格的观感与表 1 对应行的差对一遍。差大的场景(heart1 的 +8.18 dB、heart2 的 +6.67 dB)在图上应该看得出明显差别;差小的场景(train 的 +0.06 dB、standup 的 +0.85 dB)在图上大概率看起来差不多。若某个差极小的场景在图上被放大成「天壤之别」,那多半是挑图挑出来的效果,不能用它来代表方法的普遍威力。
这张图也要说清它管不到的地方。定性图能给的是「看起来更接近」,它替不了表里的数字。表 1 与表 2 里那些让位的格子,比如 D-NeRF 上 SSIM 0.97 输给 0.98、Technicolor 上 LPIPS 0.101 输给 0.085,看这张图是看不出来的,图上不会给你标出这三个指标谁赢谁输。它更不能回答第 11 章那两处对不上的地方:7.36 dB 与 8.18 dB 的差额、401 帧挂在哪一套配置上,都是账目问题,与画面像不像无关。本章后半要列的那几个退步场景(h.warrior 与 hook),定性图里也不会专门给你指出来。定性图挑的是能展示优势的场景,这一点读任何论文都要记住:它的作用是把数字落到画面上,不能反过来用它去证明数字。
看图之后,本章还剩一件更该做的事:把表里与正文里那些和「一致占优」说法相冲的地方列出来。八条,每条都给数字与可核对的位置,数字全部出自表 1、表 2 与原文正文。
第一,D-NeRF 上有两个场景本方法更差。h.warrior 从 34.10 掉到 32.96,退 1.14 dB;hook 从 32.93 掉到 31.57,退 1.36 dB。这两个数出自表 1,写在那里没有被藏起来。原文正文里写了一句本方法在「所有评测指标和数据集上持续优于 4DGS」(consistently outperforms),表里这两行与这句话相冲。翻遍三个数据集,退步的场景不止这两个:Technicolor 上 fabien 从 35.48 掉到 34.87(退 0.61 dB)、theater 从 31.84 掉到 31.54(退 0.30 dB)。四个退步场景摆在一起,说明「持续」这个词用得满了,平均数把逐场景的波动盖住了。D-NeRF 的均值仍然是涨的(+1.13 dB),但这个平均正好压住了两个往下掉的场景。逐场景读数与均值结论之间的张力,该由读者自己动手核一遍。
第二,完整版的平均帧率低于 4DGS。7DGS-PBR 上完整版平均 174.7,4DGS 是 192.6;Technicolor 上完整版 79.2,4DGS 是 84.2。两个数据集都是完整版更慢。401 帧那个卖点属于去掉 AGR 的配置,heart1 在那一列是 401.0。原文摘要没有带括号限定,结论带了,两处口径不一致,读的人容易被摘要带走。速度与质量落在不同配置上,这是本文最容易被误引的一处:同事若只看了摘要,很可能会以为这套方法「又快又准」,实际那两百多帧的收益来自摘掉一个模块。
第三,全文没有消融节。可以当对照的只有「去掉 AGR」这一组,其余超参都没有敏感性实验:λt、λd 按数据集取 0.5 / 0.05 / 0.1,分裂判据里的两个阈值 0.05 与 0.25,剪枝阈值 τmin = 0.01,都只给了取值,没给「换一个值会怎样」。这些数字直接决定点数与质量,缺了敏感性实验,复现时只能照抄,也无法判断方法对它们有多敏感。严格说,这一组「去掉 AGR」只是对照,够不上消融:它只说明那个小网络贡献多少,没说七维表示里哪个设计在起作用。
第四,没有局限节。原文第 6 章是结论,写完三段就收尾,没有一节讨论失败场景或适用边界。上面那四个退步场景与两处帧率偏低,都要靠读者自己从表里翻出来。这是本篇在写法上的一处欠账,也是这类预印本的常见做法。缺了这一节,方法在什么条件下会失灵,只能自己从数据里推。
第五,增益最大的那个数据集是作者自己渲的。7DGS-PBR 的 +4.71 dB 出自六个用 Blender Cycles 渲染的场景,是本文自己构造的数据集,原文说会公开。两个公开数据集上,D-NeRF 只涨 1.13 dB,Technicolor 只涨 0.33 dB。数据集越接近「专门做视角依赖」,增益越大;越接近公开的通用动态场景,增益越小。把 +4.71 dB 当成这套方法在通用场景上的普遍表现,会高估它;引用时最好带上数据集名字,说清是 7DGS-PBR 上的成绩。
第六,切片这一步还没有写进 CUDA。原文在报完训练时长之后写了一句:把算法 1 的切片实现在 CUDA 里,还能进一步加速。这句话等于承认当前读数是在未优化的实现下取得的,速度上还有余量,同时也说明表里的训练时长与帧率不是这套方法的性能上限。反过来说,抓着一个未优化的帧率去和别人比快慢,也不完全公平,若那一步真的写进 CUDA,这一栏的数字会整体往上走。
第七,只报点数,不报显存与训练峰值内存。「点数少」容易被读成「内存省」,这两件事不能直接划等号。三维高斯每个点存均值、协方差因子、不透明度与球谐系数;本文的每个点要额外存时间均值 µt、方向均值 µd,以及七维协方差的下三角因子,参数比三维版本多。「点数少」与「内存少」在这里可能分道扬镳,原文没有给出显存占用,也没有给训练峰值内存,这一项无法核对。对要做部署的人来说,这一栏空白比点数那一栏更关键。
第八,图 1 里的漂浮碎块来自输入数据。原文图注自己写明:心脏场景中的漂浮伪影由 CT 扫描的分割不完整造成,与渲染无关。这条要放在边界一节里讲清,避免被当成本方法的缺陷。反过来看,它也提示 CT 这类数据的预处理质量会直接压住上限:分割漏了一块,再好的表示也只能把它渲成一块漂浮物。这条对做医学体渲染的人尤其实用:上游分割若出问题,渲染再准也救不回来。
13贡献块
贡献块
三句话收尾,把账目、来源、出口各说一遍。
第一句讲代价。把三个维度合并进一个高斯,这件事本身在数学上是顺的,条件分布那一步是经典结论,难的地方全在代价上。合并之后所有高斯的有效不透明度被压小,剪枝阈值从 3DGS 的 0.005 提到 0.01;完整版的平均帧率在 7DGS-PBR 与 Technicolor 上都低于 4DGS(174.7 对 192.6、79.2 对 84.2)。这两处代价,一处落在阈值上,一处落在帧率上,都不显眼,却决定了这套方法能不能直接当「又快又准」去用。摘要里那个 401 帧属于去掉精修后的配置,把它当成完整方法的速度会读错。
第二句讲来源。质量的那一大截增益来自七维表示本身,去掉精修网络后,7DGS-PBR 上仍有 +3.98 dB,点数还降到 4DGS 的 13.8%。那个小网络净换来的只有 0.73 dB(31.77 到 32.50),代价是帧率从 376.0 掉到 174.7,差不多砍半。它补的是形变那部分,不是整篇的功臣。这条账划清了「表示」与「网络」各自的份额,也解释了为什么作者把去掉 AGR 的那一列也放进了主表:那一列才是七维表示自己的成绩单。
第三句讲出口。它的出口是一个标准三维高斯,投影、泼溅、致密化都能沿用 3DGS 的现成代码。这条决定了它容易接到后续的工程管线上,也决定了它的速度量级是继承来的,不是自己重新争取的。把七维的复杂度关在一个「切片」里,出口留给标准件,是这篇在工程上最值钱的地方。要接着往下做,该动的是切片那一步,下游的渲染器不必动。
原文自己列的贡献有三条,逐条对一遍能看清哪些是新东西、哪些是借来的。
第一条是统一的七维表示:把位置、时间、方向放进同一个高斯,再用自适应精修补上形变。真正新的部分在「合并维度」与那个残差网络;Cholesky 参数化沿用同团队的 6DGS,球谐颜色沿用 3DGS,读这一条时要把三者分开记账。
第二条是条件切片:把高维高斯投影成与既有实时管线兼容的三维高斯。这是全文最实在的一条,也是它能跑到百帧量级的原因。代价落在剪枝阈值上(从 0.005 提到 0.01),这笔代价原文没有写进贡献条目里。
第三条是验证:三个数据集、最高 7.36 dB、超过 401 帧。这一条的表述要按第 11、12 章的口径修正后再引用:按表内复算最大增益是 +8.18 dB,401 帧属于去掉精修的配置,两个公开数据集上的增益只有 +1.13 与 +0.33 dB。
站内的高斯泼溅系列已经攒下不少篇,主题从表面重建、抗锯齿、压缩一路铺到动态场景。跟本文最近的,是下面三篇:
- Mip-Splatting(站内篇目 20,标题「放大出毛刺、缩小糊成一片:给高斯加两道频率上限,换什么焦距都干净」)。与本文的关系:同属高斯泼溅系列,处理的是尺度与频率这一类问题。本文全程没有碰这一块,两篇可以并读,一族管「换个焦距干不干净」,一族管「换个时刻与视角像不像」。
- LightGaussian(站内篇目 18,标题「一个场景 782MB,压到 45MB 还跑得更快:砍掉没人看的高斯,剩下的少记一点」)。与本文的关系:同样盯着点数与体积的削减。本文把点数压到 4DGS 的 15.3%,走的是「加维度再删点」的路子,它走的是「留有用的再压缩」的路子,两篇可以对着看。
- CoMoGaussian(站内篇目 14,标题「一张糊图,是许多张清晰图叠出来的:把相机运动按连续时间还原」)。与本文的关系:同属动态场景方向的高斯工作,都把时间建模当成核心问题,方向上最近。把本文的时间维度与它对连续相机运动的处理放在一起看,两条思路可以互相补位。
把这四章并起来,这篇的读法能收成一句短口诀:先信它的表(十三条复算全对),再疑它的摘要(两处对不上),引用它的速度与质量时按配置分开说。这套办法对站内一族的其他高斯篇目大多也适用:表里逐行的数字自己核一遍,定性图只看它想让你看的那几格,速度与质量先确认是不是同一个配置。照着走下来,一篇论文能给你多少,自己心里有数。
14原文出处块
原文出处块
出处
原文:7DGS: Unified Spatial-Temporal-Angular Gaussian Splatting
作者:Zhongpai Gao、Benjamin Planche、Meng Zheng、Anwesa Choudhuri、Terrence Chen、Ziyan Wu(United Imaging Intelligence, Boston MA)
出处:arXiv:2503.07946v1 [cs.CV],2025-03-11(预印本,未见会议接收信息)
项目页:gaozhongpai.github.io/7dgs/
许可:arXiv 预印本为非独占许可,非 CC。本系列对文中图表逐件署名引用(图注含出处、版权与残留风险);正式出版后条款可能变更,引用时以出版版本为准。
核对日期:2026-09-24(本篇第 11 章全部复算即在此日完成)。