ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

端到端自动驾驶全栈实战:从BEV感知到车端部署的工程化指南

端到端自动驾驶全栈实战:从BEV感知到车端部署的工程化指南

1. 端到端自动驾驶到底在解决什么问题

1.1 从模块化堆叠到单一神经网络的范式转移

过去十年,自动驾驶系统的主流架构是模块化流水线:感知模块负责检测车辆、行人、车道线,预测模块推断其他交通参与者的未来轨迹,规划模块生成自车路径,控制模块输出油门刹车转向。这套架构逻辑清晰、各模块可独立调试,但它的致命伤在于误差逐级累积——感知输出一个边界框的偏差,经过预测和规划的放大,最终可能变成一次危险的急刹或偏离。

端到端方案的核心思路完全不同:用一个大神经网络,直接把传感器原始数据(摄像头图像、激光雷达点云、毫米波雷达回波)映射为驾驶动作(方向盘转角、油门开度、刹车压力)。中间不再有手工设计的接口,梯度可以从最终的控制信号一路回传到感知层。这意味着网络有机会学到人类工程师根本想不到的特征表示。

我最初接触这个方向时也怀疑过:一个黑盒模型,怎么保证安全?后来想通了——模块化架构的“可解释性”其实是一种幻觉。每个模块内部同样是深度神经网络,同样不可解释,只是人为切了几刀,让你觉得每一段都“可控”。端到端至少把优化目标统一了:最终驾驶表现就是唯一的评判标准。

1.2 端到端不等于“一个模型包打天下”

这里有个常见的误解需要澄清。端到端自动驾驶并不是说整个车端只有一个模型、没有任何规则代码。当前业界公认的可行方案是**“端到端主干 + 安全兜底”**的混合架构。主干网络负责常规驾驶决策,但底层仍然保留一层轻量级的规则校验模块,比如碰撞时间阈值触发紧急制动、车道偏离预警触发纠偏。这层兜底不参与梯度回传,纯粹是工程安全冗余。

另一个误解是端到端只能做纯视觉。实际上,多模态融合的端到端方案在恶劣天气和远距离感知上优势明显。激光雷达提供的精确深度信息,可以显著降低纯视觉方案在逆光、隧道出入口等场景下的不确定性。关键在于融合发生在特征层面还是决策层面——特征级融合让梯度能跨模态流动,效果通常更好,但对时间同步和标定精度的要求也更高。

1.3 为什么现在这个时间点值得认真投入

三个条件同时成熟了。第一,数据规模:头部玩家积累的有效驾驶里程已经达到千万公里级别,覆盖了足够多的长尾场景。第二,算力成本:单张训练卡的有效算力在过去三年提升了数倍,而单位算力成本持续下降,使得大规模端到端训练在经济上可行。第三,算法基建:Transformer架构在序列建模上的成功经验被迁移到驾驶任务,BEV(鸟瞰图)感知范式统一了多摄像头和激光雷达的表征空间,为端到端训练提供了稳定的特征底座。

如果你现在开始搭建端到端方案,不需要从零造轮子。开源的BEV感知框架、预训练的主干网络、标准化的数据格式都已经存在。真正的门槛在于数据闭环的工程化能力和训练策略的细节调优,这两点恰恰是本文要重点展开的。

2. 模型架构选型:从BEV编码到轨迹解码的完整链路

2.1 传感器输入层:摄像头与激光雷达的时空对齐

端到端模型的输入不是简单的图像堆叠。以6路环视摄像头为例,每个相机有独立的内参和外参,帧率可能略有差异。在送入网络之前,必须完成两件事:时间戳对齐和空间坐标统一。

时间戳对齐的常见做法是硬件触发同步,所有相机共用同一个曝光信号。如果硬件不支持,退而求其次用软件插值:以主相机的时间戳为基准,对其他相机的图像做线性插值或光流补偿。我实测下来,车速低于30km/h时软件插值够用,高速场景下必须上硬件同步,否则BEV特征会出现明显的重影。

