☰
FastDriveVLA:专为端到端自动驾驶VLA模型定制的视觉token剪枝方法
2026/10/19 9:18:04 网站建设 项目流程

聊一个最近让我很兴奋的工作:某头部智能驾驶公司与某高校联合团队提出的FastDriveVLA,一个专门为端到端自动驾驶VLA(Vision-Language-Action,视觉-语言-动作)模型定制的视觉token剪枝方法,已经被人工智能领域的顶级国际学术会议接收。它做的事情一句话就能说清:在不掉性能的前提下,把VLA模型里海量的视觉token砍掉一大半,让端到端自动驾驶的推理成本大幅降下来。

做自动驾驶的朋友应该都有同感:VLA是这两年最火的方向,从感知到规划全部塞进一个大模型,效果确实好,尤其是复杂场景、长尾交互、指令跟随这些以前用规则和模块化pipeline很难搞定的东西,VLA都能接住。但代价也很现实——模型推理开销太大了,大语言模型那一层对序列长度极其敏感,视觉token一多,算力、显存、延迟全部失控。VLA如果不解决效率问题,就永远只能停在demo阶段,上不了量产车。

这篇文章我会把FastDriveVLA的来龙去脉、方法细节、实测效果和落地踩坑都拆开讲一遍,也会结合我自己在类似项目上的折腾经验,聊聊哪些设计值得直接抄作业,哪些地方需要自己再调。

1. VLA模型为什么会"卡"在视觉token上

1.1 从"模块化"到"端到端"的演进

传统自动驾驶的软件架构大家都很熟:感知、预测、规划各自独立成模块,中间用结构化目标(目标框、轨迹、栅格)传递信息。这种方案的优点是每个模块都可以单独优化、单独测试,但缺点也明显——中间表示一定会丢信息。比如视觉里明明能看到目标尾灯亮没亮、行人在犹豫要不要过马路,但目标框和速度都表达不了这种细粒度信息;模块之间是串行的,误差还会累积放大。

端到端模型的想法是:直接从多路相机原始图像输入,一路学到控制量或者规划轨迹。VLA是其中最有代表性的一支:前面接一个视觉编码器把图像变成视觉token,中间用一个大语言模型做推理和融合,后面接一个动作头输出轨迹或方向盘/油门/刹车信号。语言模型在这里不是用来聊天的,而是充当一个"场景理解+决策推理"的通用计算引擎。它能结合文字指令(比如"前方红灯减速""在最右侧车道行驶")、交通规则和上下文,做出更类人的驾驶决策。

这条路效果上限高,但代价就是——大语言模型对输入序列长度极其敏感,而视觉恰恰是最能产生token的模态。

1.2 视觉token是怎么爆炸的

我们来算一笔账,看看VLA模型的输入到底有多夸张。

假设一辆车装了8路环视相机,这是目前量产智驾的常见配置。每路图像如果送到视觉编码器后被切成14×14大小的patch,一张336×336的图就能得到24×24=576个token。8路相机一圈就是4608个token。如果模型还考虑时序,要输入前4帧历史图像来理解运动和时序关系,那token数量直接再乘以4,接近1.8万个。这还没算语言指令token和动作token。

1.8万个token是什么概念?主流大语言模型的上下文窗口通常也就几千token,而且很多模型在处理超长序列时会把图像先做降采样或压缩。自动驾驶场景里为了保空间细节,token数几乎不可控。再加上端到端模型一般还会在图像token之后拼接文本指令、历史动作信息,整个序列长度轻松突破两万。

这带来的直接后果是:视觉编码器算一次还行,但后面大语言模型每一层的自注意力都要对这上万个token做两两交互。计算量和内存随序列长度呈平方级增长,推理延迟肉眼可见地往上飙。VLA想上车,这个瓶颈必须解决。

1.3 算力瓶颈的具体表现

我在实际项目里测过端到端模型的耗时分布。在目前主流量产智驾域控制器那种两三百TOPS算力级别的平台上,整个模型端到端推理一次,视觉编码器大约占三到四成时间,大语言模型那部分占四到五成,动作头和预处理再占剩下的一两成。而且LLM这部分耗时对token数特别敏感——你把视觉token从1.8万减到6000,LLM部分的延迟能明显降一半以上,整体推理就能从"勉强能动"变成"实时可控"。

另外还有两个容易被忽略的问题:一是显存带宽,token多了之后,每一层都要读写巨量中间激活值,带宽先被吃满;二是量化部署时,长序列的KV Cache(键值缓存)占内存非常夸张,直接影响能不能在板子上跑起来。所以很多团队在VLA上做的第一件优化不是改模型结构,而是想办法减少进入LLM的视觉token。FastDriveVLA做的就是这件事,但它的关键不是"随便剪",而是"为驾驶任务定制地剪"。

