☰
端到端自动驾驶规划新范式:基于JEPA的压缩潜空间与零样本目标条件规划
2026/10/17 4:00:38 网站建设 项目流程

1. 端到端自动驾驶规划到底难在哪

自动驾驶的端到端方案这两年热度一直居高不下,从最早的分模块流水线,到后来把感知、预测、规划塞进一个网络里联合训练,行业里试过的路子已经不少了。但真正做过这一块的人都知道,端到端规划有一个绕不开的坎:输入是高维的原始传感器数据,输出却是低维的、带强约束的驾驶动作序列。这两者之间的鸿沟,靠一个网络硬拟合,很容易出现两种极端——要么模型学会了偷懒,直接记住训练集里的轨迹分布,换一个场景就崩;要么模型对输入过于敏感,一点点噪声就让规划结果抖得不成样子。

这次要聊的这篇工作,思路挺有意思。它没有直接在原始观测空间里做规划,而是先把观测压缩到一个潜空间里,然后在这个潜空间里做目标条件的规划,并且强调零样本能力。标题里几个关键词拆开看:AD 是自动驾驶,E2E 是端到端,JEPA 是联合嵌入预测架构,零样本目标条件意味着模型在推理时可以根据一个指定的目标(比如“到达某个位置”“保持某条车道”)来生成规划,而不需要针对这个目标重新训练。

我第一眼看到这个标题时的直觉是:这套东西的核心价值不在于又刷了某个 benchmark,而在于它试图解决端到端规划里一个很实际的问题——如何让规划器具备可指定性,同时又不牺牲泛化。传统端到端模型训练完之后,你很难告诉它“这次你走左边那条路”,因为它学到的是一种隐式的、纠缠在一起的策略。而目标条件化,本质上是把“去哪”和“怎么去”解耦开,让规划器变成一个可以被外部指令引导的模块。

这篇文章适合谁看?如果你正在做自动驾驶规划、机器人导航、或者任何涉及序列决策的端到端学习项目,这套思路值得仔细拆。哪怕你不做驾驶,JEPA 这套“在潜空间里预测”的范式,在视频预测、世界模型构建里也有不少可借鉴的地方。下面我会从整体设计、核心细节、实操要点、常见坑几个角度,把这篇论文的思路掰开揉碎讲一遍,尽量让没读过原文的人也能抓住重点,让准备复现的人能少走弯路。

2. 整体设计思路拆解

2.1 为什么要在潜空间里做规划

先说一个最朴素的问题:为什么不在原始观测空间里直接做规划?答案其实很直接——原始观测空间太“大”了。一张前视摄像头图像,分辨率稍微高一点就是几百万个像素,而规划输出可能只是未来几秒内几十个航点。让一个网络从几百万维的输入直接映射到几十维的输出,中间的信息压缩比极其夸张,网络必须自己学会“哪些像素重要、哪些不重要”,这个学习过程非常吃数据,也非常吃算力。

潜空间规划的思路是:先用一个编码器把高维观测压成一个低维的、信息密度更高的表示,然后在这个表示上做预测和规划。这样做的好处有三点。第一,计算效率高,潜空间的维度通常比原始观测低一到两个数量级,规划头可以做得更轻。第二,表示更抽象,编码器可以把光照变化、纹理细节这些与规划无关的因素过滤掉,留下的是道路结构、障碍物位置、可通行区域这些真正影响决策的信息。第三,预测更稳定,在潜空间里做多步预测,误差累积的速度通常比在像素空间里慢,因为潜空间的动态更平滑。

但潜空间规划也有它自己的麻烦。最大的问题是:潜空间是学出来的,不是天然存在的。如果编码器学得不好,把关键信息丢了,那规划器再强也没用。所以这类方法的核心难点,往往不在规划头,而在表示学习。这篇工作用 JEPA 这套架构,本质上就是在解决“怎么学一个好的潜空间表示”这个问题。

2.2 JEPA 这套架构的核心逻辑

JEPA 的全称是 Joint Embedding Predictive Architecture,联合嵌入预测架构。名字听起来绕,但核心思想可以用一句话概括:不要预测原始数据,而是预测原始数据的嵌入表示。

举个例子。传统做法可能是:给定当前帧,预测下一帧的像素。这叫做生成式预测,模型需要把下一帧的每一个像素都画出来。但问题是,下一帧里很多像素其实是不确定的——树叶会不会动、云会不会飘、光照会不会变,这些细节对规划来说根本不重要,但生成式模型必须去拟合它们,导致大量容量浪费在无关细节上。

