AI

OneVL 自动驾驶大模型

小米

Posted by LXG on May 18, 2026

onevl

OneVL

把显式 CoT(文字思维链)改成潜空间推理


传统 VLA

	看到行人
	→ 分析行人速度
	→ 分析意图
	→ 判断风险
	→ 输出动作

问题:

	每一步都生成 token

OneVL:

	看到行人
	      ↓
	latent token
	      ↓
	输出轨迹

变成:

	“思考”在隐藏向量里完成

优化收益:

  • 减少 token 生成
  • 降低延迟
  • 减少 autoregressive 开销

源码


(base) xt@xt-2288H-V5:~/lixiaogang/xiaomi-research/onevl$ tree -L 2
.
├── assets
│   ├── comparison.pdf
│   ├── comparison.png
│   ├── framework.pdf
│   ├── framework.png
│   ├── main_framework.pdf
│   ├── main_framework.png
│   ├── navsim_example1.pdf
│   ├── navsim_example1.png
│   ├── nuScences_678_8198.pdf
│   ├── nuScences_678_8198.png
│   ├── onevl_logo_new.png
│   ├── onevl_logo.png
│   ├── roadwork_example1.pdf
│   ├── roadwork_example1.png
│   ├── teaser_bar.pdf
│   └── teaser_bar.png
├── eval_results.py
├── infer_onevl.py
├── output
│   └── navsim
├── README.md
├── requirements.txt
├── run_infer.sh
├── scripts
│   ├── infer_ar1_explain.sh
│   ├── infer_ar1.sh
│   ├── infer_impromptu.sh
│   ├── infer_navsim.sh
│   ├── infer_roadwork.sh
│   └── visualize_predict_image_tokens.py
├── test_data
│   ├── ar1_test.jsonl
│   ├── impromptu_test.jsonl
│   ├── navsim_test.json
│   └── roadwork_test.json
├── visual_tokenizer
│   ├── merges.txt
│   ├── special_tokens_map.json
│   ├── tokenization_qwen3vl_visual.py
│   ├── tokenizer_config.json
│   ├── tokenizer.json
│   └── vocab.json
└── vq_decoder
    ├── ibq.py
    ├── __init__.py
    ├── loader.py
    ├── modules
    └── __pycache__

OneVL 解决了什么问题

小米 OneVL 的核心优化在于解决了大模型“想得太慢”和“想得太浅”的矛盾。它不再让模型像 ChatGPT 那样通过逐字写出推理过程来“思考”,而是发明了一套高效的“潜空间并行思维”体系。

架构优化:从“显性思考”变为“潜空间思考


传统的自动驾驶大模型(如传统的 VLA)通常采用 Explicit CoT(显性思维链):模型必须先写下一段话(如“前方有行人,我应该减速”),然后再决定怎么开车。这种逐字生成的模式延迟极高,无法满足实时驾驶。

优化方案: OneVL 引入了 Latent CoT(潜空间思维链)。它将复杂的逻辑思考压缩成几个代表“语义”和“视觉”的潜 Token。

结果: 推理时不再需要逐个生成文字,而是“一跳完成”,速度提升至 0.24 秒/帧,几乎达到了“只给答案、不思考”的极速,但保留了深度的逻辑能力。

监督优化:双重“辅助老师”(Dual Auxiliary Decoders)


为了防止模型在潜空间里“胡思乱想”,小米设计了两个辅助解码器来监督训练。虽然推理时会把这些解码器扔掉,但它们在训练阶段至关重要:

语言辅助解码器: 强制潜 Token 必须能被还原成人类看得懂的逻辑文字。

视觉世界模型解码器: 强制潜 Token 必须能预测未来的交通画面(世界模型)。

优化逻辑: 这保证了模型的内部思考既符合交通逻辑,又符合物理规律。

训练优化:三阶段递进式对齐


OneVL 并不是一步练成的,而是通过精细的三个阶段来确保稳定性:

阶段 0:基础训练。 让模型学会看懂 6 视角图像并理解基础驾驶动作。