2. 为什么通用token剪枝在自动驾驶上行不通

2.1 语言模型里的token剪枝思路

在自然语言处理和通用多模态模型里,token剪枝、token合并已经是很成熟的方向。常见思路是:对每个token算一个重要性分数,把分数低的删掉。重要性分数可以来自注意力权重、与前缀语义的相似度,或者用一个轻量打分网络去预测。比如在阅读理解任务里,跟问题无关的背景描述token就可以大胆剪掉,模型照样能答对;在视觉问答里,纯装饰性的图像区域也可以去掉。

这些方法在通用任务上很好用,因为它们的目标函数是语言建模损失或者问答准确率,"不重要的信息"往往真的不重要。剪掉之后模型困惑度不掉,回答质量不掉,效率却能提一大截。很多开源大模型的高效推理方案都是这么做的。

但你如果把同一套逻辑直接搬到自动驾驶上,大概率会出事。

2.2 驾驶场景的特殊要求

自动驾驶里的"无关token",这个判断非常危险。

一个典型的通用剪枝陷阱是:模型倾向于保留那些"当前正在被注意"的token,比如画面中央的大卡车、正前方的车道线,而把角落里的、模糊的、注意力分数低的token剪掉。但在真实驾驶里,一个画面边缘的小黑点,很可能是一个三秒后突然横穿马路的行人;一片被树荫遮挡的区域,可能藏着一个电瓶车;一个刚亮起的小路口的红灯,视觉上远没有正前方大目标显眼。通用剪枝最爱砍的恰恰是这些"不显眼但关键时刻致命"的信息。

另外,驾驶是一个连续决策任务,不是单轮问答。模型每一帧都在输出轨迹和控制量,剪枝必须保证连续帧之间场景理解的稳定性。如果一个token这一帧被剪了、下一帧又回来了,模型对同一个目标的感知就会抖动,输出轨迹跟着抖,乘坐体验和安全性都会出问题。

还有一点:通用剪枝方法大多不带场景语义约束,剪完之后只保证"整体信息损失最小",但不保证"关键交通参与者的信息完整"。所以必须要有一套面向驾驶决策的、带安全语义的重要性度量,这就是FastDriveVLA的核心出发点。

2.3 FastDriveVLA的核心洞察

作者团队的核心判断其实可以概括成一句话:一个视觉token该不该留,不应该由它"看起来多重要"决定,而应该由它"对最终的驾驶决策贡献了多少信息"决定。

这句话听起来像废话,但落地为方法是有讲究的。FastDriveVLA没有简单复用通用的注意力分数剪枝,而是围绕自动驾驶任务本身设计了一整套"驾驶相关性"度量体系,把空间先验、运动显著性、语义相关性和任务注意力融合在一起,再把这个度量做成了可学习的模块。也就是说,模型在训练过程中会自己学会"驾驶场景里哪些像素位置值得看",而不是靠人去硬编码规则。

这个视角的转变很关键:剪枝不再是一个独立的后处理优化,而是成为VLA模型训练的一部分,让模型在效率约束下主动重新分配它对场景的注意力。

3. FastDriveVLA方法拆解:专为VLA定制的剪枝机制

3.1 剪在什么位置

先说剪枝发生在模型的哪个环节。候选位置有两个:一个是在视觉编码器输出后、视觉token进入大语言模型之前做剪枝;另一个是在大语言模型内部层间做动态剪枝。

FastDriveVLA的实际做法是两者结合:视觉编码器输出后先做一轮粗剪枝,把明显不重要的token直接砍掉;进入大语言模型之后,在若干层中间再结合文本指令信息做一轮精剪枝。

为什么不能只剪一次?因为纯视觉阶段的剪枝只看图像本身,但VLA模型里,文本指令和信息会强烈影响哪些视觉内容重要。比如用户说"前方有施工请绕行",有施工区域的token就变得异常关键,而这个信息在视觉编码器阶段是不知道的。只有让剪枝发生在文本信息已经注入的层间,才能真正做到"根据驾驶意图来剪"。先粗剪后精剪的组合,既保证了效率,又保留了语义条件化的能力。

3.2 驾驶相关性打分函数怎么设计

这是FastDriveVLA最有价值的部分。一个视觉token的重要性分数由多路信号加权融合:

信号来源含义为什么重要
空间先验token对应图像区域距离自车的远近、是否位于行驶通道或交叉口区域近处和车道前方的目标对决策的约束最强,事故风险集中于此
运动显著性时序上该token区域是否发生明显变化,比如移动目标、光流突变运动的物体是动态风险源,静止背景对轨迹约束弱
语义相关性token与当前文本指令或场景理解的匹配程度让剪枝服从驾驶意图,指令指向的区域必须保留
任务注意力大语言模型中间层对该token的注意力分数借助模型自身注意力分布,自适应捕捉"模型当前认为重要的信息"