空间坐标统一依赖标定参数。每个相机的图像先通过内参矩阵反投影到归一化平面,再通过外参矩阵变换到自车坐标系,最后投影到BEV网格。这里有个容易忽略的细节:标定参数会随温度、振动发生漂移。量产车通常每行驶一定里程就自动触发在线标定,用车道线平行度、消失点位置等先验做约束优化。训练端到端模型时,如果标定参数不准,网络会学到错误的几何关系,表现为车辆在直道上画龙。

激光雷达的点云处理相对直接:去畸变、地面分割、体素化,然后通过一个3D主干网络提取特征。关键参数是体素大小——0.1米分辨率能保留行人细节但显存占用高,0.2米分辨率适合高速场景但对近距离加塞车辆不友好。我的经验是动态体素:近处用细粒度,远处用粗粒度,在精度和效率之间取平衡。

2.2 BEV特征空间:统一多模态表征的枢纽

BEV空间是当前端到端方案的事实标准中间表示。它的好处是物理意义明确:每个格子对应地面上一个真实区域,不同传感器的特征可以在这个空间里自然对齐。

从图像到BEV的转换有两条主流路线。LSS(Lift-Splat-Shoot)路线预测每个像素的深度分布,把图像特征“抬升”到3D空间再“拍扁”到BEV平面。优点是几何可解释,缺点是深度预测不准时特征会糊。Transformer路线用可学习的BEV查询向量,通过交叉注意力从多相机图像中抽取特征。优点是端到端可训练,缺点是需要大量数据才能收敛。

我自己的项目里两种都试过。LSS在初期收敛快,但最终精度受限于深度估计的上限。Transformer方案训练周期长,但一旦数据量超过某个阈值,精度会反超。建议的做法是:先用LSS快速搭建基线,验证数据管线和训练框架没问题,再切换到Transformer做精度冲刺。

激光雷达特征到BEV的投影更直接:体素特征沿高度方向做最大池化或注意力加权,压扁成BEV网格。这里要注意高度维度的信息损失——天桥、隧道顶、悬挂的交通标志在压扁后会与地面物体混叠。解决办法是保留一个额外的高度通道,或者在BEV特征后接一个轻量级的3D卷积做后处理。

2.3 时序融合模块:让网络记住过去三秒发生了什么

单帧BEV特征缺少运动信息,网络无法判断前车是在减速还是匀速。时序融合模块的作用就是把历史帧的特征对齐到当前帧的坐标系,然后融合。

对齐的关键是自车运动补偿。用IMU和轮速计积分得到自车位移和旋转,把历史BEV特征 warp 到当前帧。积分误差会随时间累积,所以通常只融合最近2-3秒的数据。更优雅的方案是用注意力机制让网络自己学习对齐,但计算量会显著增加。

融合策略上,时序Transformer是当前效果最好的选择。把历史BEV特征展平成序列,加上位置编码和时间编码,用自注意力聚合。我试过简单的通道拼接和3D卷积,在遮挡场景下的表现明显不如Transformer。代价是推理延迟增加——如果车端芯片算力有限,可以只对关键区域(如自车前方50米扇形区)做时序融合,其他区域用单帧特征。

2.4 轨迹解码头:从特征到方向盘转角的最后一公里

解码头的设计直接决定输出动作的平滑性和安全性。常见方案有三种:

方案一:直接回归控制量。网络输出方向盘转角、油门、刹车三个标量。优点是简单直接,缺点是缺乏可解释性,且对训练数据的分布偏移极其敏感——如果训练集里很少出现急转弯,网络在弯道就会犹豫。

方案二:预测未来轨迹点。网络输出未来3-5秒内每个时间步的自车位置(x, y, heading),再用一个简单的PID控制器跟踪轨迹。优点是轨迹可视化后容易调试,且可以施加物理约束(如曲率连续)。缺点是多了一层控制器,端到端的梯度无法直接传到控制量。

