论文:AutoVLA-D: Learn a Trajectory-Geometric Condition from Reasoning for Autonomous Driving VLA
作者:Yuguang Yang, Zhewen Tan, Canyu Chen等
单位:北航、清华、滴滴等
Arxiv:2611.12382

自动驾驶的端到端大模型最近有个很火的方向,叫VLA(Vision-Language-Action,视觉-语言-动作)规划。它的玩法很像现在的大语言模型:给模型喂一张前视相机图像,再给一句驾驶指令,比如“左转”“保持车道”,模型就沿着next-token(下一个词元)的接口,先吐出一段驾驶推理,再解码出未来几秒的自车轨迹。这条“输入-推理-轨迹”的链路,已经被不少工作证明能跑通闭环驾驶。

要理解这篇论文,得先看看自动驾驶规划是怎么一路走过来的。最早的一批端到端方法,比如ST-P3、VAD、UniAD、DiffusionDrive、SparseDrive,基本是把传感器观测直接映射到未来轨迹,不怎么用语言。后来视觉语言模型(VLM)起来了,大家发现语言能带来很强的语义知识,于是出现两条路线:一类是把VLM当特征提取器或语义推理器,外面再套一个规划器或动作头,比如ReCogDrive、ImagiDrive-S、DriveVLA-W0、FLARE;另一类更激进,叫自回归VLA,直接让大模型通过next-token接口预测路点序列或动作词元序列,代表工作有EMMA、OpenEMMA、OpenDriveVLA、AutoVLA、AdaThinkDrive、Curious-VLA、ELF-VLA。

但这类自回归方法一直有个别扭的地方。传统VLA planner最后直接预测的是连续轨迹——也就是把未来每个时刻的自车位置、横向偏移和朝向,当成一串数值文本词元(waypoint token)往外吐。可驾驶指令描述的往往是“让行”“保持”“转弯”这种动作,而不是某一个具体的自车坐标。换句话说,语言指令和最终要回归的连续轨迹之间存在一道“表述鸿沟(formulation gap)”。举一个生活里的类比:你让一个人“左转”,他脑子里先浮现的是“往左打方向”这个动作,而不是直接算出脚下每一步的精确经纬度。模型也面临同样的尴尬——你让它把“左转”直接映射成一长串精确坐标,这件事本身就很难。

顺着这个思路,自动驾驶VLA其实可以分成两类轨迹表示。一类叫连续轨迹,把未来自车状态(相对当前自车系的x、y位置和朝向)序列化成数值文本路点;另一类叫离散轨迹,把每一步的局部运动(状态转移)表示成离散动作词元,靠时间上累加积分还原出轨迹。两种表示各有长短:离散动作在把连续轨迹离散化时免不了重建误差,论文里试了K-Means、K-Disks、Brohan多种离散化,发现直接回归离散轨迹始终比直接回归连续轨迹弱;但驾驶指令偏偏描述的是“让行”“转弯”这类局部运动变化,天然和离散动作词元对齐。于是就出现了这道表述鸿沟:指令直接映射到最终连续轨迹时,二者对不上。

这篇由清华AIR、北航、滴滴等团队完成的NeurIPS 2026论文AutoVLA-D,想了个很巧妙的解法。它的核心一句话是:不要把离散动作当最终答案,而是把它当成一道“轨迹几何条件(TrajCond)”,先让模型预测一个离散轨迹,再用这个离散轨迹去“条件化”最终的连续轨迹预测。因为模型同时还要自回归地生成离散token和数值token,所以他们把方法命名为AutoVLA-D(Double,双轨)。

一、总流程:两阶段,先学条件再出轨迹

先看总体流程(图1)。AutoVLA-D是一个两阶段训练的VLA planner,整个模型还是同一个多模态大模型的自回归词元解码器,只是在两个阶段喂进来的“目标”不一样。这一点很关键:它不是训练两个完全不同的模型,而是同一个模型先后学两件事。

在这里插入图片描述