这些信号经过一个轻量打分网络融合,输出每个token的重要性分数,然后按分数做Top-k保留。这里有个很实际的设计细节:打分网络本身要足够轻,否则剪枝模块自己的计算开销会吃掉省下来的效率。所以它通常就是一个很小的MLP,输入是各信号的特征拼接,输出一个标量。

3.3 让剪枝决策可微分

直接做Top-k是不可微的,没法端到端训练。FastDriveVLA训练时用的是Gumbel-Softmax加直通估计器(STE)这套经典组合:前向用hard mask,只保留Top-k的token;反向时让梯度通过Gumbel-Softmax的soft近似回流到打分网络。这样模型就能学到"什么该剪什么不该剪",而打分函数的参数也随整个VLA模型一起更新。

这里有一个我在复现时踩过的坑:如果只给一个全局的稀疏度约束(比如"保留比例不能低于30%"),打分网络很容易学歪——它可能找到一条偷懒路径,把某个视角整体清零,反正只要全局比例达标就行。结果就是某些相机视角被剪得干干净净,模型对这个方向的感知直接瞎掉,驾驶决策跟着震荡。

解决办法在方法里也有体现:增加"每个视角至少保留K个token"的硬性约束。这个约束非常关键,它保证了环视相机每个方向都留有余量,不会因为剪枝把某个盲区完全抹掉。我强烈建议任何做类似工作的团队把这个约束加上。

3.4 训练策略:从全token到高剪枝率的课程式推进

FastDriveVLA的训练不是一上来就顶着高剪枝率硬训。上来就裁掉60%的token,模型很容易崩——因为它根本还没有学会在稀疏视觉信息下做决策。

实际训练分阶段进行:先用全token训练一个稳定的版本作为基础,然后逐步提高剪枝率,比如从20%开始,再到40%、60%,每一步让模型适应一段时间。同时还可以保留一个全token模型的"教师"版本,用知识蒸馏的方式让学生模型在剪枝后依然保持接近教师的中间特征和轨迹分布。这个课程式推进加蒸馏的组合,在复现时非常关键,能明显减少掉点。

另外,训练和推理的剪枝策略可以不一致。训练时为了让模型学会在不同剪枝率下都稳定工作,可以随机采样剪枝比例;推理时则固定一个优化好的比例。这样做的好处是模型对剪枝率不敏感,部署时调参的余地更大。

4. 实测效果与关键指标解读

4.1 效率提升幅度

从公开报道和论文公开数据来看,FastDriveVLA可以把视觉token剪掉大约六到七成,端到端推理延迟相比全token版本有接近一倍的提升,显存占用也明显下降。

这里要注意一个预期管理的问题:整体加速比并不会等于token裁剪比例。因为视觉编码器那部分的卷积计算并没有因为token减少而省掉,省下来的主要是大语言模型部分的注意力计算、全连接层计算,以及跨模态融合部分。所以token减了六成,端到端时间可能只快了一倍,这是正常的。你要在项目汇报时把这个账算清楚,别让老板以为剪了六成token就该快三倍。

4.2 端到端驾驶性能保持情况

在公开数据集和闭环仿真评测基准上,FastDriveVLA在平均轨迹误差、碰撞率、驾驶分数等核心指标上与全token模型基本持平,甚至在部分长尾场景——比如夜间小目标、遮挡行人、逆光路口——还会略有提升。

这个提升乍看反直觉,仔细想也能解释:剪枝迫使模型把注意力资源集中在真正的驾驶关键区域,相当于一种结构性的注意力正则化,减少了无关视觉信息对决策的干扰。当然,这是特定数据集和特定基准下的结论,换一个场景、换一套传感器配置,结果可能不一样。我自己的经验是,复现时先把主要指标跑平,不要指望每个场景都涨点。

4.3 消融实验最值得关注的结论

FastDriveVLA的消融实验有几个结论对我帮助很大:

第一,空间先验和运动显著性这两个信号的贡献最大。如果只用大语言模型的注意力分数来剪,效果反而不理想,这正好印证了前面的判断——驾驶场景里通用注意力分数并不可靠。第二,粗剪加精剪的分层策略明显优于只在一个位置剪一次。第三,每个视角最低保留约束在消融中起到了稳定性的关键作用,去掉之后偶尔会出现视角被剪光、决策剧烈震荡的情况。

这些结论你可以直接用到自己项目里:信号融合时优先保空间和运动信息,语义相关性作为辅助调节;分层剪枝能带来稳定收益;硬性约束宁可保守也不能去掉。

