返回专辑
·Johan·3 分钟阅读

鲁棒估计:RANSAC、M 估计与开关约束

前端硬拒绝与后端连续降权的分工;Huber δ、switchable constraints 与动态场景。

鲁棒估计:RANSAC、M 估计与开关约束

1. 一个 100 px 外点毁整窗 BA

误匹配、动态物体、玻璃反射、错误回环——高斯最小二乘零容忍。一个 100 pixel 重投影误差可以把 Local BA 整窗拉偏。鲁棒估计不是「加个 RANSAC」:前端离散拒绝、后端连续降权、回环开关,三层分工缺一层都会在真实场景里交学费。动态场景里 RANSAC 假设静态,单靠 M 估计也不够——还要前端 mask 动态区域。

2. 前端:RANSAC

随机抽最小样本集 → 估模型 → 数内点 → 取最优。SLAM 典型:5 点本质矩阵、4 点单应、3–4 点 PnP、3 点 ICP。迭代次数 ,外点率 50% 时 5-point 约需 500 次——外点率高时须收紧前端或加几何校验,不能单靠加迭代。RANSAC 阈值应匹配相机噪声(高分辨率用 5 px 可能太松);动态场景里内点假设本身不成立。

3. 后端:M 估计

Huber 小残差 L2、大残差 L1——通用默认;Cauchy 大残差渐近常数——外点多或误回环;Geman-McClure 更激进。Ceres/g2o LossFunction 即 M 估计;内部 IRLS 交替优化状态与权重。δ 匹配预期噪声(1–3 px),不是越大越稳——δ 过大退化为 L2,过小正常点也被降权、收敛慢。回环 BA 与 Local BA 可用不同 δ:回环边更可疑,可用更激进的 Cauchy。

4. 开关约束

可疑因子(尤其回环边)乘

优化器可「关掉」错误回环()而非硬删。DCS(Dynamic Covariance Scaling)是类似思路——用于回环验证通过但仍不确定、多会话合并、长期运行偶发误匹配。PGO 后检查残差仍大的边 → 删除或降权,作为最后一道闸。

5. 三层流水线

text
RANSAC 清粗差 → Huber/Cauchy BA 清残留 → 回环 switchable → PGO 后删大残差边

只 RANSAC 不鲁棒 BA——迭代中线性化点变,内点变外点。只鲁棒核不 RANSAC——50% 外点 Huber 仍被拉偏。误回环无 switch,一次错误边永久污染地图——ATE 突然改善又伴随局部扭曲,是典型症状。PGO 后的 residual audit 应自动化,人工只看 ATE 不够。

6. 动态场景

RANSAC 假设静态场景——人走过时内点集是错的。语义/光流 mask 动态区域,或多帧一致性剔点;鲁棒核救一点,不能替代「动态点不进地图」。玻璃反射产生的「稳定误匹配」RANSAC 也可能全收——需要 photometric 或多视几何交叉验证。

7. 失败模式与 IRLS

δ 未标定 → 正常点全被降权、优化不动;回环无开关 → 一次误回环永久污染。Ceres loss 换太激进,IRLS 权重震荡——调试时先 L2 收敛,再开 Huber,对比残差 histogram 是否近零均值高斯。

8. 回环边的特殊处理

回环验证通过仍可能误匹配——保守 information + switchable constraint 是默认组合。PGO 后残差仍大的边应删除或降权,别指望 Huber alone 救误回环。Dynamic Covariance Scaling 与 switch 思路相近,选型看后端是否原生支持。

9. 案例:误回环拉直 ATE 但扭曲局部

一次错误回环后 ATE RMSE 从 0.15 m 降到 0.04 m,RPE @ 1 m 不变且局部地图扭——典型「对齐帮倒忙」。报告须 ATE+RPE 同看;有 switch 的系统查被关闭边比例,无 switch 的查 PGO 后大残差边数。

10. 验收

  • RANSAC 内点率分布;
  • BA 前后残差直方图近零均值高斯;
  • 被 switch 关闭的回环比例;
  • 鲁棒 vs 非鲁棒 ATE 消融;
  • Chi2 超标因子数可控;
  • 动态场景 mask 后内点率应上升。

鲁棒估计是 SLAM 的免疫系统——三层协同,才能把误匹配和误回环挡在因子图外。上线前用注入外点/误回环的 regression bag 验一遍,比现场撞玻璃反射便宜。Local BA 与回环 PGO 可用不同 loss——回环边更可疑,δ 或核函数可更激进。

← 全部文章

johan's blog