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 数据集
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 级别大模型。
注意:这些数据集都是国外的,国内泛化能力未必好