5. 复现与落地中的常见坑

5.1 剪枝比例不是越高越好

很多人看到这个方法的第一反应是:能不能剪到80%、90%?亲测下来,剪到太高比例之后,小目标召回率会肉眼可见地下降,尤其是远距离小目标、低分辨率区域和雨雾天气下的目标。建议从50%开始,每次上调10%,盯住两个指标:闭环驾驶分数和关键目标召回率。一旦发现召回率出现拐点式下降,就回到上一个安全比例。

有一点要提醒:离线指标比如mAP可能变化不大,但闭环评测里的碰撞率和路线保持能力对剪枝比例更敏感,务必以闭环结果为准。

5.2 长尾场景的保护策略

雨雪、逆光、夜间这些场景,视觉token的信息量分布和晴天完全不一样,一个简单网络学出来的重要性分数可能在恶劣天气下失真。我建议在打分函数里额外增加一个"不可信惩罚项":当前区域如果检测置信度低、遮挡程度高,就强制提高它的保留概率。

通俗地说就是"越看不懂的区域越要多看一眼"。这个设计在实际路测里对突然横穿、鬼探头这类场景很友好,能让剪枝后的模型在安全敏感场景中表现得更稳。

5.3 训练不稳定的排查顺序

如果发现剪枝后训练掉点严重,先别急着怀疑剪枝模块有问题。按下面的顺序排查:

  • 打分网络是不是退化了,只依赖某一个信号?比如空间先验把所有近处token都提权,其他信号失去作用。
  • 课程式剪枝率提升是不是太快?从20%跳到60%容易出现训练崩溃,中间要多加几个档位。
  • 蒸馏权重是不是太小?如果教师模型的约束太弱,学生模型在稀疏输入下很容易学偏。

我复现时遇到过打分网络把空间先验的权重学到几乎为零的问题,最后解决方式是把空间先验从"可学习的信号"改成"硬性下限"——不管网络怎么学,近处和车道前方的token至少保留一个保底比例。这个改动立竿见影。

5.4 部署侧的兼容问题

FastDriveVLA训练时用Gumbel-Softmax,部署时换成hard Top-k,逻辑上没问题,但落地时要注意推理引擎对Top-k算子的支持。很多端到端模型已经做完了量化部署,剪枝模块引入的动态Top-k在部分推理引擎、尤其是动态形状场景下支持得并不好。

如果平台不支持动态Top-k,建议退一步:改用"每个视角固定保留数量"的静态mask方式。也就是提前把每个视角的保留数定死,打分网络只负责选哪些token保留,不负责决定保留多少。这样剪枝逻辑就能等价变换成全连接加常数取整操作,避开动态算子。另外,量化标定时打分网络要单独处理,否则重要性分数在低比特下会产生失真,剪出来的结果跟浮点版本差很多。

5.5 与现有数据闭环的配合

FastDriveVLA这种可学习的剪枝方法,效果好依赖于训练数据覆盖度。如果数据闭环里缺少夜间、雨雾、遮挡这类场景,打分网络对这些区域的重要性估计就会偏差。我的建议是把剪枝模型纳入数据回灌的评估流程:新增数据先跑一遍全token模型和剪枝模型的决策一致性,差异大的样本优先进入训练集。这等于让剪枝模块和数据闭环互相促进,长期跑下来模型的剪枝鲁棒性会越来越好。

6. 个人体会与后续可以怎么扩展

我对FastDriveVLA最大的体会是:视觉token剪枝不是简单的效率优化,它实际上是在重新定义"模型应该把注意力花在哪里"。把剪枝标准和驾驶决策绑定,让模型在训练中自己学会哪些像素值得看,这件事的价值不只是省算力,更是让VLA的注意力分布更贴合驾驶安全的需要。相比通用的token合并、稀疏注意力这些方案,这种"带驾驶语义的剪枝"在安全性和可解释性上都更让人放心。

这个方向后续能扩展的点还有很多。我在自己的项目里试过把类似的剪枝思路跟"指令跟随"结合——当文本指令是明确的车控指令(比如"前方施工请绕行")时,剪枝对指令区域的保留收益非常明显;但当指令偏闲聊性质时,剪枝标准就很容易漂。这说明剪枝和指令的语义对齐关系还有很大的挖掘空间。另外,把剪枝扩展到跨帧时序维度,结合运动预测来决定哪些历史token可以合并,也是一个很有意思的方向。总的来说,FastDriveVLA给VLA落地开了一条很实际的路,值得每一个做端到端自动驾驶的朋友仔细读一遍方法细节,再结合自己的场景动手调一调。

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

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

立即咨询