JEPA 的做法是:给定当前帧的嵌入,预测下一帧的嵌入。嵌入是一个抽象表示,它不需要保留所有细节,只需要保留对下游任务有用的信息。这样一来,模型就不用去纠结那些不可预测的细节,可以把容量集中在真正重要的动态上。这就像你开车时不会去记路边每一片树叶的位置,但你会记住前方有没有车、车道线在哪、红绿灯是什么颜色。

这篇工作把 JEPA 用在驾驶规划上,具体来说,它有一个上下文编码器负责把当前观测和历史观测压成潜表示,有一个目标编码器负责把目标(比如未来要到达的位置)压成潜表示,然后有一个预测器在潜空间里做条件预测,生成规划。整个架构是端到端训练的,但训练目标不是重建原始观测,而是在潜空间里做预测。

2.3 目标条件化是怎么实现的

目标条件化是这篇工作的另一个核心。所谓目标条件,就是模型在推理时接收一个额外的输入——目标,然后根据这个目标生成规划。这个目标可以是多种形式:一个未来的位置坐标、一条参考轨迹、一个语义描述(比如“靠右行驶”)、甚至是一张目标位置的图像。

实现方式通常有两种。一种是拼接式,把目标编码后和观测编码拼在一起,送进预测器。另一种是交叉注意力式,让预测器在生成规划时,通过注意力机制去查询目标表示。这篇工作具体用哪种,从标题里的“压缩潜空间”来看,大概率是在潜空间里做条件融合,因为如果在原始空间里拼,就失去了压缩的意义。

目标条件化的价值在于可指定性。传统端到端模型是一个黑盒,你给它观测,它给你一条轨迹,你没法干预。目标条件化之后,你可以通过改变目标输入来引导规划结果。这在实车部署时非常有用——比如你想让车靠边停车,或者想让它绕过某个施工区域,只需要改目标,不需要重新训练模型。

2.4 零样本能力从哪来

零样本是标题里最吸引眼球的一个词。所谓零样本,就是模型在推理时面对的目标或场景,在训练时没见过,但依然能生成合理的规划。这在驾驶里非常关键,因为长尾场景太多了,你不可能把所有情况都放进训练集。

零样本能力通常来自两个方面。一是表示的解耦,如果潜空间把“去哪”和“怎么去”分得很开,那么即使目标组合是新的,模型也能分别处理。二是预测器的泛化性,如果预测器学到的是潜空间里的一般动态规律,而不是死记硬背训练轨迹,那么面对新目标时它也能推出合理路径。

这篇工作强调“压缩潜空间”,我理解压缩在这里不只是为了省算力,更是为了强制解耦。潜空间维度越低,编码器越被迫丢弃无关信息,留下的表示就越接近决策所需的本质变量。这有点像主成分分析,你保留前几个主成分,往往就能抓住数据的主要变化方向。

3. 核心细节解析与实操要点

3.1 编码器设计的关键取舍

编码器是整个架构的地基。在驾驶场景里,输入通常包括前视摄像头、环视摄像头、激光雷达点云、毫米波雷达、IMU、GPS 等多模态数据。编码器要做的,是把这些异构数据压成一个统一的潜表示。

这里有几个关键取舍。第一,是共享编码器还是独立编码器。共享编码器把所有模态映射到同一个潜空间,好处是融合早、信息交互充分,坏处是不同模态的统计特性差异大,共享权重可能学不好。独立编码器每个模态一个编码器,最后再融合,好处是各自学各自的,坏处是融合层可能成为瓶颈。这篇工作从标题看,大概率是独立编码加潜空间融合,因为“压缩潜空间”暗示有一个统一的低维表示。

第二,压缩比怎么定。潜空间维度太高,压缩不够,规划器还是难学;维度太低,信息丢太多,规划器拿不到足够信息。常见的做法是先设一个较大的维度(比如 256 或 512),然后通过正则化或者信息瓶颈来间接控制有效维度。实操中我建议从 256 起步,如果规划效果不好再往上加,如果过拟合严重再往下减。

第三,时序信息怎么处理。驾驶是一个时序决策问题,当前帧不够,还需要历史信息来判断他车意图、估计自车运动。常见做法是用循环网络或者时序 Transformer 来编码历史。这里要注意的是,时序编码器的输出维度要和单帧编码器对齐,否则融合时会出问题。