第一阶段(Stage-1:学TrajCond语义)之所以需要单独预热,是因为他们新造的这套动作词表,一开始没有任何和VLA任务相关的初始化语义。所以第一阶段只拿视觉和语言上下文(图像o+指令ℓ)做输入,让模型输出离散的动作词元序列a,相当于先把“动作语言”学会。你可以把它理解成:在正式规划之前,先让模型把“接下来大概该怎么动”用一套离散动作词讲一遍。

第二阶段(Stage-2:在TrajCond条件下预测)才把第一阶段学到的离散轨迹a,连同图像和指令一起,作为上下文输入,去回归最终的连续轨迹w。注意这里的输出顺序是a→w:先出离散轨迹,再出连续轨迹。训练时用teacher forcing(教师强制),动作词元拿真实轨迹来监督;但真正推理时是完完全全自回归的——模型先自己预测TrajCond动作轨迹,再基于它预测最终连续轨迹。这样设计的好处是:最终输出仍然留在表达能力更强的连续空间,而离散条件负责把“动作导向”的信息传进去。

任务形式可以写成下面这组式子。普通VLA直接预测最终轨迹:

τ=fVLA(o,ℓ) \tau = f_{\text{VLA}}(o,\ell) τ=fVLA​(o,ℓ)

而AutoVLA-D把同一个模型拆成两个阶段来训:

a=fVLA(1)(o,ℓ),τ=fVLA(2)(o,ℓ,a),fVLA(2)←fVLA(1) a = f^{(1)}_{\text{VLA}}(o,\ell),\qquad \tau = f^{(2)}_{\text{VLA}}(o,\ell,a),\qquad f^{(2)}_{\text{VLA}} \leftarrow f^{(1)}_{\text{VLA}} a=fVLA(1)​(o,ℓ),τ=fVLA(2)​(o,ℓ,a),fVLA(2)​←fVLA(1)​

这里上标不是两套架构,而是两个训练阶段;第二阶段模型从第一阶段初始化后再接着训。连续轨迹这边沿用Curious-VLA的做法,把每个时刻的状态做逐步归一化,写成归一化文本路点:

τ~t=τt−μtσt,τ^t=τ~^tσt+μt \tilde{\tau}_t = \frac{\tau_t-\mu_t}{\sigma_t},\qquad \hat{\tau}_t = \hat{\tilde{\tau}}_t\sigma_t + \mu_t τ~t​=σt​τt​−μt​​,τ^t​=τ~^t​σt​+μt​

其中(µ_t,σ_t)是从训练集估出来的逐时刻统计量。TrajCond要做的,就是在这道“动作语义”和“连续自车状态”之间架一座桥。

把这套流程的精髓拆开看,三件事最重要:

  • 离散轨迹不当最终答案,只当中间条件,最终输出仍留在表达能力更强的连续空间。
  • 同一个大模型分两阶段来训,先暖TrajCond语义,再在条件之上拟合连续轨迹。
  • 训练和推理解耦:训练用教师强制监督动作词元,推理时则是完全自回归。

二、TrajCond怎么来:1D-Brohan离散化

那么TrajCond这道条件具体怎么来?一个好条件得满足两件事:能用离散词元预测,又要保留足够几何信息去指导连续规划。作者从轨迹“差分”入手——差分天然记录了局部运动变化,又能用很紧凑的离散词表表达。

动作词表的构造是这篇方法最讲究的地方。以往工作(比如AutoVLA)常用K-Means或K-Disks,把(Δx,Δy,Δθ)这个三维联合运动向量聚类成一个共享码本,每个时刻用一个动作词元表示一次3自由度局部运动。但作者发现,这种聚类码本在训练集和测试集之间会出现明显的重建误差鸿沟——因为聚类中心是拟合训练轨迹得到的,碰到没见过的运动形态就偏了。

所以他们改用RT-2里那种按维度线性离散的策略,起名叫1D-Brohan:对x、y、θ三个自由度各单独建一个码本,每个词元只表示1自由度的局部运动,一步的三个词元合起来才描述一次3自由度局部转移。具体做法:在每个维度上取训练集的第1和第99分位数作为离散区间,再均匀切成Q_i个bin,总词表大小Q=ΣQ_i。论文最终选了Q=768(每个自由度256个bin)。相比共享码本,这种“每个维度一根轴”的设计更不容易过拟合,泛化更稳。