阶段 1:解码器预热。 专门训练那两个“辅助老师”,让它们学会怎么把潜 Token 翻译成文字和画面。

阶段 2:端到端联合训练。 将所有模块打通,让逻辑思考、画面预测和轨迹规划在同一个脉络下协同优化。

任务优化:统一 VLA 与世界模型


以往的技术路线中,VLA(动作规划) 和 World Model(环境预测) 是两条路。

优化方案: OneVL 第一次将两者统一。它通过预测未来画面来增强对“因果关系”的理解(例如:路人甲如果继续走,我现在的轨迹就会撞上他)。

结果: 这种优化显著降低了碰撞风险,在 NAVSIM 和 ROADWork 等评测中表现出了极强的泛化能力(即处理从没见过的路况的能力)。

部署优化:推理时“无损拆除”


优化手段: 为了极致的性能,小米设计了“可拆卸式推理”。在训练时用于指导模型的复杂解码器,在部署到车载芯片时会被完全移除。

结果: 车载端只需运行最核心的推理链条,大幅降低了对显存和算力的占用,使得 4B 规模的大模型在 A100 上能达到 4.16Hz 的高频刷新。

优化手段: 为了极致的性能,小米设计了“可拆卸式推理”。在训练时用于指导模型的复杂解码器,在部署到车载芯片时会被完全移除。

结果: 车载端只需运行最核心的推理链条,大幅降低了对显存和算力的占用,使得 4B 规模的大模型在 A100 上能达到 4.16Hz 的高频刷新。

代价

小米 OneVL 虽然在性能和速度上取得了突破,但这种“既要思考快、又要规划准”的技术方案背后,也伴随着显著的代价和技术门槛。

训练成本:极高的算力消耗


OneVL 的核心卖点是“推理快”,但这其实是把压力转移到了“训练端”。

训练复杂: 它采用三阶段对齐训练(视觉+语言+轨迹)。不仅需要庞大的 GPU 集群(如多节点 H100),还需要极长的时间来让模型在“潜空间”里对齐视觉预测和逻辑说明。

数据胃口: 为了让模型具备“常识”,它需要海量的标注数据(视频、文本理由、真实轨迹)。对于初创企业,获取并清理这些高质量的多模态数据本身就是一笔巨额开支。

部署代价:高昂的硬件门槛


虽然 4B 参数在 AI 界不算大,但在车载端依然是个“沉重的负担”:

显存吃紧: 16GB-24GB 的显存要求直接刷掉了目前市面上大部分的中低端智驾芯片。如果你的产品要面向大众化、低成本车型,OneVL 的硬件成本可能会让你的财务报表很难看。

精度折损: 在边缘侧设备(如 Orin NX)运行,必须进行量化(INT8/FP8)。而 OneVL 这种依赖“潜空间连续向量”的模型,对精度极度敏感。量化后的“智力倒退”可能需要海量的工程对齐工作来弥补。

可解释性的“阉割”


推理时的“暗箱”: 为了达到 0.24s 的极速,OneVL 在推理时会扔掉辅助解码器(即不再实时输出文字理由和预测画面)。

后果: 虽然它依然“思考”了,但你只能得到一个最终的坐标点。如果车突然急刹,工程师在车端无法立刻看到“思考日志”,必须通过特定的离线工具重新解析潜 Token 才能知道原因。这增加了事故溯源和调试的难度。

算法脆性:对训练分布的依赖


幻觉风险: 潜空间推理(Latent CoT)相比显性文字推理,更容易产生“逻辑漂移”。

长尾场景: 如果训练数据中没有涵盖某种特殊的交通场景(比如路面上躺着一个穿奇装异服的人),模型在潜空间里可能无法生成有效的特征,从而给出离谱的轨迹,且这种错误很难通过简单的逻辑规则(if-else)来修正。

对比Tesla FSD 差异

