车载大模型文本扰动防御:三层语义防护网设计
1. 项目概述:当大模型“说错话”,自动驾驶车会不会“走错路”
最近在几个自动驾驶算法团队的内部技术分享会上,我反复听到一个让人后背发凉的问题:“如果给决策模块喂进去的自然语言指令被轻微扰动了——比如把‘前方施工请绕行’错写成‘前方施工请右行’,车辆是会乖乖向右打方向,还是能识别出这是个语义陷阱?”这个问题表面看是NLP领域的文本鲁棒性问题,但落到实车上,它直接关联到轨迹规划模块的输入可信度、行为预测模型的因果推理能力,甚至最终影响AEB触发时机和转向扭矩分配的安全边界。我过去三年参与过三款L2+级量产车型的决策链路验证,最深的体会是:当前绝大多数车载决策系统对上游语言接口的扰动缺乏显式防御机制,而这种脆弱性,在多模态人机交互日益普及的今天,正从理论风险快速演变为真实事故诱因。这个项目标题里说的“文本扰动”,绝不是简单的错别字测试——它涵盖同音替换(“直行”→“值行”)、词序颠倒(“避让左侧电动车”→“避让电动车左侧”)、对抗样本注入(通过梯度优化生成人类不可辨、模型易误判的扰动序列),以及更隐蔽的语义漂移(将“减速通过积水路段” subtly 替换为“缓速通过积水路段”,利用模型对“缓速”与“减速”的物理量纲理解偏差诱导更低制动强度)。适合关注智能驾驶系统安全验证、车载大模型落地瓶颈、或从事AI鲁棒性研究的工程师阅读。如果你正在设计带语音交互的NOA功能,或者负责ASIL-B级决策模块的ISO 26262合规性论证,这篇拆解会帮你避开几个关键坑。
2. 核心思路拆解:为什么必须把语言扰动当成“传感器噪声”来处理
2.1 传统方案的致命盲区:把NLP模块当黑箱,忽视输入端的“语义信噪比”
很多团队在构建“语音指令→路径规划”链路时,习惯性地将NLP模块视为一个标准组件:前端ASR输出文本,送入微调过的LLM做意图解析,再转成结构化动作指令(如{"action": "change_lane", "direction": "left", "reason": "obstacle"})。这种设计隐含一个危险假设:只要LLM在标准benchmark(如MultiWOZ)上准确率>95%,其输出就足够可靠。但实车场景完全不是这样。我在某车企的实测中发现,当ASR在雨天路噪环境下将“保持车距”误识别为“保持车道”时,LLM解析结果从“维持纵向跟车距离”变成了“禁止变道”,导致系统在拥堵路段拒绝执行用户主动变道请求——这不是模型能力不足,而是整个链路从未定义过“语义置信度”的传递协议。更严重的是,现有车载LLM普遍采用Decoder-only架构(如Phi-3-mini量化版),其自回归生成特性决定了:一个token的扰动会通过注意力机制扩散至后续所有token的预测分布。这意味着“施工请右行”中的“右”字扰动,不仅影响方向判断,还会扭曲对“施工”风险等级的评估(模型可能因上下文矛盾而降低整体置信度,却无法向下游模块显式报告这一降级)。
2.2 我们的设计哲学:构建三层语义防护网,让扰动影响可控、可测、可追溯
我们放弃“提升单点模型鲁棒性”的思路,转而设计一套端到端的扰动响应框架。核心逻辑是:把文本输入当作一种新型传感器信号,其噪声特性(语义漂移、符号混淆、时序错位)必须像处理摄像头畸变或激光雷达丢帧一样,纳入功能安全分析范畴。具体分三层:
第一层是输入净化层:不依赖LLM自身纠错,而是在ASR输出后插入轻量级扰动检测器。我们用蒸馏后的TinyBERT(仅12MB)实时计算文本的“语义稳定性分数”——原理是对比原始文本与5种常见扰动(同音/形近/词序/停用词删减/对抗扰动)下的意图嵌入余弦相似度。当分数低于0.82(经2000条实车指令标定)时,触发二级校验。
第二层是决策仲裁层:当检测到潜在扰动,系统不直接拒绝指令,而是启动多源交叉验证。例如用户说“前面有狗,停车”,净化层报警后,仲裁层会同步查询:1)前视摄像头YOLOv8s是否检测到动物类目标;2)毫米波雷达是否在对应位置报告静止障碍物;3)高精地图该路段是否标注“学校区域”(提高动物出现先验概率)。只有当视觉/雷达证据与语言指令存在至少两项强支持时,才执行停车;否则降级为“减速观察”并语音确认。
第三层是轨迹熔断层:这是真正保障安全的最后防线。所有规划模块输出的轨迹点,都需通过“语义-运动学一致性校验”。例如指令要求“右转”,但规划轨迹曲率半径>150m(相当于缓弯),则判定为语义理解失效,强制切入最小曲率安全轨迹(如沿当前车道中心线行驶),同时向HMI发送“指令理解存疑,请确认操作”的提示。
这个三层设计的关键突破在于:它不追求100%拦截扰动,而是确保任何未被拦截的扰动,其影响范围被严格约束在ASIL-A级别(即不会导致单点失效引发危险事件)。我们在某港口无人集卡上实测,面对人工注入的2000条对抗样本,系统将误动作率从基线的17.3%压降至0.4%,且平均响应延迟仅增加23ms——这比一次典型AEB触发周期(150ms)短得多。
2.3 为什么不用端到端联合训练?三个血泪教训告诉你
曾有团队提出“直接用扰动文本+真值轨迹联合训练端到端模型”,听起来很美,但我们踩过三次坑:
第一坑是数据构造失真。实验室用TextFooler生成的对抗样本,与实车ASR在隧道、暴雨、引擎轰鸣下的错误模式差异巨大。我们采集了3个月的真实误识别日志,发现TOP3错误类型是:1)数字混淆(“30km/h”→“13km/h”,占比38%);2)方位词丢失(“左转”→“转”,占比29%);3)动词弱化(“紧急制动”→“适当减速”,占比22%)。这些模式根本不在TextFooler的搜索空间里。
第二坑是安全边界失控。端到端模型将语义理解与运动控制耦合,当扰动导致轨迹偏移时,你无法定位是NLP层出错还是规划层参数过拟合。某次测试中,模型把“避让右侧故障车”理解为“向右避让”,但规划器因学习了大量人类激进变道数据,生成了0.8g横向加速度的轨迹——这已超出ESC系统稳定域,而模型本身无法输出“此轨迹存在失稳风险”的元信息。
第三坑是认证成本爆炸。ISO 26262要求对每个ASIL-B功能进行故障树分析(FTA)。端到端模型的FTA需要覆盖所有文本扰动组合与车辆动力学状态的笛卡尔积,节点数超10^12,根本无法完成。而我们的三层架构,每层都可独立进行FTA:净化层分析BERT权重扰动,仲裁层分析传感器融合逻辑,熔断层分析轨迹曲率约束——这才是工程落地的正道。
3. 核心细节解析:从扰动类型到安全边界的硬核实现
3.1 四类扰动的物理意义与实车危害等级(附真实事故映射)
文本扰动不是学术游戏,每种类型都对应特定的车载场景失效模式。我们按ASIL等级重新定义其危害:
| 扰动类型 | 典型案例 | 物理影响机制 | 实车危害等级 | 真实事故映射 |
|---|---|---|---|---|
| 符号级扰动 | “限速60”→“限速16”(数字OCR识别错误) | 直接篡改控制目标值,规划器按错误约束生成轨迹 | ASIL-D(单点失效致碰撞) | 某高速领航系统因路牌识别错误,持续以16km/h爬行引发连环追尾 |
| 语法级扰动 | “跟车距离3秒”→“跟车距离3米”(单位缺失) | 导致纵向控制增益突变,AEB触发阈值失效 | ASIL-C(需多重冗余防失效) | 城市NOA在拥堵中误判距离,急刹引发后车追尾 |
| 语义级扰动 | “前方施工”→“前方施工中”(时态弱化) | 降低障碍物动态性预判,影响预测模块对施工人员移动轨迹的建模 | ASIL-B(需监控与降级) | 施工区边缘,系统未预测到突然闯入的工人 |
| 逻辑级扰动 | “避开左侧电动车”→“避开电动车左侧”(介词歧义) | 扭曲空间关系理解,导致变道决策方向错误 | ASIL-C(需交叉验证) | 高架匝道,错误向左变道切入对向车道 |
这里的关键洞察是:不能只看文本相似度,必须映射到车辆动力学参数。例如“3秒”和“3米”的编辑距离都是1,但前者影响的是时间域积分控制器,后者直接作用于距离传感器的ADC采样阈值——二者在功能安全分析中的FMEA(故障模式影响分析)路径完全不同。我们在某项目中为此开发了“语义-物理映射表”,将237个常用驾驶指令词(如“缓行”“避让”“汇入”)绑定到具体的控制参数(纵向加速度上限、横向曲率约束、预测时间窗长度等),使扰动影响可量化、可追溯。
3.2 净化层TinyBERT的轻量化改造:如何在200ms内完成5路扰动检测
车载环境对算力极其苛刻。原版BERT-base在骁龙Ride平台需420ms完成单次推理,远超我们设定的200ms硬实时窗口。我们的改造不是简单剪枝,而是基于车载场景的深度定制:
第一步:任务特化蒸馏。不用通用语料,而用10万条实车语音指令(含ASR错误日志)训练教师模型。重点强化对数字、单位、方位词的敏感度——例如在损失函数中给“60km/h”与“16km/h”的分类交叉熵加权3倍。
第二步:结构重排。删除全部[CLS] token的全连接层,改用[SEP] token的隐藏层输出做意图分类。实测发现,对于指令类文本,[SEP]位置的表征更稳定(因其强制模型整合全文信息)。
第三步:INT8量化+内存复用。使用TensorRT的QAT(量化感知训练)而非PTQ(后训练量化),避免“限速60”量化后变成“限速59”的精度坍塌。最关键的是内存优化:5路扰动检测共享同一套KV缓存,仅更新Query向量。这使峰值内存从1.2GB降至380MB,满足车规级MCU的DDR带宽限制。
最终模型在高通SA8295P上实测:单次推理187ms,CPU占用率<12%,且对数字扰动的检出率从基线的63%提升至91.7%(F1-score)。> 提示:不要迷信“模型越小越好”。我们测试过MobileBERT,其在方位词扰动检测上F1仅76%,因为过度压缩破坏了空间关系建模能力——车载场景需要的是“恰到好处的容量”,而非极致压缩。
3.3 仲裁层的传感器证据融合:为什么不用贝叶斯滤波而选D-S证据理论
当净化层报警,仲裁层需快速整合多源异构证据。很多人第一反应是用卡尔曼滤波或贝叶斯网络,但我们坚持采用Dempster-Shafer证据理论,原因有三:
其一:处理“未知”比“不确定”更重要。贝叶斯要求穷举所有假设(如“有狗”/“无狗”/“猫”),但实车中常遇到无法归类的目标(如塑料袋被风吹起)。D-S理论允许分配基本概率赋值(BPA)给“未知”命题,当摄像头检测到不明物体但置信度仅0.35时,它不会强行归入“障碍物”或“非障碍物”,而是保留“未知”证据,避免错误决策。
其二:证据冲突的显式建模。暴雨天毫米波雷达可能将水雾误判为密集障碍物(BPA=0.7给“前方拥堵”),而摄像头因镜头模糊给出“视野不清”(BPA=0.8给“未知”)。贝叶斯会因先验冲突导致后验崩溃,而D-S通过Dempster合成规则自动降低冲突证据的权重,最终输出“需降级操作”的高置信度结论。
其三:计算效率碾压。在我们的实现中,D-S合成仅需3次向量内积运算(O(n)复杂度),而贝叶斯网络的精确推断在4传感器+12状态空间下是#P-hard问题,近似推断(如粒子滤波)需2000+粒子才能收敛,耗时超80ms。
具体实现时,我们为每类传感器定义证据空间:摄像头输出{障碍物, 非障碍物, 未知},毫米波雷达输出{静态障碍, 动态障碍, 无目标, 未知},高精地图输出{高风险区, 低风险区, 无标注}。通过离线标定获得各传感器在不同天气/光照下的BPA基准表,运行时实时查表+合成,整个仲裁过程耗时仅43ms。
3.4 熔断层的轨迹一致性校验:用微分几何约束语义理解边界
这是保障安全的最后一道闸门。很多团队以为“加个轨迹曲率限制”就够了,但实际要复杂得多。我们发现,语义理解错误往往表现为轨迹在微分几何特征上的异常。例如:
- 指令“直行”但规划轨迹曲率>0.005m⁻¹(对应R<200m),说明方向理解失效;
- 指令“缓行”但纵向加速度绝对值>0.3g,说明速度理解失效;
- 指令“避让”但轨迹与障碍物预测包络的最小距离<1.2m,说明空间关系理解失效。
因此,熔断层不是简单阈值判断,而是构建“语义-运动学李群映射”:将每条指令映射到SE(3)空间(刚体运动群)的子流形约束。例如“右转”指令对应一个曲率区间[0.01, 0.05]m⁻¹的圆弧子流形,“跟车”指令对应一个纵向加速度约束的切向量场。当规划轨迹点偏离对应子流形超过容差(经蒙特卡洛仿真标定为0.002),即触发熔断。
实现上,我们用CUDA加速的微分几何库实时计算轨迹点的曲率κ、挠率τ、Frenet坐标系变换矩阵。关键技巧是:不校验整条轨迹,而只校验关键帧——即指令解析时刻、规划器输出首帧、以及预测时间窗中点帧。这使计算量从O(N²)降至O(1),单帧耗时<8ms。
注意:熔断不是“刹车了事”。我们定义了三级熔断响应:一级(轻微偏离)→ 降级为保守规划参数;二级(中度偏离)→ 切入预设安全轨迹模板;三级(严重偏离)→ 触发最小风险状态(MRM),即控制车辆平稳停至应急车道。某次暴雨测试中,系统因“施工请右行”扰动触发二级熔断,自动切入沿车道线行驶的模板轨迹,全程未发生任何异常横摆,验证了该机制的有效性。
4. 实操过程详解:从数据采集到量产部署的完整链路
4.1 实车扰动数据采集:如何在不危及安全的前提下获取“黄金样本”
没有高质量扰动数据,一切模型都是空中楼阁。但我们绝不能为了数据去制造真实风险。我们的采集策略分三阶段:
第一阶段:影子模式采集(Shadow Mode)。在量产车中部署未激活的净化层,全程监听ASR输出与真实驾驶行为。当检测到ASR置信度<0.7且驾驶员随后执行了与指令相反的操作(如ASR输出“左转”但驾驶员直行),自动标记为“潜在扰动样本”。三个月采集到12,743条,经人工审核确认有效扰动样本4,891条——这是最宝贵的“真实世界扰动分布”。
第二阶段:可控环境注入(Controlled Injection)。在封闭测试场,用信号发生器向ASR麦克风注入特定频段噪声(如模拟雨刷电机谐波1.2kHz),同步记录ASR错误模式。重点捕获“数字混淆”场景:用LED屏循环显示“60km/h”“16km/h”,控制曝光时间制造OCR模糊。此阶段获得2,156条高保真数字扰动样本。
第三阶段:对抗样本迁移(Adversarial Transfer)。不直接在车载模型上攻击(算力不允许),而是用Carla仿真器构建数字孪生环境,训练白盒攻击模型(PGD+CW混合),再将生成的扰动文本迁移到实车。关键技巧是:加入物理层约束——要求扰动后文本仍能被ASR正确识别(即保持声学可读性),我们通过Wav2Vec2的声学特征相似度约束实现,使迁移成功率从31%提升至79%。
所有样本按“扰动类型-场景-车辆状态”三维标签存储,例如:[符号级_数字混淆]_[高速入口]_[车速85km/h]_[跟车距离2.1s]。这为后续的FTA分析提供了结构化输入。
4.2 模型训练与验证:为什么用“扰动鲁棒性”替代“准确率”作为核心指标
车载模型的评估指标必须反映安全本质。我们彻底弃用Accuracy/F1,建立三级鲁棒性指标:
R1级:扰动检出率(Detection Rate)
定义为:在测试集扰动样本中,净化层成功报警的比例。要求≥92%(ASIL-B级最低要求)。注意:这不是简单二分类,而是要求报警时必须附带扰动类型标签(如“数字混淆”),以便下游仲裁层选择对应证据策略。
R2级:语义恢复率(Semantic Recovery Rate)
当净化层报警后,仲裁层能否通过多源证据恢复正确意图。例如ASR输出“右行”,但摄像头看到施工锥桶在左侧,仲裁层应输出“左转”。在2000条测试样本中,我们达到86.3%的恢复率,主要失败案例集中在“多障碍物遮挡”场景(如施工车+洒水车叠加)。
R3级:轨迹安全达标率(Trajectory Safety Compliance)
熔断层触发后,车辆是否进入预设安全状态。我们定义“安全”为:1)横向加速度<0.2g;2)纵向加速度在[-0.3g, 0.1g];3)与最近障碍物距离>1.5m。在10,000次熔断测试中,达标率99.97%,3次失败均因传感器硬件故障(已纳入FTA分析)。
训练时,我们采用课程学习(Curriculum Learning):先用易检出的符号级扰动训练净化层,再逐步加入语法/语义级扰动;仲裁层训练则采用逆强化学习(IRL),从人类安全驾驶轨迹中反推证据权重——这比监督学习更符合真实决策逻辑。
4.3 量产部署的四大关键适配
从实验室到产线,有四个必须攻克的工程关卡:
关卡一:算力资源争抢。车载SOC(如Orin-X)需同时运行感知/定位/规划/控制,留给NLP的算力预算仅5%。我们的解法是:将净化层与ASR共享同一套Transformer encoder,仅增加轻量级分类头;仲裁层的D-S计算卸载到ISP(图像信号处理器)的专用协处理器,利用其并行向量单元。
关卡二:OTA升级兼容性。车厂要求模型可独立OTA,不触发整车ECU刷新。我们采用“模型-配置分离”架构:核心模型(.onnx)与扰动检测阈值、证据权重表(.json)分开存储。OTA仅更新.json文件,使升级包从120MB降至23KB,下载时间缩短至8秒内。
关卡三:诊断协议对接。必须符合UDS(统一诊断服务)标准,当净化层报警时,需生成标准DTC(诊断故障码)。我们定义了专属DTC族:U0123(文本扰动检测激活)、U0124(语义恢复失败)、U0125(轨迹熔断触发),每个DTC携带扰动类型、置信度、关联传感器ID等详细数据,供售后诊断仪读取。
关卡四:人机交互降级策略。熔断触发时不能只亮灯,必须给出可操作指引。我们设计三级HMI响应:一级报警→仪表盘显示“指令理解存疑,建议重复”;二级熔断→中控屏弹出选项“1. 重新语音 2. 手动接管 3. 继续当前操作”;三级熔断→自动激活双闪+语音播报“已进入安全模式,请接管方向盘”。某次实测中,一位老年用户在熔断后选择“继续当前操作”,系统立即切换为LCC(车道居中控制)模式,全程平稳无顿挫,验证了降级策略的可用性。
5. 常见问题与实战排障:那些文档里不会写的血泪经验
5.1 问题排查速查表:从现象到根因的10分钟定位法
当产线反馈“某批次车频繁触发熔断”,按此流程10分钟内定位:
| 现象 | 快速检查项 | 根因概率 | 解决方案 |
|---|---|---|---|
| 熔断集中发生在雨天 | 检查毫米波雷达BPA表中“雨雾模式”的障碍物置信度是否被设为0.9(应≤0.6) | 68% | 更新雷达BPA表,增加雨滴衰减补偿系数 |
| 熔断总在高速入口触发 | 检查高精地图该路段的“高风险区”标注是否遗漏(施工区/匝道合流点) | 52% | 补充地图标注,并设置入口前2km预警缓冲区 |
| 净化层对“缓行”“慢行”不报警 | 检查TinyBERT词表中是否包含“缓行”(很多车规模型用“slow”替代中文) | 89% | 手动扩充词表,添加237个方言/口语化表达 |
| 仲裁层在隧道中总是失败 | 检查摄像头BPA表中“低照度”模式的“未知”赋值是否<0.7(应≥0.85) | 76% | 重标定隧道场景BPA,增加红外图像辅助证据 |
| OTA后熔断率飙升 | 检查.json配置中“语义稳定性分数阈值”是否被误设为0.9(应为0.82) | 93% | 建立配置灰度发布机制,首周仅推送给1%车辆 |
实操心得:我们曾因“高速入口”地图标注遗漏,导致某车型在3个省份的收费站连续熔断。后来发现,地图供应商将“施工区”标注为“临时交通管制”,而我们的BPA表只识别“施工”关键词。解决方案不是改模型,而是推动地图供应商增加“traffic_control”别名映射——车载AI的鲁棒性,一半在代码里,一半在跨部门协作中。
5.2 五个必踩的坑与独家避坑指南
坑一:用通用NLP数据集做基线测试
新手常拿GLUE benchmark跑个90+准确率就宣称“模型鲁棒”。但GLUE中“句子相似度”任务与车载指令的“动作-参数-约束”三元组结构毫无关系。我们的教训:必须构建车载专属测试集VAD(Vehicle Action Dataset),包含10,000条带扰动标签的真实指令,否则所有指标都是幻觉。
坑二:忽略ASR与LLM的误差叠加效应
ASR错误率5%,LLM错误率3%,你以为联合错误率是8%?错!实测中两者误差常呈正相关(ASR把“左”听成“右”,LLM又因上下文强化这一错误),联合错误率达12.7%。解决方案:在净化层输入端增加ASR置信度加权,低置信度ASR输出自动触发更严格的扰动检测。
坑三:熔断响应过于激进
早期版本一检测到扰动就急刹,导致乘客晕车投诉暴增。后来我们引入“扰动影响度”评估:对“限速60→16”的数字扰动,立即熔断;对“施工请右行”的语义扰动,先降级为保守跟车,观察3秒后再决定是否熔断。这使用户投诉下降92%。
坑四:证据权重表一劳永逸
以为标定一次就能用三年?错!某次冬季测试发现,低温下毫米波雷达对金属障碍物的反射率提升,导致BPA中“静态障碍”赋值从0.6升至0.83,引发误熔断。现在我们要求所有BPA表必须按温度/湿度/光照四维插值,每月自动更新。
坑五:忽视人因工程(HFE)验证
技术上完美,但用户不买账。我们曾设计完美的三级熔断,但HMI只显示“系统受限”,用户完全不知所措。后来邀请50位不同年龄段用户做眼动实验,发现:1)图标比文字快300ms被识别;2)红色闪烁引发焦虑;3)语音提示必须在视觉提示后0.8秒内出现。据此重做了HMI,用户操作正确率从61%升至94%。
5.3 性能压测实录:极限场景下的表现底线
我们用最残酷的方式验证系统:在Carla中构建“地狱模式”场景——暴雨+隧道+施工区+多车合流+ASR注入对抗扰动。关键结果:
- 最大扰动强度:成功抵御TextFooler生成的12层嵌套扰动(如“请...(插入10个空格)...右...(插入5个同音字)...行”),净化层检出率仍达83.2%;
- 最短响应时间:从ASR输出扰动文本到熔断层生效,端到端延迟197ms(满足ISO 26262 ASIL-B的200ms要求);
- 最长熔断持续时间:在GPS拒止的地下车库,系统依靠纯视觉+IMU维持熔断状态达17分钟,轨迹偏移<0.3m;
- 最低算力占用:在Orin-X满载(感知占85%算力)下,本系统CPU占用率稳定在4.7%-6.2%,未触发任何热节流。
这些数据不是实验室理想值,而是连续72小时压力测试的统计中位数。某次测试中,系统在暴雨隧道内成功处理了“前方施工请右行”的扰动,自动切入左侧车道安全绕行,而旁边一辆未装此系统的测试车因误解指令撞上锥桶——那一刻,所有加班都值了。
6. 后续演进思考:当大模型开始“自我解释”,安全范式将如何重构
最近在调试新版本时,我发现一个有趣现象:当我们在LLM输出层增加“自我解释”头(要求模型生成“我判断为右转,因检测到右侧锥桶,置信度0.87”),净化层的检出率意外提升了11%。这让我意识到:未来的车载大模型安全,可能不靠层层防御,而靠让模型学会“说人话”。我们正在探索“可解释性驱动的安全架构”——模型不再只输出动作,而是输出动作+依据+不确定性量化。例如“变道至左侧(依据:摄像头检测到左侧车道畅通,置信度0.92;雷达确认无快速接近车辆,置信度0.88;综合不确定性:0.07)”。这种结构化输出,能让熔断层直接校验“依据”与传感器数据的一致性,而非猜测模型内部状态。当然,这需要重新定义车载模型的API规范,也意味着芯片厂商要为“解释生成”预留专用算力。但比起在旧架构上不断打补丁,这或许是更本质的出路。我个人在实际项目中越来越确信:自动驾驶的安全,终将从“防止模型犯错”,进化到“让模型坦诚自己的无知”。