方案三:轨迹词汇表分类。预先生成大量候选轨迹(比如用真实驾驶数据聚类得到512条典型轨迹),网络对每条轨迹打分,选最高分的执行。优点是输出天然满足运动学约束,缺点是词汇表覆盖度有限,遇到训练集没见过的场景可能选不出合理轨迹。

我目前倾向于方案二为主、方案三为辅的混合解码:主头回归轨迹点,辅助头对轨迹词汇表分类,两个损失联合训练。实测下来,轨迹点的平均位移误差能控制在0.3米以内(3秒预测窗口),同时轨迹词汇表的分类准确率超过92%,在极端场景下提供了一层保险。

3. 数据引擎:从原始回放到训练样本的完整流水线

3.1 数据采集:传感器配置与触发策略

数据采集车的传感器配置决定了数据的上限。我的建议是摄像头为主、激光雷达为辅、毫米波雷达兜底。摄像头至少6路(前视长焦、前视广角、侧前、侧后、后视),分辨率不低于1920×1080,帧率30fps。激光雷达用128线以上,安装位置尽量高且无遮挡。毫米波雷达用于测速和恶劣天气冗余。

触发策略比传感器配置更容易被忽视。如果只是简单地全程录制,你会得到大量重复的直道巡航数据,而真正有价值的加塞、鬼探头、施工区绕行等场景占比极低。我的做法是事件触发 + 随机采样结合:用轻量级规则检测器实时识别感兴趣事件(急刹、急转、近距离切入),触发高优先级录制;同时每隔固定时间随机采样一段常规数据,保持分布均衡。

注意:触发阈值不能设得太敏感,否则一天能录几百个“事件”,标注成本爆炸。我的经验是急刹阈值设在0.3g以上,切入距离阈值设在5米以内,这样每天的有效事件能控制在20-30个。

3.2 数据标注:从人工框到自动标注的演进

端到端训练需要的标注比模块化方案少,但并非不需要。至少需要三类标注:自车轨迹(从组合导航系统直接获取,无需人工)、其他交通参与者轨迹(需要标注或自动提取)、语义地图元素(车道线、路沿、交通标志)。

人工标注成本高且一致性差。当前的主流做法是自动标注 + 人工抽检。自动标注的流程是:先用一个预训练的感知模型跑一遍数据,生成初始标注;再用多帧跟踪和运动学平滑做后处理;最后人工只检查置信度低的样本。我实测下来,自动标注能覆盖85%以上的样本,人工只需要处理剩余15%的困难样本,整体效率提升4-5倍。

自车轨迹的获取有个坑:组合导航系统在隧道、城市峡谷等场景下会失锁,轨迹出现跳变。解决办法是多源融合:组合导航 + 视觉里程计 + 轮速计,用卡尔曼滤波做平滑。如果实在没有组合导航,纯视觉里程计在短时间(<10秒)内的精度也够用,但需要定期用地图匹配做绝对位置校正。

3.3 数据增强:让模型见过足够多的“意外”

驾驶数据的分布极度不平衡:直道巡航占70%以上,转弯占20%,剩下的10%才是各种边缘场景。数据增强的目的就是人为拉平分布。

几何增强方面,随机裁剪、旋转、缩放是基础操作。但要注意:旋转图像的同时必须同步旋转自车轨迹标签,否则网络会学到错误的对应关系。我见过一个项目,增强代码只旋转了图像没旋转轨迹,训练出来的模型在转弯时方向盘打反,排查了两天才发现是增强的bug。

外观增强方面,颜色抖动、亮度对比度调整、模拟雨雾效果都能提升鲁棒性。但不要用CutMix或Mosaic——这些在分类任务上有效的增强,在驾驶任务上会破坏空间连续性,导致网络输出抖动。我试过Mosaic增强,训练loss确实降得快,但实车测试时方向盘高频抖动,乘客体验极差。

