首页 / 资讯中心 / 文章详情

端到端自动驾驶与Transformer:架构、训练与工程落地实践

端到端自动驾驶与Transformer:架构、训练与工程落地实践 ★ FEATURED ARTICLE
1. 端到端自动驾驶到底在解决什么问题1.1 从模块化到端到端一场架构范式的迁移我最早接触自动驾驶算法是在一个做L4级园区小车的团队那时候整个技术栈是典型的模块化架构感知、定位、预测、规划、控制每个模块独立开发、独立测试、独立优化。这套架构的好处是清晰、可解释、每个模块的KPI都能单独衡量。但问题也很明显——模块之间的信息传递是有损的感知输出的目标框和语义分割结果到了规划模块那里就变成了一个高度抽象的世界表示大量原始信息在接口处被丢弃了。端到端算法的核心思路就是用一个统一的神经网络把传感器原始输入直接映射成驾驶动作输出油门、刹车、转向中间不再有显式的人工定义接口。这个思路最早可以追溯到NVIDIA在2016年发表的DAVE-2论文用CNN直接从摄像头图像预测转向角。但真正让端到端火起来的是Transformer架构的成熟以及特斯拉在2021年AI Day上展示的HydraNet和后续的FSD Beta版本。为什么Transformer这么关键因为驾驶场景本质上是一个时序决策问题你需要同时关注空间上的多个目标前车、行人、红绿灯、车道线和时间上的历史信息前几帧的运动状态。CNN在空间特征提取上很强但对长距离依赖和时序建模能力有限。Transformer的自注意力机制天然适合处理这种“全局关联”的问题——每个位置的特征都可以直接和任意其他位置的特征做交互不需要像RNN那样逐步传递。1.2 模仿学习端到端训练的主要范式端到端自动驾驶目前最主流的训练范式是模仿学习Imitation Learning具体来说就是行为克隆Behavior Cloning。逻辑很直接收集大量人类驾驶数据每一帧或一段时序的传感器输入对应人类驾驶员的动作输出然后训练网络去拟合这个映射关系。但模仿学习有一个根本性的问题分布偏移Distribution Shift。训练时网络看到的是人类驾驶的状态分布但推理时网络自己的动作会改变状态一旦偏离训练分布误差就会累积放大。这个问题在学术界被称为“协变量偏移”Covariate Shift是行为克隆的经典难题。工业界的应对策略通常有几种一是数据增强在训练数据中加入各种扰动和恢复场景二是闭环训练在仿真环境中让网络自己开收集失败案例再补充训练三是引入辅助任务比如同时预测未来的轨迹、其他车辆的运动等让网络学到更鲁棒的表征。特斯拉的“影子模式”本质上也是一种数据收集策略——让网络在后台推理和人类驾驶做对比不一致的场景就是需要补充训练的数据。1.3 端到端不是“一个网络搞定一切”这里要澄清一个常见的误解。端到端不等于“一个单层网络从像素直接到方向盘”。实际工业级方案中端到端通常指的是“可微分的整体架构”内部仍然有分工只是这些分工是通过数据学习出来的而不是人工设计的。比如特斯拉的FSD架构底层是多个摄像头输入的图像特征提取RegNet BiFPN中间是时空融合模块Transformer上层是多个任务头车道线、目标检测、可行驶区域、轨迹预测等最后这些任务的输出会汇入一个规划模块。整个链路是可微分的可以联合优化但内部仍然有明确的功能划分。这种设计的好处是既保留了模块化架构的可解释性和可调试性又获得了端到端联合优化的性能增益。纯黑盒的端到端方案在学术界有研究价值但在工业落地中面临巨大的安全验证挑战。2. Transformer在自动驾驶中的核心应用方式2.1 为什么是Transformer而不是CNN或RNNCNN的归纳偏置是局部性和平移不变性这在图像分类任务中是优势但在驾驶场景中反而成了限制。驾驶场景中一个远处的红绿灯和当前车辆的行为决策高度相关但它们在图像上可能相隔几百个像素。CNN需要通过多层堆叠才能建立这种长距离关联效率很低。RNN包括LSTM理论上可以建模任意长度的时序依赖但存在梯度消失和串行计算的问题。驾驶场景要求实时推理RNN的串行特性导致无法充分利用GPU的并行计算能力。Transformer的自注意力机制解决了这两个问题任意两个位置之间的关联路径长度都是O(1)而且整个计算可以完全并行化。具体到自动驾驶Transformer可以做几件事空间注意力让网络自动学习哪些区域对当前决策最重要。比如在跟车场景中前车的特征权重会很高在变道场景中侧后方车辆的特征权重会提升。时序注意力对历史帧的特征做加权聚合自动学习哪些历史时刻对当前决策最关键。比如在路口左转时几秒前对向直行车辆的位置和速度信息会持续影响决策。多模态融合把摄像头、激光雷达、毫米波雷达的特征统一到同一个注意力空间中让网络自己学习不同模态之间的互补关系。2.2 BEVTransformer当前最主流的感知范式BEVBird‘s Eye View加Transformer是目前量产自动驾驶感知方案的主流选择。核心思路是把多个摄像头的图像特征通过Transformer映射到一个统一的俯视空间BEV空间然后在这个空间里做目标检测、车道线识别、可行驶区域分割等任务。为什么是BEV空间因为驾驶决策本质上是在地面平面上进行的BEV空间天然适合表达车辆、行人、车道线之间的空间关系。而且BEV空间是跨摄像头统一的不存在图像空间中的拼接和透视变换问题。具体实现上主流方案有两种路线路线代表方案核心思路优势劣势前向投影BEVFormer在BEV空间预定义网格查询通过注意力从图像特征中采样精度高可解释性好计算量大依赖相机标定后向投影LSS (Lift-Splat-Shoot)预测每个像素的深度分布投影到3D空间再拍扁到BEV计算效率高深度估计误差影响大BEVFormer的核心是空间交叉注意力Spatial Cross-Attention和时间自注意力Temporal Self-Attention。空间交叉注意力让每个BEV查询去图像特征中“找”对应的信息时间自注意力让当前BEV特征和历史BEV特征做交互。这种设计在nuScenes数据集上取得了很好的效果但推理速度是量产落地的关键瓶颈。2.3 从感知到决策Transformer如何贯穿全栈感知层的Transformer输出的是BEV特征图这本质上是一个结构化的场景表示。接下来的预测和规划模块可以继续用Transformer来处理这个BEV特征。预测模块的典型做法是把BEV特征作为Key和Value把每个待预测目标的查询向量作为Query通过交叉注意力提取该目标周围的场景信息然后解码出未来的轨迹分布。这种设计比传统的基于栅格或基于图的方法更灵活可以端到端训练。规划模块的Transformer通常采用解码器结构输入是当前车辆的状态和历史轨迹通过自注意力编码时序信息再通过交叉注意力从BEV特征中提取场景信息最后输出未来的轨迹或直接输出控制信号。这里的一个关键设计是“轨迹查询”Trajectory Query——预定义一组候选轨迹模板让网络学习选择或微调最合适的轨迹。注意规划模块的输出必须是安全的。工业界通常会在神经网络输出之后加一层基于规则的安全校验如紧急制动、碰撞检测确保即使网络输出异常也不会导致危险后果。3. 端到端算法的训练数据与工程实践3.1 数据闭环端到端方案的生命线端到端算法的性能上限很大程度上由数据质量和数量决定。和传统模块化方案不同端到端网络需要的是“输入-输出对”即传感器数据和对应的驾驶动作。这意味着数据采集、标注、训练、部署必须形成一个闭环。一个典型的数据闭环流程包括数据采集车队在日常运营中持续采集传感器数据和人类驾驶动作。关键是覆盖足够多的场景类型——城市道路、高速、停车场、雨天、夜间、拥堵、施工区等。数据挖掘从海量数据中筛选出对训练最有价值的片段。常用的策略包括不确定性采样网络预测方差大的场景、场景多样性采样按场景类型分层、失败案例挖掘影子模式下网络和人类不一致的场景。自动标注端到端训练需要的是驾驶动作标签这可以直接从CAN总线获取不需要人工标注。但辅助任务如目标检测、车道线识别仍然需要标注这部分可以用离线的大模型自动标注再人工抽检。训练与评估在离线数据集上训练在仿真环境中做闭环评估最后在实车上做影子模式验证。部署与回传新模型部署到车队继续采集数据发现新的问题场景回到步骤1。这个闭环的迭代速度是核心竞争力。特斯拉之所以在端到端方案上领先很大程度上是因为它有百万级的车队在持续回传数据。3.2 训练技巧从损失函数到数据增强端到端自动驾驶的训练有几个关键技巧这些在论文里往往不会详细写但在实际工程中非常重要。损失函数设计驾驶动作是连续值转向角、油门、刹车通常用L1或L2损失。但直接回归动作有一个问题——平均化。比如在路口人类驾驶员有时左转有时直行如果网络对两个动作取平均就会输出一个“直直地往左偏”的危险动作。解决方案包括使用混合密度网络MDN输出多模态分布或者用分类回归的混合方式先分类动作意图再回归具体数值。数据增强图像层面的增强亮度、对比度、裁剪是基础操作。更重要的是轨迹层面的增强——对历史轨迹加入扰动让网络学会从偏离状态恢复。具体做法是在训练时随机给车辆状态加入横向和纵向偏移然后让网络预测恢复动作。这种“恢复数据”对解决分布偏移问题非常关键。时序建模端到端网络通常需要输入多帧历史信息比如过去2秒的传感器数据。时序融合的方式有几种早期融合把多帧图像堆叠成多通道输入、中期融合每帧单独提特征然后在特征层面做时序注意力、晚期融合每帧单独预测然后对预测结果做平滑。目前主流方案是中期融合用Transformer的时序注意力来聚合历史信息。3.3 推理优化从实验室到车端部署端到端模型通常参数量大、计算量大直接部署到车端计算平台如Orin、地平线征程需要做大量优化。模型剪枝去掉网络中冗余的权重和结构。结构化剪枝去掉整个通道或注意力头比非结构化剪枝去掉单个权重更适合硬件加速。剪枝的关键是找到对最终输出影响最小的部分通常用泰勒展开或梯度信息来评估重要性。量化把FP32权重和激活值量化到INT8甚至INT4。量化可以大幅减少内存占用和计算量但会引入精度损失。实践中通常采用量化感知训练QAT在训练时就模拟量化误差让网络适应低精度计算。知识蒸馏用一个大模型教师指导一个小模型学生训练。教师模型的软标签概率分布比硬标签包含更多信息可以帮助学生模型学到更鲁棒的表征。在自动驾驶中通常用离线的大模型如多帧、多模态融合的模型来指导车端的实时小模型。算子融合与内存优化把多个连续的操作融合成一个算子减少内存访问次数。比如把卷积、批归一化、激活函数融合成一个算子。这部分通常依赖推理框架如TensorRT的自动优化但网络结构设计时也要考虑算子兼容性。实操心得车端部署时内存带宽往往比计算量更容易成为瓶颈。设计网络时要注意特征图的大小和通道数避免产生过大的中间特征。另外Transformer的注意力矩阵大小是序列长度的平方在车端部署时通常需要限制序列长度或使用稀疏注意力。4. 端到端方案的实际挑战与应对策略4.1 可解释性与安全验证端到端网络是一个黑盒这在功能安全Functional Safety要求下是一个大问题。传统的模块化方案中每个模块的行为都可以单独验证但端到端网络的决策过程无法用规则描述。工业界的应对策略通常是“黑盒白盒”的混合验证黑盒测试在仿真环境中构建大量场景包括边缘场景统计端到端网络的事故率、接管率、舒适度指标。用覆盖率来评估测试充分性。白盒分析用注意力可视化、显著性图、特征探针等方法分析网络在特定场景下关注了哪些区域、激活了哪些特征。这不能完全解释决策但可以发现明显的异常模式。安全兜底在端到端网络输出之后加一层基于规则的安全校验模块。比如如果网络输出的轨迹会导致碰撞就触发紧急制动如果网络输出的转向角变化率超过阈值就做平滑处理。这种“神经网络负责性能规则模块负责安全”的架构是目前量产方案的主流选择。4.2 分布偏移与闭环训练前面提到模仿学习的根本问题是分布偏移。解决这个问题最有效的方法是闭环训练——让网络在仿真环境中自己驾驶收集失败案例再补充训练。闭环训练的关键是仿真环境的真实度。如果仿真器和真实世界差距太大训练出来的模型在实车上表现会很差。目前主流的仿真方案包括基于游戏引擎的仿真如CARLA、LGSVL渲染质量高但物理真实度和传感器真实度有限。基于真实数据回放的仿真把真实采集的数据在仿真环境中回放网络的动作会改变车辆状态但传感器数据需要重新渲染。这种方法真实度高但需要大量的数据标注和场景重建。神经渲染仿真用NeRF或3D Gaussian Splatting技术从真实数据中重建场景可以生成新视角的传感器数据。这是目前最前沿的方向但计算成本很高。实际工程中通常采用“真实数据为主仿真数据为辅”的策略。仿真主要用于测试和验证训练仍然以真实数据为主。4.3 多模态融合的工程挑战端到端方案通常需要融合摄像头、激光雷达、毫米波雷达等多种传感器。多模态融合在理论上很美好但在工程上有几个硬骨头时间同步不同传感器的采样频率不同摄像头30Hz激光雷达10Hz毫米波雷达20Hz而且每个传感器有自己的延迟。做特征级融合时必须把不同时刻的数据对齐到同一个时间戳。通常的做法是用运动补偿——根据自车运动估计把不同时刻的特征变换到同一时刻。空间标定不同传感器的坐标系不同需要精确的外参标定。标定误差会直接影响融合效果。量产车在运行过程中标定参数会因振动、温度变化而漂移需要在线标定算法来实时修正。数据缺失某个传感器可能临时失效如摄像头被遮挡、激光雷达被污渍覆盖。融合网络需要具备鲁棒性在部分传感器失效时仍然能正常工作。训练时通常会随机丢弃某些模态的数据让网络学会在缺失情况下做推理。计算资源分配多模态融合的计算量很大车端算力有限。通常的做法是在BEV空间做融合因为BEV空间的分辨率可以控制而且融合后的特征图尺寸远小于原始图像和点云。5. 常见问题与排查技巧实录5.1 训练不收敛或收敛到局部最优这是端到端训练中最常见的问题。表现是损失函数下降很慢或者降到某个值就不再下降验证集性能很差。排查思路检查数据质量有没有大量错误标签有没有极端不平衡的场景分布比如直行数据占90%转弯数据只有10%网络会倾向于一直输出直行。检查学习率端到端网络通常需要较小的学习率1e-4到1e-5配合warmup和余弦退火。学习率太大会导致震荡太小会导致收敛慢。检查损失函数权重如果同时有多个任务检测、分割、轨迹预测不同任务的损失量级可能差几个数量级。需要手动调整权重或者用不确定性加权Uncertainty Weighting自动平衡。检查网络结构Transformer的层数、注意力头数、隐藏维度是否合适太小的网络欠拟合太大的网络过拟合且难训练。实操心得我习惯在训练初期用很小的学习率1e-6跑几百步观察损失是否稳定下降。如果损失完全不降说明网络结构或数据管道有问题如果损失下降但很快饱和说明模型容量不够或数据多样性不足。5.2 实车表现远差于仿真这是分布偏移的典型表现。在仿真或离线数据集上指标很好但实车上频繁出现急刹、画龙、误判。排查思路检查传感器差异仿真中的摄像头图像和真实图像在色彩、对比度、噪声分布上可能有差异。可以用风格迁移或域适应技术来缩小差距。检查时序一致性离线评估通常是单帧或短序列实车是连续推理。如果网络对时序信息的利用不充分实车表现会差很多。可以增加历史帧长度或者用时序平滑后处理。检查控制延迟从传感器采集到动作输出整个链路有延迟通常50-100ms。如果训练时没有模拟这个延迟实车控制会滞后。可以在训练时加入随机延迟让网络学会补偿。检查场景覆盖实车遇到的场景可能和训练数据分布不同。用影子模式收集实车数据分析网络在哪些场景下表现差针对性补充数据。5.3 常见问题速查表问题现象可能原因排查方法解决方案损失不下降学习率过大/过小打印梯度范数调整学习率加warmup验证集过拟合数据量不足/模型太大对比训练和验证损失增加数据增强减小模型实车画龙时序信息利用不足可视化历史帧注意力增加时序融合模块急刹频繁分布偏移/安全兜底过敏感分析急刹场景补充恢复数据调整兜底阈值推理速度慢模型太大/算子不兼容Profile各层耗时剪枝、量化、算子融合多模态融合无效标定误差/时间不同步检查标定参数在线标定时间对齐5.4 几个容易被忽视的细节数据标注的一致性端到端训练虽然不需要人工标注动作但辅助任务的标注质量直接影响表征学习。如果不同标注员对“可行驶区域”的边界理解不一致网络会学到矛盾的信号。建议制定详细的标注规范并定期做一致性检查。训练数据的时序切分如果把同一段连续数据同时放入训练集和验证集会导致数据泄露。必须按时间段或按场景切分确保验证集和训练集没有重叠。模型版本管理端到端模型迭代很快每次训练的数据、代码、超参数都不同。必须建立完善的版本管理记录每个模型的训练配置和评估结果。否则出了问题很难回溯。仿真环境的维护仿真环境本身也是代码也会有bug。如果仿真器的物理引擎有偏差训练出来的模型在实车上会表现异常。建议定期用真实数据校验仿真器的准确性。6. 我对端到端方案的一些个人判断端到端算法在自动驾驶中的应用还处于快速演进阶段。从目前的技术趋势来看有几个方向值得关注。一是世界模型的引入。让网络不仅学习“当前状态到动作”的映射还学习“动作会导致什么状态变化”。这种预测能力可以帮助网络做更长期的规划也能提升对分布偏移的鲁棒性。Wayve和Waabi都在这个方向上有布局。二是多模态大模型的融合。把视觉语言模型VLM的能力引入自动驾驶让网络不仅能驾驶还能理解场景中的语义信息如施工标志、交警手势。这可以显著提升对长尾场景的处理能力。三是端到端的强化学习。模仿学习受限于人类驾驶数据的质量而强化学习可以让网络在仿真环境中通过试错来优化驾驶策略。但强化学习的样本效率低、训练不稳定目前还很难直接应用到实车。从工程落地的角度我认为未来几年内量产方案仍然会是“端到端感知模块化规划控制”的混合架构。纯端到端的方案在安全验证和可解释性上还有很长的路要走。但端到端的思想——用数据驱动的方式替代人工规则——会逐渐渗透到整个技术栈中。最后分享一个我在实际项目中踩过的坑不要过早追求端到端。在数据量不足、仿真环境不完善、安全验证体系不健全的情况下强行上端到端方案会导致项目失控。更稳妥的路径是先把模块化方案做扎实积累数据和工程经验然后逐步用神经网络替换规则模块最终实现端到端的联合优化。这个过程可能需要两到三年但每一步都是可验证、可回退的。
阅读完成 · 觉得有帮助?
咨询建站