"3D Gaussian Splatting (3DGS) has gained significant attention due to its high-quality novel view rendering, motivating research to address real-world challenges. A critical issue is the camera motion blur caused by movement during exposure, which hinders accurate 3D scene reconstruction. In this study, we propose CoMoGaussian, a Continuous Motion-Aware Gaussian Splatting that reconstructs precise 3D scenes from motion-blurred images while maintaining real-time rendering speed. Considering the complex motion patterns inherent in real-world camera movements, we predict continuous camera trajectories using neural ordinary differential equations (ODEs). To ensure accurate modeling, we employ rigid body transformations, preserving the shape and size of the object but rely on the discrete integration of sampled frames. To better approximate the continuous nature of motion blur, we introduce a continuous motion refinement (CMR) transformation that refines rigid transformations by incorporating additional learnable parameters. By revisiting fundamental camera theory and leveraging advanced neural ODE techniques, we achieve precise modeling of continuous camera trajectories, leading to improved reconstruction accuracy. Extensive experiments demonstrate state-of-the-art performance both quantitatively and qualitatively on benchmark datasets, which include a wide range of motion blur scenarios, from moderate to extreme blur."
- 病根一句话:模糊不是图像噪声,而是曝光时间里的运动被积分进了一张图;已有方法多在物理空间里连几个预测位姿,没有任何机制保证这条轨迹连续。
- 两件机制:用 neural ODE 在隐空间里把相机轨迹一步一步推出来(并从曝光中点向两侧积分、共用同一个神经导数);用刚体变换保证形状与尺寸不变,再用 CMR 变换补上"连续积分只能用 N 个离散样本近似"的差。
- 一条调参结论:位姿数 N 不必取大。仅用刚体时性能随 N 近线性上涨;加上 CMR 后在 N = 9 饱和,还超过了仅刚体在 N = 13 的成绩。
- 代价与边界:质量赢得多(合成集 PSNR 31.02)且渲染速度与基底相同,但训练时间 1.33 小时,是最省对照的 6.7 倍;此外它无法区分模糊轻重、位姿必须预先给定。
1一张糊图,是许多张清晰图叠出来的
一张糊图,是许多张清晰图叠出来的
先看一个很多人拍过但没细想过的现象。傍晚在室内拍照,光线不够,相机自动把光圈开小、曝光拉长。这时候只要手稍微一动,画面就"化"了:物体轮廓还在,但边缘像被拖出一条条尾巴。这就是相机运动模糊。
它跟"对不上焦"是两件事。对焦不实是空间上的模糊,运动模糊是时间上的:快门开着的那段时间里,相机一直在动,传感器就把这期间看到的许多个画面累加在了一起。所以一张糊图,本质上是一段运动被"压"进了一张图。
一句话把这件事说清楚:一张糊图,是一段时间里许多张清晰图的积分。
这句话直接决定了正确的做法:既然模糊来自时间的积分,那要把模糊"解开",就必须还原出那段时间里相机走过的轨迹。轨迹估得准,就能把每一时刻的清晰画面分别渲染出来、再叠回模糊图去比对,从而让模型在没有清晰图监督的情况下学会清晰的三维场景;反过来,轨迹估得糙,模糊图就永远对不上。
难点在于这段运动几乎没有约束可用,只能从模糊本身反推。已有方法的思路是"预测几个位姿,再在它们之间连一条线"。这个"连"字里藏着一个被忽略的问题,也是本文的起点:连出来的线,凭什么保证是连续、物理上说得通的运动?
后面几章的路线是这样。第 2 章把模糊的积分式摆开,指出现有方法缺的是"连续性"这件事;第 3 章把一段刚体运动写成一个连续可微的参数表达;第 4 章用 neural ODE 在隐空间里把轨迹推出来;第 5 章拿样条、MLP、GRU 做对照,说明连续性究竟从哪来;第 6、7 章是"刚体不够"的两步补丁(CMR 与正交正则);第 8 章回答"N 取多少";第 9 章讲糊图怎么被拼出来;第 10、11 章是三笔账与轨迹可视化;第 12 章独立成节,列十条它做不到的地方。
这一篇要记的只有一句话:一张糊图,是一段时间里许多张清晰图的积分。
在往下看技术之前,先把这条主线放在这个分区的高斯系列里对一下位置,会更容易记住它。篇目 04(AAA-Gaussians)改的是"采样率变了怎么办",篇目 07(BBSplat)改的是"图元上怎么挂纹理",篇目 08(2DGS)改的是"图元的形状是立体还是平面",篇目 12(StopThePop)改的是"混合顺序怎么排"。这四篇动的都是"场景怎么被表示、怎么被渲染";而本篇动的是"相机是怎么动的"。也就是说,输入端的图像本身就有缺陷(模糊),而它选择从成像过程的物理成因下手去修,而不是修表示。
这个选择带来两个很直接的好处,也带来一个明显的代价。好处是可解释:位姿是物理量,估得对不对可以直接画出来用眼睛核对(第 11 章整章都是这件事),不需要靠"指标涨了"来间接论证。另一个好处是不伤实时性:改动发生在"位姿从哪来"这一步,光栅化管线一点没碰,所以渲染速度和基底 Mip-Splatting 完全一样。代价则在训练侧:每张糊图都要渲染 N 张清晰图(本文 N = 9),训练时间因此成倍上升。这三条合起来,是判断"什么时候该用它"的全部依据,第 12 章会把它们逐条展开。
2病根:模糊必须按"连续运动"来处理
把模糊的成因写成式子,全文的方法都在这个式子下面展开。设某个像素 p,模糊之后的颜色是若干条"被扰动过的射线"颜色的加权和:
N 是参与卷积的射线条数,wp^i 是第 i 条射线的权重,cp^i 是清晰图上对应像素的颜色。这个式子看起来朴素,但它说明了两件事:其一,糊像素是"多张清晰图"的加权平均;其二,权重必须归一,否则亮度会漂。
Deblur-NeRF 的做法是在射线上做文章:把一条输入射线扰动成多条射线,用它们各自的颜色去凑模糊。本文换了个方向,它说:与其扰动射线,不如把相机的运动还原出来,在估出的轨迹上渲染出 N 张清晰图,再用公式 2-1 加权。差别在于"扰动"变成了有物理含义的"运动",多出来的这一层约束正是它能更准的原因。
底座仍然是 3DGS 那一套。场景由三维高斯拼成:
渲染时按前到后做 alpha 合成得到像素颜色:
这两条式子在本篇里一个字都没有改。 本文动的是"位姿"这一段:投影用的相机位姿不再是每张图一个固定值,而是曝光时间里的一整段轨迹。所以整篇可以理解成一句话:换掉位姿的生成方式,其余照旧。
现在看已有方法错在哪。原文对这条线的批评很具体:无论是线性插值还是三次 B 样条,它们都是先预测若干位姿、再在物理空间里插值,而这个过程中没有任何机制强制相机运动的连续性。后果是预测出来的运动会出现突跳与分段转折,与真实相机的轨迹不符;轨迹不对,用公式 2-1 叠出来的模糊图自然对不上,去模糊的效果也就打了折扣。
这里要把任务的"已知与未知"说清,因为它决定了整篇论文的自由度在哪里。已知:一批模糊的多视角图像,以及由 COLMAP 提供的每张图的相机位姿与初始稀疏点云。未知:清晰的场景本身,以及每张图的曝光时间里相机具体怎么动。没有的东西:任何清晰图像或真值轨迹,都无法用于监督。
于是训练的监督信号只有一个:把模型生成的糊图和输入的真糊图比。这就带来一个很微妙的局面:模型有两条"作弊路径"能让损失降下来。一条是"把轨迹估歪、但让权重去凑"(公式 2-1 里的权重 w 本身就足够灵活);另一条是"把场景本身学糊"。原文用两处设计堵住这两条路:训练时先让轨迹单独优化一段时间再加权重与掩码(第 9 章会讲),以及把掩码的稀疏性显式约束住。理解这两条堵漏设计,比记住任何一个模块的名字都重要,因为它们是这篇方法能work的前提。
另外一个容易被略过的点,是去模糊这个任务为什么要同时看三个指标。PSNR 与 SSIM 都建立在"像素值对得上"的基础上,位姿一旦估偏,整张图的像素整体错位,这两个指标会立刻掉下来;而 LPIPS 走的是感知特征,对"整体结构还在、细节偏软"这类误差更宽容。所以第 10 章里会出现"PSNR 差很多、LPIPS 差不多"的组合,那说明两个指标在看不同的东西,而不是数据互斥。原文第 10 章里对 BAD-Gaussians 的解读(PSNR/SSIM 低说明位姿没优化好)正是按这个逻辑给的。
把这一章收成一句话:问题不是"模糊核估得不够准",而是"运动的连续性根本没有被建模"。要补这一点,得先让"一段运动"本身有一个连续的参数化,下一章就做这件事。
3把一段运动写成一个式子:螺旋轴与指数映射
要让运动连续,第一步是给它一个连续可微的表达。本文选的是刚体运动的标准参数化:单位螺旋轴。
一个刚体变换需要三样东西,写成单位螺旋轴 S = (ω̂, v):单位转轴 ω̂(三维单位向量)、绕该轴的转角 θ、以及平移分量 v。直觉上,"螺旋轴"就是"绕哪根轴转、转多少、同时往哪挪"。
为什么非要用这套参数?因为相机在曝光时间里的运动是刚体运动:物体本身没变形,只是被相机从一个位置搬到了另一个位置。用刚体参数化,模型就不需要去学"物体怎么变形",只需要学"相机怎么动",搜索空间小了,物理上也说得通。
接下来是位姿怎么合成。本文并不直接输出轨迹上的位姿,它把每个位姿写成"一个基准位姿乘两个偏移量":
τs 是轨迹上的时间采样点(0 ≤ s < N),T^τM 是给定的标定位姿(M = N/2),T̃r 是刚体偏移,T̃c 是下一章要讲的 CMR 偏移。这里有一个必须记住的假设:标定位姿被当作曝光时段的"中点"。原文给的理由是,标定位姿代表的是曝光时间里由运动积分得到的平均位置,因此把它放在轨迹中央最合理。这条假设在第 12 章会被列成一条边界。
刚体偏移量本身来自螺旋轴的指数映射。把螺旋轴写成矩阵形式:
其中 [ω̂] 是三维向量 ω̂ 的反对称矩阵,属于 so(3)(李代数),而 [S] 属于 se(3)。从李代数到李群要过一次指数映射,这一步的显式表达就是机械臂与图形学里著名的 Rodrigues 公式:
旋转部分给出 R̃r,平移部分则要用另一个辅助矩阵:
于是 t̃r = G(θ) v。这两个式子合起来才是完整的刚体变换,只写 Rodrigues 会漏掉平移那一段,这是很容易在复现时踩的坑。
到这里还有一个设计选择要专门说明,因为它和同类工作不一样。Nerfies 与 DP-NeRF 都是先把角速度 ω = ω̂θ 作为整体建模,再分解回单位轴与转角。本文认为这样做不对:θ 是"绕这根轴转了多少",它与"轴指向哪"在物理上互相独立,硬把它们绑成一个量,等于人为制造了依赖。于是本文让转轴 ω̂ 过一遍归一化、让转角 θ 独立输出,两者各自解码。改动很小,理由很硬。
把这几步的次序再理一遍,因为复现时最容易乱的就是这条链:图像索引 → 编码器 Er → 隐特征 zr → neural ODE 演化 → 解码器 Dr → 单位螺旋轴 (ω̂, θ, v) → 指数映射得刚体变换 T̃r → 与标定位姿、CMR 偏移合成得轨迹位姿。链条上的每一步都是可微的,所以梯度能从最后的像素误差一路传回编码器,让"这段运动该怎么走"被训练出来。
至于为什么必须用指数映射而不是直接把旋转矩阵当成可学参数,理由在于合法性。一个 3×3 矩阵有九个自由度,而旋转只有三个;如果让网络直接输出九个数的矩阵,它很容易输出一个"看着像旋转、其实带缩放或剪切"的东西,作用到场景上就是把物体拉歪。指数映射的作用是把参数限制在合法的流形上:无论 (ω̂, θ) 取什么值,算出来的都是一个真正合法的旋转矩阵。这也解释了第 3 章末尾那个"把 ω̂ 归一化、把 θ 独立输出"的设计为什么重要:归一化是把参数按回合法集合的那只手,而 θ 独立则保证这只手不会顺带把转角也拧歪。
最后一个细节要专门点出:公式 3-2 里的 [ω̂] 是反对称矩阵(满足 [ω̂]ᵀ = −[ω̂]),这正是它能与叉乘等价的原因。三维里"绕某个向量转"和"用反对称矩阵作用"是同一件事,Rodrigues 公式展开出来的三项(单位阵、sin 项、cos 项)就是这件事的显式表达。不理解这一层也不影响使用,但理解之后会明白:公式 3-3 与 3-4 是同一个几何事实在旋转与平移上的两次展开,而不是两个各自独立的经验公式。
拿一组最小数字把公式 3-1 的合成走一遍,会更容易记住三个乘积各自的角色。假设标定位姿 T^τM 落在原点朝正前方;刚体偏移 T̃r 是一个绕竖直轴转 2 度、同时前移 0.5 厘米的变换;CMR 偏移 T̃c 则是那个 3×3 矩阵稍有偏离的"修正项",幅度在 10⁻⁵ 量级。那么:T̃c 几乎不起作用(因为它的初值就在单位阵附近,训练早期确实如此),位姿基本由 T̃r 决定,这就是"运动的主体是刚体运动"的数学体现。等到训练后期,如果某些场景里刚体表达不了的部分(例如快门的卷帘效应)确实存在,CMR 才会逐渐变大去补它。这个"从几乎不动到逐渐介入"的过程,就是第 6 章那个 Ac + I 初始化设计与第 7 章正交正则共同作用的结果。
还有一点关于 τ 的采样方式值得明确:原文是在固定曝光时间区间内均匀采样 N 个时间点,而不是自适应地加密某一段。这个选择在实现上最省事,也带来一个隐含假设:曝光期间的运动是"时长内平滑展开"的,不存在时长外的突变。真实相机在快门开启的那个瞬间可能有轻微震动(例如单反的反光板动作),这类"发生在区间端点附近"的因素不在均匀采样的覆盖范围内,第 12 章第 10 条讲的成像假设正包含这一层。
4隐空间里连续推演:neural ODE 怎么给轨迹
有了参数化,还差"随时间连续变化"这件事。本文的答案是用神经微分方程(neural ODE)在隐空间里把状态推出来。
先说 neural ODE 的通式。它把状态的变化率交给一个神经网络 f 来学,状态从初始时刻积到任意时刻:
其中 f 由可学参数 φ 决定。这个式子的关键不在形式,而在"怎么用":在隐空间里走过一个极小的步长 ε,状态只前进 ε · dz/dτ,整条轨迹是一小步一小步推出来的,而不是"先列出几个点、再想办法把它们连起来"。原文特意强调了这一点带来的两个性质:f 在 z 与 τ 上是一致 Lipschitz 连续的非线性函数,因此对任意积分区间,解都是唯一的。唯一性就是"不会自我矛盾"的数学表述。
本文用两套 ODE 分别建模两类变换。第一套管刚体偏移:把图像索引嵌成一个向量,过一层 MLP 编码器 Er 得到隐特征 zr(τ0),让它代表螺旋轴的三个量;再在隐空间里做连续演化:
注意积分的起点是 τM,也就是曝光时段的中点。这一步是有意设计的:从中间同时向两侧积分,前向与后向共用同一个神经导数 f,所以两半段轨迹天然属于同一个函数空间(这一点在第 5 章对比 GRU 时是决定性的)。
隐特征推完,要解码回螺旋轴参数。解码器是单层 MLP:
归一化这一步把"轴"和"转角"拆开,理由在第 3 章已说过。拿到螺旋轴后,按公式 3-2 到 3-4 过一遍指数映射得到刚体变换 T̃r,再按公式 3-1 与标定位姿、CMR 偏移量合成,得到轨迹上的第 s 个位姿。采样方式是在固定曝光时间内均匀取 N 个时间点。
实现上的几个数一并记下,复现时都要对得上:位姿数 N = 9(于是中点 M = 5)、隐状态宽度 64、ODE 求解器用四阶 Runge-Kutta、神经导数 f 由两层并行的单层 MLP 组成(一层管旋转、一层管平移),且 f 与 g 共享可学参数;嵌入用 PyTorch 的 nn.Embedding;每层都套 ReLU 保证隐空间的非线性。训练总迭代 40k。
求解器选四阶 Runge-Kutta 也值得说一句,因为它是一个"精度换时间"的选择。ODE 的求解器有两档常见选择:欧拉法是最简单的定步长一阶解法,每一步只按当前斜率走;Runge-Kutta 类是高阶解法,在每一步里多算几次斜率、加权平均之后才前进。原文在预备知识里把两者都点了名,并在实验里统一采用四阶 Runge-Kutta(理由是稳定性更好)。代价是每一步要做四次网络求值,好处是在同样的步数下轨迹更准。这也解释了为什么训练时间是基底的好几倍:N = 9 个位姿本身就要渲染 9 张图,而每个位姿的隐状态还要经求解器多算几次。
还有一处值得想一下:为什么两次 ODE 积分都从 τM 出发,而不是从 τ0 一路推到 τN?表面上看后者更"自然",但在本文的设定里,τM 是唯一有信息的时间点,因为标定位姿就落在这里(第 3 章的假设)。从已知点向两侧展开,比从一端开始一路外推要稳,而且天然满足"前向与后向共用同一个神经导数"这条要求。原文在后面与 GRU 对比时,正是拿这一点当作结构性优势来论证的。
5连续性从哪来:和样条、MLP、GRU 的对照
"连续性"是个容易被含糊带过的词。本文用一组消融把它量了出来。做法是把轨迹估计器换掉、其余不变,在 Deblur-NeRF 真实场景上比:
| 估计器 | 所在空间 | PSNR ↑ | SSIM ↑ | LPIPS ↓ |
|---|---|---|---|---|
| 线性插值 | 物理空间 | 20.97 | 0.6085 | 0.1461 |
| 三次 B 样条 | 物理空间 | 21.69 | 0.6471 | 0.1262 |
| MLP | 隐空间 | 27.43 | 0.8295 | 0.1010 |
| GRU | 隐空间 | 27.40 | 0.8302 | 0.0988 |
| Neural ODE(本文) | 隐空间 | 27.85 | 0.8435 | 0.0822 |
数据来源:原文 Table 4(线性插值与三次 B 样条沿用 BAD-Gaussians 的实现)。这张表读起来有两档差距,都值得说明。
第一档是空间之差,差了 5 到 6 dB。 前两行在物理空间里插值,PSNR 只有 20.97 与 21.69;后三行在隐空间里演化,直接到 27.4 以上。原因不难理解:物理空间的插值要在位置、朝向这几个量上分别插,插出来的中间位姿是否"像一段真实运动"全靠运气;隐空间里则让一个连续的动力学去决定怎么走,中间状态自然被约束住了。
第二档是隐空间内部之差,0.42 dB。 MLP 27.43、GRU 27.40、ODE 27.85。差距看着不大,但要结合 LPIPS 看:ODE 是 0.0822,比 GRU 的 0.0988 好了 17%。这个差距的来源在原文里解释得很具体。
为什么 GRU 会有断点?原文的解释切中要害:本文的 ODE 从曝光中点 τM 同时向前和向后积分,而两个方向用的是同一个神经导数 f,所以两半段轨迹落在同一个函数空间里;GRU 则要给前向和后向分别准备两套单元,两套单元是独立学的,接缝处自然可能对不上。这属于模型结构的差别,而非实现细节的分歧:一个是"同一段动力学走两遍",一个是"两段动力学拼起来"。
把这一章收成一句:连续性不是靠"多插几个点"买来的,是靠"同一个连续函数"保证的。理解了这一点,后面 CMR 的存在也就顺理成章了:它补的是另一个东西。
顺着这张表再往深想一层,会发现一个容易被忽略的对照:物理空间那两行其实并不"笨"。线性插值与三次 B 样条都是有几十年历史的成熟工具,工程上还便宜。它们输掉这 5 到 6 dB 的原因不在数学,而在它们没有地方放"物理约束":位姿在物理空间里由位置和朝向两组量组成,插值在两个量空间里独立进行,插出来的中间位姿既不一定对应一段合法的刚体运动,也无法保证速度、加速度的连续性。隐空间的好处在于它是一个被神经网络学出来的坐标系,在这个坐标系里"走直线"对应的可能就是物理上一段很自然的运动。
还有一处细节值得指出:这张表里 MLP 与 GRU 的 PSNR 只差 0.03(27.43 对 27.40),但 LPIPS 差了 0.0022(0.1010 对 0.0988)。这说明两者的差距在像素级指标上几乎看不出来,而是落在感知层面。如果只按 PSNR 挑估计器,很容易得出"MLP 与 GRU 随便用一个"的结论,而原文的做法是把三类估计器都跑一遍再定,这也解释了为什么它在正文与附录里各放了一张对照图(本文图 5-1 与 Table 4)。
最后补一句方法论上的观察:这一组消融的设计方式是"把待验证的性质单独隔离出来"。连续性是一个抽象性质,没法直接当指标,所以作者的做法是换掉"提供连续性的那个组件",看指标怎么动。当你要验证的性质无法直接测量时,这类"换掉源头、看下游"的消融就是标准做法,这一章是很好的范例。
6刚体不够:CMR 补上"离散求和与连续积分"的差
第 3、4 章已经把运动建成了连续的,那为什么还需要第三个组件?答案藏在一个容易被忽略的落差里:运动是连续的,但计算是离散的。
回头看公式 2-1:糊像素理论上该是连续积分,而实现时只能用 N 个离散样本去近似这个积分。相机在采样点之间的那一小段运动,无论刚体建模多准确,都没有被任何一项表示。N 越小,被漏掉的部分越多。原文把这层意思说得很直白:刚体变换不足以在离散数值积分下准确表示相机的连续运动。
补这个差的东西就是 CMR(continuous motion refinement)。它的做法和刚体那套几乎一样,也是"编码 → ODE 演化 → 解码",区别在于解码出来的东西不再是螺旋轴参数,而是一个无约束的变换矩阵:
这里有三处设计值得逐个点出来。
其一,为什么写成 Ac + I。 加单位阵是为了让 R̃_c 的初值落在单位变换附近,也就是"训练一开始 CMR 什么都不做"。原文还进一步把解码器权重用 U(−10⁻⁵, 10⁻⁵) 的均匀分布初始化,让 Ac 初值接近零矩阵。这是一种"先别捣乱"的初始化策略:刚体变换已经把大部分工作做了,CMR 只该在需要补差的时候才动。
其二,为什么不把 CMR 约束在 SE(3) 上。 本文明确说 CMR 的目标是"接近 SE(3)",但不显式施加这个约束,从而在旋转矩阵与平移向量上获得更高的自由度,实现也更简单。这样做的好处是灵活:真实运动里总有些用刚体表达不了的因素(卷帘效应、极短的抖动等),给它一点自由度就能吸收掉。代价是它可能学出带剪切与缩放的变换,把物体形状弄歪——这正是下一章那个正则要管的事。
其三,CMR 与刚体的分工要记清:刚体管"形状与尺寸不变",CMR 管"离散与连续之间的那点差"。两者都是随时间连续演化的,但只有刚体带物理含义。
顺带说一句对照:这和 BAD-Gaussians 那条"把位姿也当成优化变量一起调"的路线不同。本文的位姿完全由这两层变换生成,标定位姿始终是输入端的固定值,它选择把这部分自由度显式地拆成"物理项 + 修正项",而不是让优化器自由发挥。
把"为什么不干脆让优化器自由调位姿"这件事想透,能看清本文的深层取舍。自由调位姿的好处是灵活:网络想怎么动就怎么动,拟合能力上限更高。但坏处也很实在:位姿是六自由度的时间序列,而可用的监督只有几张糊图。在这种"未知量远多于约束"的局面下,自由优化很容易落到一个"糊图对得上、运动物理上荒谬"的解上,而这正是第 2 章说的那条作弊路径。本文的拆法相当于给这个优化问题加了两层先验:刚体那一层说"运动必须是刚体的",CMR 那一层说"允许有偏差但尽量小"(靠初始化与正则实现)。先验越强,解空间越小,越不容易跑偏;代价是如果真实运动违反了先验,模型就表达不出来。第 12 章第 5 条与第 7 条讲的正是这个代价的两个具体形态。
再补一个实现层面的对称性,它让整套设计显得更整齐:两套 ODE 的结构完全一致,只是解码的目标不同。刚体那条解码出螺旋轴参数(受物理约束),CMR 那条解码出无约束矩阵(不受物理约束);两者的隐特征演化、求解器、时间采样点全都一样,连神经导数 f 与 g 都共享参数。所以从代码角度看,本文的做法是把同一套机制用了两遍,第二遍把输出放松了,而非新增一个模块。这也解释了为什么 CMR 带来 0.55 dB 的收益却几乎没增加多少实现复杂度。
7正交正则:数字上看不出,画面上看得出
上一章留了个尾巴:CMR 不给旋转矩阵加约束,它就可能学出带剪切与缩放的变换。一个带缩放的"旋转矩阵"作用在场景上,效果是把物体拉伸或压扁;这类错误在 PSNR 上不一定显眼,但在观感上很难看。补这个口子的是一条约束力很轻的正则项:
它的意思很直接:R̃_c 乘自己的转置,应该等于单位阵。这是正交矩阵的定义式,也正是旋转矩阵的必要条件。用平方范数(软约束)而不用硬约束,是为了"允许极小的偏差"而不是"一步不许走偏",这样 CMR 还能继续吸收那些刚体表达不了的因素。
这一步在数字上几乎看不出来。看主表里的逐项消融:
| 配置 | PSNR ↑ | SSIM ↑ | LPIPS ↓ |
|---|---|---|---|
| 基线(Mip-Splatting) | 21.87 | 0.6270 | 0.3066 |
| 加刚体变换 | 27.19 | 0.8249 | 0.1005 |
| 再加 CMR | 27.74 | 0.8402 | 0.0878 |
| 再加正交损失 | 27.85 | 0.8431 | 0.0822 |
数据来源:原文 Table 3(Deblur-NeRF 真实场景)。四行的信息量不一样:第一跳最大,加刚体变换把 PSNR 从 21.87 拉到 27.19,涨了 5.32 dB,说明"把运动当刚体建模"这件事本身就是主力;第二跳也不小,加 CMR 再涨 0.55 dB,验证了"离散与连续的差"确实存在且可补;第三跳很轻,只涨 0.11 dB。如果只看 PSNR,很容易得出"正交损失可有可无"的结论。
图 7-1 是这篇文章里方法论价值最高的一张。它示范了怎么处理"指标几乎不动但确实有用"的组件:当一项改动只作用在细节上时,别指望 PSNR,去看画面对照。原文的处理很老实:既没有夸大这条正则的数值贡献(0.11 dB 摆在那里),也没有因为它数字小就删掉,而是补一张定性图说明它到底在管什么。
这一章还留了一条边界:正交正则本质上是一个软约束,它让 R̃_c "接近合法旋转",但并不保证。第 12 章会把这一条列进去。
顺便把这个"0.11 dB 为什么合理"算清楚,因为它能帮你在自己调模型时判断一项正则该给多大权重。正交损失的权重是 λo = 10⁻⁴,比主损失项的 0.3 小了三个数量级还多。权重这么小,是因为这条约束几乎不需要"推"就能满足:R̃_c 的初值是 Ac + I,Ac 的初始化又在 ±10⁻⁵ 附近,也就是初值本来就在单位阵旁边;训练过程中它要偏离正交性,得"主动"跑出去。所以这条正则更像围栏而不是缰绳:平时不发力,只在快要跑偏时起作用。这解释了它数值贡献小、但缺了它画面就出问题的现象。
这里还有个更一般的教训值得记下:看起来"轻"的约束,作用的往往是"防止少数极端情况",而不是"整体提升指标"。评估这类组件时,看均值指标(PSNR)会严重低估它,看最差样本或用例(细节是否被抹掉)才公平。原文用 PSNR 29.54 对 29.60 这组几乎相同的数字配上两张图,正是这个道理的最佳演示。
8N 取多少:性能与算力的交换点
第 6 章说过,CMR 是为了补"离散近似连续"的差。既然是离散,采样点数 N 就直接决定差有多大:N 越大、逼近越准,但每一张模糊图都要渲染 N 张清晰图,训练成本随 N 线性上涨。所以 N 的取值本质是一次交换。
原文把这次交换量得很完整,从 N = 5 一直测到 N = 13,并且分成"只用刚体"和"刚体 + CMR"两档对照:
| N | 仅刚体 PSNR ↑ | 仅刚体 LPIPS ↓ | 刚体+CMR PSNR ↑ | 刚体+CMR LPIPS ↓ |
|---|---|---|---|---|
| 5 | 26.60 | 0.1217 | 26.90 | 0.1073 |
| 6 | 26.94 | 0.1101 | 27.40 | 0.0996 |
| 7 | 27.08 | 0.1059 | 27.52 | 0.0925 |
| 8 | 27.08 | 0.1025 | 27.67 | 0.0865 |
| 9 | 27.19 | 0.1005 | 27.85 | 0.0822 |
| 10 | 27.29 | 0.0972 | 27.89 | 0.0814 |
| 11 | 27.36 | 0.0933 | 27.79 | 0.0833 |
| 12 | 27.43 | 0.0906 | 27.86 | 0.0826 |
| 13 | 27.57 | 0.0879 | 27.81 | 0.0813 |
数据来源:原文 Table 6(Deblur-NeRF 真实场景)。两列走势截然不同,这正是这一章要讲的。
仅刚体那一档:几乎线性地涨。 PSNR 从 26.60 一路升到 27.57,LPIPS 从 0.1217 降到 0.0879,中间没有明显的拐点。这符合直觉:离散积分的误差随采样密度单调下降,多一些采样点就少一些误差。
刚体 + CMR 那一档:在 N = 9 就饱和了。 PSNR 到 27.85 之后基本走平(N = 10 是 27.89、N = 13 是 27.81),LPIPS 在 0.0822 上下小幅波动。更值得注意的是横比:CMR 在 N = 9 的成绩(27.85)已经超过了仅刚体在 N = 13 的成绩(27.57),LPIPS 也是 0.0822 对 0.0879。 也就是说,加上 CMR 之后,用更少的位姿就能拿到更好的结果。
把这一章收成一句:N 不必取大,9 就够,而且这不是"省一点算力"的妥协,是 CMR 把差值补掉之后自然出现的结果。这也解释了为什么论文最终选 N = 9 而不是更大:再往上加,指标不动、成本照涨。
这里可以顺手把训练成本与 N 的关系对上账,检验一下"成本随 N 线性上涨"这句话在实测里成不成立。逻辑上很直接:每张糊图都要从 N 个位姿各渲染一次,所以单次迭代的渲染次数是基底的 N 倍;实测里本文训练 1.33 小时、基底 Mip-Splatting 大约几分钟量级,而 BAGS(也用 3DGS 系基底、但用 CNN 生成多尺度核)是 0.83 小时。1.33 ÷ 0.83 ≈ 1.6,与 N = 9 相比"只渲染 1 张"的基线高出的倍数不是一个量级,原因在于成本并不是简单乘 N:基底本身也在渲染,且 ODE 求解器带来的额外开销在总时间里占比不大(渲染才是大头)。所以"线性上涨"是说趋势,不是精确的倍数关系。原文没有给出逐 N 的耗时表,这是一个可以在自己复现时补测的点。
另一个值得记的实用判断:N 的合理取值与场景的模糊程度有关,而本文用的是固定 N。从 Table 6 看,N = 4 到 9 这一段涨幅明显(刚体+CMR 的 PSNR 从 26.90 到 27.85),9 之后走平;所以固定取 9 对"中度到重度模糊"都够用。但对轻度模糊的场景,N = 9 属于浪费——第 12 章第 1 条会指出这正是原文列为未来工作的"自适应 N"。如果要在自己的项目里用这套方法,先按固定 N = 9 跑通,等确认瓶颈在训练时间上,再考虑按模糊程度调 N。
9糊图怎么拼出来:权重、掩码与总损失
方法部分只剩最后一件事:有了 N 个位姿、渲染出 N 张清晰图,怎么把它们拼成一张"像输入那样的糊图"。这一步决定了训练信号从哪来,因为训练时没有清晰图可监督,唯一的监督就是输入的那张糊图。
拼法并非简单平均,而是逐像素、逐通道加权:
F 是一个浅 CNN,输出经 softmax 归一化成权重 P ∈ R^{N×H×W×3}。用 softmax 而不直接回归权重,是为了保证权重非负且和为 1,满足公式 2-1 的约束。为什么要逐像素而不是整图一个权重:因为同一张糊图上不同区域的模糊程度并不相同,靠近相机旋转中心的区域位移小、边缘区域位移大,一个全局权重没法同时描述。
但只有加权平均还不够。真实拍摄里常出现一张图上一部分糊、一部分还清楚的情况,如果强行把整张图都按"糊的模型"去拟合,清楚的那部分反而会被拉糊。原文的做法是再加一个标量掩码,在"按轨迹合成的糊图"与"标定位姿渲染的清晰图"之间做逐像素混合:
M 是逐像素标量掩码,取值在 0 到 1 之间:M → 1 表示这个像素该用糊图,M → 0 表示它本来就不糊、应该用清晰图。掩码本身还被加了一个稀疏约束 LM(就是掩码的均值),目的是把整体权重推向清晰图那一侧,避免模型偷懒把一切都判成"糊"。
最后是总目标。它由四项组成:
前三项分别是像素级损失、感知损失与第 7 章的正交正则;第四项是掩码稀疏。权重取值原文写得很具体:λc = 0.3、λo = 10⁻⁴、λM = 10⁻³。注意正交损失的权重比其他项小了两三个数量级,这与它在 Table 3 里只带来 0.11 dB 的事实是自洽的:它是一条轻约束,不是主力项。
训练过程分三段推进,这个安排值得记下来,因为它反映了各组件的依赖关系。前 1k 次迭代只粗训高斯,不带任何变换,先让场景有个基本形状;1k 到 3k 启用了刚体与 CMR 变换,但不启用像素权重与掩码,目的是让初始的相机运动轨迹能被充分优化出来(如果一开始就让权重去凑,模型可能用权重掩盖错误的轨迹);3k 之后权重与掩码才参与训练。整个流程 40k 次迭代,全部实验在单张 RTX 4090 上完成。
这段安排其实是一条经验:当"轨迹"和"权重"都能拟合同一张糊图时,必须先让轨迹学出物理正确的那一版。否则模型会用一套乱动的轨迹配一组精心调过的权重,把损失压得很低,而运动本身完全不对。第 11 章的轨迹可视化就是为了证明最终学到的轨迹没有跑偏。
掩码这一项还有两处容易误解的地方,需要说清。其一,掩码不是"模糊检测器"。 它没有和"实际模糊程度"建立任何物理对应,只是一个可学的逐像素权重,靠稀疏约束被推向清晰图那一侧。所以它能在"一部分区域糊、一部分清楚"的图上起作用,但它的取值本身不能拿来当"这个像素多糊"的度量。其二,掩码与像素权重是两件事。 像素权重 P 决定"N 张清晰图各自占比多少"(时间维度上的分配),掩码 M 决定"这个像素最终在合成糊图与标定位姿图之间怎么选"(空间维度上的分配)。两者都用到"权重"这个词,但作用的维度不同,读公式 9-1 与 9-2 时要分清。
至于那个浅 CNN F 的选择,原文给的结构很轻:两层卷积、32 通道,第一层 5×5 核、第二层 3×3 核;像素权重由一层逐点卷积得到,标量掩码则由输出在批次轴上取平均后再过一层逐点卷积得到。这套配置的信息量在于"够轻":CNN 的参数规模与高斯数量无关,与场景规模也无关,所以它不会成为显存或速度上的负担。如果把 F 换成一个更重的网络,理论上有更强拟合能力,但也会更容易走上"用权重凑损失"的那条路——这里"轻"本身就是一种正则。
最后把训练目标与第 2 章的那个式子接上,整篇的逻辑就闭合了:公式 2-1 说"糊像素是加权和",公式 9-1 就是它的可微实现;公式 9-2 是对"整图都被假设为糊"的一次修正;公式 9-3 把像素损失、感知损失与两条正则合成总目标。全文没有用到一张清晰图或一条真值轨迹,所有东西都是从那张糊图里反推出来的。这也是这类"盲去模糊"方法最迷人的地方:监督信号只有一张有缺陷的图,靠的是把成像过程的物理模型写对,让"错误"没有地方藏。
10三笔账:质量、速度与泛化
实验用三个数据集:Deblur-NeRF 的合成集(5 个场景,Blender 生成,在线性 RGB 空间合成模糊)与真实集(10 个场景,CANON EOS RP 拍摄,手动拉长曝光时间)、ExbluRF 真实集(8 个场景,相机运动更极端)。位姿与初始点云都由 COLMAP 提供。
先看主表。前三列是 Deblur-NeRF,后三列是 ExbluRF:
| 方法 | Deblur-NeRF 合成 PSNR ↑ | 合成 SSIM ↑ | 合成 LPIPS ↓ | Deblur-NeRF 真实 PSNR ↑ | 真实 SSIM ↑ | 真实 LPIPS ↓ |
|---|---|---|---|---|---|---|
| Naive NeRF | 23.78 | 0.6807 | 0.3362 | 22.69 | 0.6347 | 0.3687 |
| Mip-Splatting | 23.28 | 0.6765 | 0.2822 | 21.87 | 0.6270 | 0.3066 |
| Deblur-NeRF | 28.77 | 0.8593 | 0.1400 | 25.63 | 0.7645 | 0.1820 |
| DP-NeRF | 29.23 | 0.8674 | 0.1184 | 25.91 | 0.7751 | 0.1602 |
| BAD-Gaussians | 22.01 | 0.6377 | 0.1001 | 21.69 | 0.6471 | 0.1262 |
| Deblurring 3DGS | 28.24 | 0.8580 | 0.1051 | 26.61 | 0.8224 | 0.1096 |
| BAGS | 27.34 | 0.8353 | 0.1116 | 26.70 | 0.8237 | 0.0956 |
| CoMoGaussian | 31.02 | 0.9167 | 0.0492 | 27.85 | 0.8431 | 0.0822 |
数据来源:原文 Table 1("*" 表示由官方代码复现的结果)。这张表的读法要分三层。
第一层是"谁和谁比"。 表里既有基于射线的隐式方法(Naive NeRF、Deblur-NeRF、DP-NeRF),也有基于光栅化的显式方法(Mip-Splatting、BAD-Gaussians、Deblurring 3DGS、BAGS)。本文属于后者,所以真正的对手是后三行;前四行是历史基线,用来看这条线整体走到哪了。
第二层是"赢多少"。 合成集上 PSNR 31.02,比最好的隐式方法 DP-NeRF(29.23)高 1.79 dB,比同为光栅化路线的 Deblurring 3DGS(28.24)高 2.78 dB;真实集上 27.85 对 Deblurring 3DGS 的 26.61、BAGS 的 26.70,高约 1.2 dB。LPIPS 上的差距更大:合成集 0.0492,是唯一进到 0.05 以内的结果(第二名 Deblurring 3DGS 是 0.1051,差了一倍多)。
第三层是"谁在什么地方翻车"。 注意 BAD-Gaussians 那一行:合成集 PSNR 只有 22.01,比 Mip-Splatting 的 23.28 还低,但 LPIPS 0.1001 却相当好。原文对这种现象的解读很直接:它的 PSNR 与 SSIM 偏低,说明相机位姿没有被正确优化。这一条其实是整张表的注脚,它说明在去模糊这个任务里,位姿估得对不对,会同时体现在 PSNR 与 SSIM 上,而 LPIPS 因为更偏感知,有时会被"看着还行"迷惑。
第二张表换成 ExbluRF 数据集,专门测极端相机运动:
| 方法 | PSNR ↑ | SSIM ↑ | LPIPS ↓ |
|---|---|---|---|
| Mip-Splatting | 24.52 | 0.5662 | 0.6003 |
| ExbluRF | 23.45 | 0.5495 | 0.3805 |
| BAD-Gaussians | 26.83 | 0.6625 | 0.3221 |
| Deblurring 3DGS | 27.36 | 0.6795 | 0.3989 |
| BAGS | 24.70 | 0.5843 | 0.5278 |
| CoMoGaussian | 30.15 | 0.7559 | 0.3107 |
数据来源:原文 Table 2。这里的优势比前一张表更明显:PSNR 30.15 比第二名 Deblurring 3DGS 的 27.36 高了 2.79 dB。但 LPIPS 这一列要冷静看:本文 0.3107 对 BAD-Gaussians 的 0.3221 只好了 3.5%,而 PSNR 差了 3.32 dB。数值优势大、感知优势小,这个组合值得如实写出来:说明在极端模糊下,"位姿对了"首先反映在像素级指标上,感知指标因为本身就难分辨细节,涨幅自然有限。
第三张表是本篇里最能说明"泛化"的一条:拿清晰图像去跑(NeRF-LLFF 前向场景)。
| 方法 | PSNR ↑ | SSIM ↑ | LPIPS ↓ |
|---|---|---|---|
| Mip-Splatting | 27.71 | 0.8685 | 0.0494 |
| Deblurring 3DGS | 17.42 | 0.5075 | 0.3187 |
| BAGS | 26.35 | 0.8490 | 0.0528 |
| CoMoGaussian | 27.56 | 0.8669 | 0.0457 |
数据来源:原文 Table 5。这组数据想说明的是"本文不会因为拿到的图不糊就崩掉"。PSNR 27.56 与基底 Mip-Splatting 的 27.71 基本持平(差 0.15),LPIPS 反而更好(0.0457 对 0.0494);而两个专门为去模糊设计的方法在这个数据集上表现差异很大——Deblurring 3DGS 掉到 17.42,BAGS 是 26.35。这条对照说明"为模糊设计的模块不该变成负担",本文在这点上守住了。
最后是速度账,这是本文明确的代价所在:
| 方法 | 训练时间(小时) | 渲染速度 |
|---|---|---|
| BAD-Gaussians | 0.37 | 与 3DGS 相同 |
| Deblurring 3DGS | 0.20 | 与 3DGS 相同 |
| BAGS | 0.83 | 与 Mip-Splatting 相同 |
| CoMoGaussian | 1.33 | 与 Mip-Splatting 相同 |
数据来源:原文 Table 7。两列要分开理解。渲染速度这一列全是"与基底相同"——因为本文没有改光栅化,只改了位姿怎么来,所以实时性完全保住,这是它相对隐式方法最实在的优势。训练时间这一列是真代价:1.33 小时是最省的 Deblurring 3DGS(0.20 小时)的 6.7 倍、BAGS 的 1.6 倍。原因在公式 9-1 里:每张糊图都要渲染 N = 9 张清晰图,训练成本天然是基底的数倍。
上面这张图是"精选例子",看的时候要带着一个疑问:这些场景是不是刻意挑出来的?论文的常规做法是在正文放最有代表性的场景、把其余场景放进附录,附录里的那张补充对照图就是回答这个疑问的地方。
三笔账合起来:质量赢得多(合成集高 1.79 dB、ExbluRF 高 2.79 dB),渲染速度一点不掉,代价集中在训练时间(1.33 小时)。对使用者来说,这是一次"用离线训练时间换在线质量与实时性"的交换,方向是划算的。
这里补三条读表时该有的口径意识,都是这类跨方法对比表的常见坑。第一,注意哪些数字是"复现"来的。 表注里带星号的(BAD-Gaussians)是由本文作者用官方代码跑出来的,不是原论文报告值;跨论文比数字时,训练轮数、分辨率、评测脚本的差异都会渗进来。第二,注意指标的方向与量纲。 PSNR 是分贝、SSIM 与 LPIPS 是 0 到 1 的无量纲量,"高 1.79 dB"和"高 0.0022"在感知上不是同一件事,不能横着比大小。第三,注意表里的"最好"是不是同一批数据上的。 Deblur-NeRF 合成集只有 5 个场景,场景数少意味着单场景的随机性对均值影响更大,跨论文比较时这类小数据集的排名稳定性天然弱于大基准。
另外值得一提的是三个数据集的分工,它们不是随便凑的。合成集用 Blender 生成、模糊在线性 RGB 空间合成,好处是有真值、可控,用来验证"方法在理想条件下的上限";Deblur-NeRF 真实集用同一台相机(CANON EOS RP)手动拉长曝光,用来验证"真实传感器数据上是否成立";ExbluRF 专挑极端相机运动,是压力测试。本文在这三条线上都赢了,比只赢一条更可信;反过来读别人的论文时,如果只在一条数据集上有优势,就要多留个心眼。原文对 BAD-Gaussians 的解读也提醒了一件事:在 ExbluRF 上 LPIPS 好但 PSNR/SSIM 差,说明它的优势可能来自"感知上讨巧"而不是位姿估得准,这类组合需要在选型时特别当心。
11它学到的是真运动吗:轨迹可视化
前几章一直在说"轨迹连续",可连续性只是必要条件,不是充分条件:一条光滑但错误的轨迹同样能让损失降下来。所以要单独看一组证据——把估出来的运动画出来,用眼睛核对。
这张图的巧妙之处在于"用颜色编码时间"。如果轨迹是断的或来回跳,颜色序列就会乱;读者不需要任何指标,顺着颜色看一遍就能判断连续性。它把"连续性"这个抽象性质变成了一件肉眼可验的事,这也是本文证明自己最有效的一张图。
把这张与上一张放在一起,才是"轨迹长度随模糊程度变化"的完整证据。但还有一个更硬的问题没被回答:如果输入本来就不糊,它会不会照样硬凑一段运动出来? 一个只会"拟合糊图"的模型在这里最容易露馅,因为那种情况下它必须靠编造运动来让损失下降。下一张图就是针对这个问题的。
上面的答案还只是"模糊轻的时候少动一点",仍属于"按模糊程度调节"的范畴。真正能证伪"硬凑运动"的,是拿一批完全没有模糊的清晰图像去跑——如果模型在任何输入上都倾向于找出一段运动,这里就会原形毕露。
四张图连起来读,才构成完整证据链:图 11-1 证明轨迹连续且与糊图一致,图 11-2 与 11-3 证明轨迹长度随模糊程度变化,图 11-4 证明在没有模糊时它会停下。三者合起来才足以反驳"它只是学会了一组让指标好看的数字"这个质疑。这也是第 9 章那段三段式训练安排要防的事:先让轨迹学对,再让权重去拟合。
把这一章与前面的表格对照起来看,会发现一个很漂亮的闭环。第 8 章的 Table 6 说"CMR 在 N = 9 饱和",这一章的图 11-2 与 11-3 说"轨迹长度随模糊程度变化"——这两件事其实是一回事的两面:饱和意味着再多的采样点也换不来更多信息,而"会根据模糊程度调整幅度"说明模型确实在读输入里的运动信息,而不是在套一个固定的模板。第 5 章的图 5-1 说"只有 ODE 连续",这一章的图 11-1 给出的就是"连续"在视觉上长什么样。前三章讲机制、这一章讲证据,两边能对上,这是这篇论文在结构上最扎实的地方。
最后说一句这套可视化方法的可迁移价值。任何"模型学了一个物理量"的工作,都可以照这个思路做一张图:把那个物理量画出来,并给它一个能被眼睛直接读出的编码(这里是颜色编码时间)。它比任何指标都有说服力,因为它不依赖于"指标和真实目标是否一致"这个前提假设。反过来,如果你的模型学出的东西没法这样画出来,那通常说明你对它的理解还不够——这是一条很实用的自检标准。
12边界与反例(独立成节,10 条)
前面十一章讲的是它能做什么。这一章只讲它做不到、或做到什么程度的代价,按"原文自述"与"读表读出来的"分开标注。
1. 不能区分模糊程度(原文自述)。 原文在 Limitations 里写得很直接:本文缺乏区分中等模糊与严重模糊的能力。中等模糊用更少的位姿就能建模,严重模糊才需要更多位姿;自适应地按模糊程度决定位姿数被列为明确的未来方向,理由是这样既能提升训练效率,也能缓解过拟合。
2. 训练成本随位姿数线性上涨(原文自述 + 读表)。 每张糊图都要渲染 N 张清晰图,这是公式 9-1 直接决定的。实测训练时间 1.33 小时,是 Deblurring 3DGS(0.20 小时)的 6.7 倍、BAGS(0.83 小时)的 1.6 倍。渲染速度不掉,但离线训练这一档要按倍数算预算。
3. 感知指标优势远小于数值指标(读表)。 ExbluRF 上 LPIPS 0.3107 对 BAD-Gaussians 0.3221,只差 3.5%;而 PSNR 30.15 对 26.83,差了 3.32 dB。如果你按感知质量选方法,这个优势不足以成为决定性理由。
4. 清晰图场景上不占优(读表)。 NeRF-LLFF 上 PSNR 27.56 略低于基底 Mip-Splatting 的 27.71(LPIPS 反而是本文更好)。所以"图本来就是清晰的"这种场合,用本文没有收益、还要多花训练时间。
5. CMR 不显式满足 SE(3)(原文自述)。 它是"接近 SE(3)"而非"属于 SE(3)",靠一条权重仅 10⁻⁴ 的正则软约束。这意味着没有硬保证:极端情况下仍可能学出带轻微剪切或缩放的变换。
6. 位姿必须预先给定(读方法)。 整条流水线依赖 COLMAP 提供的标定位姿与初始点云,位姿本身不在本文的优化范围内。这与 BAD-Gaussians 那条"位姿也一起调"的路线形成对照:本文换来的是运动建模的物理可解释性,代价是必须有一份还不错的初始位姿。
7. 曝光中点假设(原文自述)。 公式 3-1 把给定的标定位姿当作曝光时段的平均位置放在轨迹中央。这条假设在运动不对称时会带来偏差(例如快门期间相机先慢后快)。原文没有对这一点做敏感性实验。
8. 掩码是启发式的(读附录)。 标量掩码靠一个稀疏约束推向清晰图,阈值没有物理含义,也没有和实际模糊程度建立对应。它在"部分区域糊"的场景里有用,但判定粒度是逐像素的启发式规则。
9. 每次换场景都要重训(读方法)。 隐状态宽度 64、单层 MLP 编码解码,规模固定且与场景绑定,不是前馈式先验;没有跨场景的泛化机制。它不是一个即插即用的通用先验,而是一套逐场景的优化流程。
10. 合成数据的成像假设(读数据集描述)。 Deblur-NeRF 合成集是在线性 RGB 空间把清晰图叠加成模糊图,假设相机运动是被完整采样的。真实相机还有卷帘快门、读出噪声、镜头畸变等因素,这些都不在本文建模范围内。
十条归拢成一句话:它把"相机运动该怎么表示"这件事解决得相当彻底,代价是训练时间成倍增长,而且收益高度依赖"输入的模糊确实来自相机运动"这个前提。手持拍摄、运动模糊为主的场景是它的主场;如果模糊另有来源(失焦、卷帘、物体自身在动),它未必适用。
再把十条翻成一组"要不要上"的判断,会更实用。该上的场合:输入以相机运动模糊为主(手持、长曝光、夜间)、需要实时预览或渲染(渲染速度与基底一致)、能接受几小时级的离线训练、并且拿得到一份质量尚可的 COLMAP 位姿。可以先不上的场合:模糊主要来自失焦或卷帘(不在建模范围内)、图像本来就清晰(Table 5 显示没有收益却要多花时间)、算力预算极紧(1.33 小时对 0.20 小时不是小差距)、或者场景里有大量独立运动的物体(本方法默认场景静止,只让相机动)。一个折中方案:如果只是想验证效果,可以先用本文的思路把位姿估出来、再换回原始的训练流程——本文的位姿输出是与基底解耦的,这一点在工程上很有用。
最后说一句这篇论文值得学的地方。它示范了一条完整的"把物理模型写进网络结构"的路线:先找出现有方法的物理缺陷(连续性没被建模),再把物理约束做成结构(刚体参数化 + 指数映射),接着给结构补上实现层面的缺口(CMR),最后用可视化证明学到的确实是那个物理量(轨迹图)。四步里最难的是第一步与第四步:发现问题需要你对物理过程有判断,证明有效需要你能把结果画出来给人看。中间的建模工作当然也难,但它至少有标准工具可循:李代数与指数映射是机器人学里用了三十年的成熟工具,neural ODE 也有现成的求解器与配套的反向传播实现。把这些现成件按物理逻辑拼起来,比发明新工具更考验判断力。
13贡献块
- ① 用 neural ODE 建模曝光时间内的连续相机运动:把相机轨迹放到隐空间里做连续演化,而不是在物理空间里连几个点,在建模范式上与既有去模糊方法不同。
- ② 连续地建模刚体变换:用单位螺旋轴的指数映射保证运动过程中物体的形状与尺寸不变,把"相机在动、场景没变形"写进模型结构。
- ③ 提出 CMR 变换补上离散化的差:刚体再准也代表不了采样点之间的运动,CMR 用一小段可学偏移补住缺口,并在更小的位姿数下就达到饱和性能。
- 三条串成一条因果链:承认"模糊是连续运动的积分"(①)→ 用带物理含义的刚体参数化让轨迹不跑偏(②)→ 补上离散近似带来的那点差(③)。缺一不可:没有 ① 就没有连续性,没有 ② 可能学出形状被拉伸的假运动,没有 ③ 就得靠堆位姿数硬扛。
14原文出处块
- 标题
- CoMoGaussian: Continuous Motion-Aware Gaussian Splatting from Motion-Blurred Images
- 作者
- Jungho Lee、Donghyeong Kim、Dogyoon Lee、Suhwan Cho、Minhyeok Lee、Wonjoon Lee、Taeoh Kim、Dongyoon Wee、Sangyoun Lee
- 机构
- Yonsei University / NAVER Cloud
- 发表
- ICCV 2025(pp. 26415–26424)· arXiv:2503.05332v2 [cs.CV],17 页 11 图(CRiM-GS 的修订版)
- PDF 链接
- arXiv:2503.05332 [cs.CV]
- 许可
- CC BY 4.0:arXiv 页面标注 Creative Commons Attribution 4.0;本站站内托管 arXiv 版本并标注来源。