关键一步是差分要在“局部坐标系”下算,而不是死守一个全局静止坐标系。从t−1到t的运动,要用t−1时刻的局部坐标系来刻画,通过一个平面旋转变换把全局位移旋进局部系:

δt=(Δxt,Δyt,Δθt),Δθt=θt−θt−1 \delta_t = (\Delta x_t,\Delta y_t,\Delta\theta_t),\quad \Delta\theta_t = \theta_t-\theta_{t-1} δt​=(Δxt​,Δyt​,Δθt​),Δθt​=θt​−θt−1​

[ΔxtΔyt]=R(−θt−1)[xt−xt−1yt−yt−1],R(θ)=[cos⁡θ−sin⁡θsin⁡θcos⁡θ] \begin{bmatrix}\Delta x_t\\ \Delta y_t\end{bmatrix} = R(-\theta_{t-1})\begin{bmatrix}x_t-x_{t-1}\\ y_t-y_{t-1}\end{bmatrix},\quad R(\theta)=\begin{bmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{bmatrix} [Δxt​Δyt​​]=R(−θt−1​)[xt​−xt−1​yt​−yt−1​​],R(θ)=[cosθsinθ​−sinθcosθ​]

在这里插入图片描述

为什么非要用局部坐标系?因为驾驶决策关心的是“相对我现在朝哪,我该往哪个方向挪一步”,而不是“相对起点我绝对在哪儿”。在每一步的局部系下描述差分,动作词元才真正和“转向”“加速”这种局部运动对齐,也才接得住语言指令里的动作语义。

这一点和机器人的相对位姿变换是一个道理。人的驾驶直觉本来就是相对的:前方路口要左转,你不会去算自己离路口原点的绝对坐标,而是看车头朝哪、该打多少方向。把差分放在每一步的局部系里,动作词元学的就是这种“相对该往哪挪”的局部增量,既贴近指令语义,又不会被全局坐标的尺度差异带偏。

有了差分轨迹,下一步是把它量化成离散动作。对每个时刻,从三个码本各挑一个bin中心组成一个候选三元组k=(k_1,k_2,k_3),在t−1时刻已量化的位姿上“渲染”出候选下一状态,再和真实下一状态比“角点距离(corner distance)”,选最小的那个:

τˉt(k)=τ^t−1+(R(θ^t−1)xk1, yk2),θˉt(k)=θ^t−1+θk3 \bar{\tau}_t(k) = \hat{\tau}_{t-1} + \big(R(\hat{\theta}_{t-1})x_{k_1},\, y_{k_2}\big),\qquad \bar{\theta}_t(k) = \hat{\theta}_{t-1}+\theta_{k_3} τˉt​(k)=τ^t−1​+(R(θ^t−1​)xk1​​,yk2​​),θˉt​(k)=θ^t−1​+θk3​​

kt∗=arg⁡min⁡k  dcorner ⁣(τˉt(k), (xt,yt,θt)) k^*_t = \underset{k}{\arg\min}\; d_{\text{corner}}\!\big(\bar{\tau}_t(k),\,(x_t,y_t,\theta_t)\big) kt∗​=kargmin​dcorner​(τˉt​(k),(xt​,yt​,θt​))

因为三个码本是分开的,穷举会有Q³量级候选,作者先在每个自由度取残差最小的4个词元,枚举4×4×4=64个候选,再选角点误差最小的。这样一条连续轨迹就被转成了一串局部动作分量,既紧凑又能保留几何形状。

三、训练目标:干净的自回归交叉熵

训练目标也很干净。两个阶段都用监督微调(SFT),损失就是自回归词元的交叉熵。

第一阶段只预测动作词元:

Lstage1=−∑t=1Tlog⁡P(at∣o,ℓ,a<t) \mathcal{L}_{\text{stage1}} = -\sum_{t=1}^{T}\log P(a_t\mid o,\ell,a_{<t}) Lstage1​=−t=1∑T​logP(at​∣o,ℓ,a<t​)

第二阶段同时优化动作词元和最终路点词元,输出顺序是a→w:

Lstage2=−∑t=1Tlog⁡P(at∣o,ℓ,a<t)  −  ∑t=1Tlog⁡P(wt∣o,ℓ,a,w<t) \mathcal{L}_{\text{stage2}} = -\sum_{t=1}^{T}\log P(a_t\mid o,\ell,a_{<t}) \;-\; \sum_{t=1}^{T}\log P(w_t\mid o,\ell,a,w_{<t}) Lstage2​=−t=1∑T​logP(at​∣o,ℓ,a<t​)−t=1∑T​logP(wt​∣o,ℓ,a,w<t​)

这种“两段式”的目标把“条件学习”和“最终轨迹预测”彻底分开:第一阶段只管把TrajCond的语义暖起来,第二阶段才在条件之上拟合连续轨迹。

对于NAVSIM,作者还额外引入CoT(思维链)推理,用Qwen3-VL-235B给数据打推理标签,输出顺序变成r→a(阶段一)和a→r→w(阶段二),并在第三阶段用GRPO做强化微调(RFT)。为了公平对比,nuScenes和NeuroNCAP只用阶段一、阶段二的SFT,不挂CoT推理。

四、关键发现:离散弱在直接输出,强在当条件

这里有个反直觉但很重要的结论,值得单拎出来说。如(图3)所示,直接把离散轨迹当最终自回归输出,不管哪种离散化策略,都比直接回归连续轨迹弱;可一旦把离散轨迹当成TrajCond条件,它反而比“用连续轨迹当条件”更有效,而且稳定地提升了最终连续轨迹预测。也就是说,AutoVLA-D的收益不是来自“蒸馏”离散轨迹,而是来自“把离散轨迹当条件”。在这几种离散化里,1D-Brohan不仅重建误差最低,训练-测试误差鸿沟也最小,所以成了默认表示。
在这里插入图片描述

这条结论其实回答了一个方法设计上的根本问题:既然离散轨迹当输出不如连续轨迹,那为什么要费劲做离散化?答案是——它的价值不在“当答案”,而在“当条件”。离散动作天然和“让行、左转”这类指令对齐,拿它做中间条件,等于把语言里的动作语义提前喂进规划过程,比直接硬解连续坐标顺畅得多。

举个直觉上的例子:同样是“前方有车要减速让行”,连续轨迹要精确给出每一帧的速度和位置,模型很难从文字直接对齐;而离散轨迹可以先给出“减速、保持车道”这样的动作序列,把意图显式地摆在规划之前,后续拟合连续坐标时就有了明确的锚点。这就是为什么“当条件”比“当答案”更顺。

五、实验结果:三个基准全面领先

实验在NAVSIM navtest、nuScenes和NeuroNCAP三个基准上做。NAVSIM navtest是大规模非反应式闭环仿真,表1给出PDMS指标,AutoVLA-D拿到92.0,超过了之前一众VLA planner(如Curious-VLA的90.3、FLARE的91.4)。表2在更严格、修复了bug的EPDMS指标下,AutoVLA-D拿到86.8,也优于Curious-VLA的85.3。值得一提的是,AutoVLA-D用的基础模型只是Qwen3-VL-4B,参数量并不大,却刷到了SOTA,说明方法本身带来的增益很实在。更关键的是,这种增益和模型规模是解耦的——小模型只要配上对的轨迹条件,就能逼近甚至超过更大模型直接出坐标的结果,性价比相当高。

在这里插入图片描述

表5把性能提升的路径拆得很清楚:从纯连续轨迹回归,到加上TrajCond条件,再到拆成两阶段,最后加RFT,每一步都有增益。一个单阶段的Brohan TrajCond已经比直接连续基线强(C < B-TC(1)),再拆两阶段又进一步提升(B-TC(1) < B-TC)。这条曲线也再次说明:Brohan作为直接输出目标时弱(B<C),作为中间条件时强(B<C<B-TC)。

在这里插入图片描述

闭环结果还显示,TrajCond对“碰撞相关”的行为改善最明显。图2聚焦No Collisions(不碰撞)和Drivable Area Compliance(可行驶区合规)两类指标:在高层意图已经判断对的情况下,TrajCond能给出更精准的局部控制,避开容易撞的运动。三个高层意图(直行、左转、右转)下,TrajCond把NC×DAC失败率分别降了33.6%、27.6%、42.2%。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在nuScenes(开环)上,TrajCond在ST-P3和UniAD两套指标下都优于去掉它的变体;论文还指出nuScenes的L2误差已经在约0.30米的水平上饱和,区分度不高,反倒是碰撞率更能拉开差距。在NeuroNCAP(闭环)上,TrajCond同样提升了闭环安全性、降低了碰撞率。去掉TrajCond或换backbone都会掉点,说明TrajCond不是只在NAVSIM上成立的特例,而是普遍提升安全攸关的自车控制。

六、语义分析:TrajCond学到的是“意义”而非纯几何

最后一个有意思的问题:TrajCond学到的到底是纯几何,还是真的吸进了语义?作者做了t-SNE可视化(图4)。他们从CoT推理的元行为里提取“运动方向”和“速度行为”两类标签,给隐状态上色。左图按指令运动方向上色,右图按速度行为(保持、减速、加速)上色,t-SNE结构里清晰地出现了不同运动类型之间的边界。更有意思的是,同一动作类别内部的样本并没有塌缩成一个点,而是有相当大的散布——这说明TrajCond捕捉到了超越单纯动作标签的丰富语义变化。
在这里插入图片描述

论文还做了一组“暂停词(pause token)”对照来进一步坐实这一点。他们把动作词元或推理词元替换成只占位、不含意义的pause token,再看最终连续轨迹的困惑度(perplexity)变化。结果在NAVSIM阶段二上,无论替换动作词元还是推理词元,困惑度都会上升,而替换推理带来的退化最大;在阶段一上替换推理也会让TrajCond本身的预测变不确定。这说明TrajCond和推理都在降低轨迹解码的不确定性,而且TrajCond确实是一道“有语义的轨迹几何条件”,不是单纯的几何辅助信号。

还有一个容易被忽略的细节:TrajCond这种“有语义的几何条件”,和单纯把推理文本再灌一遍是两回事。论文的暂停词实验里,即便在第二阶段拿掉显式推理、只靠TrajCond,性能依然比完全回到纯连续回归更好,说明一旦动作语义被吸收进TrajCond,它比在阶段二重新读一遍推理文本,给出的指导更干净。

七、结论与启发

论文的结论可以总结成三句话:第一,直接回归离散轨迹就是比直接回归连续轨迹弱;第二,一旦把离散轨迹当TrajCond,它就比连续轨迹条件更有效,且稳定提升最终连续预测;第三,这份增益来自TrajCond吸收了有用的规划语义,而不是靠额外的辅助损失或输出长度。

对做自动驾驶VLA的同学,这篇的启发很实在:语言指令描述的是“动作”,而模型最终要输出的是“坐标”,中间这道鸿沟,不一定非要硬填,也可以像AutoVLA-D这样,先让模型学会用一套离散“动作语言”把意图讲清楚,再去条件化连续规划。从工程角度看,它和当前主流“直接出坐标”的路线是互补的,改动也相对轻量——主要是在词表和数据构造上加一道离散轨迹,再按两阶段训练。

当然它也有代价:中间多了一道轨迹条件,会多出解码和训练成本,而且一些低频动作词元可能学得不够好——这是后续可以接着优化的点。总体而言,AutoVLA-D用一个很优雅的“离散当条件、连续当答案”的思路,给自动驾驶VLA怎么更好地吃进语言指令,提供了一个值得复现和借鉴的新范式。

站在工程落地角度,这篇还顺手给了三点提醒:

  • 词表是方法的核心资产,1D-Brohan这种“每维一根轴”的设计比共享聚类码本更稳,值得在自研动作词表时优先考虑。
  • 两阶段训练把“条件学习”和“轨迹预测”解耦,调试时可以先单独看阶段一的动作预测准不准,再决定阶段二怎么接。
  • 推理阶段完全是自回归的,没有额外网络分支,部署成本和普通自回归VLA接近,只是多了一步动作词元的解码。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