跳到主要内容
Projects/SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造 · 第 6 阶段

SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造 · 第 6 阶段

基于双 奥比中光 相机、增强深度、B601-DM 主从臂和 SmolVLA,复现高反光桌面上透明瓶与香蕉模型的自主整理链路。

Apache-2.0 / MIT

01 / DOCUMENTATION 内容概述

系列教程第 6/7 阶段:上传代码、数据和离线模型,完成训练环境校验、冒烟测试、正式训练与 checkpoint 检查。

02 / DOCUMENTATION 上传云端并训练 SmolVLA ☁️

SmolVLA RGB-D 数据、云端训练与 Jetson 部署流程
SmolVLA RGB-D 数据、云端训练与 Jetson 部署流程

03 / DOCUMENTATION 11.1 上传哪些内容?

建议上传:

  • 当前修改版代码仓库。

  • 合并后的完整数据集目录。

  • smolvla_base 本地模型目录。

  • SmolVLM2-500M-Video-Instruct 本地目录。

云端不需要编译或运行 Orbbec C++ bridge,因为训练读取的是已经采好的数据。Jetson 上的 model.sm4 和相机许可也不需要上传到云端。

04 / DOCUMENTATION 11.2 复制仓库后一定重新安装 editable package

Conda 环境中的 editable install 保存绝对路径。把仓库直接复制到云端后,旧 lerobot-train 可能仍指向不存在的原机器目录。

代码块
Bash
cd /root/gpufree-data/reBotArm_SmolVLApython -m pip install -e ".[smolvla]"python -c 'import lerobot; print(lerobot.__file__)'

训练脚本也会把当前仓库的 src 放到 PYTHONPATH,并使用 python -m lerobot.scripts.lerobot_train,进一步避免调用旧入口。

05 / DOCUMENTATION 11.3 离线下载模型时,仓库 ID 使用正斜杠

Windows 下错误示例:

代码块
纯文本
lerobotsmolvla_base

Hugging Face repo id 不是文件路径,正确命令是:

代码块
Bash
hf download lerobot/smolvla_base   --local-dir models/smolvla_base
hf download HuggingFaceTB/SmolVLM2-500M-Video-Instruct   --local-dir models/SmolVLM2-500M-Video-Instruct   --exclude "onnx/*"

仅上传 smolvla_base 还不够。SmolVLA 在构造 VLM 和 tokenizer 时仍需要 SmolVLM2 的 config/processor/tokenizer。当前 factory 会把本地 vlm_model_name 同步覆盖给 tokenizer,避免离线训练时偷偷访问 Hugging Face Hub。

06 / DOCUMENTATION 11.4 云端建议先做 2-step 冒烟测试

代码块
Bash
bash examples/rebot_b601_smolvla_record/train_smolvla_local.sh   --dataset-root /root/gpufree-data/datasets/rebot_b601_banana_bottle_rgbd_merged   --repo-id local/rebot_b601_banana_bottle_rgbd_merged   --policy-path /root/gpufree-data/models/smolvla_base   --vlm-path /root/gpufree-data/models/SmolVLM2-500M-Video-Instruct   --output-dir /root/gpufree-data/outputs/rebot_smolvla_smoke   --batch-size 2   --steps 2   --save-freq 2   --num-workers 0

启动日志必须显示:

代码块
纯文本
observation.state             (21,)observation.images.wrist      (3, 480, 640)observation.images.top        (3, 480, 640)observation.images.top_depth  (3, 480, 640)action                        (7,)

如果仍是 camera1/camera2/camera3 和 6 维 action,立刻停止。那说明基础 checkpoint 的通用 embodiment feature 没有正确绑定到 B601 数据集。

冒烟测试前还应随机抽查若干 observation.images.top_depth:透明瓶区域不应在所有帧中完全等同于桌面,桌面高光附近也不应持续整片黑屏;同时确认增强深度与 top RGB 没有明显空间错位。训练能够启动只证明 schema 正确,不证明视觉数据有效。

短冒烟测试 GPU 只有约 50% 利用率很正常:两步训练包含加载、预处理和收尾,不能代表稳定吞吐,也不能据此直接把 batch 拉到极端。