时序增强方面,随机丢帧、随机时间偏移可以模拟传感器丢包和时钟漂移。这个对提升系统鲁棒性很有帮助,建议加上。

3.4 数据闭环:从实车问题到训练样本的快速迭代

数据闭环是端到端方案持续进化的引擎。完整流程是:实车运行 → 问题发现 → 数据回传 → 标注 → 加入训练集 → 模型更新 → OTA推送。

问题发现环节,除了人工接管,还要监控模型的不确定性输出。如果网络对当前场景的预测方差很大,说明它“没见过”类似场景,即使没有接管也应该回传。我通常设两个阈值:接管事件100%回传,高不确定性事件按比例采样回传。

数据回传的带宽是瓶颈。一辆车一天产生几TB原始数据,不可能全传。我的做法是车端预处理 + 关键帧上传:车端先跑一遍轻量级模型,只上传模型不确定或与规则模块冲突的片段,每段10-20秒,压缩后大约50-100MB。这样一天下来每辆车回传1-2GB,在4G网络下也能接受。

标注环节尽量自动化。自车轨迹直接可用,其他参与者轨迹用离线的高精度感知模型自动提取,人工只做抽检和修正。从回传到标注完成,理想情况下控制在24小时内,这样一周可以完成2-3轮模型迭代。

4. 训练策略:损失函数设计、课程学习与分布式训练

4.1 损失函数:多任务联合优化的权重平衡

端到端模型的损失函数通常是多项加权和:轨迹回归损失 + 轨迹分类损失 + 感知辅助损失 + 正则化项。

轨迹回归损失用平滑L1损失比均方误差更鲁棒,对离群值不敏感。但平滑L1在误差接近零时梯度会消失,导致轨迹在直线段收敛慢。我的做法是平滑L1 + 小权重的L2,在零附近用L2提供梯度,大误差时用L1抑制离群值。

轨迹分类损失用焦点损失处理类别不平衡。512条候选轨迹中,只有少数几条是合理的,大部分是明显错误的。焦点损失通过降低易分类样本的权重,让网络聚焦于困难样本。

感知辅助损失是可选项但强烈推荐。在BEV特征后接几个轻量级检测头,预测其他车辆的位置和速度。这些辅助任务不参与最终控制,但能提供额外的梯度信号,加速BEV特征的收敛。我试过去掉辅助损失,BEV特征在训练初期收敛慢了一倍。

权重平衡是个经验活。我的起始配置是:轨迹回归1.0,轨迹分类0.5,感知辅助0.3,L2正则0.01。然后根据验证集表现微调。如果轨迹抖动大,提高回归权重;如果轨迹选择不合理,提高分类权重。

4.2 课程学习:从简单场景到复杂场景的渐进式训练

直接在所有数据上训练,网络会被大量简单样本“带偏”,学不到困难场景的决策逻辑。课程学习的思路是先易后难。

第一阶段:只用直道、无遮挡、交通稀疏的数据训练。这个阶段网络快速学会基本的车道保持和跟车。学习率可以设大一点,收敛快。

第二阶段:加入弯道、有遮挡、中等交通流量的数据。网络开始学习避让和变道。学习率降一半,防止破坏第一阶段学到的特征。

第三阶段:加入所有困难场景——加塞、鬼探头、施工区、恶劣天气。学习率再降一半,精细调优。

每个阶段的切换标准是验证集损失不再下降。我通常用早停法:连续3个epoch验证损失不降就切换下一阶段。整个课程学习过程比直接混合训练收敛更稳定,最终精度也更高。代价是训练时间增加约30%,但值得。

4.3 分布式训练:数据并行、模型并行与混合并行的取舍

端到端模型的参数量通常在1亿到10亿之间,单卡放不下。必须用分布式训练。

