端到端自动驾驶这个词,最近两年已经从一个学术黑话变成了行业共识。这个标题列了模型、数据、训练策略、平台四个维度,看起来是四个并列的话题,但做过这个方向的人都知道,端到端方案真正难的地方恰恰在于它们咬合在一起:模型架构决定数据要采集什么,数据质量反过来逼着模型改结构,训练策略直接暴露平台算力的瓶颈,而平台基础设施又卡住了数据规模的上限。我过去这两年一直在跟这条路线的方案较劲,踩过的坑、翻过的车、最后跑通的链路,今天一次性掰开揉碎聊清楚。这个内容适合正在做智能驾驶算法或者刚转型做端到端方向的工程师参考,也适合想了解量产级方案全貌的读者当一份蓝图来读。
1. 整体设计与思路拆解:为什么必须从“拆模块”走到“端到端”
1.1 端到端不是“换了个口号”,而是系统复杂度的必然迁移
传统自动驾驶方案是典型的模块化架构:感知模块输出障碍物框,预测模块预测未来几秒的轨迹,规划模块在这堆预测结果里做决策,控制模块再负责执行。每个模块单独优化,单独发布,看起来工程上很清晰,但真正跑起来之后你会发现问题全出在接口上。感知漏掉的物体,预测模块根本不知道它存在;预测给出十个轨迹候选,规划模块要靠逻辑规则去挑;控制模块延迟一丁点,横纵向误差就会被前几个模块的累计误差放大。这套架构优化到后期,团队要在无数个手写的后处理规则里互相补洞,这是纯工程管理的极限,不是技术路径的终点。
端到端方案的思路非常本质:把摄像机、激光雷达、导航地图这些输入直接喂给一个网络,输出的直接就是自车的轨迹或者控制指令,中间不再有人手设计的“对象列表”。用一句直白的话说,模块化方案是在做一个“流水线”,每个工位的人只看自己的零件,而端到端方案是在做一个“大脑”,所有信息在同一个网络里前向传播、反向优化。
从这个角度你就理解了,为什么端到端方案会在这个时间节点爆发。第一,Transformer架构能处理长时序、多视角、跨模态的信息融合,动辄几十亿的参数有足够的容量去“记住”驾驶规则。第二,量产车队规模化采集数据的成本已经可以被平台摊薄。第三,算力平台开始能扛得住车载端的推理需求。这三点缺一不可,所以驾驭端到端实际上是在驾驭一个系统工程,而不是在调一个网络。
1.2 我建议你先想清楚“究竟要端到端到什么程度”
方案落地之前,团队最容易争论的问题是:到底是要做一个“完全端到端”还是“部分端到端”。我的观点很明确,量产节奏下,先务实再激进。
从学术文献上看,完全端到端确实性感,输入图像、直接输出方向盘转角或者油门刹车开度,中间没有任何手工中间表示。但放在量产里,这种方案有一个天生的麻烦,系统不可解释性太强。法规要求、安全评审、事故分析都需要知道“为什么这样决策”。不懂技术的人会认为这是信任问题,但懂工程的人会告诉你这是debug能力的问题——你不能拿着一个模型说“它自己学的”,然后对事故报告交白卷。
所以我推荐实践的路线是端到端规划作为核心,感知结果作为中间辅助监控的战略。也就是网络主体仍然从传感器原始输入直接到决策轨迹,但同时在网络内部保留BEV特征或者查询向量,供安全员、测试平台和V2系统做监测与对比。这样的好处有两点:一是模型能力做到端到端优化,避免感知到规划的信息损耗;二是工程上依然保留一层“安全带”,在必要时可以人工接管、安全兜底、事故回溯。
多年的量产经验告诉我,技术路线最理想的状态是“看起来激进,做起来稳妥”。先让端到端的网络在某些ODD(运行设计域)内跑通,再逐步扩大场景边界,比一上来追求全场景一遍做对,成功率高得多。
1.3 端到端方案的收益到底体现在哪里
说完了架构思路,很多人会问:做端到端究竟换来了什么?我在实际对比过并行跑双方案(模块化基线 vs 端到端方案)之后,总结出三个最有说服力的收益点。
第一个收益是信息无损。传统管线里,感知模型把连续的高维特征压缩成离散的3D框信息,类别错了、框不准、漏检,信息就被丢掉了。端到端网络直接从传感器特征到轨迹,网络能用到一些工程师根本没有显式建模的线索,比如对面车的微小横向摆动的趋势、路面颠簸频率变化、目标车辆的影子变化等。这些细粒度线索在传统三段式方案里早就被丢弃了。
第二个收益是系统一致性。传统方案里,感知、预测、规划各有各的损失函数,各自最优但整体不是最优,甚至会出现“感知很准但规划结果振荡”的情况。端到端用同一个损失函数把整个链路拧在一起,系统整体行为更平滑,尤其是换道、过路口这种需要多目标权衡的场景,稳定感明显更好。
第三个收益是开发迭代效率。模块化方案调整一个模块,后面所有模块都要回归测试,改动一个摄像头参数说不定要全部重新标定。端到端是“数据进,模型出”,模型迭代的效率非常高,数据回流系统之后重新训练一次,就可以快速验证一个版本。这个效率在数字上体现为:原先版本迭代以月为单位,端到端以后能以周为单位。
2. 核心模型方案选型:稀疏化、Transformer与世界模型的平衡
2.1 视觉中心还是激光雷达中心,这是第一个分岔路
端到端模型的输入传感器组合,直接决定了整个数据链路、标注工具链和算力规划。目前主流方案基本分成三条路:纯视觉、视觉+激光雷达、以及多模态融合(图像+雷达+导航)。国内做Robotaxi的公司普遍用多模态融合路线,而量产辅助驾驶场景则更倾向于纯视觉加低成本传感器。
纯视觉路线的好处是数据成本低、传感器标定简单、量产一致性高。但它的天花板也很明显:对深度估计要求很高,夜间、逆光、雨雾等场景下,纯视觉的性能衰减会非常大。激光雷达路线在感知鲁棒性上确实强,但它带来的问题是数据量指数级上升,标注成本、存储成本、算力成本一起上涨,而且激光雷达点云在雨雪天气的表现也不是零失误。
我的团队在实践里采用的策略是“双路并行、共享场景”:白天和结构化道路以纯视觉为主,复杂路口、恶劣天气、夜间场景以多模态融合为主。训练时候两个模型共享同一个标注和场景数据库,推理时候根据运行环境自动路由。这种策略在版本交付上更灵活,而且不会因为多模态模型对激光雷达的路径依赖耽误整体进度,算是一种比较务实的选择。
2.2 密集特征还是稀疏特征,决定了你的显存和训练速度
端到端模型里一个容易被低估的决策点,是采用稠密BEV特征还是稀疏查询。早期的BEV方案普遍是稠密网格表达,类似于把路面划分成一个个小格子,每个格子都赋予语义和运动特征。好处是信息覆盖无死角,但代价是计算量非常大,尤其在分辨率要求高、距离范围大的场景,一个128米见方、0.4米分辨率的BEV特征图,动辄几十万甚至上百万的网格单元,Transformer的注意力计算简直能把GPU烧冒烟。
后来行业转向稀疏化方案,核心思路借鉴了DETR那套可学习查询对象。它的理念是:每个目标在路面上只占很小一块区域,没必要全图做特征计算,让网络通过查询去主动定位、关联和理解目标。稀疏化之后的模型不但显存占用大幅下降,推理速度也明显变快,对车载计算平台的适配性更好。它的代价一样明显:网络的注意力比较“挑”——如果目标太远、太小、遮挡严重,查询可能根本发现不了它,这需要有完善的困难样本挖掘来兜底。
我在实践里的建议是:感知主干用稠密特征做BEV构建,保证底层信息充沛;到决策规划层改用稀疏查询,把注意力集中在少数关键目标和通行空间上。以训练框架来看,这种混合架构比单一稠密或单一稀疏都稳定,实际考核指标也最好看。
2.3 时序融合:没有时序,端到端根本学不会“预判”
驾驶本质是一个时序决策问题,单帧图像输入就是一张静态图片,网络根本分不清对面车是在开过来还是停着。所以端到端模型必须具备时序建模能力,把这个能力拆解开就是三点:时序特征对齐、时序特征记忆、时序决策输出。
时序特征对齐我们用的是Transformer里的attention到历史帧的方式,让当前帧特征能查询历史帧的特征,并用可变形attention把对应关系学出来。这一招比简单的特征拼接效果要好得多,因为它可以根据物体的运动速度自适应地决定“看多远的过去”。静止护栏不需要回看很久,但前方一个突然切入的车辆,网络就会主动调取它前几秒的横摆轨迹和速度变化。
时序特征记忆这块,我给模型设计了一个显式的memory bank,存储最近5到10秒的BEV特征和轨迹查询状态。这样做的好处是车辆在遮挡场景、鬼探头场景下,依然知道“那里刚才有个物体消失了一段时间”,不会因为目标短暂消失就把轨迹彻底遗忘。这在实车测试里对预判能力的提升非常明显,尤其是无保护左转和加塞场景。
时序决策输出也要细说。我们的模型不是对每个时刻都重新生成轨迹,而是在上一帧的轨迹基础上做增量修正,类似“这会我已经在往左靠了,那么下一帧我继续微调方向而不是从零规划”,这样轨迹输出天然就平滑,不会出现规划结果抖动的问题。用这个设计之后,乘坐舒适性指标提升了接近一倍。
2.4 世界模型/预训练:跟上行业前沿但别被带偏
最近一年多,行业里很流行“世界模型”概念——让模型看大量视频,学会预测未来的环境变化,然后迁移到驾驶任务上。这个方向的魅力和风险都很大:魅力在于理论上模型能学到海量的交通交互规律,比人类标注的数据集丰富得多;风险在于“会预测未来”和“会驾驶”之间还隔着一个巨大的决策层,模型可能学会了画面变化的统计规律,却没有学会怎么开车。
我们团队实践之后的心得是:世界模型作为预训练阶段的价值非常大,尤其适合做感知特征提取器和时序编码器的初始化。先让模型在大规模无标签视频上做未来帧预测,再用驾驶数据进行监督微调,这种策略比从头训练收敛更快、最终精度也高一截。但在规划决策阶段,世界模型并不能直接替代基于驾驶监督的端到端训练,否则会出现“视频生成得很流畅,但轨迹输出一塌糊涂”的情况。
从这个角度看,方案选型不能只看论文刷榜的分数,要看它到底在整条链路里扮演什么角色。预训练当作燃料,驾驶任务当作引擎,这个搭配我实际验证下来最香。
3. 数据工程:端到端方案的燃料供给线
3.1 数据规模与数据分布:不是“越多越好”,而是“越对越好”
端到端模型对数据的饥渴程度远远超出传统感知模型。传统感知需要几百万张图片就可以达到量产水平,但一个端到端的驾驶模型,没有上千万公里的驾驶数据,很难覆盖路面上各种千奇百怪的交互场景。但数据规模只是前提,真正决定模型能力上限的是数据分布。
有一个踩过的坑必须说出来:早期我们直接从路采车采集数据回来就灌进训练集,结果模型在高速上开得非常顺,但一到城市复杂路口就“变傻”。后来分析发现,路采的数据大量集中在快速路和主干道,城市路口的数据占比低得可怜。模型看到的很多场景都是结构相似的路径片段,它根本没机会学习路口博弈和窄路掉头。
从那之后,我们的数据体系做了一个根本性调整:从“采集什么存什么”改为“需要什么采什么”。先根据模型考核指标和路测bad case生成数据需求清单,再定向安排采集路线的比例分配,让高速、城市快速路、城市地面、园区、夜间、雨雾等场景按目标分布达到比例。这个调整直接决定了版本迭代的效果,数据分布合理,模型能力立刻上一个台阶。
3.2 数据闭环:从车端到训练端再到车端的飞轮
真正发挥端到端优势的,是数据闭环机制。简单说,就是让数据自动地从真实的驾驶场景中回流到训练系统,再通过OTA发布到车队,整个循环像飞轮一样越转越快。
这里有一个核心工具叫“场景切片”。路测车辆24小时都在采集数据,但真正有价值的其实只有少数几十秒的片段。所以我们给端到端模型设计了基于规则模型加学习模型的场景触发器,比如急刹车、切入博弈、路口异常、接管事件、轨迹偏离。车端只要触发这些条件,就把前后30秒的传感器数据打包上传,其他无关数据直接丢弃。这套机制能把数据回传量砍掉90%以上,而有效信息量却大幅提升。
数据采回来之后,还要过“去重”和“均衡”。同一个路口早晚高峰采集的500条数据,视觉特征几乎一样,模型训练时不会因为它们多而变得更强。我们用特征向量相似度做聚类去重,每个类里保留最有代表性的若干条,再配合全局的困难样本加权,这样模型在有限的训练步数里能看到更多不同情况,泛化能力自然更好。
3.3 自动标注与人机协同:数据成本的分水岭
端到端模型训练需要的数据标签,不仅是感知框,还有未来轨迹、驾驶行为、交通规则约束,这些都非常难标。最开始我们考虑纯人工标注,结果成本高到怀疑人生:一个复杂的城市路口片段,标注员要同时框出几十个动态目标并预测它们未来几秒的轨迹,标一条得半小时,一天标不了几十条,价格自然也贵得离谱。
后来我们把标注流程改成“自动预标注+人工复核”的模式。先用已有感知模型自动输出3D框、跟踪ID、车道结构和目标轨迹,再让人工标注员审核修正。这样单人单天的标注效率从原来的几十条提升到几百条。再后来叠加了自训练策略,用教师模型给无标签数据打伪标签,只让人工标注那些伪标签置信度低、包含困难场景的子集,成本进一步下降。
这里必须提醒一句:自动标注质量的监控一定要做。伪标签在简单场景里很准,但在某些极端光照和遮挡下会出现系统性错误。我们团队会在训练前跑“标签质量探测”,故意挑一批数据人工复核错误率,如果错误率超标,就反哺到自动标注模型做迭代。数据和质量之间不能有片刻脱节。
3.4 场景库与闭环仿真:高速公路上练不出市区车感
路采数据再多,也天然偏向于高频常规场景,真正危险的长尾场景只能靠仿真来补。这里说的不是游戏引擎那种自由驾驶仿真,而是具有传感器级逼真度的闭环仿真环境。把真实采集的场景“搬”进仿真系统,让模型在这个场景里反复试错,这在端到端方案里是不可或缺的一环。
我们建的场景库分为三层:第一层是真实场景回放,把激光雷达点云和图像序列重新投影成仿真世界,模型可以在其中重新决策,测试轨迹是否安全;第二层是场景变体生成,在真实场景基础上改改切入时机、车速、天气,生成一批“几乎一样但又有区别”的新场景,用于验证模型的泛化能力;第三层是基于神经渲染的完整虚构场景,用于覆盖现实中极难采集的极端组合,比如对向开远光加行人突然横穿加路面湿滑。
这套场景库的建立,让模型在仿真闭环测试中暴露了大量规划缺陷,很多缺陷根本等不到路测才被发现。这样做的好处不只是安全,还有效率——仿真里几千个场景并行跑,一个晚上就能顶车队跑好几个月路测遇到的有效场景量。
4. 训练策略与评测体系:从模仿学习到多模态对齐
4.1 基于行为克隆还是强化学习:算力和稳定性的博弈
端到端驾驶模型的训练,主流路线现在分两支:模仿学习和强化学习。模仿学习的本质是让模型看人类司机怎么开,学会复制人类行为。实现简单、训练稳定、与真实驾驶数据天然兼容,量产界90%的方案都从模仿学习起步。但它有一个显著缺陷:分布漂移问题——模型在训练时看到的都是正确轨迹附近的样本,但推理时一旦出现小偏差,它从未学过“如何从偏差中走出来”,错误就会累积,最终可能导致失控。
强化学习则让模型自己在环境里试错,靠奖惩信号学会安全驾驶策略。它的优点是理论上能超越人类行为,缺点极其现实:训练需要海量的环境交互,真实路试根本不可能,仿真中好不容易学到的策略迁移到真实世界又会有仿真域差。完全靠强化学习做量产端到端,至少在目前还不现实。
我在实践中采用的组合拳是两阶段训练:第一阶段纯模仿学习,用大规模人类驾驶数据把模型“教成正常人”;第二阶段做小范围的安全策略微调,把模型放在仿真场景里,加入碰撞惩罚、急转弯惩罚、车道偏离惩罚等安全约束,用强化学习打磨极端场景下的策略。这一套组合拳在效果和成本之间找到了一个比较优的平衡点,实测下来比纯模仿学习降低了中高难度场景的安全事故率接近四成。
4.2 多模态统一:视觉-语言-动作模型(VLA)的价值在哪里
今年行业里冒出来的大量工作都在做视觉-语言-动作模型,也就是把视觉感知、语言理解和动作决策放在一个大模型里,共享参数、统一优化。这个方向的最吸引人的地方是:语言可以作为中间表示,帮助模型理解抽象规则和常识。比如模型学到的不再是“斑马线区域减速”这一条具体规则,而是能理解“前方是人行横道,行人可能有穿越意图,根据交规需要停车让行”这个常识链条。
但我们实际接入VLA模型之后也发现了明显的工程障碍。第一是模型参数尺寸很大,车载推理平台上跑一个满血VLA实时性很难保证;第二是语言标注非常昂贵,每条驾驶片段都要配套自然语言描述,人工成本让数据规模上不去;第三是语言监督信号可能削弱视觉信息,模型会“只看文字不看画”。
如果说现在的平衡点,我们的做法是“VLA做教师,端到端做学生”。用大型VLA模型离线为驾驶数据生成语言描述和决策解释,再用这些语义知识去引导驾驶模型的中层表征学习。在线推理时驾驶模型本身不依赖语言分支,这样既吸收了语义知识的泛化能力,又保证了车载端的实时性和低成本。这个小trick的效果非常显著,特别是处理开放词汇场景(比如施工区域临时标牌、交警手势)时表现明显好于普通端到端模型。
4.3 开环评测与闭环评测:两个分数两种故事
做端到端训练的工程师,几乎都会被这个问题困扰:模型在离线评测集上的准确率很高,但实车跑起来就是“不听话”。原因在于离线评测(开环)通常只让你预测轨迹,然后把你的预测和人类司机的真实轨迹做对比,看误差有多大。问题是驾驶场景具有多解性:同一个入口,人类司机选择稍微靠左一点进,你的模型选择居中进,人类没有错,你的模型也没有错,但“误差”就是很大,分数就很难看。
闭环评测则是让模型在仿真环境里真正“开车”,看它能不能安全通过场景。它的优势是评价真正的驾驶结果,更接近真实体验;劣势是与真实世界之间有仿真到现实的差距,模型可能利用了仿真环境的漏洞(比如贴着碰撞体边界走),获得高分但不反映真实安全性。
我们在正式迭代里的做法是为每个版本同时维护三个分数:开环分数用于回归测试、闭环分数用于场景能力验证、实车路测接管率作为最终KPI。三个分数必须同时达标才能发版,任何一个异常都要回溯定位。这套评测体系坚持跑下来,团队技术债明显减少,因为大多数问题能在仿真阶段就抓住,而不是等路测时吓到安全员。
4.4 困难样本挖掘与损失函数调制:决定模型上限的细节
数据集的全局分布对了还不够,训练时的样本在损失函数里的权重同样关键。端到端模型天然会往“大量简单样本”的方向收敛,比如笔直高速路上跑得很好,结果复杂路口的小众样本全都成了噪声。解决办法主要有三个层面:
第一是难例挖掘。每轮训练后我们用当前模型在训练集上回跑一遍,把预测结果和标注结果差异最大的样本挑出来,提高它们在下一轮训练中的采样权重。这样做非常VR地反映模型的薄弱环节,而且自动地跟着模型迭代变化,比固定权重高效得多。
第二是损失函数多任务加权。端到端模型往往同时输出感知辅助结果、轨迹预测和横纵向控制,这几类任务的损失量级各不相同,需要设计不确定性权重自动调节。我们基于同方差不确定性做了一个自适应权重,在训练开始阶段规划任务权重很高,随着训练推进,感知辅助任务的权重再逐渐上升,这个schedule在实操里比固定权重稳很多。
第三是安全约束项不能只挂在嘴上。我们把碰撞距离、车道边界距离、行驶舒适度作为额外的正则项加到损失函数里,通过超参控制它们对轨迹输出的约束强度。这样即使数据里有少数危险场景或标注噪声,模型也不会学到贴着障碍物边缘走的坏习惯。这算是我们从“纯监督学习思维”转变成“带约束优化思维”的一个关键转折。
5. 平台基础设施:算力集群、数据管道和模型迭代流程
5.1 从单机训练到混合并行:训练效率真正的分水岭
端到端模型的参数量动辄上亿,训练数据规模又特别大,单机单卡完全不能打。我们对训练平台的规划是“数据并行+张量并行+流水线并行”三个维度同时扩展。
数据并行最直观,每个GPU拿一批不同数据,同步算梯度、平均更新参数。张量并行解决的是单卡放不下大模型的问题,把一层网络拆到多张卡上联算。流水线并行则把网络按层切段,前一段算完把中间结果传给后一段,同时下一批数据又开始算前一段,让整条流水线别闲着。
这套组网思路听着不复杂,真落地的时候坑非常多。最典型的是并行通信开销:选网络拓扑、节点带宽都会直接影响训练吞吐。我们用过几个不同硬件平台,相同参数规模的模型,训练效率可以差3到4倍。我的实操建议是:在正式大规模训练之前,一定先跑一个标准benchmark任务,压测不同并行策略组合的吞吐量和稳定性,再把最优组合固定成平台模板。不能指望所有模型训练都用同一套并行配置,这是很多人会忽略的事。
5.2 数据管道设计:训练速度再快,数据跟不上等于白搭
很多团队的算力集群升级之后,发现训练速度根本没有成比例提升,瓶颈在数据链路:数据存储、读取、预处理、增强全挤在一条窄管道里。端到端模型的数据管线和传统感知模型有一个明显区别,它每个训练样本不是一张图,而是一个时序片段,往往包含几十帧传感器数据和对应的轨迹标注,单条样本的体积大了十倍不止。
我们在数据管道上做了三层优化。第一层是数据预处理前置化,把所有样本预先完成多传感器同步、时序切割、坐标转换、数据增强,最终落盘成训练引擎直接读的高效二进制格式。第二层是存储分级,热数据存在NVMe SSD上,冷数据放在大容量对象存储,训练时按场景分布自动将热数据预热到内存文件系统。第三层是把数据处理流程做成可观测的异步流水线,哪个环节卡住立刻就能曝光指标,避免团队在黑盒管道里反复调试。
印象最深的一次事故:我们曾把数据集切好份后直接挂在网络文件系统上训练,结果IO等待高得离谱,训练GPU利用率只有两成。排查半天才发现是小文件太多,后处理必须合成大文件并批量读取。这之后,我们的数据流水线工程化程度直接拉满,GPU利用率稳定回到九成以上。
5.3 大数据场景仿真对平台的依赖
端到端方案的闭环仿真,对平台的依赖比算法本身更大。几千个场景并行跑仿真,所谓“回放真实场景”不仅需要读取海量传感器数据,还需要对传感器信号做实时渲染或投影,这个过程对GPU算力和IO吞吐都提出了极高要求。我们的仿真平台做了一套“场景并行调度器”,把上千个仿真任务按优先级和资源需求分配到集群节点上,并支持动态伸缩。某轮模型版本提交之后,系统自动在全部场景库上跑评分,正常情况下半小时内就能拿到完整回归报告,这个速度极大地撑起了端到端版本的迭代效率。
另一个容易被忽略的细节是:仿真评测和训练最好共享同一个数据版本管理平台。仿真用的是什么版本的路网地图、场景描述、天气参数?训练用的是什么版本的数据集?模型权重版本多少?评测报告必须把这几个版本号一一锁定。我们吃过一次大亏:评测报告里模型分数大涨,复盘时发现是场景由于未锁版被静默更新导致的,白高兴一场。从那以后,版本锁成了平台的强制执行项。
5.4 模型版本与训练实验管理
端到端模型开发最怕“没有记录的重试”。每一步都涉及数据版本、代码版本、超参配置、训练日志、评测结果,缺一环就没办法复现。我们的实验管理平台强制要求每次训练启动时自动记录全部环境依赖、数据版本、代码commit号和训练配置,训练结束后自动归档模型权重和评测报告。
实验对比需要可追溯性,所以我们建立了一套标准评估集和标准排行榜。每个团队成员的实验都提交到排行榜上,大家可以直接横向对比。这个机制看似简单,实质上大幅减少了团队里内耗和“虚假的好结果”出现。技术负责人在看一个新实验结果时,会先看数据版本是不是统一、训练配置是不是合理,而不是只看那一个float分数。
做这个平台最大的感触是,它不只是在为当前版本服务,更是在积累团队的长期资产,每一次实验都是可学习的知识库。没有这套机制,端到端项目很容易在复杂的训练迭代里失控。
6. 常见问题与排查技巧实录
6.1 模型训练不收敛或震荡,从哪里开始查
端到端模型训练不收敛,绝大多数时候不是网络结构的问题,而是数据链路和损失配置的问题。我按实际排查顺序总结了一套速查流程:
第一查数据是否对齐。多传感器时序经常出现毫秒级不同步,在车辆高速运动时这个偏差会在监督信号里引入显著的噪声,表现为loss震荡下不来。第二查损失量级,不同任务的loss直接相加时,量级大的一方会主导梯度,导致另一任务被压制。第三查学习率,端到端模型建议采用warmup加cosine衰减,峰值学习率控制在3e-4到1e-3之间,用太大的学习率很容易在早期就发散。第四查数据标签噪声,如果训练集里有小比例的错误轨迹标注,模型会一直震荡不收敛,我们可以做一个梯度范数的诊断,暴露出哪些样本对梯度影响过大。
6.2 离线分数高、实车表现差,多半是评测失真
前面已经讲过开环评测和闭环评测的差异,但实车差的表现通常还另有原因。最常见的是传感器安装差异:训练数据来自路采车,但测试车摄像头的安装高度、俯仰角、内参跟路采车不完全一致,图像特征分布出现了偏差。这个问题的解法是传感器统一标定和训练时加入相机参数扰动增强。
另一个常见问题是数据场景分布和实车运营区域不匹配,离线评测集主要覆盖城市A的驾驶风格,实车测试却主要集中在城市B的路口博弈,区别当然巨大。所以我们在做评测数据规划时,特别强调要保留“留一区域”验证:用城市A、B训练,城市C做评测,保证模型的泛化能力不是记忆单个城市。
还有一个隐蔽but常见的点是时序建模差异:训练时的历史帧特征和推理时的历史帧状态必须一致。如果训练时历史帧是ground-truth感知结果,推理时历史帧却是模型自己的预测结果,就会出现训练推理不一致,模型在实车上表现得非常犹豫。解决方法是训练时逐渐用模型自己的预测替换真实历史,让模型学会纠错和鲁棒性。
6.3 数据成本失控,从哪里开始省钱
数据成本是端到端项目长期运营里最大的痛点之一,不控制好会直接拖死预算。我们通过剪裁“无效数据比例”省下了非常可观的成本。先做粗筛选,把停车等待、同一路线重复行驶、低速园区等数据按场景触发降采样到最低比例。再做细筛选,用特征相似度聚类,从簇内抽取代表性样本,避免训练集溢满重复场景。
自动标注模型的迭代是另一个省钱大头。在自动标注质量稳定的基础上,人工复核量可以逐步下调到总数的10%到20%,并且只复核高风险样本。我们做过一次复盘,通过这几条策略,在模型最终表现不降的前提下,单元训练数据成本下降了约三分之二。省钱背后是工程化的力量,而不只是砍预算。
6.4 平台GPU利用率低,管线并行配置的经验法
GPU利用率上不去,最容易的原因是数据读取和预处理拖后腿。除了前面说的大文件化,还有一个小细节:扩展性和数据打乱策略。每个训练步都想读取到不同分布的数据子集,如果数据shuffle做不好,缓存命中率一会高一会低,就会导致部分GPU在空转等待。我们会按“微批次”维度做全局数据打乱,确保同一批内的数据分布足够多样,这个改动也能直接提升几个百分点的利用率。
训练框架层面的并行配置也要细调。张量并行和流水线并行的切分比例不是随便分的,它取决于模型结构、卡间通信带宽和显存容量。我们做了一组扫描实验,针对稠密/稀疏混合架构模型找出吞吐最高的并行配置,然后把参数固化到平台模板里。后续新模型如果不照模板走,平台的默认监控里就会提示异常,这算是工程化的“容错机制”。
写在最后的实战体会
如果让我用一句话总结端到端自动驾驶方案的落地心得,那就是“模型、数据、训练策略、平台四个方面,任何一块短板都会让你在实车面前低头”。很多团队拿着一个刷分很漂亮的模型和一大池子数据,就以为离量产不远了,结果踩进平台算力不够、评测失真、数据分布失衡的坑里,一下子被拖慢大半年。
我个人的建议是:不要一上来就追求最复杂的模型、最庞大的数据规模、最豪华的算力集群,而是先跑通一个最简闭环,哪怕数据只有几千段、模型参数只有几千万,先把数据回流、训练、评测、仿真回灌的链路完整跑一遍。因为端到端项目真正复杂的是链路咬合,而不是单个环节有多先进。链路通了,后续的升级就是平滑地替换模块;链路不通,再先进的技术方案也永远只能在PPT里发光。
另外还想分享一个小技巧:训练迭代时一定要做“最差场景”跟踪,不只是盯平均指标。端到端模型在绝大多数场景的表现可能会很惊艳,但决定量产成败的永远是那几个最难处理的边界case。每轮版本,把五个最差场景的case视频亲手过一遍,比盯十个排行榜分数都更有价值。
端到端自动驾驶这条路还远没走到终点,不管是模型结构、数据效率还是训练理论,每年都在快速翻新。但有一点是确定的:这个方向正在从研究走向工程,从演示走向量产,从“能不能跑”走向“能不能稳定地跑”。如果你是刚入行的工程师,沉下心把这四块地基打牢,未来几年你会看到自己参与的技术,真正成为改变出行方式的力量。