维度 Tesla FSD (v12及后续) Xiaomi OneVL
技术本质 端到端自动驾驶网络(End-to-End) VLA(视觉-语言-动作)+ 世界模型
思考方式 从视觉特征直接学习驾驶行为,不显式生成文字推理 在潜空间(latent)中学习推理与未来预测,再输出动作
可解释性 较低;内部特征难直接解释 中等偏高;训练时可借助语言和世界模型辅助解释
硬件路线 Vision Only(摄像头为主,不使用激光雷达) 目前开源框架未限定传感器方案,理论上可兼容多传感器
推理速度 已证明可实时量产运行 研究结果显示延迟下降明显,但车规实时能力尚未完全公开验证
数据来源 数百万辆车持续采集真实道路数据 主要基于训练数据集和研究框架
工程成熟度 大规模真实道路部署 研究阶段
最大优势 海量闭环数据 + 工程迭代 世界模型 + 潜空间推理创新
最大风险 黑盒性较强 落地实时性与泛化能力待验证

“肌肉记忆” vs “深思熟虑”


Tesla FSD: 它的逻辑是“模仿”。通过数百万特斯拉车主的驾驶数据,神经网络学会了在什么画面下该打多少度方向盘。它更像是一个直觉极强的司机,反应极快,但它无法告诉你“为什么”。

OneVL: 它的逻辑是“理解”。它引入了思维链 (CoT),在转弯前,它内部会产生类似“左侧有盲区,需减速确认”的逻辑。虽然推理时它把这段话“隐藏”了以提速,但它的动作是基于逻辑推演出来的。

世界模型的差异


Tesla: 特斯拉也提“世界模型”,但更多用于在云端生成虚拟场景来训练 AI。

OneVL: 把世界模型直接塞进了车载端。OneVL 在开车时,大脑里会不断“脑补”未来 0.5 秒后的画面。如果实际画面和它预想的不一样,它能迅速意识到危险并修正

数据驱动 vs 知识驱动


Tesla 的护城河是“量”: 拥有全球最庞大的真实路测车队,靠“见多识广”来处理长尾场景。

OneVL 的优势是“质”: 它不仅学习驾驶动作,还学习人类的驾驶常识(语言)。这让它在面对从未见过的新路况时,能靠“逻辑常识”推断出该怎么走,而不是盲目模仿。

navsim-github

NAVSIM(Data-Driven Non-Reactive Autonomous Vehicle Simulation)是目前自动驾驶大模型领域(尤其是端到端、VLA 模型)最主流的基准测试集之一。

简单来说,它就像是自动驾驶界的“托福考试”,专门用来衡量模型在感知、逻辑推理和路径规划上的综合实力。

测试方式

通俗来说,NAVSIM 的测试逻辑就像是在玩一场“不能存档、不能回头的 4 秒钟赛车模拟器”。

第一秒:给你一张“考卷”


测试开始时,NAVSIM 会给模型(比如 OneVL)提供一张当前瞬间的快照:

	输入: 6 个摄像头的画面、地图、自车速度、导航目标(比如:前方路口左转)。

	任务: 请告诉我,接下来的 4 秒钟内,你的行驶轨迹(一连串坐标点)是什么?

第二阶段:让轨迹“跑一会”(Unrolling)


这是 NAVSIM 最核心的创新。它拿到模型给出的 4 秒轨迹后,会像放电影一样在后台“跑”一遍:

	自车: 严格按照模型给出的坐标点前进。

	环境: 此时,路上的其他车、行人、红灯都会按照真实历史记录里的动作继续动(就像在播放一段录像)。

	“非响应式”: 意思是即使你的车快撞上前面的路人了,路人也不会躲(因为这是录像),测试的就是看你的模型能不能提前预判并避开他们。

第三阶段:综合打分(PDM Score)


跑完这 4 秒后,系统会从三个维度给你打分,合成一个 PDM 分数:

安全性 (Safety) - “一票否决权”:

	有没有撞车?有没有冲出马路?

	如果撞了,这一项直接零分。

