跳转至

VLA VLM + DiT

导言

自动驾驶 VLA(Vision-Language-Action)模型中,VLM 和 DiT 是两个核心组件。但很多人会有一个常见误解:DiT 是用来生成图片的。实际上,在自动驾驶场景中,DiT 更多是作为动作/轨迹生成器,而非图像生成器

VLM 负责"看懂路况和指令",DiT 负责"生成一段连续、平滑、多模态的驾驶动作/轨迹"。

1. VLM + DiT 大概长这样

典型流程可以理解为:

多视角相机 / BEV / 地图 / 导航指令
VLM / 视觉语言模型
场景语义、道路关系、目标意图、文本/视觉条件 c
DiT / Diffusion Transformer
未来轨迹 / waypoints / steering-throttle-brake 序列
控制器执行

DiT 生成的对象通常是:

未来 3~5 秒的 ego trajectory:
[(x1, y1), (x2, y2), ..., (xH, yH)]

或者:

低层控制序列:
[(steer1, throttle1, brake1), ..., (steerH, throttleH, brakeH)]

不是生成摄像头图片。


2. 那为什么不用 VLM 直接输出动作?

因为 VLM/LLM 天然擅长的是:

  • 看图理解
  • 语言推理
  • 场景解释
  • 高层决策,比如"前方行人,减速等待"

但自动驾驶最终需要的是:

  • 连续数值
  • 高频控制
  • 平滑轨迹
  • 对多种可能驾驶意图建模

让 VLM 直接吐文本,比如:

turn left slowly

或者离散 token:

<steer_12> <brake_03>

可以做,但有几个问题:

  1. 连续控制离散化会损失精度 方向盘角度、加速度、刹车都不是天然的文字 token。

  2. 容易不平滑 逐 token 输出动作,可能前后不一致。

  3. 多模态场景难处理 比如前方慢车:可以跟车、变道、减速、等待。 普通回归模型容易学出一个"平均动作",例如夹在两条车道中间,这很危险。

  4. 驾驶是一个 action chunk,不是一个单步动作 车要执行的是未来几秒的一段轨迹,而不是下一瞬间一个孤立动作。


3. DiT 在这里"生成"的是什么?

扩散模型的本质不是"生成图片",而是:

从噪声中逐步恢复一个符合条件的数据样本。

在图像生成里,样本是图片; 在自动驾驶 VLA 里,样本可以是轨迹或动作序列。

训练时:

真实专家轨迹 a
    ↓ 加噪
带噪轨迹 a_t
    ↓ DiT 学会去噪
恢复真实轨迹 a

推理时:

随机噪声轨迹
    ↓ 条件:当前道路、车辆、红绿灯、导航指令
DiT 逐步去噪
合理的未来驾驶轨迹

所以它"生成"的是:

一条或多条可执行驾驶轨迹

不是图片。


4. 为什么 DiT 特别适合动作/轨迹?

4.1 处理多模态动作

驾驶里经常不是唯一答案。

例如,当前车道前方有慢车时,合理选择可能有:

  • 继续跟车
  • 左变道
  • 右变道
  • 提前减速
  • 等待更安全时机

普通 L2 回归可能学出平均轨迹:半个跟车 + 半个变道,结果可能就是车骑在线上。

扩散模型可以采样多个候选:

trajectory 1: 跟车
trajectory 2: 左变道
trajectory 3: 减速等待

然后再用安全约束、打分器、规则模块选一个。

Diffusion Policy

Diffusion Policy 论文将这种方法用于机器人动作生成,强调它适合多模态动作分布、高维动作空间和稳定训练。

4.2 生成连续、平滑的动作序列

自动驾驶不是输出一句话,而是输出一段未来轨迹:

t+0.5s: x1, y1
t+1.0s: x2, y2
t+1.5s: x3, y3
...

DiT 可以把这些 future waypoints 当成一串 token/向量来建模,通过 Transformer 捕捉时间关系,让轨迹更连贯。

4.3 比 VLM 更适合低层控制

VLM 可以回答"前方有行人,应减速",但它不一定擅长直接给出"未来 4 秒每 0.1 秒的 steering / throttle / brake"。

所以很多 VLA 架构会把系统分成两层:

VLM:高层理解 / reasoning
DiT:低层连续动作生成

VLA survey 里也把 "VLM + Diffusion Action Head" 和 "VLM + Diffusion Transformer" 作为典型结构,作用就是把 VLM 的泛化理解能力和扩散模型的连续动作生成能力结合起来。


5. 和"生成图片"的 DiT 有什么关系?

DiT 原始出名确实是在图像生成里:它把扩散模型里常见的 U-Net 换成 Transformer,用于 latent image diffusion。

但这只是 DiT 的一个应用。

更抽象地说,DiT 是:

用 Transformer 做扩散模型的去噪网络

它可以去噪:

  • 图片 latent
  • 视频 latent
  • 机器人动作
  • 自动驾驶轨迹
  • BEV occupancy
  • 多智能体轨迹

Common Pitfall

听到"DiT",不应自动等同于"生成图片"。DiT 是一种架构范式,应用范围远超出图像生成。


6. 自动驾驶里的实际应用

VDT-Auto 是一个 "VLM-guided Diffusion Transformer" 自动驾驶方案:VLM 提供场景理解,BEV 特征和文本嵌入作为条件,DiT 负责动作/路径生成。

DiffusionDrive 说明了为什么自动驾驶会考虑 diffusion:它用于生成多样化、合理的驾驶动作/轨迹,并且专门处理实时性问题,比如减少去噪步数。


7. 但 DiT 不是必须的

"VLA = VLM + DiT" 是一种流行架构,不是唯一架构。

也可以是:

  • VLM + MLP action head
  • VLM + autoregressive action tokens
  • VLM + diffusion head
  • VLM + flow matching head
  • VLM + MPC / PID controller
  • VLM + rule-based planner

如果任务简单、动作维度低、场景不太多模态,普通回归头也能做。

DiT 的价值主要在于:

复杂场景 + 连续动作 + 多模态决策 + 平滑轨迹生成

直观类比

可以这么理解:

VLM 像驾驶员的大脑:
"我看到了红灯、行人、旁边车道有空隙。"

DiT 像运动规划小脑:
"在这些约束下,我生成一条未来 4 秒平滑、安全的轨迹。"

结论

VLA 中的 VLM + DiT,不是为了生成图片,而是把扩散生成的能力从"生成图像"迁移到"生成动作/轨迹"。VLM 负责理解场景,DiT 负责生成连续、平滑、可执行的多模态驾驶轨迹。


参考文献

  1. Diffusion Policy: https://arxiv.org/abs/2303.04137
  2. VLA Survey: https://vla-survey.github.io/data/paper.pdf
  3. DiT: https://arxiv.org/abs/2212.09748
  4. VDT-Auto: https://arxiv.org/abs/2502.20108
  5. DiffusionDrive: https://openaccess.thecvf.com/content/CVPR2025/papers/Liao_DiffusionDrive_Truncated_Diffusion_Model_for_End-to-End_Autonomous_Driving_CVPR_2025_paper.pdf

评论