07 / DOCUMENTATION 11.5 RTX 4090 24GB 正式训练参数

本项目成功完成的配置:

代码块
Bash
RUN_TAG="$(date +%Y%m%d_%H%M%S)"OUTPUT_DIR="/root/gpufree-data/outputs/rebot_smolvla_b601_${RUN_TAG}"
bash examples/rebot_b601_smolvla_record/train_smolvla_local.sh   --dataset-root /root/gpufree-data/datasets/rebot_b601_banana_bottle_rgbd_merged   --repo-id local/rebot_b601_banana_bottle_rgbd_merged   --policy-path /root/gpufree-data/models/smolvla_base   --vlm-path /root/gpufree-data/models/SmolVLM2-500M-Video-Instruct   --output-dir "${OUTPUT_DIR}"   --batch-size 12   --num-workers 8   --steps 14000   --save-freq 3500   --log-freq 100   --optimizer-lr 1e-4   --scheduler-warmup-steps 700   --scheduler-decay-steps 14000   --use-amp true

训练策略:

代码块
纯文本
freeze_vision_encoder = truetrain_expert_only     = truen_action_steps        = 10

08 / DOCUMENTATION 11.6 记录 GPU 状态

可以另开终端:

代码块
Bash
mkdir -p /root/gpufree-data/diag
nvidia-smi   --query-gpu=timestamp,index,name,temperature.gpu,utilization.gpu,utilization.memory,memory.used,memory.total,power.draw   --format=csv   -l 1 | tee /root/gpufree-data/diag/gpu_train.csv

训练日志同时保存:

代码块
Bash
bash examples/rebot_b601_smolvla_record/train_smolvla_local.sh ...   2>&1 | tee /root/gpufree-data/diag/train.log

09 / DOCUMENTATION 11.7 训练结果怎么看?

指标结果
数据量43 episodes,18,392 frames,10 FPS
Batch size12
Steps14,000
数据集等效周期约 9.13 epochs
可训练参数约 100M
总参数约 450M
Loss0.362 → 0.016
Gradient norm2.735 → 0.216,无爆炸或 NaN
Checkpoints3,500 / 7,000 / 10,500 / 14,000
总耗时85 分 55 秒

上面的是我一次稳定收敛的训练,但不是“实机已经成功”的证明。训练没有独立验证环境,而且 10,500 step 后 loss 已在 0.016-0.017 附近平台化。模型可能只是更熟练地拟合常见摆放,却仍会在“透明瓶与桌面高光重叠”时失败。最终必须比较 7,000、10,500 和 14,000 三个检查点在分层实机测试中的任务成功率。

硬件

软件应用和在线服务

实现步骤

01

上传训练资料

将修改版代码、合并数据集、smolvla_base 与 SmolVLM2 本地目录上传到云端

RGB-D 数据、RTX 4090 训练与 Jetson 部署流程
RGB-D 数据、RTX 4090 训练与 Jetson 部署流程
02

重新安装 editable package

在云端仓库目录重新安装,避免入口仍指向本地旧绝对路径

03

核对离线模型 ID

使用正斜杠仓库 ID,并确认 tokenizer、processor 和模型文件齐全

04

执行 2-step 冒烟测试

用最小训练步数验证数据加载、模型前向、反向、保存和日志链路

05

配置 RTX 4090 正式训练

设置 batch、梯度累积、训练步数、保存频率、数据键和输出目录

06

监控 GPU 与训练日志

检查显存、利用率、loss、吞吐、NaN、数据等待和 checkpoint 写入

07

比较训练检查点

保留并比较 7000、10500 与 14000 step,不只根据训练 loss 选择模型

项目结果

SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造 · 第 6 阶段 项目结果
SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造 · 第 6 阶段

在 RTX 4090 上完成 SmolVLA 训练并生成多个可部署 checkpoint。一次稳定训练的 loss 在约 0.016-0.017 附近平台化,但没有独立验证环境,因此训练收敛不能替代分层实机成功率测试。

Bladewin Smith
我成功复现了

评论

0 comments