数据并行是最简单的方案:每张卡持有完整模型副本,处理不同的数据批次,梯度做全归约。缺点是显存冗余——每张卡都要存一份完整的模型和优化器状态。对于10亿参数的模型,用Adam优化器,单卡显存至少需要40GB(模型参数4GB + 梯度4GB + 优化器状态8GB + 激活值20GB+)。如果卡不够多,数据并行跑不起来。

模型并行把模型切分到不同卡上,每张卡只存一部分参数。缺点是卡间通信频繁,如果切分不当,通信开销会吃掉大部分加速比。对于Transformer架构,按层切分比较自然,但要注意负载均衡——注意力层的计算量远大于前馈层。

混合并行是当前的主流:模型并行处理大层,数据并行处理小层。具体来说,把BEV编码器和时序融合模块做模型并行(它们参数量大),解码头做数据并行(参数量小)。我实测下来,混合并行在64卡集群上能达到45倍左右的加速比,比纯数据并行的30倍和纯模型并行的20倍都好。

通信优化方面,梯度压缩和通信重叠是两个有效手段。梯度压缩用FP16或INT8传输梯度,带宽减半,精度损失可忽略。通信重叠让梯度传输和反向传播同时进行,隐藏通信延迟。这两个技巧加起来能再提升20%的训练速度。

4.4 训练监控:损失曲线之外的隐藏指标

损失曲线只能告诉你“有没有在学”,不能告诉你“学得好不好”。必须监控一些隐藏指标。

轨迹平滑度:计算相邻时间步预测轨迹的曲率变化率。如果曲率变化率超过某个阈值(比如0.1 rad/m²),说明轨迹抖动,即使损失在降也要警惕。

方向盘抖动频率:统计预测方向盘转角的高频分量能量。如果高频能量占比超过10%,实车体验会很差。

场景分类准确率:把验证集按场景类型(直道、弯道、加塞、施工区)分组,分别计算损失。如果某个场景的损失显著高于平均,说明模型在这个场景上有短板。

不确定性校准:如果模型输出预测方差,检查方差是否与真实误差相关。理想情况下,高方差应该对应大误差。如果方差和误差不相关,说明不确定性估计不可靠,不能用于触发数据回传。

我通常每训练一个epoch就跑一次完整监控,生成一份报告。如果发现异常指标,先暂停训练,排查数据或模型问题,而不是盲目继续。

5. 平台工程:从数据存储到车端部署的完整基础设施

5.1 数据存储:对象存储 + 元数据库的架构设计

驾驶数据的存储需求很特殊:单文件大(一个视频片段几百MB到几GB),总容量大(PB级别),读取模式以顺序读为主,偶尔需要按条件检索。

对象存储(如S3兼容的存储系统)适合存原始数据。优点是扩展性好、成本低,缺点是延迟高,不适合频繁随机读。我的做法是热冷分层:最近一个月的数据放高速存储,一个月以上的数据自动迁移到低速归档存储。训练时只从高速存储读,归档数据需要时再临时取回。

元数据库存标注信息、场景标签、数据质量指标。用关系型数据库(如PostgreSQL)就够,因为元数据的写入频率不高,查询模式也相对固定。关键是要建好索引:按时间、按场景类型、按车辆ID、按标注状态。我见过一个项目用MongoDB存元数据,查询性能很差,后来换成PostgreSQL加复合索引,查询速度提升了10倍。

数据版本管理容易被忽视。每次模型训练用的数据集应该有一个唯一的版本号,记录包含了哪些数据片段、标注版本、增强配置。这样当模型表现异常时,可以回溯到具体的数据版本排查。我用的是DVC(数据版本控制)加Git的组合:DVC管理大文件,Git管理代码和配置,两者通过哈希值关联。

5.2 训练平台:任务调度、容错与资源隔离

训练平台的核心需求是高效利用GPU资源和快速恢复失败任务。

