22规模与性能

三千帧、每帧二十万个点,一共十八个吉字节。这一页讲的不是怎么算得更快, 是怎么让要算的东西本来就不大。

状态很小 点云只读关键帧 LOD 的位置

一、先把账摆出来

3000 帧 × 每帧约 6 MB  ≈  18 GB

光读一遍就要好几分钟。于是很自然会想:换更快的解析器、上 SSD、多线程解码。

这些都有用,但它们优化的不是主要矛盾。

二、主要矛盾:传播根本不读点云

p(t) = f( p(t−1), 运动模型 )
           ↑
     只依赖上一帧的状态,不依赖上一帧的点云

所以点云用一次就可以扔。而"状态"是什么?每帧每个物体几十个字节: 身份、位置、朝向、尺寸。

三千帧的状态,全放内存也就几百 KB

这就是"跑得动"的真正原因:不是算得快,是要算的东西本来就不大。

三、那点云什么时候必须读

用途读多少帧分辨率
传播0—
关键帧取观测关键帧数,通常五十分之一全分辨率
校验抽样加可疑段降采样就够

算下来大概是:六十帧全分辨率加三百帧降采样,合计约 450 MB,而不是 18 GB。 降了四十倍。

但校验这一项不能省

传播不读点云很省,可是你怎么知道它算对了?如果永远不回头读,第五张骨牌倒了靠什么发现?

所以真正的问题不是"要不要读",是"读多少才够"和"读来干什么"。

四、LOD 该放在哪

LOD / Level of Detail 多层次细节。同一份数据准备几个不同精度的版本, 按需要取用。手机上远处的地形用低精度,近处用高精度,就是这个思路。

它在标注系统里的位置很具体:

用途要全分辨率吗能用 LOD 吗
关键帧上精确标注✅ 必须❌ 不能
校验,看框飘没飘❌ 不需要✅ 正好用

因为校验看的是"框和车的相对位置对不对",不是"边界精确到几厘米"。 降到二十分之一,框飘出去一米照样一眼看得见。但你想靠降采样的点云精确定位一辆车, 那是做不到的。

所以 LOD 的正确形态是空间的
远处:降采样
        ↓
     ┌────────┐
     │  目标   │  全分辨率
     └────────┘

整帧降采样是错的,近处全、远处降才对。这也是点云标注工具里 "裁一块区域出来,周围保留一点"的做法。

五、还有一条:并行

纯链式传播是串行的,帧 t 依赖 t 减 1,加机器也没用。

而分段锚定之后,每个窗口独立,窗口之间就可以并行。这是分段锚定的第三个好处: 前两个是不累积误差、回退便宜。

六、这一页带走什么

性能问题的第一解不是"算得更快",是"少算"。而少算的前提是想清楚哪些东西是每帧都要的。

这里的答案是:状态每帧都要,但它很小;点云很大,但它只在关键帧和校验时要。 把这两件事分开,数量级就变了。

← 上一页:插值 ·  下一篇:ROS 与实时接入 →
京ICP备19013239号