将机器人 AI 带到嵌入式平台:数据集采集、VLA 微调与端侧优化实践
Title: 将机器人 AI 带到嵌入式平台:数据集采集、VLA 微调与端侧优化
Summary: NXP 在 Hugging Face 发布的一篇博客
Content (Part 1/2): 返回文章列表
近年来,Large Language Models 的进展推动了系统从纯文本推理迈向多模态系统。最初是通过在 Vision–Language Models (VLMs) 中整合视觉感知实现的,最近则进一步发展到由 Vision–Language–Action (VLA) models 直接生成机器人动作。由于算力、内存、功耗约束严格,同时还要满足实时控制要求,把这些模型部署到嵌入式机器人平台上仍然是一个挑战。
在同步控制流水线中,当 VLA 正在做推理时,机械臂会空转等待指令,导致振荡行为和纠偏延迟。为了解决这个问题,asynchronous Inference 可将动作生成与执行解耦,实现更平滑、连续的运动。但要真正生效,端到端推理时延必须短于动作执行时长。这个时间约束也就决定了模型吞吐的上限。
将 VLA 模型带到嵌入式平台,并不是简单做模型压缩,而是一个复杂的系统工程问题,需要架构分解、时延感知调度以及与硬件对齐的执行策略。只有解决这些挑战,才能把多模态基础模型的最新进展转化为可落地、可部署的嵌入式机器人系统。
本指南给出了 NXP 的实战最佳实践,涵盖如何录制可靠的机器人数据集、如何微调 VLA 策略(ACT 与 SmolVLA),并展示了 NXP i.MX95 在优化后的实时性能表现。
🎥 数据集采集:真正重要的是什么
高质量、一致性强的数据,胜过“数量更多但杂乱无章”的数据。本节把踩坑经验整理成可执行的检查清单与方案。
在我们的案例中,采集任务是:“把茶包放进杯子里。”
1) 一致性优先
- 固定相机:使用刚性支架,避免位姿漂移。如果在采集或评估过程中,一个或多个相机因机器人振动或操作员重置环境而发生偏移,精度会明显下降。
- 可控光照:尽量在光照可控的环境中进行(固定光源,并远离日照变化明显的位置)。
- 增强对比度:除非部署场景本来就是如此,否则避免“白色物体对白色背景”的训练条件。尽量提高机械臂、目标物体和环境之间的对比度。
- 固定标定:务必备份机器人和遥操作器的标定数据,避免代码崩溃后不得不重录之前的 episode。
- 不要“作弊”:不要使用模型在推理时拿不到的信息。采集数据时,操作员很容易依赖对场景的直接目视观察,但这会引入数据集中并不存在的信息。数据采集必须限制在策略运行时可用的同一组相机输入上。
2) 使用夹爪相机(强烈推荐)
从仅场景视角切换到混合视角,通常可以提升整体准确率;但相机越多,时延影响也越大。因此必须在两者之间做出合理权衡。就我们而言,3 路相机达到了较好平衡:
Top
Gripper
Left
覆盖整个场景的全局视角。
用于精细抓取和对齐的最近视角。
补充 Top 视角在高度和深度上的信息。
我们强烈建议使用安装在夹爪上的相机。它通过提供近距离、与任务高度相关的视角,能稳定提升精细操作任务的成功率。更重要的是,它也最能约束正确的数据采集流程,让操作员仅依赖机器人感知,而不是直接观察场景。
安装夹爪相机时,建议使用 Velcro 或应力释放导向结构(strain-relief guide) 固定线缆,避免遮挡视野或在运动中脱落。
3) 提升抓持能力
在夹爪爪面套上**热缩管(heat-shrink tubing)**等简单硬件改造,就能提高摩擦力、降低粗糙接触带来的问题、减少 episode 中打滑,并提升任务成功率(减少“差一点成功”的 episode),从而改善策略学习稳定性。
4) 多样性与数据划分
在录制数据集时,你应该:
-
拉开 episode 分布:把工作空间划分为多个起始位置簇(cluster),每个簇至少录制 10 个 episode。再通过改变物体位置和旋转角度来增加多样性。
例如,我们把机械臂可达工作空间划分为 11 个 cluster,每个大小为 10 × 10 cm。
-
区分训练集与验证集:策略很容易在训练集上过拟合,因此验证集必须是模型未见过的数据。
例如,我们把 cluster 6 从训练集中移除。
-
尽可能覆盖更多运动模式:小型 VLA 模型在未见运动上的泛化能力有限。因此应尽量录制覆盖更大自由度范围的 episode。
例如,我们让茶包以水平或垂直两种姿态被抓取。
-
提前考虑失败场景:策略有时第一次无法到达目标,必须“折返再试”。我们观察到,让约 20% 的 episode 对应这类折返情况,有助于提升总体成功率。
例如,我们训练集里约 20% 是恢复 episode(recovery episodes)。
这与 VLA 论文和社区指南中的最佳实践一致。下面是同一 cluster 内数据多样性的 3 个示例:
起始位置 1
起始位置 2
恢复 episode
起始位置 1 和 2 都是同一 cluster 中的不同起点。相比之下,在恢复 episode 中,机器人并非从“起始模式”开始,而是已经位于杯子附近,需要直接从该位置继续回收并抓取茶包。
🎛️ 微调 VLA
我们的实际做法:
- 任务:“抓起茶包并放入杯中。”
- 数据集:
- 120 个 episode:10 个 cluster x(10 个不同茶包起始位置 + 2 个 recovery episode)
- 3 路相机(640x480px,30fps):Top、Gripper、Left
- 将 6 号 cluster 作为验证集移除
- **Batch size:**8
- **训练:**在 200k steps 后,选择验证损失最低的 checkpoint
综合训练集与验证集,在准确率、泛化能力和运动平滑性之间,ACT(每个 chunk 100 actions)的最佳权衡出现在 100k-160k 训练步之间。对于 SmolVLA(每个 chunk 50 actions),这一权衡点要在更后期训练才出现。我们发现,在模型开始过拟合后再略微继续训练,往往能进一步提升整体准确率。
经验法则:最终 checkpoint 应通过训练集与验证集上的任务成功率来选,而不是仅看训练损失。
⚡ 面向 NXP i.MX95 的优化
i.MX95 集成了 6× Arm Cortex‑A55、Cortex‑M7/M33、Mali GPU、新一代 ISP 和 eIQ® Neutron NPU,面向高效、安全的边缘推理,同时支持多相机和强 I/O 能力。[nxp.com]
1) 分而治之
我们没有把模型作为单一的巨型计算图来运行,而是将 VLA 图拆分为多个逻辑阶段:encoder、decoder 和 action expert。这样每个组件都可以独立优化、调度和部署。
在实践中,SmolVLA 被拆分为以下子模块:
- Vision:处理 RGB 相机帧并输出视觉 embedding。
- LLM backbone:基于视觉与文本 embedding 生成 action tokens。
- Action expert:通过 flow matching 迭代去噪 action samples,并输出最终控制指令。
这种拆分支持按模块做优化。你可以量化每个模块的量化(quantization)影响,从而选择时延与精度的最佳权衡。此外,将 action expert 从 VLM 中隔离出来,也很适合以更低频率运行该模块。
2) 量化
为了优化 i.MX95 上的推理,我们在不同模块上尝试了多种量化技术。我们发现,对视觉编码器和 LLM prefill 做量化,对精度影响有限;而对 action expert 中的 denoising flow 进行量化会显著拉低性能。这个现象符合预期,因为量化误差会在迭代去噪步骤中不断累积。
因此,我们决定让这一模块保持更高精度以保证稳定性;同时在其他模块上根据层类型探索了不同的量化配置,从 8-bit 混合精度到 4-bit 量化都有尝试。
此外,我们还对不同模块应用了内部优化。结果见下表,标记为 optimized models。
3) 异步推理:面向控制的调度
在同步控制回路中,流程如下:
- 采集观测
- 运行完整模型推理
- 执行生成的动作
在步骤 (2) 期间,机器人处于空闲状态。如果推理延迟不可忽略,就会产生:
- 运动中的空闲间隙
- 由于观测滞后导致的振荡式修正
- 有效控制频率下降
- 恢复行为变差
采用 Asynchronous Inference 后,动作生成与执行并行进行:
- 机器人执行当前 action chunk
- 同时计算下一个 chunk
这会提升有效控制频率,降低观测滞后,并改善恢复行为。
在 i.MX95 这类嵌入式平台上,异步推理是必需的——但只有当推理延迟控制在 action horizon 预算内时才真正有效:$T_{\text{inference}} < T_{\text{execution}}$
同步推理
异步推理
每个 chunk 的动作数
100
100
FPS
60
60
Chunk size threshold
N/A
0.2
Aggregate function
N/A
weighted_average
动作队列演化
结果
📊 我们在 i.MX95 上取得的结果
实验设置
- 任务:“抓起茶包并放入杯子中。”
- **测试集(20 个 episode):**每个 cluster 随机选取 2 个位置。
- **验证集(10 个 episode):**cluster n°6 的全部 10 个位置。
平台(CPU)
策略
格式
推理延迟
测试集准确率(20)
验证集准确率(10)
总体准确率(30)
i.MX 95
ACT
ONNX FP32
2.86 s
1.00
0.90
0.96
i.MX 95
ACT
Optimized
0.32 s
1.00
0.60
0.89
i.MX 95
SmolVLA
ONNX FP32
29.1 s
0.50
0.40
0.47
⏩ 下一步计划
我们当前的首要目标是提升 SmolVLA(ONNX FP32)的任务准确率。我们已经建立了 baseline,并测得优化后的板端推理延迟为 6.15 s。
下一阶段将聚焦在 NPU 上做更深入优化。与此同时,我们也计划从单任务设置扩展到更长时域、更复杂的场景。为此我们将引入:
- 用于可扩展数据生成与基准测试的仿真环境
- 用于策略优化的强化学习(RL)
- 用于弥合域差异并提升真实世界表现的Sim-to-Real 迁移
我们的目标,是从一个经过验证的单一操作任务,走向一套可复现的方法论,用于在嵌入式机器人系统上部署 VLA 策略。
✅ 可复用检查清单
数据录制
- 固定支架已验证
- 相机对焦与照明良好
- 夹爪抓取状态良好
- 标定文件备份已保存
- 对比度已验证
训练
- 每 20k steps 保存/评估一次 checkpoint
- 同时保存训练参数,以便需要时恢复训练
- 提前准备验证集,以及用于跟踪准确率和延迟的方法
部署到 i.MX95
- 你对当前准确率满意
- 联系我们进行模型优化
📚 资源与灵感
- ACT 文档与论文(核心思路、action chunking、少量示例下的成功率)。[huggingface.co], [arxiv.org]
- SmolVLM/SmolVLA 家族与代码仓库(紧凑型多模态 + VLA 设计)。[huggingface.co], [github.com], [smolvla.net]
- Sherry Chen 的 HF 博客:在 SO‑101 上训练 ACT(实践经验、常见坑点与修复方法)。[huggingface.co]














