chapter21.md — 评测基准、离线 A/B 与在线监控(算法侧)
21.0 开篇段落
如果说算法是导航系统的心脏,那么评测与监控体系就是其免疫系统与神经中枢。一个能在演示中表现惊艳的算法原型,与一个能在数千个动态、未知环境中 7x24 小时可靠运行的产品级方案之间,隔着一道由数据、指标和流程构成的鸿沟。本章的目标是系统性地阐述如何构建这道桥梁。我们将深入探讨一套分层、闭环的评测哲学,从零成本、高效率的离线回放开始,作为算法迭代的“培养皿”;进而引入虚实结合的混合基准测试,作为算法进入真实世界前的“压力测试”;最终覆盖在线部署的灰度、A/B与实时监控,构成保障线上安全的“最后防线”。本章将穿插具体的指标定义、数学工具与工程实践,旨在为算法的安全发布、性能优化与长期迭代,提供一个可量化、可执行的框架。
21.1 离线回放评测:日志→重放→决策重评分
离线回放(Offline Replay),或称日志回放(Log Replay),是算法开发周期中最高频、最低成本的验证手段。它利用线上采集的真实数据日志,在服务器上“重演”历史,以评估新算法在相同情境下的决策优劣。其核心价值在于大规模、自动化地筛除有明显退步(Regression)的算法版本。
核心流程详解:
- 高保真日志记录 (High-Fidelity Logging):
- 数据内容:需要记录算法决策所需的所有上游输入。这不仅仅是原始传感器数据,还包括中间处理结果,以解耦评测。
- 原始数据流:多视角同步图像(
sensor_msgs/Image)、IMU 据(sensor_msgs/Imu)、关节/轮速计状态(sensor_msgs/JointState)。
- 状态估计流:VIO/SLAM 输出的机器人位姿
T_{world \leftarrow robot} (t)。
- 环境感知流:3D 场景表示(如局部点云、OCC Grid 更新)、动态障碍物列表及其预测轨迹。
- 旧策略决策流:作为基线(Baseline),需要记录旧版本算法输出的规划轨迹、控制指令以及关键的内部状态(如注意力图、价值估计)。
- 技术挑战:
- 时间同步:所有数据流必须拥有来自统一时钟源(如 NTP 或 PTP 同步后的系统时钟)的精确时间戳。微秒级的误差都可能导致因果倒置。
- 数据格式与压缩:使用高效的序列化格式(如 Protobuf、Rosbag2 with MCAP)和流式压缩(如 Zstd)来处理巨大的数据量(尤其是多摄视频)。
-
反事实困境 (The Counterfactual Problem):
这是离线回放的根本局限性。新算法的一个微小动作差异,就可能导致真实世界后续的观测完全不同。例如,新算法选择向左避让,而日志中的旧算法是向右,那么新算法永远无法得知向左之后会看到什么。因此,我们不能直接在离线回放中评估长期的、交互性的任务成功率 (SR)。评估必须聚焦于短期、可验证的决策质量。
-
多维度决策评分 (Multi-faceted Decision Scoring):
评分系统是离线评测的核心。它从多个维度量化新旧策略的优劣。
- I. 安全性 (Safety Score):一票否决项。
- 预测碰撞 (Predicted Collision):将新算法规划的轨迹(一个时空管廊)与日志中记录的障碍物体素进行时空碰撞检测。任何碰撞都应导致该样本的安全性得分为零。
- 违反约束 (Constraint Violation):检查是否违反速度/加速度限制、是否侵入虚拟禁区(Keep-out Zone)、是否反社交距离模型。
- II. 决策稳定性与一致性 (Stability & Consistency Score):
- 动作分布散度 (Action Distribution Divergence):对于概率性策略(如 VLA),比较新旧模型在同一状态 $s$ 下输出的动作分布 $P_{new}(a|s)$ 和 $P_{old}(a|s)$。KL 散度是常用指标,但它不对称。Jensen-Shannon (JS) 散度 更为稳健:
$D_{JS}(P_{new} || P_{old}) = \frac{1}{2} D_{KL}(P_{new} || M) + \frac{1}{2} D_{KL}(P_{old} || M)$ (其中 $M = \frac{1}{2}(P_{new} + P_{old})$)
一个剧烈的分布变化(高 JS 散度)是潜在不稳定的信号,需要人工介入审查。
- 轨迹几何相似度 (Trajectory Geometric Similarity):比较新旧局部轨迹的形状。简单的 L2 距离对时间上的微小偏移很敏感。动态时间规整 (Dynamic Time Warping, DTW) 或 Fréchet 距离 更能鲁棒地衡量两条曲线的相似性。
- III. 效率与舒适度 (Efficiency & Comfort Score):
- 预期进展 (Expected Progress):新轨迹在朝向目标的路径上取得了多大进展。
- 能量/时间成本 (Energy/Time Cost):路径长度、执行时间、以及考虑了加减速和转向的能量代理模型。
- 平顺度 (Smoothness):计算轨迹的加加速度 (Jerk) 和更高阶的 Snap。高 Jerk 意味着顿挫感,体验差且对硬件有损耗。
$Jerk(t) = ||\frac{d^3 \mathbf{p}(t)}{dt^3}||_2$
集成到 CI/CD
Git Push (New Model)
|
v
+------------------+
| CI Pipeline Trig |
+------------------+
|
v
+---------------------------------------+
| Run Offline Replay on Golden Dataset |
| - Log Player |
| - New Model Inference |
| - Scorer |
+---------------------------------------+
|
v
+---------------------------------------+
| Generate Report |
| - Safety Score: 100%? (GATE) |
| - Stability Score: < Threshold? (GATE)|
| - Efficiency Delta: > -5%? (WARN) |
+---------------------------------------+
|
v
+------------------+ +------------------+
| All Gates PASS? |----->| Merge Allowed |
+------------------+ +------------------+
| (No)
v
+------------------+
| Block Merge |
+------------------+
经验法则 (Rule-of-Thumb):
离线回放是必要但不充分的测试。将它视为一个自动化代码审查机器人:它能帮你发现明显的拼写错误(灾难性碰撞)和不符合规范的风格(行为剧变),但无法判断代码的商业逻辑是否正确(任务能否成功)。
21.2 合成与真实混评:配比与权重
真实日志数据虽然保真度高,但存在“长尾分布”问题:绝大多数数据是简单的“走廊巡航”,而高风险、高价值的边缘场景(如电梯交互、人群拥挤)极其稀疏。仿真(合成据)正是为了弥补这一短板。一个健壮的评测基准必须是两者的结合。
构建策略:
-
场景分类学 (Scenario Taxonomy):
系统化地定义评测场景库,并为每个场景打上标签。
| 场景类别 | 场景示例 | 主要挑战 | 数据来源 |
| :— | :— | :— | :— |
| 常规导航 | 直线、转弯、穿门 | 基础移动性、效率 | 真实(大量), 合成 |
| 动态交互 | 人群避让、窄道会车 | 预测、社交合规性 | 真实, 合成(关键) |
| 特殊物体 | 玻璃门、镜面、地毯 | 感知鲁棒性 | 合成(主), 真实(少) |
| 结构化交互 | 乘电梯、过闸机 | 状态机、多步协议 | 合成(主), 真实(少) |
| 对抗/压力 | 突然闯入、强光/弱光 | 应急反应、感知极限 | 合成(关键) |
- 仿真中的“上帝视角”指标:
仿真环境最大的优势在于拥有绝对真值 (Ground Truth),这使得我们可以计算在真实界中无法获得的诊断性指标。
- 最小碰撞时间 (Time To Collision, TTC):在每一时刻,假设所有物体按当前速度匀速直线运动,计算机器人与它们发生碰撞需要的最短时间。持续的低 TTC 值是危险信号。
- 真值定位误差 (Ground-Truth Localization Error):直接评估 SLAM/VIO 模块的精度。
- 语义分割/检测 mAP:使用仿真器提供的像素级真值标签,精确评估感知模块的性能。
- 加权评分体系:
最终得分是所有场景得分的加权总和,权重体现了业务优先级。
Total Score = $\sum_{i \in Scenarios} w_i \cdot (\alpha \cdot \text{Score}{real, i} + (1-\alpha) \cdot \text{Score}{sim, i})$
- 场景权重 $w_i$:根据场景的重要性、发生频率和风险等级来设定。例如,$w_{elevator} = 10 \cdot w_{corridor}$。这些权重应由产品、算法和安全团队共同商定。
- 真实性权重 $\alpha$:反映了我对仿真环境的信任程度,通常 $\alpha \in [0.6, 0.8]$。随着 Sim2Real 差距的缩小,$\alpha$ 可以适当降低。
经验法则 (Rule-of-Thumb):
仿真评测的目的是发现未知缺陷,真实数据评测的目的是验证已知性能。当一个模型在仿真中表现优异但在真实数据上失败时,说明存在 Sim2Real Gap;反之,则可能意味着仿真场景的设计不够有挑战性或不贴近现实。
21.3 在线指标与告警:安全事件、近碰、急停率
当算法部署到实体机器人上时,我们需要一套实时、灵敏的监控系统来捕捉那些无法在离线阶段预见的风险。
在线指标金字塔:
这是一个从下到上、严重性递减的指标体系。
- L1: 灾难性事件 (Catastrophic Events) - 零容忍
- 碰撞 (Collision):通过 IMU 冲击检测、机体应力传感器或视频异常来检测。任何一次碰撞都应触发最高优先级的调查。
- L2: 严风险前兆 (Leading Indicators of High Risk) - 需根因分析
- 急停 (Emergency Stop, E-Stop):由底层安全模块(非规划算法)触发的制动。高频次的急停意味着规划模块的风险预判能力不足,过于“极限”。
- 近碰 (Near-Miss):机器人与障碍物的距离小于预设的动态安全包络(Dynamic Safety Envelope)。这个包络应考虑机器人的速度和尺寸。例如,定义为机器人前方
v*0.5s 距离和 width*1.2 宽度的时空区域。
- L3: 任务性能与体验 (Task Performance & UX) - 用于 A/B 测试
- 人工干预率 (Intervention Rate):单位任务或单位运行时间内的远程接管或现场干预次数。需要对干预原因进行分类(如:卡住、路径规划不合理、行为怪异)。
- 任务成功率 (SR) / 超时率 / 放弃率:宏观的任务完成情况。
- 犹豫指数 (Hesitation Index):机器人在某个区域长时间低速徘徊或反复划。可以通过分析局部轨迹的熵或速度的方差来量化。
智能告警系统:
简单的静态阈值告警(如 急停次数 > 5次/小时)非常脆弱。更高级的系统应具备:
- 动态基线:基于历史同期数据(如上周二的同一时段)建立动态基线。
- 异常检测:使用统计方法(如 3-sigma 法则)或简单的时序模型(如 ARIMA)来检测偏离基线的异常波动。
- 告警分级与收敛:对不同指标设置 P0/P1/P2 不同等级的告警,并通过告警收敛机制避免信息风暴。
21.4 长期回归测试与地图演化一致性
导航系统的性能会随着时间漂移,这不仅是因为算法本身,更是因为其核心资产——地图——在不断演化。
- “黄金”回归测试集 (Golden Test Set):
这不仅是一个数据集,更是一个版本化、有生命周期的资产。它应包含:
- 历史上导致过严重故障的“事故”志。
- 覆盖所有关键场景类别的代表性日志。
- 产品要求必须稳定通过的“客户验收”场景。
每次发布前,新算法必须在该测试集上达到或超过基线性能,这是发布的必要条件。
- 地图演化一致性监控:
对于依赖长期建图的系统(如语义 SLAM),地图质量的衰退是隐蔽但致命的。
- 几何漂移监控:定期(如每日)将当前地图与一个稳定的“参考地图”进行对齐,并计算平均拓扑距离误差。误差持续累积增长是 SLAM 系统不稳定的信号。
- 语义稳定性:监控地图中语义标签的“churn rate”(变化率)。例如,一个被稳定识别为“会议室”的区域,不应在没有物理变化的情况下被频繁地错误标记为“走廊”。
- 地图性能影响:监控地图大小、特征点数量等指标,并关联分析它们与规划耗时(planning latency)、定位频等性能指标的关系,防止地图膨胀导致系统性能下降。
21.5 发布与回滚的算法闸门(Gating)
一个负责任的发布流程必须是渐进式的,通过一系列闸门(Gates)来控制风险暴露面,并具备快速回滚能力。
分阶段发布与 A/B 测试:
- 影子模式 (Shadow Mode):新算法在部分线上机器人上并行空转。它的决策被详细记录,并与旧算法的决策进行实时对比,但不执行。这是在真实数据流上对离线评测的终极验证。
- 门禁:影子决策的预测碰撞率、约束违反率必须持续为零。与线上决策的 JS 散度应在一个预期范围内(既不应毫无变化,也不应剧烈振荡)。
- 金丝雀/灰度发布 (Canary Release):将新算法部署到一小撮(如 1%)机器人上,并建立一个同质的控制组(Holdback Group)。
- 门禁:通过统计检验(如 t-检验、卡方检验)来证金丝察组的关键在线指标(如任务成功率、近碰率)是否在统计上显著优于控制组。仅仅是数值上更好是不够的。
- 分级全量 (Staged Rollout):逐步扩大发布比例(5% -> 20% -> 50% -> 100%),在每个阶段都持续监控指标稳定性,确保没有因为规模效应而出现新的问题。
快速回滚机制 (Rapid Rollback):
整个发布系统必须构建在特性标志(Feature Flags)之上。当在线监控系统触发 P0 级告警时,应有自动化机制触发对应特性标志的关闭,使所有受影响的机器人瞬间回退到上一个稳定版本,并将发布流程锁定,等待人工干预。
本章小结
- 评测是科学而非艺术:它依赖于分层的、量化的、自动化的流程,将算法的优劣转化为可度量、可比较的数字。
- 从离线到在线,信任度与成本递增:离线回放是廉价的“过滤器”,混合基准是全面的“力舱”,在线监控是最终的“安全网”。
- 指标设计是核心:必须超越简单的成功率,深入到安全性、稳定性、效率、舒适度等多个维度,并特别关注能够预测风险的领先指标(如近碰、急停)。
- 流程保障安全:CI/CD 集成、黄金回归测试、影子模式、灰度发布和自动回滚共同构成了一个强大的发布闸门系统,确保每一次算法更新都安全、可靠、可控。
- 数据和地图也是产品:评测数据集和长期地图本身也需要被当作产品来版本化管理和持续治理,它们的质量直接决定了评测结果的天花板。
常见陷阱与错误 (Gotchas)
- 离线指标的虚假繁荣:在离线回放中,一个“更激进”的算法可能会因为总能规划出更短的路径而获得高分,但在真实世界里,这种激进可能导致与动态障碍物的交互失败。切勿将离线效率指标与在线任务成率划等号。
- 指标的“古德哈特”陷阱:当你过度优化一个指标时,它就不再是一个好的衡量标准。例如,过度优化“急停率”,可能导致算法变得过于保守,频繁地不必要减速,严重影响通行效率。评测体系必须是多目标的、均衡的。
- 忽略“非功能性”退步:新模型可能在所有任务指标上都表现更佳,但其推理延迟增加了 50ms,或者内存占用翻了一倍。这些非功能性指标的退步同样是致命的,必须纳入发布闸门的考量范围。
- 评估集的时效性与偏差:世界是变化的。使用一年前的“黄金数据集”来评测为应对新场景设计的算法,无异于刻舟求剑。评测集必须持续从线上高价值场景中采样更新,并警惕其中存在的采样偏差(如数据大部分来自白天、简单环境)。
- A/B 测试的辛普森悖论:在进行 A/B 测试时,如果不对流量进行精细划分,可能会得出错误的结论。例如,新算法在“商场”和“办公室”两个场景下都表现更好,但由于灰度发布时“办公室”场景的机器人比例碰巧更高,总体指标反而可能显示新算法更差。必须对核心场景进行分层分析(stratified analysis)。