接口与组织:各自合格,接起来出事
这类坑的共性是:每个模块在自己的指标上都合格,接到一起却出问题。输出格式、时序、训练与部署的输入,以及团队分工,都是接口。
- 接口错配:离线指标漂亮,输出的格式、时序或坐标系下一环却接不住;各模块只对自己的指标负责。见第 1 章。
- 控制接口没对齐:坐标系、时间基准、曲率定义没和控制约定清楚,一条好轨迹也会被执行成“画龙”。见第 6 章。
- 拿真值训规划器:两段式常用缓存的感知结果、甚至感知真值来训规划器。上车吃的却是更差的在线感知,训练和部署的输入分布不一致。见第 7 章、专题 01。
- 只评原始输出:车上执行的是过滤、打分、精修之后的轨迹,论文指标只覆盖模型的原始输出;中间隔几层,就有几层没被评到。见专题 05。
- 组织边界固化成接口:规划说感知太差,感知说规划太敏感;训练和测试各维护一套“场景”,问题对不上号。见专题 01、专题 05。
地图与导航:先验会过期,导航会抖
地图和导航常被当成可靠的常量。实际上地图会过期,导航本身也是会抖、会跳的上游模型。
- 地图过期:施工改道后,地图还停在改道前;把历史地图当真值,车会照着改道前的入口走。要先和现场观测对齐,明显过期时以现场为准。见第 2 章。
- 无图后约束在抖:没有高精地图,定位只算相对位姿,航向误差随距离放大;车道边界来自感知,只能当软约束,轨迹因此更容易抖。见第 2 章。
- 把导航路径当轨迹:导航路径只说“该往哪走”,它自己也是模型预测,会抖,会随 SD 路由跳变;下游只接这一路,会和行为决策打架。见第 2 章。
- 晚变道:模型贴着 SD 行点变道,而行点的转折比人开得晚,是“老师教错了”;修法都不改网络结构,比如清洗数据、做行点缺失增强。见专题 05。
- 假设导航完美:行点会横向偏移、前后错位、丢点,还会和感知不同步;训练时要主动注入这些退化,并为 SD、SDPro、无导航三种状态分别定义降级。见专题 05、第 8 章。
感知:没看到,不等于没有
感知的坑多出在“不知道”上:被挡住的、类别表之外的、传感器退化时漏掉的,都容易被当成“没有”。
- 遮挡当空闲:一帧一算的检测器,目标被挡两帧就从输出里消失,下游读成“车道空闲”;要靠带跟踪的时序方案把身份续上。见第 3 章。
- 类别表列不全:检测框只认类别表里的东西,掉落的沙发、形状奇怪的养护车这类通用障碍物会被漏掉;Occupancy 改为逐格回答“占没占”。见第 3 章。
- 把标注状态当模型输出:“没看到”(unobserved)只是标注里的状态,模型上车只输出空或类别,盲区要另算可见性交给下游。标注和评测时,激光和相机的可见性也要分开定义。见第 3 章。
- 传感器退化:外参偏差、成像延迟、丢一路相机,都会让多相机 3D 检测掉点。PETRv2 在 nuScenes 上实测:延迟越久掉得越多;丢后视相机掉得最多,那一路视场角最大。对外参误差,BEVFormer 比 LSS 稳。见第 3 章。
- 路沿不准变成静态碰撞:路沿漏检,或者和别的障碍物混淆,行驶路线就会偏;感知的误差不会停在感知指标里。见专题 05。
- 红绿灯只做了检测和识别:车上还要选灯、处理倒计时和闪烁、绑定停止线,车才知道听哪盏灯、停在哪里。见专题 05。
预测与决策:别让平均值替你做决定
这两环的坑,常出在把不确定性压扁:几种未来被平均成一条,几辆车的未来被分开算,最坏的那条尾巴被期望值稀释。
- 匀速外推:短时可用,但分不出快切和慢切,弯道里会预测对方“冲出”路外;而规划要的恰恰是更长时的预测。见第 4 章。
- 误报也伤人:漏掉一次切入是危险,把不切入的车判成切入,就是一脚多余的急刹;预测要按对下游的影响来评。见第 4 章。
- 模式坍缩:只回归一条轨迹,会得到“不左不直”的平均线;输出多条却按概率加权算损失,几条也会一起被拉向平均。见第 4 章。
- 边际预测拼不成场景:每辆车单独预测,拼起来会出现互相穿越的组合;规划器只在固定的他车预测上打分,交互风险就留给了执行时兜底。见第 4 章、专题 02。
- 期望值稀释尾部:九成顺畅会把一成碰撞平均成“还行”。学习这一侧,只调奖励数值治不了;规划这一侧,要用 CVaR 这类风险度量盯住最坏的那部分分支。见第 5 章。
规划器与选轨:生成得多,不等于选得对
规划器的坑一半在生成,一半在选择:候选没覆盖该有的机动,或者覆盖到了却没选中。
- 横纵解耦在汇入时失效:先定路径再配速度,处理不了“走哪条线”和“什么时候到”互相决定的场景,比如汇入和窄道会车。见第 6 章。
- Top-K 掩盖 Top-1:候选里有安全轨迹,不代表选中的那条安全;扩散模型的候选之间没有天然排序,选择器要单独设计、单独评测。见专题 02。
- 自回归的量产缺陷:逐步解码会累积误差、横向不稳,也学不到动作对未来的影响;量产只取 Top-1,多模态被主动丢掉。见专题 05。
- 锚点和词表有盲区:截断扩散只在锚点附近去噪,词表没覆盖的新机动会被固化成盲区;打分型规划器的上限同样受词表覆盖约束。截断扩散的盲区见专题 02,打分型的词表上限见同一专题的四种规划器一节。
- 动作表示选错:tokenizer 本身就是控制接口,选错了,模型看起来会预测,落到控制上却更差。见专题 02。
数据:分布、老师与合规
数据的坑在分布和质量,不在规模。常见场景太多、长尾太少、老师教错、标签重复计数,都会被模型忠实地学下来。
- 惯性问题:常见场景比长尾多约三个数量级,静止和匀速的样本尤其多;模型过拟合到这些简单状态,需要主动避障、急刹或起步时,反而“决策迟钝”。长尾的数量级见第 8 章,惯性问题是本页补充的。
- 清洗没选老师:模仿学习的上限就是被模仿者的水平,新手的犹豫和急刹、错误导航、晚变道,都会被学下来。见第 8 章、专题 05。
- 标签重复计数:多标签样本不按 1/n 分摊,一条高风险数据被数好几次,“场景覆盖率”就虚高。见专题 05。
- 数据算子没准入:批量打场景标签的算子没过准确率门槛就进标注流水线,错误标签会被放大到后续所有版本。见专题 05。
- 回传不合规:数据闭环要回传的车外影像和位置轨迹,处理有专门规定。国内的《汽车数据安全管理若干规定(试行)》(2021)倡导车内处理、默认不收集、精度范围适用、脱敏处理,回传链路要从一开始就按这些原则设计。
训练与强化学习:奖励会被钻空子,仿真也会出错
训练的坑在信号:模仿学习学到的可能是相关而不是因果,强化学习优化的是写下来的数字,仿真环境本身也会出错。
- 分布偏移与因果混淆:模型一偏离示范就进入没见过的状态,误差越滚越大;它还可能把结果当原因,学成“看到仪表盘上的刹车指示灯亮了才刹车”。见第 7 章。
- 奖励钻空子:模型可能发现“不动最安全”;加塞专项修好了过度保守,又带出过度积极。见专题 03、专题 05。
- 奖励尺度与作用域:一项奖励在 0–1、另一项在 0–100,策略就只学大的那项;奖励不限定场景,修一个专项会污染别的任务。见专题 03。
- 把伪开环叫闭环:用了奖励,下一状态却仍来自录好的数据,学不到“我强行并线,后车会刹”。见专题 03。
- 组内比较“矮子里拔将军”:GRPO 只知道谁相对更好,全组都撞时仍会奖励赢家,要另加绝对的安全门槛。见专题 03。
- 交通代理太礼貌:IDM 这类规则代理永远让行,策略会学会“欺负世界”。见专题 03。
- 仿真器自己出错:世界模型按概率生成,会编出不存在的车、漏掉真正危险的物体,推得越远越不稳。3DGS 重建的场景也不能直接信:有量产团队每天跑几百到几千个闭环用例,重建效果和复现度仍靠人工检查。世界模型当环境的背景见专题 03,这两条实证是本页补充的。
评测:先审考卷,再看成绩
评测的坑是指标和能力错位:开环分数能靠自车惯性刷出来,总分会把原因藏起来,同名指标还可能不同义。
- 开环高分不等于会开:不看感知的两层 MLP,开环 L2 反超当时的端到端模型,放进闭环,成功率是 0,五项技能几乎全是 0。见第 8 章、专题 04。
- 开环指标的实现坑:nuScenes 开环碰撞率随占用栅格大小变,栅格一粗,没撞也判成撞;算碰撞时自车航向固定不变;驶出道路也不会被重罚;碰撞率和 L2 一样分两种口径。一种补法是加路沿碰撞率,整段轨迹任一时刻撞上就算碰撞。L2 的两种口径见专题 04,碰撞率的这几处实现坑是本页补充的。
- “闭环”没写清谁在响应:NAVSIM 里自车能偏离,背景车却按日志回放(第二版改由 IDM 响应,但自车整段执行、不回应它们),规划器中途也不重新规划;报告要写清自车、他车、观测三列各自怎么更新。见专题 04。
- 总分藏原因:CARLA 驾驶分把违规惩罚层层相乘,Leaderboard v2 的长路线上,已有方法都挤在 0–5 分,看不出哪项能力失败。见专题 04。
- 只报 min 系列:minADE 在 K 条里蒙对一条就算赢,K 越大越容易蒙中;要同时看带概率惩罚的 p-min、Brier 系列。见第 4 章、专题 04。
- 接管率不可比:触发策略、折算口径、道路构成和里程分母一变,接管率就没法横比。见第 8 章、专题 04。
- 把工程变量当路线差异:只加一个动作位置编码,PDMS 就能差十几分;看到“路线 A 打败 B”,先查单变量。见专题 02。
上车与发版:看最坏情况,留回退路
上车的坑在最坏情况:论文报一次前向的平均耗时,车上要的是整条链路的尾延迟、量化之后的精度,以及能回退的版本。
- 只报平均延迟:规划按 10 Hz 跑,一个周期只有 100 毫秒;显存换页、热降频、候选数增加都藏在尾部,门槛要写 P99 和超时行为。见专题 05。
- 生成步数没算进预算:典型的扩散要去噪 20 到 100 步,自回归的延迟随 token 数增长;“少步”要用网络调用次数和端到端最坏延迟来证明。见专题 02。
- 大模型进了实时环:VLA 和世界模型不该硬塞进高频控制环。一种快慢系统的设想是:轻量策略跑 10 Hz 以上,VLA 加世界模型只跑约 1 Hz;慢推理只能改目标、约束或计划,不能阻塞高频的安全环。见专题 05。
- 量化、编译后不复验:模型量化成整数、再经车端工具链编译,数值已和训练时不同。一篇 CVPR 2018 的量化论文发现,训练完再量化,小模型掉点明显,训练中模拟量化能减小损失。验收要用车端芯片上实际跑的那一版。这一条是本页补充的,站内其他页没有展开。
- OTA 没有回退路:每辆车跑的是哪个软件版本要查得清,升级失败或中断时,要能恢复到先前版本,或让车进入安全状态。UN R156 有这类要求,国内有 GB 44496-2024《汽车软件升级通用技术要求》。这一条是本页补充的,站内其他页没有展开。
护栏与功能安全:没出故障,不等于安全
安全的坑,是把“没出故障”当成“安全”,把“分数涨了”当成“更安全”。功能安全、预期功能安全、ODD 和规则护栏各管一段,缺哪段都有空当。
- 只验已知场景:SOTIF 把场景按已知、未知和危险、不危险分成四类,目标是把已知和未知的危险场景都压到可接受;数据闭环挖长尾,做的正是把“未知的危险”变成“已知的危险”再修掉。数据闭环见专题 05,SOTIF 的部分是本页补充的。
- ODD 越界没有兜底:SAE J3016 把越出 ODD 或系统失效之后的应对叫“动态驾驶任务后援”:由人接手,或把车带到最小风险状态,即稳定地停住。L2 的后援始终是驾驶员,L4 起由系统自己完成。见术语 ODD。
- 护栏悄悄改轨迹:过滤、约束、兜底不留原因码,线上只看得到最终轨迹,出了事分不清谁错;后处理改动过大时,要触发降级和数据回流。见专题 05。
- 急着删护栏:神经网络规划器还没法形式化地验证“绝对安全”,护栏承担的是可审计的边界;该减的是不必要的干预。见专题 05。
- 分数涨了,护栏接管也翻倍:模型指标要和护栏触发率、兜底成功率并列验收,任何一侧退化都要给出解释。见专题 05。
- 放行结论没有边界:“已量产端到端”说明不了什么;放行要写明在哪个 ODD、地图等级、天气、速度、硬件和版本下,过了哪些门槛。见专题 05。
ISO 26262
功能安全
- 管电子电气系统故障导致的危害
- 例:芯片失效、线路故障、软件缺陷
- 不管系统正常工作时的标称性能
ISO 21448
预期功能安全(SOTIF)
- 管没有故障、但功能不足导致的危害
- 合理可预见的误用也在范围内
- 例:感知漏检、预测失准、规划误判
沿着主线继续
相关术语
- 导航路径——两段式方案里由模型预测的一条宏观参考线:只表达该往哪走,不是可执行轨迹,不能直接控车。
- 导航增强——主动注入定位漂移、行点缺失、更新延迟这些真实退化,防止模型过度依赖某一种完美导航输入。
- 鸟瞰图表征——把多摄像头视角融合到统一的鸟瞰空间,降低对高精地图的依赖。
- 占据栅格——用空间中每一块「有没有被占据」来表达障碍,解决检测框只能识别规则形状物体的问题。
- 多模态轨迹——未来不是一个确定的点,而是一个分布:可以跟车、变道、让行、绕行,模型输出多条候选来表达这种不确定性。
- 截断扩散与锚点——不从纯噪声出发,而是从聚类得到的轨迹锚点加少量噪声开始去噪,用少数几步换取车端实时性。
- 逐步展开与误差累积——策略一步步展开未来时,前一步的输出会变成后一步的输入——错了就会沿着错误状态一路滚下去。
- 奖励钻空子——模型会最大化你写下来的数值,而不是你心里真正想要的驾驶行为——这是 RL 的本性,不是偶发 bug。
- 场景隔离——同一个 reward 在不同场景下含义可能相反,所以 reward 不能全局常开,必须按场景生效。
- 数据闭环——从线上发现问题到归因、难例挖掘、数据配比、调整、开闭环评测、小流量验证,再回到发现问题的完整循环。
- 开环与闭环——开环用数据集里的真实下一状态,闭环用环境动力学产生下一状态——前者看不到误差累积,后者才检验纠错能力。
- 位移误差指标——ADE 是预测轨迹与真值逐点距离的平均,FDE 只看终点——它们衡量「像不像专家」,不等于安全或舒适。
相关论文
- BEVFormer:用时空 Transformer 从多摄像头学 BEV 表征——BEV query 是空间探针
- MOTR:基于 Transformer 的端到端多目标跟踪——track query 维持身份
- DiffusionDrive:端到端自动驾驶的截断扩散模型——截断 + 锚点换实时
- DiffusionDriveV2:强化学习约束的截断扩散建模——锚内提质,锚间协调
- PLUTO:把模仿学习规划推到极限——把 IL 做到极致,再谈 RL