提示:编码器训练时容易出现的坑是“表示坍缩”,也就是所有输入都被映射到潜空间里同一个点附近。JEPA 类方法通常用停止梯度、动量编码器、或者对比学习来避免这个问题。如果你复现时发现潜表示方差很小,优先检查这几个机制。

3.2 潜空间预测器的结构选择

预测器是真正做规划的部分。它的输入是上下文潜表示和目标潜表示,输出是未来规划的潜表示或者直接是动作序列。结构上通常有两种选择:自回归式和一次性式。

自回归式是每一步预测下一步,然后把预测结果作为输入继续预测。好处是灵活,可以生成任意长度的规划;坏处是误差累积,步数一多就飘。一次性式是一次性输出整条规划,好处是没有累积误差,坏处是输出长度固定,且难以处理变长规划。

这篇工作从“规划”这个任务来看,大概率用的是一次性式或者固定长度的自回归。实操中我建议先用一次性式,因为驾驶规划通常只需要未来 3 到 5 秒的轨迹,长度固定,一次性输出更稳定。如果要做更长的规划,再考虑自回归加某种校正机制。

预测器的容量也要注意。潜空间维度低,预测器不需要太大,通常几层 MLP 或者轻量 Transformer 就够了。我见过一些复现工作把预测器做得很大,结果过拟合严重,泛化反而差。记住一个原则:潜空间已经做了大部分压缩工作,预测器只需要学潜空间里的动态,不需要再学一遍表示。

3.3 目标表示的构造方式

目标条件化的效果,很大程度上取决于目标表示怎么构造。常见的目标形式有几种。

第一种是位置目标,用一个未来时刻的坐标表示。这种目标最直接,但信息量少,模型需要自己推断从当前位置到目标位置的路径。第二种是轨迹目标,用一条参考轨迹表示。这种目标信息量大,但要求推理时能提供一条合理的参考轨迹,实际部署时可能拿不到。第三种是语义目标,用自然语言或者离散指令表示,比如“左转”“靠边”。这种目标最灵活,但需要额外的语义编码器,且语义和规划之间的映射可能很模糊。

这篇工作从标题看,应该是位置目标或者轨迹目标,因为“目标条件驾驶规划”通常指到达某个目标点。实操中我建议先用位置目标,因为最容易构造,也最容易评估。如果效果不够,再考虑加入轨迹目标作为辅助。

目标编码器的结构和上下文编码器可以共享,也可以独立。共享的好处是目标表示和上下文表示在同一个空间里,预测器做条件融合时更自然。独立的好处是目标编码器可以针对目标的特点设计,比如位置目标可能只需要一个简单的 MLP,不需要复杂的卷积网络。

3.4 训练目标的设计与损失函数

训练目标是整个方法能不能 work 的关键。JEPA 类方法的训练目标通常包括两部分:潜空间预测损失和正则化损失。

潜空间预测损失是让预测器输出的潜表示尽可能接近真实未来潜表示。这里要注意的是,真实未来潜表示通常由目标编码器或者一个动量编码器生成,而不是由上下文编码器生成。用动量编码器是为了避免表示坍缩,因为如果上下文编码器和目标编码器是同一个,模型可以偷懒把所有东西映射到同一个点,预测损失就变成零了。

正则化损失通常包括方差正则、协方差正则、或者对比损失。方差正则让潜表示的每个维度都有足够的方差,协方差正则让不同维度之间尽量不相关,对比损失让不同样本的表示尽量分开。这些正则化手段的目的都是让潜空间更有信息量,避免坍缩。

实操中我建议先用方差正则加协方差正则,这是比较稳的组合。对比损失虽然效果好,但需要精心设计正负样本,调参成本高。如果发现潜表示坍缩,优先加大方差正则的权重。

注意:训练时不要只盯着预测损失下降,还要监控潜表示的统计量。如果潜表示的方差持续下降,说明模型在坍缩,这时候预测损失再低也没用,因为表示已经没信息了。

4. 实操过程与核心环节实现

4.1 数据准备与预处理

驾驶数据通常来自实车采集或者仿真环境。实车数据真实但标注成本高,仿真数据标注容易但存在域差距。这篇工作如果强调零样本,大概率用了仿真数据做训练,然后在实车或者新场景上做零样本测试。