驾驶表现 (Progress) - “效率高不高”:

	你在这 4 秒内跑了多远?有没有龟速行驶导致交通堵塞?

	有没有按照导航目标走?(比如让你左转,你却直行了)。

舒适度 (Comfort) - “坐得稳不稳”:

	你的刹车是不是太猛了(加速度过大)?

	你的方向盘是不是甩得太急(横向加速度过大)?

如何下载数据集navsim


(base) xt@xt-2288H-V5:~/lixiaogang/xiaomi-research$ git clone https://github.com/autonomousvision/navsim.git

(base) xt@xt-2288H-V5:~/lixiaogang/xiaomi-research/navsim$ git checkout v1.1

(base) xt@xt-2288H-V5:~/lixiaogang/xiaomi-research/navsim$ cd download/
(base) xt@xt-2288H-V5:~/lixiaogang/xiaomi-research/navsim/download$ ls
download_maps.sh  download_mini.sh  download_navtrain.sh  download_private_test_e2e.sh  download_test.sh  download_trainval.sh

download_test.sh

下载测试集脚本download_test.sh


wget https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_metadata_test.tgz
tar -xzf openscene_metadata_test.tgz
rm openscene_metadata_test.tgz

for split in {0..31}; do
    wget https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_${split}.tgz
    echo "Extracting file openscene_sensor_test_camera_${split}.tgz"
    tar -xzf openscene_sensor_test_camera_${split}.tgz
    rm openscene_sensor_test_camera_${split}.tgz
done

for split in {0..31}; do
    wget https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_lidar/openscene_sensor_test_lidar_${split}.tgz
    echo "Extracting file openscene_sensor_test_lidar_${split}.tgz"
    tar -xzf openscene_sensor_test_lidar_${split}.tgz
    rm openscene_sensor_test_lidar_${split}.tgz
done

mv openscene-v1.1/meta_datas test_navsim_logs
mv openscene-v1.1/sensor_blobs test_sensor_blobs
rm -r openscene-v1.1

下载过程(需要VPN), 建议改成国内镜像地址hf-mirror.com


--2026-05-18 10:41:50--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_metadata_test.tgz
openscene_metadata_test.tgz                      100%[==========================================================================================================>] 453.98M  37.4MB/s    用时 11s   

--2026-05-18 10:42:07--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_0.tgz
openscene_sensor_test_camera_0.tgz               100%[==========================================================================================================>]   3.43G  30.3MB/s    用时 94s 

--2026-05-18 10:43:56--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_1.tgz
openscene_sensor_test_camera_1.tgz               100%[==========================================================================================================>]   3.14G  38.8MB/s    用时 2m 10ss

--2026-05-18 10:46:22--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_2.tgz
openscene_sensor_test_camera_2.tgz               100%[==========================================================================================================>]   3.38G  37.4MB/s    用时 92s

--2026-05-18 10:48:15--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_3.tgz
openscene_sensor_test_camera_3.tgz               100%[==========================================================================================================>]   8.05G  40.8MB/s    用时 3m 42s

--2026-05-18 10:52:40--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_4.tgz
openscene_sensor_test_camera_4.tgz               100%[==========================================================================================================>]   5.08G  34.9MB/s    用时 2m 19s

--2026-05-18 10:55:23--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_5.tgz
openscene_sensor_test_camera_5.tgz               100%[==========================================================================================================>]   5.27G  37.4MB/s    用时 2m 23s

--2026-05-18 10:58:11--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_6.tgz
openscene_sensor_test_camera_6.tgz               100%[==========================================================================================================>]   5.79G  37.5MB/s    用时 2m 38s

--2026-05-18 11:02:31--  https://huggingface.co/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_test_camera/openscene_sensor_test_camera_7.tgz
openscene_sensor_test_camera_7.tgz               100%[==========================================================================================================>]   3.13G  37.4MB/s    用时 85s   

..................................................................

太大了,这里没下载完,放弃了