任务调度用Kubernetes + 自定义调度器。Kubernetes负责容器编排和资源分配,自定义调度器根据任务优先级、GPU型号、数据本地性做二次调度。比如,需要A100的任务不会调度到V100节点上,数据在某个存储节点的任务优先调度到同机架的计算节点。

容错机制必须完善。分布式训练中任何一个worker挂掉,整个任务就失败。我的做法是定期checkpoint + 自动重启:每训练N个step保存一次模型和优化器状态,任务失败后自动从最近的checkpoint恢复。N的选择要平衡——太小则保存开销大,太大则失败后重算多。我通常设N=1000,对于batch size 64的训练,大约每10分钟保存一次。

资源隔离用cgroup + GPU MIG。cgroup限制CPU和内存,MIG(多实例GPU)把一张物理GPU切成多个逻辑实例,每个任务独占一个实例。这样即使某个任务内存泄漏,也不会影响其他任务。MIG的缺点是切分后单实例的显存和算力有限,适合小模型调参,大模型训练还是独占整卡。

5.3 车端部署:模型量化、剪枝与推理引擎选型

训练好的模型要部署到车端芯片上,面临算力、功耗、散热的约束。必须做模型压缩。

量化是最有效的手段。FP32转INT8,模型大小减为1/4,推理速度提升2-3倍,精度损失通常在1%以内。但要注意敏感层保护:BEV编码器的第一层和最后一层对量化敏感,保持FP16;中间层可以安全地转INT8。我用的工具是TensorRT的PTQ(训练后量化),校准集用1000张代表性图像,量化后的模型在验证集上的轨迹误差增加了不到2%。

剪枝去除冗余参数。结构化剪枝(按通道剪)对硬件友好,非结构化剪枝(按权重剪)压缩率高但需要稀疏计算支持。我倾向于结构化剪枝 + 微调:先剪掉20%的通道,再微调10个epoch恢复精度。实测下来,剪枝20%后推理速度提升约15%,精度损失可忽略。

推理引擎选型取决于芯片。NVIDIA Orin用TensorRT,地平线征程用BPU工具链,Mobileye EyeQ用专用SDK。跨平台部署的痛点是算子支持不一致——训练时用的某些算子,车端芯片可能不支持。解决办法是训练时就考虑部署约束:尽量用标准算子(卷积、矩阵乘、激活函数),避免自定义算子。如果必须用,提前和芯片厂商确认支持情况。

5.4 影子模式与在线评估:部署后的持续验证

模型部署到车端后,不能直接接管控制权。先跑影子模式:模型输出驾驶动作,但不执行,只记录并与人类驾驶员的动作对比。如果模型动作和人类动作的偏差在可接受范围内,再逐步放开控制权。

影子模式的评估指标要设计好。动作偏差(方向盘转角差、加速度差)是基础指标,但不够。还要看决策一致性:在人类驾驶员变道时,模型是否也倾向于变道?如果模型总是保守地保持车道,即使动作偏差小,体验也不好。

在线评估的另一个维度是接管率。影子模式下,如果模型动作会导致人类驾驶员接管(比如模型想变道但人类踩了刹车),记录为一次“虚拟接管”。虚拟接管率低于某个阈值(比如每千公里少于5次),才考虑放开控制。

我自己的项目里,影子模式跑了三个月,累计虚拟接管率从最初的每千公里20次降到3次,才敢做小范围实车控制测试。这个过程急不得,安全第一。

6. 几个容易踩坑的工程细节

6.1 时间同步:毫秒级偏差如何毁掉训练

多传感器时间同步的精度要求是毫秒级。摄像头曝光时刻、激光雷达扫描时刻、组合导航输出时刻,如果偏差超过10毫秒,在高速场景下(120km/h,即33m/s)就是0.33米的位移误差。这个误差在BEV特征上表现为重影,网络会学到错误的运动模式。