数据预处理的关键步骤包括:时间对齐,把不同传感器的数据对齐到同一时间戳;空间对齐,把不同坐标系下的数据统一到自车坐标系;归一化,把不同量纲的数据缩放到相近范围。时间对齐和空间对齐是驾驶数据预处理里最容易出问题的地方,如果对齐没做好,后面模型再强也学不出正确的东西。

我踩过的一个坑是:不同传感器的采样频率不一样,摄像头 30Hz,激光雷达 10Hz,IMU 100Hz。如果直接按摄像头的时间戳对齐,激光雷达和 IMU 的数据会有插值误差。正确做法是先统一到最高频率,然后做时间插值,或者用每个传感器自己的时间戳做异步融合。

4.2 模型搭建与参数配置

模型搭建可以分成四个模块:上下文编码器、目标编码器、预测器、规划头。上下文编码器负责编码历史和当前观测,目标编码器负责编码目标,预测器在潜空间里做条件预测,规划头把预测的潜表示解码成具体的动作或者轨迹。

参数配置上,我建议从以下配置起步:潜空间维度 256,上下文编码器用 ResNet-18 或者轻量 Transformer,目标编码器用 2 层 MLP,预测器用 4 层 Transformer,规划头用 2 层 MLP。学习率用 1e-4 到 3e-4,batch size 用 64 到 256,具体看显存。

训练时要注意的是,编码器和预测器的学习率可以不一样。编码器通常需要更小的学习率,因为表示学习比较敏感;预测器可以用大一点的学习率,因为它的任务相对简单。我通常把编码器学习率设成预测器的一半。

4.3 训练流程与关键代码片段

训练流程大致是:采样一个 batch 的观测序列和目标,用上下文编码器编码观测,用目标编码器编码目标,用预测器做条件预测,计算损失,反向传播。

下面是一个简化的 PyTorch 风格伪代码,展示核心逻辑:

# 上下文编码 context = context_encoder(observations) # [B, T, D] context = context.mean(dim=1) # 时序聚合,[B, D] # 目标编码 goal = goal_encoder(goal_input) # [B, D] # 潜空间条件预测 pred = predictor(context, goal) # [B, D] # 真实未来潜表示(用动量编码器生成) with torch.no_grad(): target = momentum_encoder(future_observations) # [B, D] # 预测损失 pred_loss = F.mse_loss(pred, target) # 正则化损失 var_loss = variance_regularizer(context) cov_loss = covariance_regularizer(context) # 总损失 loss = pred_loss + lambda_var * var_loss + lambda_cov * cov_loss

这里的关键点是动量编码器。动量编码器的参数不是通过梯度更新的,而是通过指数移动平均从上下文编码器更新过来的。这样做是为了让目标表示更稳定,避免上下文编码器和目标编码器一起“作弊”把表示坍缩掉。

4.4 推理与零样本测试

推理时,模型接收当前观测和一个目标,输出规划。零样本测试的意思是,目标或者场景在训练时没见过。比如训练时只见过直行和左转,测试时给一个右转目标,看模型能不能生成合理的右转规划。

零样本测试的关键是评估指标的设计。不能只看规划是否到达目标,还要看规划是否安全、是否平滑、是否符合交通规则。常见的评估指标包括:到达目标的成功率、碰撞率、轨迹平滑度、与专家轨迹的偏差。

我建议在零样本测试时,把目标分成几类:同分布目标(训练时见过的目标类型)、插值目标(训练目标之间的组合)、外推目标(训练目标之外的目标)。分别评估这三类,能更清楚地看出模型的泛化边界。

提示:零样本测试时不要只测成功案例,要专门构造一些困难目标,比如目标在障碍物后面、目标需要掉头、目标在狭窄路段。这些才是真正考验泛化能力的地方。

5. 常见问题与排查技巧实录

5.1 潜表示坍缩怎么排查

潜表示坍缩是 JEPA 类方法最常见的问题。表现是:预测损失很低,但下游规划效果很差。原因是编码器把所有输入都映射到潜空间里同一个点附近,预测器只需要输出这个点就能让损失很低,但实际上没有学到任何有用的表示。

排查方法:计算潜表示的方差。如果方差接近零,说明坍缩了。也可以可视化潜表示,用 t-SNE 或者 PCA 降到二维,看不同样本的表示是不是挤在一起。

解决方法:加大方差正则的权重,或者引入对比损失,或者用动量编码器。如果这些都不管用,可能是编码器容量太大,试着减小编码器或者降低潜空间维度。

5.2 规划结果抖动怎么处理

