自动驾驶统一大模型:融合3D感知、VQA与规划的VLM技术拆解
最近自动驾驶与大模型结合的节奏明显加快。通义千问这边直接放出了面向自动驾驶的统一大模型核心动作是把 3D 感知、VQA 与规划三个能力一起集成进预训练 VLM。对做端到端自动驾驶、多模态大模型和视觉感知的开发者来说这条技术路线值得从头到尾认真梳理一遍。本文不追热点只做技术拆解这个概念到底解决什么问题架构上怎么组织数据怎么准备代码怎么写落地部署有哪些坑这篇文章适合三类读者。第一类是自动驾驶算法工程师想了解统一大模型和传统模块化方案的差异以及自己的项目可以从哪里切入。第二类是多模态、大模型方向的开发者想弄明白 3D 感知如何接入视觉语言模型而不是停留在“看图说话”的层面。第三类是准备入门自动驾驶 AI 的学生需要一条清晰、可执行的学习路线。读完这篇文章你应该能理解 VLM 自动驾驶模型的整体架构能看懂 3D 感知、VQA、规划三个任务如何共享一个模型主干并且能拿到一套最小可运行的 PyTorch 实现框架知道评测指标怎么组织、常见问题怎么排查。1. 背景与核心概念1.1 为什么自动驾驶开始拥抱大模型传统自动驾驶算法的主流做法是模块化流水线链路大致是感知、预测、规划、控制。感知模块负责检测车辆、行人、车道线、红绿灯预测模块负责估计其他交通参与者的意图规划模块基于上游结果生成一条安全轨迹最后交给控制模块执行。这种模块化方案的好处很明显每个模块可以独立开发、单独测试、单独替换团队协作边界清晰。但它的缺点在复杂场景下也非常突出。第一模块之间存在信息损耗。感知模块输出的是抽象的检测框、类别和速度而不是原始场景的整体语义。预测模块拿不到感知模块丢掉的信息规划模块又拿不到预测模块没表达出来的交互关系。每一层抽象都在减少信息量最终规划模块很难做出全局最优决策。第二标注成本高。每个模块都需要独立的数据标注感知需要 3D 框预测需要轨迹意图规划需要专家轨迹每个任务的标注规范还不一样。维护三套数据管道既贵又慢。第三误差累积。感知漏检一个目标后面的预测和规划基本都会出错感知框抖动一下规划轨迹也可能跟着抖动。端到端方案正是冲着这三个痛点去的而大模型的出现让端到端方案第一次拥有了“常识推理”能力。通义千问这次推出的自动驾驶统一大模型典型的特征是“一个底座三个任务”用同一个预训练 VLM 作为底座把 3D 感知、视觉问答和规划都挂在上面。这意味着模型看到场景之后先感知、再理解、最后规划整个链路是共享特征的不再是三套独立系统。1.2 三个关键词3D 感知、VQA、VLM在继续往下看之前先明确三个基本概念后面所有内容都围绕它们展开。3D 感知是指让模型在三维空间里理解周围环境。输入是多视角摄像头图像或者激光雷达点云输出包括目标的 3D 框中心点坐标、长宽高、朝向角、类别、速度等属性。3D 感知与 2D 感知最大的区别是它带深度信息车辆在物理世界里的位置、尺寸、朝向都是明确的这部分信息是规划和决策最需要的基础。VQA即 Visual Question Answering视觉问答。给定一张或一组图像模型需要回答关于图像内容的问题。普通的 VQA 用在通用图像上比如“图里有什么颜色的花”。到了自动驾驶场景VQA 的问题就变成“前方那辆白色轿车是否在减速”“左前方车辆下一步会不会变道”这类和驾驶决策强相关的问题。VLM即 Vision-Language Model视觉语言模型。它同时具备图像理解能力和语言生成能力典型结构是“视觉编码器 语言模型”。输入可以是图像、文本或两者的组合输出则是文本或者进一步接出的任务结果。把这几个概念连起来看统一大模型做的事情就是先用 3D 感知能力理解三维场景再用 VQA 接口完成场景推理最后把推理结果交给规划头生成轨迹。三个能力不再是三个模型而是同一个 VLM 内部的三个输出分支。1.3 “统一大模型”到底在解决什么问题一个很自然的疑问是既然 3D 感知、VQA、规划都能单独做也都能做得不错为什么一定要“统一”这里的关键在于独立模型的组合存在三个根本性缺陷。第一个缺陷是特征不一致。感知网络输出的特征向量和规划网络需要的特征向量通常不在同一个语义空间。想要让感知结果真正指导规划必须设计额外的特征适配层而适配层本身又会引入新的误差来源。第二个缺陷是联合优化困难。在传统流水线里感知的误差会原样传给规划但规划产生的损失无法反向传播回去修正感知。这意味着感知模块永远不知道它的输出对最终轨迹产生了多大影响。第三个缺陷是可解释性差。传统端到端方案是一个黑盒输入图像直接输出轨迹中间没有一段“人类能看懂”的推理过程。出了问题工程师只能翻网络中间特征定位成本极高。统一大模型把三个任务放进一个共享主干之后感知结果能直接作为 VQA 推理的“事实依据”VQA 推理结果又能直接作为规划的条件三个任务互相提供监督信号整个系统也因为有语言输出而变成了可以阅读、可以追问、可以审计的模型。这就是统一方案最核心的价值。2. 技术架构拆解2.1 整体设计共享主干 多任务头先看一个抽象的架构描述输入多视角相机图像 可选激光雷达点云 ↓ 视觉编码器 → 特征 Token ↓ 大语言模型主干场景理解、常识推理、上下文记忆 ↓ 3D感知解码头 VQA文本解码头 规划轨迹解码头 ↓ ↓ ↓ 3D框/属性 自然语言回答 未来轨迹点这个架构最关键的地方在于三个任务头共用同一个视觉语言主干。不管是输出 3D 框、自然语言还是轨迹它们的特征来源都是同一份场景表示而不是各自独立的卷积网络。这样做有一个很重要的工程收益优化目标可以互相传导。当模型回答“前车在减速”时它不是先有一个独立的检测结果再把这个结果拼进文本而是 VQA 输出直接利用了感知任务训练出来的空间特征。反过来规划头也会利用 VQA 推理得到的语义信息比如“前车意图变道”这个结论会直接影响轨迹生成。2.2 3D 感知如何与语言模型对齐把 3D 感知接入语言模型最大的挑战是“空间概念”和“文本概念”的对齐。语言模型操作的是离散 token3D 感知操作的是连续的、带几何含义的空间特征。这两者不能直接相加。目前主流做法有两类。第一类是 BEV 特征投影。先把多视角图像通过视角变换映射到鸟瞰视角得到 BEV 特征图然后把 BEV 特征展开成 token 序列送入语言模型。这种方式的好处是保留了空间的几何一致性模型在 BEV 坐标系下更容易理解“左前方”“30 米外”这类空间指令。第二类是稀疏查询方式。语言模型内部本身就有大量可学习的 query可以让这些 query 变成 3D 空间的“锚点”。每一个 query 负责从图像特征中采样某个空间位置的区域特征再与文本 token 拼接一起进入 transformer 层做交互。无论哪一类最后都需要一个投影层把空间特征维度映射到语言模型的隐藏维度。投影层通常是几层 MLP在整个训练过程中和主模型一起更新。对齐质量直接影响统一模型的性能。常见的现象是模型文本回答很流畅但回答内容对应的空间位置是错的。这种情况大多是空间特征和文本特征没有真正对齐需要检查投影层的设计以及训练数据里 QA 问题和 3D 目标的绑定关系。2.3 VQA 是推理接口不是聊天功能一提到视觉问答很容易理解成“看图聊天”。在自动驾驶统一大模型里VQA 的定位完全不同它更像是一个结构化的推理接口。它有两个核心作用。第一个作用是提供可解释的中间监督。模型在做决策之前先回答一系列和场景有关的问题相当于把规划的依据用自然语言写出来。比如模型先答出“前方 30 米处有行人横穿马路”然后规划头才生成减速避让的轨迹。这个“先答后规划”的机制让工程师可以通过 VQA 的答案判断模型是否真的理解了场景而不是盲目相信最终轨迹。第二个作用是统一任务输入输出格式。指令可以被书写成文本“前方交通灯是什么状态”“给出未来 5 秒的避让轨迹。”模型在文本指令的驱动下既输出理解结果也输出规划结果。这种统一格式还带来一个附加好处模型天然具备多任务泛化能力新的任务只要能用文本描述就能通过指令微调快速接入不用重新设计网络结构。但这里要注意VQA 问题不能是“为了问而问”。每个问题必须绑定到具体的场景目标和时间戳。否则模型学会了语言常识却没有学会“看场景回答问题”这在自动驾驶场景里是极其危险的。2.4 规划头如何利用统一特征规划模块在传统方案中一般是独立的行为决策和轨迹规划算法输入是感知目标列表和高精地图输出是轨迹。在统一大模型里规划头变成了一个条件生成器。规划头的输入不再是手工拼接的特征而是共享主干输出的统一特征同时叠加 VQA 推理结果的语义特征。规划过程可以设计成自回归式模型预测下一个轨迹点时会把之前的轨迹点作为条件逐步生成完整轨迹。这样设计有几个实际收益。首先规划轨迹天然会感知到检测到的障碍物位置因为感知头的特征就在同一个特征空间里。其次规划能利用语言推理结果比如 VQA 模型判断“前方货车可能右转”规划头就会自动倾向于生成向左绕行的轨迹。最后规划和感知共享梯度感知任务学到的空间信息会通过反向传播改善规划效果规划产生的误差也能约束感知特征的质量。当然统一特征也意味着风险集中。如果共享主干输出错误三个任务会同时出错如果 VQA 推理错了规划也会跟着错。所以后面章节我会专门讲安全冗余设计。3. 数据、训练与评测体系3.1 公开数据集与任务格式想做自动驾驶 VLM 实验第一步是组织数据。当前公开数据集里比较常用的是 nuScenes、Waymo Open Dataset 等。这类数据集通常提供多视角相机图像、激光雷达点云、3D 目标框标注以及自车轨迹。但在统一大模型场景下只有 3D 框还不够还需要额外的 VQA 标注。学术社区目前生成 QA 对的方式有两类一类是人工标注质量高但成本也高另一类是用语言模型自动生成候选问题答案对再由人工抽查修正。一条有效的 QA 样本通常长成下面这样{ scene_token: scene_000012, timestamp: 3.2, question: 前方那辆白色轿车正在减速它下一步最可能做什么, answer: 前方轿车正在减速且左侧车道有空间它可能准备变道。, target_object_id: predict_001234 }这里最容易被忽略的是target_object_id和timestamp字段。QA 必须能对应到具体的 3D 目标也必须能对应到具体的时刻。如果问题问的是“前方车辆”但模型看到的其实是 3 秒前的场景训练出来的模型在真实道路上就会“时空错乱”。规划任务同样需要标注轨迹。公数据集里自车轨迹通常来自高精定位系统可以直接用来做模仿学习也就是让模型输出的轨迹尽量贴近真实驾驶轨迹。3.2 训练阶段的划分把三类任务一次性端到端地训练是一种理想状态现实中很难直接收敛。工程上普遍采用分阶段策略通常分三个阶段。第一阶段是视觉语言预训练。目的不是让模型学会自动驾驶而是让视觉编码器和语言模型具备基础的对齐能力模型得先能“看图说话”才能进一步“看图开车”。第二阶段是领域感知预训练。用自动驾驶公开数据训练 3D 感知能力让模型学会检测三维目标、预测目标属性。这个阶段通常不需要语言任务参与或者只保留轻量的语言监督。第三阶段是多任务指令微调。把 3D 感知、VQA、规划三个任务统一到指令格式里一起做微调。这个阶段的任务是让模型学会“根据不同的指令切换到不同的输出头”。前两个阶段如果做不好直接到第三阶段很容易出现灾难性遗忘。模型学了一堆驾驶问答却忘记了基础的检测能力最终表现就是 VQA 答得头头是道但 3D 框输出完全不可用。3.3 损失函数与评测指标统一模型的训练损失是三个任务的加权和形式可以写成L λ1 * L_det λ2 * L_text λ3 * L_planL_det3D 检测损失包括 3D 框回归损失和分类损失通常使用 Smooth L1 和 Focal Loss 的组合。L_textVQA 文本生成损失一般是语言模型的交叉熵损失。L_plan规划轨迹损失常见的有模仿学习里的 L2 损失也可以加入碰撞惩罚项。评测指标也应该按任务分别设计。3D 感知常用 mAPmean Average Precision计算的是 3D 检测框与真值框的交并比IoU。VQA 部分可以用回答准确率、BLEU、ROUGE 等文本指标但更推荐以人工评估为主小规模随机抽样因为自动驾驶 QA 的答案往往不是唯一的。规划部分最常用的是 ADEAverage Displacement Error平均位移误差和 FDEFinal Displacement Error最终位移误差分别衡量整条轨迹和终点位置与真值轨迹的平均偏移。注意规划指标只能反映“像不像真值轨迹”不能反映“安不安全”。如果真值轨迹本身存在争议或者数据集里的真值轨迹不是最优轨迹规划的指标再好看也不代表能安全落地。后续评估一定要补充碰撞检测、急转弯次数、舒适度这类安全性和体验指标。4. 最小可运行实现接下来给出一套最小可运行的实现思路。下面的代码基于 PyTorch重点演示“共享主干 多任务头”的模型组织方式。为了控制篇幅我对模型组件做了大幅简化视觉编码器用普通 CNN 代替文本解码器用 GRU 代替真实项目中这两部分都应该替换为预训练 VLM。代码的意义在于让你看清楚任务如何组织而不是让你直接拿去商用量产。4.1 环境与项目结构建议环境如下Python 3.10 及以上PyTorch 2.0 及以上transformers可选用于加载预训练视觉编码器或语言模型安装依赖pip install torch torchvision transformers项目结构按下面的方式组织driving_vlm/ ├── model.py # 统一模型定义 ├── dataset.py # 数据读取与预处理 ├── train.py # 训练入口 ├── evaluate.py # 评测入口 └── config.yaml # 资源配置4.2 模型定义# 文件路径driving_vlm/model.py import torch import torch.nn as nn class UnifiedDrivingVLM(nn.Module): 一个简化的自动驾驶统一大模型。 真实项目中vision_encoder 可替换为 CLIP、Qwen-VL 等预训练视觉编码器 text_decoder 可替换为 Qwen、LLaMA 等大语言模型。 这里为了展示结构使用简单 CNN 和 GRU 作为示意。 def __init__(self, num_queries200, hidden_dim512, future_steps6): super().__init__() # 视觉编码器将多视角图像编码成特征向量 self.vision_encoder nn.Sequential( nn.Conv2d(3, 64, kernel_size3, stride2), nn.ReLU(), nn.Conv2d(64, 128, kernel_size3, stride2), nn.ReLU(), nn.AdaptiveAvgPool2d((8, 8)), ) self.bev_proj nn.Linear(128 * 8 * 8, hidden_dim) # 3D 感知解码头预测 num_queries 个目标的 3D 框 self.perception_queries nn.Parameter(torch.randn(num_queries, hidden_dim)) self.perception_head nn.Linear(hidden_dim, 9) # 8维框属性 1维类别 # 语言解码器简化版 GRU self.language_token_embed nn.Embedding(10000, hidden_dim) self.language_decoder nn.GRU(hidden_dim, hidden_dim, batch_firstTrue) # 规划头预测未来 future_steps 个轨迹点 self.plan_head nn.Sequential( nn.Linear(hidden_dim, 128), nn.ReLU(), nn.Linear(128, future_steps * 2), ) def forward(self, images, text_tokensNone): images: (B, N, 3, H, W)N 为视角数量 text_tokens: (B, L)语言指令 token可为空 B, N, C, H, W images.shape # 1. 多视角图像编码 feats self.vision_encoder(images.view(B * N, C, H, W)) feats feats.view(B, N, -1) feats feats.mean(dim1) # 简单平均融合各视角 shared_feat self.bev_proj(feats) # (B, hidden_dim) # 2. 3D感知分支 perception_feat shared_feat.unsqueeze(1) self.perception_queries.unsqueeze(0) perception_out self.perception_head(perception_feat) # (B, num_queries, 9) # 3. VQA文本分支 if text_tokens is not None: text_emb self.language_token_embed(text_tokens) lang_feat, _ self.language_decoder(text_emb) lang_feat lang_feat[:, -1, :] # 取最后一个时间步 else: lang_feat shared_feat # 4. 规划分支 plan_input shared_feat lang_feat plan_out self.plan_head(plan_input) # (B, future_steps * 2) plan_out plan_out.view(B, -1, 2) return perception_out, plan_out代码说明perception_queries是一组可学习的空间锚点每个 query 会从共享特征中聚合信息最终预测一个候选目标的 3D 框。这和 DETR 系列检测头的思路一致。文本分支在text_tokens为 None 时只依赖视觉特征。实际训练时如果目标是联合优化 VQA 和规划建议始终传入文本 token。规划头最终的输出形状是(B, future_steps, 2)最后一维表示 x、y 坐标。真实项目中还需要把坐标映射回全局坐标系或车辆坐标系。4.3 数据管道与训练脚本# 文件路径driving_vlm/dataset.py import json import torch from torch.utils.data import Dataset class DrivingVQADataset(Dataset): 读取组织好的自动驾驶 VQA 数据。 def __init__(self, annotation_file, data_root): with open(annotation_file, r, encodingutf-8) as f: self.data json.load(f) self.data_root data_root def __len__(self): return len(self.data) def __getitem__(self, index): sample self.data[index] # sample 结构见前文 JSON 示例 question_text sample[question] answer_text sample[answer] # 真实场景中这里需要根据 scene_token 和 timestamp 读取图像并做预处理 images torch.randn(6, 3, 224, 224) # 示意6 视角图像 trajectory torch.randn(6, 2) # 示意未来 6 个轨迹点 return { images: images, question_text: question_text, answer_text: answer_text, trajectory: trajectory, }# 文件路径driving_vlm/train.py import torch import torch.nn as nn from torch.utils.data import DataLoader from dataset import DrivingVQADataset from model import UnifiedDrivingVLM def train_one_epoch(model, dataloader, optimizer, device): model.train() total_loss 0.0 for batch in dataloader: images batch[images].to(device) trajectory batch[trajectory].to(device) # 当前简化示例不训练文本生成loss 只包含检测和规划 perception_out, plan_out model(images, text_tokensNone) # 规划损失L2 plan_loss nn.functional.mse_loss(plan_out, trajectory) # 检测损失示意实际需按 3D 框格式计算 det_loss perception_out[:, :, :].abs().mean() loss plan_loss 0.5 * det_loss optimizer.zero_grad() loss.backward() optimizer.step() total_loss loss.item() return total_loss / len(dataloader) if __name__ __main__: device cuda if torch.cuda.is_available() else cpu dataset DrivingVQADataset(annotations.json, ./data) loader DataLoader(dataset, batch_size2, shuffleTrue) model UnifiedDrivingVLM().to(device) optimizer torch.optim.AdamW(model.parameters(), lr1e-4) for epoch in range(10): loss train_one_epoch(model, loader, optimizer, device) print(fepoch {epoch}, loss {loss:.4f})这个训练脚本只展示了流程骨架。实际项目里还需要加入文本生成的交叉熵损失、3D 框的真实匹配策略以及训练过程中的学习率调度、梯度裁剪等常规操作。4.4 评测脚本# 文件路径driving_vlm/evaluate.py import torch from model import UnifiedDrivingVLM def mean_displacement_error(pred, target): 计算平均位移误差ADE单位与输入坐标一致。 return torch.mean(torch.norm(pred - target, dim-1)) def final_displacement_error(pred, target): 计算最终位移误差FDE。 return torch.norm(pred[:, -1, :] - target[:, -1, :], dim-1).mean() if __name__ __main__: model UnifiedDrivingVLM() model.eval() with torch.no_grad(): images torch.randn(1, 6, 3, 224, 224) pred_traj, _ model(images, text_tokensNone) gt_traj torch.randn(1, 6, 2) ade mean_displacement_error(pred_traj, gt_traj) fde final_displacement_error(pred_traj, gt_traj) print(fADE: {ade.item():.3f} m) print(fFDE: {fde.item():.3f} m)评测脚本里只实现了 ADE 和 FDE 两个轨迹指标。真实项目还需要补充 3D 检测的 mAP、VQA 的准确率、轨迹碰撞率等多维度指标。5. 常见问题与排查思路统一大模型在开发过程中会遇到很多问题下面把高频问题整理成一张表方便排查时对照。问题现象常见原因解决思路多任务训练时 loss 震荡不收敛三个任务的损失量纲差异太大权重设置不合理先固定检测和规划损失逐步加入文本损失或对每项 loss 做归一化处理3D 感知结果与语言回答不一致视觉特征和文本特征没有完成对齐检查投影层设计确认感知任务和 VQA 任务是否在同一个主干上联合训练规划轨迹与障碍物碰撞规划头只是回归轨迹没有真正利用感知约束把感知头的特征显式送入规划头或在规划损失里加入碰撞惩罚项显存不足 OOM多视角图像加大语言模型同时前向显存占用过高使用梯度累积、混合精度训练、减小 batch size或冻结图像编码器VQA 答非所问问题模板和真实场景不一致或 QA 标注与 3D 目标时间戳没对齐检查训练集 QA 与场景标注的一致性增加真实场景问题比例微调后基础检测能力退化灾难性遗忘降低领域微调学习率保留少量通用数据集混合训练或使用 LoRA 等参数高效微调方式规划指标很好但实际体验差ADE/FDE 只能衡量与真值轨迹的相似度不能衡量安全性增加碰撞检测、急弯、舒适度等额外指标结合仿真闭环评测如果训练一开始 loss 就出现 NaN优先检查数据里是否有空图像、异常坐标和 NaN 标签。统一模型的输入链路长数据问题的定位成本比单任务模型高很多数据清洗可以在前期省下大量排查时间。6. 最佳实践与工程建议6.1 数据质量是第一优先级统一大模型对数据质量极其敏感。同一个场景里如果 3D 框标注的时间戳和 QA 答案描述的内容差了一帧模型就会学到错误的对齐关系。每个 QA 问题必须能对应到具体目标并且和 3D 标注使用同一套坐标系、同一个时间戳体系。如果团队没有足够的人工标注能力优先保 3D 标注质量QA 对可以用语言模型生成后再人工抽查。反过来如果 QA 标注很规范但 3D 框标注质量低模型就会“回答得很有条理但空间位置全是错的”。这两种情况都意味着后面要返工。6.2 多任务训练的权重策略三个任务的 loss 量纲完全不同检测 loss 可能是平滑 L1 数值文本 loss 是交叉熵规划 loss 是 L2 位移误差。直接放到一起优化大概率出现某一项一骑绝尘、其余项被无视的情况。实践中有两个方向可选。一是使用不确定性加权让模型自动学习每个任务的重要性二是先固定检测和规划两个任务等模型稳定后再加入文本任务。无论选哪个都要记录每个任务单独的 loss 曲线而不是只盯着总 loss。某个任务的 loss 突然上升通常不是那个任务本身的问题而是共享主干的特征被其他任务“带偏”了。6.3 安全边界与部署形态自动驾驶是安全关键系统。统一大模型再强大现阶段也不应该作为唯一的决策来源。工程上更稳妥的做法是“大模型做理解、规则层做兜底”。具体来说可以保留一套独立的安全校验模块。大模型规划出轨迹之后校验模块会对轨迹做碰撞检测、限速检查和最小风险操作判断。一旦发现轨迹异常就切换到独立的规则规划器而不是依赖大模型自己纠正。部署形态上大模型通常先部署在云端负责复杂场景的远程判断和高价值场景的数据回流车端则部署经过蒸馏和量化的小模型保证实时性和确定性。云端判断结果可以再用于迭代车端模型形成一个数据闭环。6.4 日志、版本与可复现性统一模型工程的复现成本比单任务模型高得多。建议从第一天就建立完整的版本管理体系包括代码版本、数据集版本、模型权重版本和评测脚本版本四部分。日志方面每个测试场景至少保留四类信息原始图像、3D 感知输出、VQA 文本输出、规划轨迹。这四类信息缺一不可。遇到线上问题工程师应该能根据场景 ID 重新回放整个推理过程而不是只看一个最终轨迹 CSV。另外要注意数据授权边界。使用 nuScenes 等公开数据集时遵守对应 license内部私有数据不能随意对外发布更不能用未授权的数据训练后对外宣称能力。安全合规是技术工作之外不可逾越的底线。7. 总结与下一步学习路线7.1 本文核心要点现在回看本文开头的问题你可以有一个比较完整的答案了。统一大模型之所以值得关注是因为它把传统流水线中的三个独立任务整合进了一个共享主干3D 感知提供了空间事实VQA 提供了可解释的推理过程规划头则在这个统一特征空间里生成轨迹。三者互相补充也互相约束。架构上3D 感知和语言模型通过 BEV 投影或稀疏查询完成特征对齐VQA 作为推理接口提供中间监督规划头作为条件生成器输出轨迹。数据上QA 标注必须与 3D 目标、时间戳严格对齐。训练上建议分阶段进行最后再统一做多任务指令微调。工程上数据质量、任务权重、安全冗余、日志体系四件事优先级高于任何花哨的模型结构改动。7.2 接下来怎么学对这个方向感兴趣的开发者下一步可以按这样的顺序推进。第一先把 VLM 基础打牢。通义千问系列中的多模态模型是很好的学习对象理解它的视觉编码器、语言模型和投影层如何拼接再回去看自动驾驶 VLM 的论文会有一种豁然开朗的感觉。第二跑通一个公开数据集的 3D 检测基线。nuScenes 是目前生态最完整的自动驾驶数据集之一先跑通官方 baseline再在此基础上做改造。第三构造自己的 QA 数据完成指令微调。可以先不做规划只做“检测 VQA”双任务验证特征对齐是否有效。第四把规划头接进去做三任务联合训练。这个阶段会出现很多本文第 5 节提到的问题每解决一个你对模型的理解都会更深一层。最后提醒一句这类方案演进很快文章里的代码是为了讲清原理而简化的教学示例。实际项目请以官方发布的技术文档、模型权重和工具链为准并根据自己的硬件、数据和合规要求调整。如果本文对你有帮助可以先收藏备用后面实践到某个环节卡住时再回来对照排查思路应该能找到对应的解决方向。