做自动驾驶规划的朋友应该都有同感:工程上能跑闭环的方案,换个城市、换个天气、换一种没见过的路口,表现说崩就崩。最近某顶级AI研究团队放出的新作 AD-E2E-JEPA,方向挺有意思——把目标条件驾驶规划和 JEPA 那套潜空间预测思路拧在一起,尝试让模型在零样本条件下直接完成目标导向的驾驶规划。所谓零样本,就是模型在训练时没见过这条路、没针对这条路做过任何微调,但只要给它一个目标位置,它就能规划出一条能开的轨迹。这篇文章我会结合自己做端到端驾驶模型和自监督表征的实践,把这个架构为什么这么设计、潜空间在里面到底起什么作用、复现和落地时要踩哪些坑,一条条拆开讲清楚。适合正在做自动驾驶规划、决策模块,或者对 JEPA 这类非生成式自监督范式感兴趣的人阅读。
1. 目标条件驾驶规划:为什么大家突然都在谈零样本
1.1 目标条件规划解决的核心问题
传统意义上的驾驶规划,通常被拆成“感知 → 预测 → 规划 → 控制”四个模块。规划模块拿到的是感知结果和预测轨迹,再结合高精地图、路由信息,输出一条安全可行的轨迹。这套方案的问题是:模块之间的信息经过多次抽象和压缩,上游一个小误差,到规划层可能被放大成一整个不合理的行为。而且高层路由信息依赖地图,地图没覆盖到的区域,规划就抓瞎。
目标条件驾驶规划(Goal-Conditioned Driving Planning)换了一个思路:不给模型完整展开的路线,只给它一个目标(Goal)。目标可以是一个 GPS 坐标、地图上的一个点、一张目标位置的图片,甚至是一句语义描述。模型的任务是,在当前状态下,自主推理出“要到达那个目标,现在应该怎么开”。这个设定很像人类开车:你不需要知道从出发地到目的地的每一条路,导航告诉你终点,你看着路况自己开。
这种设计对自动驾驶的价值在于:它把“全局导航”和“局部行为”解耦了。全局导航可以交给成熟的路径搜索算法,局部规划则由模型根据实时观察和目标自行决策。模型不需要背下来某个区域的固定路线,而是学习“朝目标走”的通用行为模式。
1.2 零样本为什么成为关键指标
如果目标条件模型只在训练过的场景里能用,那它本质上还是传统端到端的换皮。零样本能力才是这类架构的试金石。
举个例子。你在高速、城市、园区各采集了几百小时数据,训练了一个目标条件规划模型。现在把它放到一个完全没去过的港口区域,道路标线风格、路面材质、周围车辆类型、光照条件都跟训练集不太一样。零样本要求的不是“勉强不撞”,而是模型能够利用它在潜空间里学到的那种抽象驾驶规则——比如“沿着可行驶区域边缘走”“目标在右侧就右转”“跟车保持安全距离”——在新场景里组合出合理行为。
传统端到端模型为什么零样本能力差?因为它们的中间表征通常建立在像素级重建或密集语义预测上。模型记住的是“见过的场景长什么样”,而不是“场景的因果结构和驾驶决策的关系”。一旦场景外观变化,特征分布偏移,行为就跟着乱。JEPA 类的架构在这个问题上有天然优势,它的表征学习目标是预测抽象状态,不是还原像素,所以天然更关注“这个东西会不会动”“这条路能不能走”,而不是“这棵树是绿色还是黄色”。
2. 潜空间压缩在驾驶规划里的真正意义
2.1 从像素世界到状态世界的转变
JEPA 的全称是 Joint Embedding Predictive Architecture,联合嵌入预测架构。它核心思想是一条:不做生成式重建,直接在特征空间里做预测。
传统自监督方法,比如 masked autoencoder(MAE),让你把遮挡掉的图像区域重建回来,模型被迫学会像素级还原能力。这个目标对驾驶来说是浪费的——驾驶决策根本不需要知道广告牌上每个字长什么样,不需要精确还原每片树叶的轮廓。而 JEPA 做法是:把输入图像映射到一个紧凑的特征向量(embedding),然后在特征空间里预测未来状态或遮挡部分的特征表示。
AD-E2E-JEPA 把这个范式带到了驾驶规划里。传感器输入(多视角相机、可能的雷达/激光雷达点云特征)通过一个视觉编码器变成潜空间向量,它不再保留像素级的细节,而是保留“驾驶这个任务需要的抽象信息”:道路边界在哪、前方有没有障碍物、目标大概在哪个方向、当前车头朝向和可行驶方向的关系。这个向量通常只有几百到几千维,相比一帧几百万像素,压缩了好几个数量级。
2.2 压缩掉的到底是什么
潜空间压缩不是简单地把图像缩小。它压缩掉的是对决策无关的信息,保留的是对决策有预测价值的信息。
我用一个例子说明。你在高速上开车,旁边有一棵树的树叶在风里晃。树叶晃动的像素变化每帧都很大,但对驾驶决策的贡献是零。如果模型要在像素级重建这个晃动,要么耗费大量容量,要么预测出巨大不确定性(因为树叶晃动的确是随机的)。在潜空间里,编码器早就把树叶归类成“静态背景”或干脆忽略掉,预测器只需要在低维空间里预测“前方车道保持,速度继续稳定”这个抽象状态,两者难度天差地别。
同样的道理适用于天气变化、光照变化、对面来车的车灯闪烁、路面积水倒影……这些像素级变化非常大,但状态级变化很小。潜空间压缩相当于让模型自动学会对视觉噪声免疫。
2.3 潜空间为什么适合“预测未来”
驾驶规划本质上是一个时间序列预测问题:给定当前和历史状态,预测未来一段时间的状态序列,再从中提取出控制指令。在像素空间做这种预测是不现实的,因为像素空间维度爆炸、信息高度冗余、动态与静态纠缠。潜空间里做预测,未来状态本身就是一个紧凑向量,预测器可以用很轻量的结构(比如几层 transformer 或 GRU)完成,实时性上也更可控。
还有一个更微妙的好处:在潜空间里做预测等于强迫模型建立“世界的抽象动态模型”。比如模型看见前车刹车灯亮,不需要重建刹车灯高亮像素,只需要预测“前方这个物体未来会减速”。这个抽象层面的预测能力是可以跨场景迁移的——只要编码器能正确地把新场景里的物体映射到对应的潜空间区域,预测器就能直接复用。零样本泛化的根基就在这里。
3. AD-E2E-JEPA 架构拆解:从传感器到轨迹的路径
3.1 整体数据流
按命名来理解,AD-E2E-JEPA 大致遵循“端到端(E2E) + JEPA 预测范式”这个框架。整体数据流可以做这么几个抽象模块的拆分:
- 历史上下文编码:多视角/时序图像输入一个视觉编码器,输出当前和历史时刻的场景特征。
- 目标编码:将不同类型的目标(坐标点、语义目标、图像目标)映射到与场景特征同一空间的向量。
- 潜空间动态预测器:结合上下文特征和目标向量,在潜空间里预测未来若干时刻的状态表示。
- 规划解码头:从预测的潜状态序列中解码出一条具体的车辆轨迹。
这套结构里不会看到“检测-跟踪-预测-规划”那种显式模块边界,但信息流动的逻辑是完整的。驾驶员意图、场景理解、未来演变全都在潜空间里被揉在一起“算账”。
3.2 视觉编码器的选择与特征对齐
视觉编码器是整个架构的地基。按 JEPA 类工作的一贯做法,编码器通常是 ViT 结构的网络,在大量驾驶数据上做自监督预训练——训练任务就是“给定遮挡或历史帧,预测对应潜表示”。预训练完成后,它已经不是“图像分类器”,而是“状态提取器”。你给它一帧当前道路图像,它输出的是一个包含场景拓扑、可行驶区域、动态物体状态等多重信息的特征向量。
端到端训练时,编码器会跟后面的预测器、目标编码器一起更新。但有一个实操上很关键的地方:编码器的权重更新要小心控制学习率。我自己做类似项目时遇到过一个问题——编码器更新太快,特征空间变化剧烈,后面的动态预测器还没适应,训练直接发散。后来把编码器的学习率设为其他模块的 0.1~0.2 倍,稳定性好了很多。
目标编码和目标特征的对齐也很容易踩坑。如果目标是 GPS 坐标,它是纯数值信息,跟图像特征不在一个空间。你需要一个目标编码器,把它映射成和场景特征同维度的向量。常见做法是把坐标转成相对车辆的位置偏移,再拼接语义标签(比如“终点”“途经点”),通过一个 MLP 升维。如果这个目标特征和场景特征没有做空间对齐,预测器就很难把“目标”的信息和“场景”的信息结合起来。
3.3 潜空间预测器:如何预测“未来”
预测器是这个架构的核心,也是最需要在训练中调的部分。它要做的事情可以描述成:给定当前的状态特征, 和一个目标向量,输出一条未来状态特征序列。
具体做法上,常见的形式是:时间维度的 transformer decoder 或者 GRU。输入当前时刻的状态特征序列(过去若干帧的潜向量),加上目标向量作为条件,自回归地预测未来一个时间窗口内的状态特征。也可以借鉴 V-JEPA 里做时空掩码预测的方式,把“未来”当作“时间维度的掩码”,用可见的历史去预测未来被遮住的部分。
预测器的训练信号有两个来源。一个来源是自监督:如果场景后续时刻真实发生了,那么把真实特征和预测特征拉近,把随机采样的负样本特征推远。另一个来源是行为监督:把预测出来的潜状态解码成轨迹,和人工驾驶轨迹算距离误差。两者可以联合训练,也可以分阶段。按这类架构最常被实践的方案,是先在海量无标注数据上做第一阶段的潜空间预测预训练,再用小批量带轨迹标注的数据做第二阶段的规划头微调。
3.4 规划解码头:从潜状态到方向盘
预测器输出的潜状态序列,本身不能直接控制车。规划解码头负责把它翻译成物理世界的轨迹。解码目标通常是一系列路径点的横纵向坐标、航向角,再加上一个可选的每个时间步的速度。解码头的实现不需要很复杂,常见的是轻量 GRU decoder 或者几层 MLP,把每个潜状态向量映射成一个路径点。
这里有一个值得玩味的设计选择:为什么不直接让预测器输出控制量(方向盘转角 + 油门/刹车)?控制量是策略性的,一个潜状态可以对应多种合理的控制方式。轨迹则是中间表示,它保留了空间位置信息,方便做安全约束检查(比如碰撞检测),又不需要模型去负责低层次的车辆动力学控制。另外,从轨迹生成控制指令是传统控制理论很成熟的领域,直接用 MPC 或者 PID 跟车就行。这个分层让模型做它擅长的“意图预测”,控制交给确定性算法,整体稳定性会高很多——我在自建的仿真环境里对比过“直接学控制”和“先学轨迹再跟车”两种方案,后者的巡航稳定性和乘坐舒适度明显更好。
4. 零样本能力从哪来:目标条件设计、训练范式与泛化边界
4.1 让目标参与预测而不是参与分类
零样本目标条件驾驶的一个关键技术点,是目标信息的注入方式。很多目标条件模型会把目标作为“分类标签”一样的东西喂进去——模型学到的其实是一个条件分布,目标只是一个索引。这种设计泛化差,因为目标索引的每一个取值在训练时都要有足够的样本覆盖,没见过的“索引”自然没法用。
AD-E2E-JEPA 这类架构做的更像“目标作为连续条件参与未来状态预测”。给定目标位置 A,预测器要预测“去 A 需要经历的状态”;给定目标位置 B,预测器要预测“去 B 需要经历的状态”。关键在于,A 和 B 在潜空间里是相邻的,它们触发的预测既有共性(都是“朝目标方向前进”),又有差异(转向时机、速度曲线)。模型这样学到的就不只是“见过 A 就去 A”,而是“目标在右前方较远处 → 先直行再右转”这种规则化行为。连续目标空间的覆盖,让模型能插值到训练中没见过的目标位置,这是零样本能力的重要来源。
4.2 自监督预训练 + 行为对齐的分阶段范式
零样本能力不是凭空出现的。如果模型从来没学过“场景动态如何演变”,它不可能在未知场景里规划出合理行为。JEPA 框架的好处是,它可以在海量无标注驾驶视频上学习场景演变规律——今天这辆车的行驶方式、前方车辆如何变道、路口如何汇入,这些模式每天都在大量数据里重复出现。不需要人工标注轨迹,模型就能从视频序列中提取“世界如何运转”的知识。
具体到训练范式,比较通用(也是我认为最合理)的流程是:
- 在驾驶视频数据集上做潜空间自监督预训练:给定过去帧,预测未来帧的潜表示。
- 用少量带目标标注和轨迹标注的数据,联合微调预测器 + 规划解码头。
- 零样本测试:把模型放到没有出现在训练数据里的驾驶场景,输入目标,直接评估规划结果。
阶段一让模型学会通用场景动态,阶段二让模型学会“把场景动态和目标连接起来”。两者结合,才有零样本的迁移空间。如果你跳过阶段一,只用轨迹数据训练,模型在见过场景上表现可能不错,但一换场景就崩——因为它没学过通用场景动态规律。
4.3 与生成式策略的对比:扩散策略 vs 潜空间预测
最近业界很流行用扩散策略(Diffusion Policy)做驾驶决策,它学的是“行为的条件分布”,每个采样生成一个完整的动作轨迹。扩散策略的表达能力确实强,能建模多峰行为,但代价是推理时需要多次迭代去噪,实时性吃紧,而且在数据覆盖不到的行为区域,采样结果可能很随机。
潜空间预测的思路跟扩散策略有本质区别:它不生成行为分布,而是预测“达到目标所需的世界状态”。模型先回答“如果我要成功到达目标,接下来世界应该处于什么状态”,再从状态反解轨迹。这个方法天然更稳,因为世界状态是连续性很强的物理量,不像行为分布那样容易出现多峰跳变。我个人的判断是,扩散策略适合做决策的“多样性”探索,潜空间预测更适合做“目标导向的稳定规划”,两者并不互斥,但在零样本目标条件这个设定下,潜空间预测的优势更明显。
4.4 泛化边界:零样本不是什么都能处理
做工程的人都知道,没有银弹。零样本也不是真的全场景通吃。像 AD-E2E-JEPA 这类模型,有一个底线假设:视觉编码器能够把新场景映射到训练时见过的潜空间区域附近。
如果新场景的视觉特征跟训练分布严重偏离——比如训练数据全部在晴天白天,测试时突然下特大暴雨加夜间大雾,编码器提取的特征可能飘到从没去过的潜空间区域,后面的预测器和规划头完全没有应对经验,规划就会失效。所以做零样本目标条件规划,更多是追求“分布内的泛化”,而不是“分布外的奇迹”。在实际部署中,还是要配合一个 ODD(运行设计域)监测模块,发现特征分布异常时降级到保守策略或者请求人工接管。
5. 实操复盘:复现 AD-E2E-JEPA 类系统的关键设置
5.1 数据准备与序列构建
要复现这套架构,你首先得有一批驾驶视频或轨迹数据。数据不需要全部包含轨迹标注——因为阶段一的自监督预训练只需要视频序列。关键是把数据组织成“时间连续的片段”,一般每个训练片段 6~10 秒,帧率看算力决定,10Hz 是常见选择。
序列构建有个容易忽视的细节:既然训练任务是“未来状态预测”,每个序列的最后一段必须保留“上下文缓冲”。就是说,预测目标不能只拿最后一帧做条件,还要给它过去一段时间的状态作为上文。不然模型看到的只是静止快照,学不到物体的速度和加速度信息。我试过只用最后一帧做条件,模型对前方车辆的减速反应明显迟钝,加上 2 秒历史上下文之后就自然多了。
5.2 关键超参数与网络尺寸的取舍
从工程角度,我列几个最影响实际效果的超参:
- 潜空间维度:常见是 512~1024 维。太低会丢失必要信息,太高会引入稀疏性问题,预测器难以准确回归。建议先用 512,观察验证集性能再调整。
- 时间窗口:输入上下文 1~2 秒,预测未来 3~5 秒。预测时间太长,不确定性迅速增大,轨迹质量明显下降。
- 视觉编码器主干:不必一上来就堆最大规模的 ViT,可以从一个中等规模的骨干网络开始(比如基础的 ViT-B/S),把算力留给预测器做更长时间窗口的预测。
- 预测器中 transformer 层数:2~4 层往往已经够用,再多的层数在潜空间预测任务上收益很小,对实时性的伤害却很大。
- 行为监督的比例:如果阶段二用轨迹监督,建议把行为损失权重设置得大一些,自监督损失的权重要逐步衰减。
还有一个建议:预先设定一个普通 LSTM 编码器作为 baseline 模型一起训练,如果 JEPA 方案的性能打不过 baseline,说明问题大概率出在潜空间结构设计上而不是训练策略上。这个对比排查法比反复调参有效得多。
5.3 损失函数的设计模式
JEPA 类模型的训练,损失函数设计的核心是两句话:预测器输出的特征要和真实未来特征在语义上接近;接近程度的度量空间要合理。
具体来说,潜空间预测损失常用余弦相似度或者负的 InfoNCE 损失。负样本从当前 batch 的其他序列里采样就行。重要的是:目标向量必须参与损失的计算,也就是说模型不能只是预测“任意未来”,而要预测“朝向目标的未来”。这个条件在损失函数里的体现是,目标向量是预测器输入的一部分,真实未来特征和预测特征之间的距离是在目标条件下计算的。
行为监督部分就是传统的轨迹损失:预测轨迹和真实轨迹的 L1 或 L2 距离,可以加上航向角误差项。我自己会额外加一个软碰撞惩罚项——如果预测轨迹与障碍物标注框发生重叠,就施加惩罚。这个软惩罚比单纯轨迹准确率更能反映“能不能开”这个核心诉求。注意:碰撞惩罚要做得足够平滑,避免梯度突变把预测器带飞。
5.4 评估方法论:别只盯着开环指标
评估是复现这类项目最容易被误导的环节。最常见的做法是在测试集上计算轨迹预测误差——开环指标。开环指标的意义有限:它衡量的是“模型是否猜中了人类驾驶员当时的选择”,但在很多场景里,人类驾驶行为不是唯一合理的。测出来 L2 误差偏大,不代表模型规划的轨迹不能安全到达目标。
更接近真实价值的评估方式是闭环仿真:把模型放进模拟器里,只给初始位置和目标,让模型自己连续决策,看能不能在安全、舒适的前提下到达终点。开环指标做快速迭代筛选,闭环指标做最终验证,两者的结论要交叉确认。
我自己常用的流程是:先开环跑一遍,筛掉明显有问题的候选参数;剩下的候选参数再进闭环仿真,跑若干条不同场景的路线,统计成功率、碰撞率、平均到达时间。如果开环指标很漂亮但闭环成功率低,问题往往出在预测误差积累或者小扰动下的稳定性——这类问题靠盯开环指标是永远发现不了的。
6. 复现与落地中常见的坑和排查经验
6.1 潜空间维度选择不当导致“回归崩溃”
潜空间预测里的一个典型失败模式,是预测器输出“向均值回归”。也就是说,不管输入场景和目标如何,预测出来的未来潜状态都趋向于训练集的平均状态。表现就是:模型规划的轨迹永远是一条“平均行驶轨迹”——不转弯、不加速、谁都不惹——但也不去目标。
这个问题的根源通常是潜空间维度设置不合理或者特征没有归一化。我排查过几次,解决办法有两步:第一步,确保视觉编码器输出的特征经过了合适的归一化(比如 L2 归一化或者 LayerNorm);第二步,降低潜空间维度,让模型不必在一个过度冗余的空间里做精确回归。经过这两步,回归崩溃基本上能缓解。如果还不行,检查负样本采样难度——太容易区分的负样本会让预测器偷懒,学到的是“糊弄的区分技巧”而不是“真正的预测能力”。
6.2 目标表示不一致导致规划行为“精分”
目标条件模型还有一个高频问题:同一个目标,用稍微不同的方式表示,模型规划出来的轨迹差异很大。比如目标是“路口中心点”,你把它编码成相对坐标和绝对坐标,模型行为可能完全不同。这说明目标编码器没有和场景特征对齐。
解决方案比较直接:在训练时对目标做数据增强——给目标位置加入轻微噪声,把坐标在车辆坐标系和全局坐标系之间来回切换,甚至语义目标(“路口”“停车位”)和坐标目标(x, y, z)交替输入。迫使目标编码器学到目标的空间语义,而不是死记某一种表示格式。这个数据增强操作,我试下来是对目标条件稳定性提升最大的单个改动。
6.3 预测误差累积导致轨迹漂移
潜空间预测模型和很多自回归模型一样,存在误差累积问题:预测时间越长,误差越大,轨迹末段可能漂到马路边外面去。在驾驶场景里,这个问题尤其危险,因为规划不是单发制导,而是滚动执行的。每一帧都要重新规划,如果每帧的轨迹末段都偏向同一个(错误)方向,长期累积就会出现系统性偏移。
我采取过的有效措施是:
- 在训练时减少 teacher forcing 的比例。不要总是把真实历史特征喂给预测器,随机用模型自己的预测替代一部分,让预测器在训练时就暴露在自身误差下。
- 缩短预测时间窗口,从 5 秒降到 3 秒,轨迹末段的漂移量通常能显著下降。
- 规划解码头输出轨迹后,加一个轻量的轨迹平滑滤波器(譬如平方根速度平滑),抑制高频抖动的累积。
6.4 实时性瓶颈与工程化压缩
把 AD-E2E-JEPA 推向实车,最大的工程挑战是计算延迟。视觉编码器要处理多路相机输入,预测器要在每帧滚动运行,任何一环节超时,都直接影响控制周期。
工程化压缩有几个常用方向:
- 用蒸馏把大 ViT 变成小 ViT,直接在训练时就让学生模型对齐教师模型的潜空间输出,而不是单纯对齐最终轨迹,这样能保住更多中间层信息。
- 降低预测器运行频率。规划不需要每帧都全部重算,可以每 3~5 帧做一次完整预测,中间帧用上次的轨迹加上小幅补偿即可。
- 如果用的是 transformer 预测器,把 token pruning 用起来——已经判断为静态背景的 patch token 可以直接剪掉,不需要进入后续的 transformer 层计算。
6.5 自监督预训练阶段的坏样本问题
潜空间自监督预训练阶段,数据质量比数量更重要。驾驶视频里如果出现大量静止画面(红灯停车、堵车),模型很容易学到一个偏懒的预测器——“未来状态就是当前状态”。这不是模型学错了,是数据里静止场景太多了。
解决方法是做基于运动信息的样本筛选:帧差能量过低的片段直接丢弃或者降采样。我在经验中会把数据大致分成“高速巡航”“城市走走停停”“红绿灯静止”三类,控制它们在一个训练 batch 里的比例。这样模型既能学到动态场景的演变,又不会只学会“保持不动”,才能保证后续规划头微调时具有充足的行为多样性。
最后分享一点我自己的体会
这套架构真正打动我的地方,不是“零样本”这个酷炫的标签,而是它把做规划的思路从“模仿人类怎么开”扭转向“理解世界如何演化”。潜空间预测先让模型搞清楚“在这个场景里,继续这样开会发生什么”,再让它回答“要去目标,需要什么状态发生”,最后才是“那方向盘打多少,油门踩多少”。这种分层的决策逻辑,比直接端到端输出方向盘转角要可解释、可调试得多。
如果你正在做自动驾驶决策规划,我建议你不要急着照搬论文的全部细节,可以先做一个简化版的潜空间目标条件规划器:一个预训练过的视觉编码器,一个轻量预测器,一个简单的轨迹解码头,在开源驾驶数据上试试零样本跨场景评估。跑通之后,你就能直观感受到“特征空间预测”和“动作空间生成”在泛化表现上的差异。这种手感,比读一百篇论文有用。
最后再提一个我踩过的坑:任何时候改动目标编码方式,都必须重新评估整套系统,不要因为“只是换了目标的输入格式”就跳过闭环评估。我吃过这个亏——本以为目标编码方式跟规划质量没有关系,结果换了编码方式后,零样本场景的轨迹成功率掉了将近两成。目标条件系统里,目标就是规划的灵魂,灵魂换法了,身体所有部分都得重新检验。