规划结果抖动是指相邻时刻的规划输出变化很大,不够平滑。这在端到端模型里很常见,因为模型对输入的微小变化很敏感。

处理方法有几种。一是时序平滑,对规划输出做低通滤波,或者用滑动平均。二是时序一致性损失,在训练时加入一项,惩罚相邻时刻规划输出的差异。三是输入时序编码,让编码器看到历史信息,这样输出自然会更平滑。

我通常先用时序平滑,因为最简单,不需要重新训练。如果平滑后还是抖,再考虑加一致性损失。

5.3 目标条件不生效怎么办

目标条件不生效是指:改变目标输入,规划输出几乎不变。这说明模型没有真正利用目标信息,而是忽略了目标,只根据观测生成规划。

排查方法:做消融实验,把目标输入换成随机噪声,看规划输出有没有变化。如果没变化,说明目标没被用上。

解决方法:检查目标编码器和预测器的连接方式。如果是拼接式,检查拼接后目标表示的维度是不是被观测表示淹没了。如果是交叉注意力式,检查注意力权重是不是都集中在观测上。另外,训练时可以加入目标扰动,强制模型学会利用目标。

5.4 常见问题速查表

问题现象可能原因排查方法解决方向
预测损失低但规划效果差潜表示坍缩计算潜表示方差加大方差正则,用动量编码器
规划结果抖动模型对输入敏感可视化相邻时刻输出时序平滑,加一致性损失
目标条件不生效目标信息被忽略替换目标为噪声看输出检查融合方式,加目标扰动
零样本效果差表示解耦不充分分析潜空间维度相关性降低潜空间维度,加解耦正则
训练不稳定学习率过大或正则过强监控损失曲线降低学习率,调整正则权重

5.5 独家避坑经验

第一个坑是过度追求低维潜空间。压缩是好,但压得太狠会把关键信息丢掉。我试过把潜空间压到 32 维,结果规划器连车道线都分不清。后来加到 256 维,效果明显好转。压缩比要适度,不是越低越好。

第二个坑是忽略时序对齐。驾驶数据里不同传感器的时序对齐非常重要,如果对齐有偏差,模型学到的动态就是错的。我建议在预处理阶段花足够时间做时序对齐,并且用可视化工具检查对齐效果。

第三个坑是零样本测试集构造不合理。如果测试集里的“新目标”其实和训练集里的目标很接近,那零样本效果会虚高。构造测试集时要确保新目标和训练目标有本质区别,比如训练只有直行和左转,测试用掉头。

第四个坑是评估指标单一。只看到达成功率不够,还要看安全性、平滑度、舒适度。我见过一些模型到达率很高,但轨迹很激进,坐起来很不舒服。评估要全面。

6. 这套思路还能怎么扩展

这套“压缩潜空间加目标条件规划”的框架,其实不限于驾驶。任何涉及“从高维观测生成低维动作序列”的任务,都可以套这个思路。比如机器人操作,观测是摄像头图像,动作是机械臂关节角度,目标可以是“抓取某个物体”。比如无人机导航,观测是视觉和 IMU,动作是油门和舵面,目标可以是“飞到某个坐标”。

扩展时要注意的是,不同任务的潜空间动态不一样。驾驶的动态相对平滑,因为车不会瞬间改变方向;机器人操作的动态可能更剧烈,因为机械臂可以快速启停。所以预测器的结构和正则化强度需要针对任务调整。

另一个扩展方向是多目标条件。当前工作主要是单目标,如果同时给多个目标,比如“到达某地并且保持低能耗”,模型能不能处理?这需要目标表示支持组合,预测器支持多条件融合。技术上可行,但训练难度会上升。

还有一个方向是在线适应。零样本是在训练后直接测试,如果允许模型在测试时用少量数据微调,效果可能会更好。这涉及到元学习或者在线学习的框架,是另一个值得探索的方向。

我个人在实际操作中的体会是,这套方法的核心竞争力在于表示学习,而不是规划头。规划头可以换,编码器才是关键。如果你要复现或者改进,优先把精力花在编码器和潜空间正则化上,规划头用最简单的结构就行。另外,零样本能力不是免费的,它需要训练时就有足够的多样性和解耦约束,如果训练集太单一,零样本就是空中楼阁。最后分享一个小技巧:训练时可以用目标扰动作为数据增强,随机替换一部分目标,强制模型学会区分不同目标,这对提升零样本能力很有帮助。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询