总结: 完整数据包含 8 路摄像头。需要准备好 2TB 以上的高速 SSD 空间,并预留至少 12 小时 的全量解压与推理时间。

  • 首选测试 mini 集: 只需要半小时左右,你能快速拿到表现结果。
  • 避开 trainval 全量测试: 除非你要发布正式论文或进行最终验收,否则没必要为了验证表现而挂机跑一整夜

数据集太大了, 建议下载downlod_mini.sh, 同时改成镜像地址


wget https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_metadata_mini.tgz
tar -xzf openscene_metadata_mini.tgz
rm openscene_metadata_mini.tgz

for split in {0..31}; do
    wget https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_mini_camera/openscene_sensor_mini_camera_${split}.tgz
    echo "Extracting file openscene_sensor_mini_camera_${split}.tgz"
    tar -xzf openscene_sensor_mini_camera_${split}.tgz
    rm openscene_sensor_mini_camera_${split}.tgz
done

for split in {0..31}; do
    wget https://hf-mirror.com/datasets/OpenDriveLab/OpenScene/resolve/main/openscene-v1.1/openscene_sensor_mini_lidar/openscene_sensor_mini_lidar_${split}.tgz
    echo "Extracting file openscene_sensor_mini_lidar_${split}.tgz"
    tar -xzf openscene_sensor_mini_lidar_${split}.tgz
    rm openscene_sensor_mini_lidar_${split}.tgz
done

mv openscene_v1.1/meta_datas mini_navsim_logs
rm -r openscene_v1.1

mv openscene-v1.1/sensor_blobs mini_sensor_blobs
rm -r openscene-v1.1

数据集对比

脚本名称 对应数据集 数据集定位与特色 测试侧重点
infer_navsim.sh NAVSIM 基于真实驾驶数据构建的自动驾驶评测框架,强调闭环导航任务 基础驾驶能力:路径规划、安全、舒适性、导航能力
infer_roadwork.sh ROADWork 道路施工场景数据集,包含施工标志、路障、交通锥等 长尾静态场景:施工区理解与绕行
infer_impromptu.sh Impromptu 面向复杂驾驶理解的开放式推理场景 场景理解与决策能力,不只是问答
infer_ar1.sh Alpamayo-R1 / AR1 用于推理能力训练与评估的数据 因果推理、驾驶决策解释能力

NAVSIM (常规驾驶的“综合考卷”)


来源: nuPlan (由 Motional 提供)。

特点: 数据量最庞大,涵盖了大量城市的日常驾驶。

为什么测它: 它是目前端到端自动驾驶公认的“金标准”。如果模型在 NAVSIM 上拿不到高分,基本就没法上路。

ROADWork (施工区的“生存挑战”)


来源: 专门针对施工区域(Construction Zones)的开源数据集。

特点: 充满了不规范的雪糕筒、穿反光衣的工人、乱画的临时车道线。

为什么测它: 传统的“目标检测”在这些乱七八糟的场景下最容易出错。OneVL 测试它是为了证明其“思维链”能通过逻辑推理(比如:“工人在招手,我得绕行”)来弥补纯视觉识别的不足。

Impromptu (复杂非结构化场景)


来源: 整合了 8 个主流数据集(如 Waymo, nuScenes)中的非结构化片段。

特点: 场景非常混乱,比如没有车道线的泥土路、临时改变方向的单行道。

为什么测它: 它是为了测试 VLA(视觉-语言-动作) 模型的融合能力。脚本会测试模型能不能准确回答“前面那个外卖车为什么要逆行”这种高难度问题。

Alpamayo-R1 (因果逻辑的“硬核推理”)


来源: NVIDIA 在 2026 年初推出的 AR1 (Alpamayo-R1) 架构配套数据。

特点: 强调 Chain of Causation (CoC,因果链)。

为什么测它: 这是目前最前沿的测试。它不满足于你“开得对”,它要求你像 DeepSeek-R1 那样展示出完整的驾驶逻辑闭环。小米通过这个测试证明 OneVL 的逻辑推理能力可以对标 NVIDIA 最新的 R1 级别大模型。

注意:这些数据集都是国外的,国内泛化能力未必好