有了身份之后,接下来要解决的是怎么少标一点,以及少标之后怎么保证不歪。 这一页讲三件事:一致性到底指什么、关键帧该放在哪、以及为什么有些量根本测不出来。
一批标注,每帧的框和点云误差都在正负 2 厘米以内。
质检通过了。交付。
下游用相邻两帧的位置差估速度,结果曲线剧烈抖动,不能用。
为什么 2 厘米这么小的误差会让速度不能用?算一下。
30 帧每秒,时间间隔约 0.033 秒
速度误差 ≈ 位置误差 ÷ 时间间隔
= 0.02 ÷ 0.033
≈ 0.6 米每秒
两帧都带独立误差时还要乘 1.41,约 0.85 米每秒。
而一辆车正常开是 10 米每秒。
将近一成,而且逐帧乱跳。
速度是位置的变化率。位置有噪声,变化率就有噪声,而且被"除以一个很小的数"放大了三十倍。
差分本质上就是放大噪声。
| 两帧的误差关系 | 差分之后 |
|---|---|
| 各自独立,随机跳 | 不抵消,还要乘 1.41,速度误差 0.85 米每秒 |
| 完全一致,同一个偏差 | ✅ 完全抵消,等于 0 |
一致时: (p₂ + e) − (p₁ + e) = p₂ − p₁ e 消掉了
独立时: (p₂ + e₂) − (p₁ + e₁) e 消不掉
误差在时间上有没有相关性。
相关的,差分时自动抵消。独立的,差分时被放大三十倍。
这和"准不准"是两根独立的轴:可以让每一帧都准,但误差帧帧在跳。
真实系统不会拿相邻帧直接差分,那正是噪声被放大的根源。 它们用滤波器或者平滑拟合,本质上就是在利用时间相关性把噪声压掉。
把一帧的标"搬"到另一帧上。它其实搬两样东西:
| 搬什么 | 说明 |
|---|---|
| 身份 | 这一帧的框和上一帧的框是同一个物体 |
| 状态 | 位置、朝向、尺寸,按运动模型算出来 |
而"往前推"有两种做法,它们的失效方式完全相反:
| 做法 | 误差 | 平滑吗 |
|---|---|---|
| 链式,每帧从前一帧推 | ❌ 会累积,越走越歪 | ✅ 天然连续 |
| 锚定,每帧从关键帧算 | ✅ 不累积 | ✅ 也连续,但会系统性偏离 |
| 逐帧独立检测 | ✅ 不累积 | ❌ 会抖 |
关键帧 ×─────────×─────────×─────────×
\ / \ / \ /
\ / \ / \ / 窗口内部用平滑传播
\ / \ / \ /
─ ─ ─ 但每个窗口的起点钉在关键帧上
窗口内部拿到"稳",每个窗口的起点锚住拿到"不累积"。代价是关键帧之间仍然会漂, 但漂不出这个窗口。
最自然的做法是均匀撒。这是错的,而且错得很具体。
外推用的是匀速直线,它假设速度恒定。所以模型失效的条件是速度变了, 也就是加速度不为零。
误差大约等于 ½ · a · t²
要让它小于阈值,时间跨度必须小于 √(2ε/a)
所以关键帧的间隔正比于 1 除以 √a
匀速段理论上可以放很长,弯道上要密集。
而均匀采样正好做反了:直线段浪费了关键帧,弯道段不够用。
一辆车匀速转弯时,速度的大小完全不变,但速度的方向一直在变, 所以加速度不为零。
只盯"速度大小有没有变" → 会以为弯道没问题 → 把关键帧全撒在直道上
而"匀速直线"外推一个弯道,会直接飞出路面
车速 10 米每秒、半径 10 米、外推 0.33 秒 → 偏离约 0.54 米
同样长度的一段路,如果是直的,外推误差接近零。
运动学之外,还有观测。遮挡开始和结束、点云突然变稀、雨雾, 这些时候外推没有东西纠正,会漂。
所以"变化点"应该扩展成"不确定度大的地方",两类都算。
关键帧每 30 帧一个,算法在第 15 帧错了。人发现了,怎么修?
改完之后,它和邻居不连续了。你修好了一个错误,又制造了一个一致性问题。 速度曲线会在那一帧上戳出一个尖刺。
正确做法是切断加重传:在出错那一帧切断,以修正结果为新起点,重传到这个窗口的右边界。
而设计上最关键的一点是:切断点必须能随便选。 如果切断只能发生在原有关键帧上,修第 15 帧就得整段重来。
所以回退的最小单位是"段",不是"帧",也不是"到结尾"。
一个团队用高速公路直道的数据测了一下角速度估计:
误差 0.001 弧度每秒,看起来非常好。于是报结论:角速度估计达标。
直道上真实角速度恒等于零。任何估计器,只要输出接近零就能拿到这个分数, 包括"永远输出零"这个算法。
这段数据对"会不会估角速度"完全没有区分度。
| 数据 | 被激励的量 | 测不出来的 |
|---|---|---|
| 高速公路直道 | 位置、速度 | 角速度 |
| 匀速 | 位置、速度 | 加速度 |
| 静止 | 位置 | 速度,而且和标定偏差混在一起 |
| 正对视角 | 位置、尺寸 | 朝向 |
要检验某个量能不能被估出来,数据里必须让那个量真的变过。
否则你测的只是"常数能不能输出常数"。而这类指标看起来最漂亮,因为误差往往接近零。
这条和标定那边是同一个病:用只覆盖画面中心的标定板去验标定, 边缘的误差永远测不出来。测试数据的分布,没有覆盖你要检验的那个维度。
准和稳是两根轴。位置准不代表速度准,因为差分会把独立的噪声放大三十倍。
传播要分段锚定。关键帧放在加速度大的地方,间隔正比于 1 除以根号 a。
回退的单位是段。而且要记住:没被激励的量测不出来,这类指标误差往往最漂亮。