硬件同步是首选:用同一个PPS(秒脉冲)信号触发所有传感器。如果硬件不支持,软件同步的精度取决于时间戳的准确性。Linux系统下,用PTP(精确时间协议)可以把时间戳精度做到微秒级,但需要网络设备支持。我见过一个项目用NTP,精度只有毫秒级,训练出来的模型在高速上画龙,排查了很久才发现是时间同步的问题。

6.2 标定漂移:在线标定的触发条件与收敛判据

标定参数漂移是量产车的常见问题。温度变化导致镜头热胀冷缩,振动导致支架松动,都会改变外参。在线标定的触发条件通常是:车道线平行度偏差超过阈值或消失点位置偏移超过阈值。

在线标定的收敛判据要谨慎设计。如果判据太松,标定结果抖动,BEV特征不稳定;如果太严,标定长时间不收敛,影响驾驶体验。我的经验是:连续100帧的标定结果标准差小于0.1度,才认为收敛。收敛前用上一版标定参数,收敛后平滑过渡到新参数,过渡时间约5秒。

6.3 数据不平衡:长尾场景的过采样与合成

长尾场景(如事故、施工、极端天气)在数据集中占比极低,但恰恰是安全关键。过采样是最简单的办法,但容易导致过拟合——同一个场景反复出现,网络会记住而不是学会。

更好的做法是场景合成。用仿真环境生成大量长尾场景,或者用生成模型对真实长尾数据做风格迁移和几何变换。我试过用NeRF重建真实场景,然后改变光照、天气、交通参与者位置,生成新的训练样本。合成数据在感知任务上效果不错,但在决策任务上要谨慎——仿真环境的交通参与者行为模型可能过于理想化,网络会学到不真实的交互模式。

我的折中方案是:感知用合成数据增强,决策用真实数据为主、合成数据为辅。合成数据在决策训练中的占比不超过20%,且要经过严格筛选,确保行为模式合理。

6.4 模型更新:OTA推送的灰度策略与回滚机制

模型更新不能一次性全量推送。必须灰度发布:先推1%的车,观察一周;没问题再推10%,再观察一周;最后全量。灰度期间要监控关键指标:接管率、急刹频率、乘客投诉率。任何一个指标恶化超过阈值,立即暂停推送并回滚。

回滚机制要提前准备好。车端保留上一版模型,收到回滚指令后切换回去。切换过程要平滑——不能正在高速上跑着突然切换模型,那会吓死乘客。我的做法是:回滚指令在车辆熄火时执行,下次启动用旧版模型。如果紧急情况必须立即回滚,也要等车辆停稳后再切换。

OTA推送的另一个坑是带宽。一个端到端模型动辄几百MB到几GB,如果同时推给大量车辆,服务器带宽扛不住。解决办法是P2P分发:先推给少量种子车辆,种子车辆再分享给附近的其他车辆。这样服务器只需要承担种子车辆的带宽,其余流量在车与车之间流转。当然,这需要解决信任和安全问题,但技术上是可行的。

7. 我个人的一些经验体会

端到端自动驾驶不是银弹,它解决了一些问题,也引入了一些新问题。最大的新问题是调试困难——模块化架构下,你可以单独测试感知模块的精度,但端到端模型只有一个最终输出,中间特征很难解释。我的应对策略是保留辅助任务:即使最终目标是端到端控制,也在中间层加感知辅助头,这样至少能监控BEV特征的质量。

另一个体会是数据质量比数据数量重要。我见过团队盲目追求千万公里里程,但数据里大量是重复的直道巡航,真正有价值的困难场景很少。与其堆里程,不如精心设计触发策略,确保每一公里数据都有信息量。

最后,安全兜底永远不能省。端到端模型的输出必须经过规则校验层,这是底线。我不管模型在验证集上表现多好,实车测试时兜底层永远开着。等积累了足够多的安全里程,再考虑逐步放宽兜底条件。这个过程中,耐心比技术更重要。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进