ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

DriveTeach-VLA:图像轨迹如何破解自动驾驶预训练难题

2026/8/29 10:32:06 拓冰建站 浏览量
DriveTeach-VLA:图像轨迹如何破解自动驾驶预训练难题 最近做自动驾驶多模态模型方向的项目时我一直在思考一个问题VLAVision-Language-Action视觉-语言-动作模型虽然火但真正放到自驾场景里做规模扩展总是会遇到“预训练阶段越训越偏”的尴尬。通用视觉基模在大规模图文数据上表现得很好一进入驾驶场景就明显水土不服而自驾数据本身规模有限、采集成本高又很难独立支撑一个大模型的预训练。这个矛盾长期困扰着很多研究者和工程团队。北航与清华最新放出的 ECCV 2026 论文 DriveTeach-VLA 给出了一个很有意思的解法用“图像轨迹”image trajectory作为中间表示把驾驶场景与视觉基模的预训练目标打通从而让 VLA 的 Scaling 真正有戏。这篇文章不只是一篇论文解读我会从 VLA 的痛点出发拆解 DriveTeach-VLA 的核心思路、方法框架、数据处理流程以及它对自驾领域做视觉预训练的意义。无论你是刚接触 VLA 的算法新人还是已经在做端到端自驾模型落地的工程师都会有一定收获。1. 背景VLA 与驾驶场景的“预训练鸿沟”1.1 什么是 VLAVLA 全称是 Vision-Language-Action Model即视觉-语言-动作模型。它同时接收摄像头图像、文本指令或场景描述经过多模态大模型的理解与推理最终输出可执行的连续动作或离散动作决策。在自动驾驶领域VLA 通常扮演“感知-预测-规划”一体化的角色输入多视角图像理解交通场景、路面结构、交通信号和周围车辆意图输出自车的转向、油门、刹车等控制信号。VLA 与传统的模块化自驾系统不同它不把感知、预测、规划拆成独立的子系统而是尝试用一个统一的模型端到端地完成从图像到动作的映射。这样做的好处是信息损失少、系统简洁也有能力借助大语言模型的世界知识处理长尾场景。1.2 视觉基模预训练与驾驶任务的不匹配这里要先区分两个概念视觉基础模型Visual Foundation Model与 VLA。视觉基础模型通常指在亿级甚至十亿级图文数据上训练的模型比如 CLIP、SigLIP 以及各类 masked autoencoder 模型。它们擅长的是通用物体识别、图文对齐、区域理解等任务。而自动驾驶场景有几个特殊之处类别分布极不均匀。道路、车辆、行人、交通标志是主要目标但通用数据集中频繁出现的“猫狗、家具、风景”等在自驾场景中只是背景。空间关系比物体类别更重要。自车与前方车辆的纵向距离、横向偏移、车道线相对位置这些连续的空间量才是决策的关键。时序一致性要求高。单帧图像理解得再好如果连续帧之间预测不稳定车辆依然无法安全行驶。动作是最终产物而不是描述。通用视觉基模学习的是“这张图里有什么”VLA 需要回答“看到这张图后我该怎么打方向盘”。所以直接把通用视觉基模搬到 VLA 里常见的表现是图像特征仍然很丰富但模型学不到开车相关的敏感度或者微调阶段需要大量驾驶数据去“纠正”预训练带来的偏差收敛很慢。1.3 Scaling 难题数据规模 vs 数据质量大模型领域有个常识更大的模型配合更多的数据能力会持续提升这就是 Scaling Law。但到了自动驾驶 VLAScaling 变得很难做核心原因是数据瓶颈。我们可以整理一下三条主线路线数据来源优势问题通用图文预训练互联网图文数据规模大多样性好驾驶场景占比低空间/动作理解弱驾驶视频预训练路采视频、仿真数据场景真实时序自然数据量有限标注成本高场景分布偏闭环动作学习真车/仿真交互直接优化驾驶目标样本效率低安全风险高难规模化DriveTeach-VLA 的核心动机正是想在这三条路之间找到一个桥既能利用互联网规模的海量图文数据又能把驾驶知识融入预训练阶段让后续的动作学习不再从零开始。2. DriveTeach-VLA 的核心思路图像轨迹2.1 为什么是图像轨迹先说结论图像轨迹是一种比文本描述更贴近驾驶任务、比动作控制信号更适合预训练的中间监督信号。在常见的大模型范式里多模态预训练通常用“图像 文本”对齐。文本能描述场景但很难精确表达“车应该在两条车道线之间保持居中”这类连续空间关系。动作控制信号虽然精确但回归目标高度依赖传感器安装位置和车辆动力学通用互联网数据里根本不存在这种标注所以无法用于预训练。图像轨迹恰恰处于两者之间。它不需要传感器标定参数不需要车辆动力学模型只需要“图像中出现的目标在时间或空间上的连续移动路径”。这种轨迹信息可以通过视频帧间匹配、光流估计或者简单的规则跟踪获取甚至可以从海量互联网视频中自动挖掘。对驾驶场景来说图像轨迹天然包含空间位置、速度方向、交互意图等关键信息而且不依赖自车坐标系。2.2 图像轨迹的定义与形式化从形式上看图像轨迹可以定义为一组像素坐标序列T {(x_1, y_1), (x_2, y_2), ..., (x_t, y_t)}其中每个点表示某一目标在图像平面上的投影位置通常是车辆、行人、车道线或可行驶区域上的采样点。随着时间推进这些点的移动形成一条连续曲线。如果扩展到多目标情况图像轨迹就是一个集合T {T_1, T_2, ..., T_N}每个 T_i 对应场景中一个可移动目标或关键道路结构的轨迹。在空间维度上它也可以被表达成热图heatmap的形式——即把一系列连续位置投影到一张概率图中。这样既能保留位置信息又方便与神经网络输出的特征图对齐。2.3 图像轨迹与光流、文本轨迹的对比为了更清晰地理解图像轨迹我这里对比几个容易混淆的概念表示方式描述粒度是否需要外参是否适合预训练代表任务光流逐像素运动场否可但局部性强运动分割、帧插值文本轨迹“车在前方左转”否可但空间精度低视觉问答、字幕3D 轨迹世界坐标系下路径是否依赖标定轨迹预测图像轨迹关键目标在图像上的连续位置否很合适跟踪、预测、可行驶区域通过这个对比可以看出图像轨迹的最大优势是“无需三维重建也能表达空间与运动”这让它天然适合大规模数据自动生成。3. DriveTeach-VLA 方法框架拆解3.1 整体框架虽然论文的具体网络结构细节还要以官方版本为准但根据标题和公开思路DriveTeach-VLA 的框架大致包括以下四个部分视觉主干网络负责提取多视角图像特征通常可以选择通用的视觉基模作为初始化。图像轨迹生成模块从驾驶视频或互联网视频中提取目标轨迹生成监督信号。轨迹-语言对齐模块把图像轨迹编码成与文本特征空间一致的表示让模型在预训练阶段同时学习“场景语义”和“运动位置”。驾驶微调模块在大规模预训练之后用真实的驾驶数据集做动作层微调。3.2 图像轨迹生成与标注这一步是整个方法的数据基础。如果完全依靠人工标注轨迹数据同样贵得离谱。因此 DriveTeach-VLA 大概率会采用自动流程来生成图像轨迹。一个大致的自动流水线如下对输入视频片段做目标检测识别车辆、行人、车道线等关键类别。使用多目标跟踪算法如 ByteTrack、BoT-SORT对检测框做跨帧关联。对关联后的目标提取框中心点或关键点位置构成轨迹序列。对轨迹做平滑、插值和去抖消除检测抖动带来的噪声。将轨迹序列编码为热图或其他稠密表示作为预训练监督。下面给出一个简化版的数据预处理 Python 示例用于说明图像轨迹的生成思路。这段代码只是一个演示而不是 DriveTeach-VLA 的官方实现import numpy as np from collections import defaultdict class SimpleTrajectoryExtractor: 从检测结果中提取目标的图像轨迹示意实现 def __init__(self, max_lost5): self.tracks defaultdict(list) # track_id - [(frame_id, cx, cy)] self.max_lost max_lost def update(self, frame_id: int, detections: list): detections: list of (track_id, x1, y1, x2, y2, score) 这里演示用已有 track_id 做关联 真实场景通常需要调用跟踪器得到跨帧 ID。 for det in detections: track_id, x1, y1, x2, y2, score det cx (x1 x2) / 2.0 cy (y1 y2) / 2.0 self.tracks[track_id].append((frame_id, cx, cy)) def export_heatmap(self, width640, height360): 把所有轨迹投影到一张热图上用于预训练监督信号。 heatmap np.zeros((height, width), dtypenp.float32) for track_id, points in self.tracks.items(): for frame_id, cx, cy in points: x int(round(cx)) y int(round(cy)) if 0 x width and 0 y height: heatmap[y, x] 1.0 # 简单高斯平滑让轨迹点附近有梯度 from scipy.ndimage import gaussian_filter heatmap gaussian_filter(heatmap, sigma2.0) return heatmap # 示例使用 extractor SimpleTrajectoryExtractor() # 假设第 0 帧检测到两个目标 extractor.update(0, [ (1, 100, 200, 110, 210, 0.9), (2, 300, 180, 315, 195, 0.8), ]) # 第 1 帧目标移动到新位置 extractor.update(1, [ (1, 102, 198, 112, 208, 0.9), (2, 305, 178, 320, 192, 0.85), ]) hm extractor.export_heatmap() print(heatmap shape:, hm.shape) print(heatmap max:, hm.max())这里需要说明的是轨迹的跨帧 ID 关联在实际工程中是一个难度不小的模块。检测噪声、遮挡、目标交叉都会导致 ID Switch进而产生错误的轨迹。因此在真实数据流水线里往往还需要经过人工抽检和规则过滤才能把轨迹当作训练监督信号。3.3 轨迹与视觉基模的对齐方式有了图像轨迹之后剩下的问题是如何把轨迹信号接入模型预训练。这里我猜测 DriveTeach-VLA 使用了一种“条件重建”或“对比对齐”的思路给模型输入当前帧图像要求模型预测未来的图像轨迹热图。运动位置与视觉特征被强制绑定视觉特征不仅要能识别“这是什么”还要能预测“它会去哪、怎么动”。在没有文本标注的互联网视频上轨迹本身就是天然的监督信号因此可以把预训练数据规模扩大到十亿甚至百亿帧级别。这种思路和视频预测、自监督学习有一些相通之处但区别在于它不是重建完整像素而是只预测稀疏而关键的目标轨迹。这样既降低任务难度又保留了对驾驶决策最重要的运动信息。3.4 预训练与微调策略VLA 的完整训练流程通常分三段通用图文对齐阶段用海量图文数据训练多模态理解能力此时视觉主干获得通用的语义表征。驾驶轨迹预训练阶段用带图像轨迹的视频数据继续训练让模型学习空间感知与运动预测能力。驾驶动作微调阶段用少量带动作标签的驾驶数据微调输出转向、油门、刹车等控制量。DriveTeach-VLA 的创新点主要在第二阶段。它不排斥通用图文预训练也不排斥最后的动作微调而是把“图像轨迹预训练”作为中间桥梁让三个阶段的过渡更加平滑。下面给一个训练流程的 PyTorch 风格伪代码演示如何把轨迹热图预测作为辅助损失加入多模态训练import torch import torch.nn as nn import torch.nn.functional as F class VLAWithTrajectoryHead(nn.Module): 一个简化的 VLA 训练示意 视觉塔 语言塔 轨迹预测头 动作头 def __init__(self, vision_backbone, text_encoder, hidden_dim768): super().__init__() self.vision_backbone vision_backbone self.text_encoder text_encoder # 轨迹预测头从融合特征预测稠密热图 self.trajectory_head nn.Conv2d(hidden_dim, 1, kernel_size1) # 动作头从 query token 输出连续动作 self.action_head nn.Linear(hidden_dim, 2) # 以 转向/速度 为例 def forward(self, image, text_tokens, trajectory_heatmap, action_labelNone): # 提取图像特征 visual_features self.vision_backbone(image) # B, C, H, W # 文本特征 language_features self.text_encoder(text_tokens) # B, L, D # 简化将语言特征池化并与视觉特征结合 language_pooled language_features.mean(dim1) # B, D cond_features visual_features * language_pooled.view( -1, visual_features.size(1), 1, 1 ) # 轨迹热图预测 logits self.trajectory_head(cond_features).squeeze(1) # B, H, W heatmap_loss F.binary_cross_entropy_with_logits( logits, trajectory_heatmap, reductionmean ) # 动作头微调阶段才使用 action_loss 0.0 if action_label is not None: pooled cond_features.mean(dim[2, 3]) # B, D action_pred self.action_head(pooled) action_loss F.mse_loss(action_pred, action_label) return heatmap_loss, action_loss这段代码示意了“轨迹头”和“动作头”共存的结构。在预训练阶段只计算heatmap_loss在微调阶段再叠加action_loss。这样可以在同一个模型框架下完成两阶段训练。4. 实验与效果分析4.1 实验设置论文的实验覆盖面通常包括通用视觉基模对比同样用 CLIP 或 SigLIP 初始化对比有无图像轨迹预训练的性能差异。驾驶数据集评测在公开的驾驶数据集如 nuScenes、Waymo Open Dataset 等上验证端到端驾驶任务的性能。数据规模扩展性控制模型参数量和训练数据量画出类似 Scaling Curve 的曲线验证“数据量增大时模型能力持续提升”。长尾场景鲁棒性在夜间、雨天、复杂路口等场景下观察轨迹预测和驾驶决策的表现。具体的数字需要等论文正式发布后查看我不在这里强编实验数据。但从方法逻辑上实验结果的方向大概率会指向图像轨迹预训练能够显著提升 VLA 在驾驶场景上的收敛速度和最终性能尤其是在数据量增大的情况下性能曲线更加平稳。4.2 DriveTeach-VLA 对 VLA Scaling 的意义我在项目里的体会是VLA 的 Scaling 卡点不在模型尺寸而在监督信号的结构化程度。纯文本监督太稀疏纯动作监督太昂贵图像轨迹刚好是一个能够大规模自动获取、又包含空间运动结构的中间监督。这意味着预训练数据不再局限于人类标注互联网视频、仿真生成视频都可以成为数据来源。模型在预训练阶段就能学到“目标移动”的先验微调阶段只需很少的真车数据就能掌握具体控制策略。模型参数量可以继续放大因为预训练数据的规模不再受驾驶数据采集能力的限制。从产业角度看这个方向如果能落地会显著降低端到端自动驾驶模型的训练成本。很多小团队没有几十万公里路采数据的条件但可以通过开源的图像轨迹预训练权重快速起步。4.3 与现有方法的对比这里列出 DriveTeach-VLA 与几类代表性方法的可能差异方法类型预训练监督对驾驶任务友好度规模化难度通用图文对比学习图文匹配低低视频对比学习时间不变性中中纯驾驶数据模仿学习专家动作高高DriveTeach-VLA图像轨迹高低5. 工程落地从论文到数据流水线读完论文思路更重要的是想想如何在自己的项目中复现和利用这套方法。下面从数据、训练和存储三个角度梳理工程建议。5.1 数据流水线从视频到轨迹在实际工程中构建图像轨迹训练集可以分为几个步骤视频切帧与质量过滤。去掉过暗、过曝、静止时间过长的片段。目标检测。使用轻量检测模型提取车辆、行人等动态目标。跨帧跟踪。用 ByteTrack 或 BoT-SORT 得到稳定的轨迹 ID。轨迹过滤。丢弃长度过短、速度跳变过大的轨迹。轨迹编码。把轨迹序列转为热图、坐标序列或分段多项式曲线。这里需要特别提醒轨迹的标签噪声对预训练影响很大。如果目标检测经常漏检轨迹就会断裂如果跟踪器频繁切换 ID轨迹就会跳变。建议在离线生成时使用更重的模型而不是在线实时推理模型。离线处理可以接受高延迟只要精度够高。5.2 训练配置建议在算力有限的情况下可以先用中等级别的视觉主干配合轨迹热图做预训练。一个相对稳妥的训练配置参考如下配置项建议值视觉主干ViT-B/16 或 ViT-L/14图像分辨率224 或 336预训练步数100K~500KBatch Size512~2048取决于显存轨迹头输出56x56 或 28x28 热图优化器AdamW学习率1e-4 到 3e-4warmup 1K 步微调数据10K~100K 驾驶帧这个配置不是标准答案但可以作为一个起点。不同团队的数据分布和算力条件差异很大实际调参时要密切关注轨迹热图的预测精度。5.3 性能与存储考虑轨迹热图作为监督信号比较节省存储空间。原始视频帧动辄几百 KB 到几 MB而一张 56x56 的轨迹热图只有约 3KB。在百万级别数据规模下热图方案相比保存关键点 JSON 或高清视频存储开销都很低。如果担心热图过于稠密导致空间信息丢失可以保留轨迹关键点的 JSON 文件在训练时动态渲染热图。这样既保留了完整的坐标信息又可以在训练阶段做数据增强比如旋转、缩放、平移对应的轨迹点。下面是一个非常简化的数据读取与增强示意import json import torch def load_trajectory_annotation(json_path, size56): with open(json_path, r) as f: data json.load(f) # {points: [[x, y], ...]} heatmap torch.zeros((1, size, size), dtypetorch.float32) for x, y in data[points]: # 坐标归一化到 [0, size-1] px min(int(round(x * (size - 1))), size - 1) py min(int(round(y * (size - 1))), size - 1) heatmap[0, py, px] 1.0 return heatmap6. 常见问题与讨论6.1 图像轨迹和未来轨迹预测有什么区别图像轨迹可以看成一个“过去到当前时刻”的运动描述也可以扩展到“当前到未来”的预测目标。DriveTeach-VLA 的预训练任务更倾向于让模型理解视觉场景中的运动结构而未来轨迹预测是下游任务。二者可以互相促进预训练阶段学好轨迹表示微调阶段做预测会更容易。6.2 图像轨迹会丢失三维空间信息吗会。图像轨迹是二维平面的投影无法直接表达目标在三维世界中的真实速度和位置。但是 VLA 的输入端通常有摄像头内外参微调阶段可以从图像特征中恢复部分三维信息。图像轨迹的意义在于提供一个通用的运动先验并非替代三维感知。6.3 能否完全替代 3D 标注数据不能。端到端驾驶模型最终需要输出自车坐标系下的控制量纯图像轨迹无法提供精确的 3D 边界框和速度信息。在实际系统中图像轨迹预训练是降本增效的加速器但真实驾驶数据的采集和标注依然不可省略。6.4 互联网视频能用吗理论上可以但需要做大量场景过滤。互联网视频中存在大量不适合驾驶理解的场景比如电影特效、静态镜头、相机剧烈运动。如果直接使用可能会引入噪声。更稳妥的做法是先用视频分类模型筛选出道路场景再做轨迹提取。下面整理一个常见问题速查表问题主要原因解决思路轨迹断裂严重检测器漏检离线使用高精度检测模型热图监督训练不收敛学习率过大降低学习率增加 warmup预训练性能反降数据噪声过大加强数据过滤加入场景分类微调后动作输出抖动轨迹先验未被利用检查轨迹头是否参与微调多视角轨迹难对齐外参标定误差先在单视角上训练再扩展多视角7. 局限与展望DriveTeach-VLA 给出一个很有潜力的方向但也不是银弹。第一图像轨迹对相机视角依赖较强。同一个场景在不同相机位姿下轨迹形态差异很大。如何让轨迹表示具备跨视角一致性是接下来要解决的问题。一个可能的方向是把轨迹与可行驶区域、车道线结构结合形成更稳定的“场景拓扑轨迹”。第二轨迹作为中间监督可能偏向于“移动目标”而忽略“静态结构”。静止的车、红绿灯、车道线虽然没有轨迹移动但对驾驶安全至关重要。单纯的图像轨迹很难表达这些元素。所以未来方法大概率会把轨迹与静态场景理解任务联合起来训练。第三从图像轨迹到动作输出之间仍然有鸿沟。轨迹告诉模型“目标怎么动”但没有告诉模型“自车该怎么反应”。这两者之间的推理能力需要在微调阶段用心设计比如引入安全约束损失、风险敏感权重等。另外从数据工程角度这套方案真正落地时还需要解决数据版权、隐私合规等问题。大规模爬取互联网视频做训练在商业使用时要特别小心。8. 总结与实践建议DriveTeach-VLA 的核心价值是为 VLA 的预训练阶段提供了一种可持续扩展的监督信号。它不追求用花哨的结构堆砌模型而是从数据与任务匹配的角度把驾驶场景中真正重要的“空间运动结构”显式建模出来。对于做工程的人来说这个思路尤其值得借鉴与其不断增加模型复杂度不如先想清楚预训练信号是否与下游任务对齐。如果你计划在自己的项目里复现或借鉴这个思路我建议按以下顺序推进先用公开数据跑通图像轨迹提取流水线积累一批干净的轨迹预训练数据。在中等规模的视觉主干上做轨迹热图预训练对比上游任务和下游驾驶任务的提升。如果发现轨迹预测与驾驶控制之间衔接不够好可以重点调整微调阶段的损失权重。有条件的话加入多视角与静态结构信息的联合预训练覆盖更完整的驾驶场景。接下来可以重点关注 ECCV 2026 正式发布的论文版本尤其是数据规模、模型结构、消融实验等细节。也建议同步阅读视频预测、端到端自驾和视觉基础模型三个方向的最新工作这套方法的理解会更透彻。如果你也在做 VLA 或自动驾驶多模态模型的预训练欢迎在评论区交流。这篇文章保留到这里后续有新的论文细节或实验结果我会再补充更新。