--- license: mit library_name: starvla pipeline_tag: robotics tags: - starvla - qwengr00t - qwen3-vl - gr00t - flow-matching - so101 - leisaac - pick-orange - isaac-sim datasets: - LightwheelAI/leisaac-pick-orange language: - en base_model: Qwen/Qwen3-VL-4B-Instruct --- # StarVLA-PickOrange (QwenGR00T, freeze-VLM) 针对 [LeIsaac SO-101 PickOrange](https://github.com/LightwheelAI/leisaac) 任务训练的 [StarVLA](https://github.com/starVLA/starVLA) **QwenGR00T** 策略:**Qwen3-VL-4B** 视觉语言骨干(冻结)+ **GR00T N1.5 flow-matching DiT 动作头**(仅训此头,~0.47B)。 _A [StarVLA](https://github.com/starVLA/starVLA) **QwenGR00T** policy (Qwen3-VL-4B VLM backbone, **frozen** + **GR00T N1.5 flow-matching DiT action head**, ~0.47B trainable) for the [LeIsaac SO-101 PickOrange](https://github.com/LightwheelAI/leisaac) task._ ![StarVLA-PickOrange step-18k — SO-101 in Isaac Sim](starvla-pickorange.jpg) **🔗 项目仓库 / Project repos**: - [vitorcen/isaaclab-experience](https://github.com/vitorcen/isaaclab-experience) — Isaac Lab + LeIsaac 多策略横评(parent project) - [vitorcen/LeIsaac-Training](https://github.com/vitorcen/LeIsaac-Training) — LeIsaac fork(训练脚本 + 设计文档 / training scripts + design docs) ## TL;DR - **任务 / Task**:`Grab orange and place into plate` — SO-101 单臂依次夹起 3 颗橙子并放盘子。 _Single-arm SO-101 picks 3 oranges sequentially and places each into a plate._ - **数据集 / Dataset**:[`LightwheelAI/leisaac-pick-orange`](https://huggingface.co/datasets/LightwheelAI/leisaac-pick-orange) — 60 episode 遥操示范。 - **架构 / Architecture**:StarVLA **QwenGR00T** = Qwen3-VL-4B(冻结,`freeze_modules: qwen_vl_interface`)+ GR00T N1.5 flow-matching DiT-B 动作头(action_horizon=16, 6-DOF)。双相机 @ **448×448**(橙子只占 10-40px,224 是 vision death zone)。 - **训练 / Training**:冻 VLM 只训动作头 / batch=8 / cosine lr(head 1e-4)/ bf16 / DeepSpeed ZeRO-2 / 云端 4080-32G。 - **评测 / Eval**(**strict 20-round**,与 leaderboard 同口径:120s sim × 180s wall_cap × stuck 30s/0.05rad):**P(3)=10% (2/20)**,**E(🍊)/ep=35.0% (21/60 oranges)**,avg 169.8s。 - **⚠️ 这是偏弱档结果(negative-ish archive)**:60 demo + 冻 VLM 双不足;主死因是慢(17/20 轮撞 180s 墙钟放不完 3 颗),非乱动。**发布以记录"此路偏弱"、防社区重踩。** ## 关键发现 / Key findings - **倒 U 过拟合曲线**:云端 sweep(非标准快筛口径)显示峰值 ~15k 步、>21k 塌陷(手臂晃动悬停)。step-18000 是过拟合前的现存最优。 _Inverted-U overfitting curve: peak around step ~15k, collapse past ~21k (arm wobbles / hovers without committing the grasp). step-18000 is the best surviving pre-collapse checkpoint._ - **3-round → 20-round 方差铁证**:step-18000 在 3-round 快筛是 33% (1/3),**strict 20-round 真值仅 10% P(3)** — 3 倍偏差。**所有对外数必须 ≥20-round**。 _3-round gave a misleading 33%; strict 20-round revealed the true 10%. Always report ≥20-round._ - **同 action head 族对照**:QwenGR00T 与 leaderboard 上自训 GR00T-N1.6 (46.7%) / N1.7 (68.3%) **共用 GR00T flow-matching 动作头**,差别在 **VLM 骨干 + 训练方式**:StarVLA 冻 Qwen3-VL 只训头;GR00T-N1.x 全模型微调自家骨干。35% vs 68% 的差距主要来自此。 - **提分杠杆 / Levers**:① 解冻 VLM 顶层 N 层;② 加 demo(60 → 100+);③ 换 **PI_v3 动作头**(StarVLA model_zoo 上 Qwen3-VL-PI_v3 在 Bridge=69.8 > GR00T head=65.3),从 [`StarVLA/Qwen3VL-PI_v3-Bridge-RT_1`](https://huggingface.co/StarVLA/Qwen3VL-PI_v3-Bridge-RT_1) 初始化。 ## 评测结果 / Evaluation **Strict 20-round**(60 oranges total,leaderboard 同条件): | 指标 / Metric | 值 / Value | |---|---| | E(🍊)/ep | **35.0%** (21/60) | | P(3)(单 ep 放满 3 颗)| **10%** (2/20) | | P(≥2) | 35% (7/20) | | avg round | 169.8s | 20-ep raw oranges:`[1,3,0,1,0,0,2,3,2,1,0,2,1,1,2,0,2,0,0,0]`(干净 3/3 成功:ep2 @ 56s、ep8 @ 166s)。 > 完整横评榜单见父项目 [README leaderboard](https://github.com/vitorcen/isaaclab-experience#-vla-推理实测leisaac-so-101-pickorange):35.0% 排在自训 ACT (43.3%) 与 shadowHokage ACT (28.3%) 之间。 ## 文件 / Files | 文件 | 说明 | |---|---| | `checkpoints/steps_18000_pytorch_model.pt` | 权重(~9.97 GB,冻结的 Qwen3-VL-4B + 训练的 GR00T 动作头) | | `config.yaml` | 训练/推理重建配置(`baseframework.from_pretrained` 读取;`base_vlm` 指向 `Qwen/Qwen3-VL-4B-Instruct`) | | `dataset_statistics.json` | 动作反归一化统计 | | `modality.json` | 6-DOF state/action + 双相机 modality 映射 | | `config_so101_qwengr00t.yaml` / `run_so101_train.sh` | 训练入口配方 | ## 推理 / Inference StarVLA 的 `PolicyServerWrapper(ckpt_path).from_pretrained` 从 `config.yaml`(+`dataset_statistics.json`)重建框架并加载权重。本项目用一个 openpi msgpack-numpy websocket 适配器把它接进 LeIsaac Isaac Sim(stateless 双相机 @ 448): ```bash # serve(starvla_eval 环境) python LeIsaac/scripts/evaluation/serve_starvla.py \ --ckpt checkpoints/steps_18000_pytorch_model.pt \ --base /path/to/Qwen3-VL-4B-Instruct --port 8002 --img_size 448 # Isaac Sim 客户端 eval(与 leaderboard 同参) python LeIsaac/scripts/evaluation/policy_inference.py \ --task=LeIsaac-SO101-PickOrange-v0 --policy_type=starvla \ --eval_rounds=20 --episode_length_s=120 --max_round_wall_s=180 \ --step_hz=30 --policy_action_horizon=16 --policy_port=8002 --enable_cameras ``` serve + client 实现见 [`serve_starvla.py`](https://github.com/vitorcen/LeIsaac-Training/blob/main/scripts/evaluation/serve_starvla.py) 与 `StarVLAServicePolicyClient`。 ## 限制 / Limitations - **偏弱档**:P(3)=10% 在 leaderboard 上属弱档(GR00T-N1.7 = 50%)。主因 60 demo + 冻 VLM 容量/数据双不足。 - **慢**:17/20 轮撞 180s 墙钟没放完 3 颗 —— 策略在认真抓放(35% 橙子率)但不够果断高效。 - **小样本置信**:20-round (60 ep) CI ≈ ±10%(单 ep 级 Bernoulli noise)。 ## 引用 / Citations - **StarVLA**: [_StarVLA: A Lego-like Codebase for Vision-Language-Action Model Developing_](https://arxiv.org/abs/2604.05014), HKUST, 2026 · [github.com/starVLA/starVLA](https://github.com/starVLA/starVLA). - **GR00T action head**: NVIDIA Isaac GR00T N1.5(flow-matching DiT action expert)。 - **Qwen3-VL**: [Qwen/Qwen3-VL-4B-Instruct](https://huggingface.co/Qwen/Qwen3-VL-4B-Instruct). - **LeIsaac SO-101 PickOrange**: [LightwheelAI/leisaac](https://github.com/LightwheelAI/leisaac). ## License MIT,与 StarVLA 一致(base VLM Qwen3-VL-4B 受其各自许可约束)。