CoolFace
Modelpublic

PID0930/groot-n1d7-openarm-bottle-sort-ckpt15000

sourceHugging Faceapache-2.0updated 20d agoView on Hugging Face
0likes28downloads
Model Card

GR00T N1.7 — OpenArm bimanual bottle sort (checkpoint 15,000)

Post-trained `nvidia/GR00T-N1.7-3B` on an OpenArm bimanual manipulation dataset.

Task: "Put the two bottles on the left into the left bowl and the two bottles on the right into the right bowl."

This repo is the step 15,000 checkpoint (2.23 epochs) of a 20,000-step run. Sibling checkpoints from the same run are published separately:

These checkpoints have not been ranked by any validation metric. GR00T's fine-tuning path cannot compute a validation loss (launch_finetune.py exposes no --eval-strategy flag and gr00t/data/dataset/factory.py asserts eval_strategy == "no"), so the table above is training loss only. A lower training loss does not establish better generalization. Rank them with open-loop evaluation before choosing one.

Embodiment

OpenArm bimanual, 16-D joint space, 3 cameras.

embodiment tagNEW_EMBODIMENT
state / actionleft_arm(7) left_hand(1) right_arm(7) right_hand(1)
cameraschest_view, left_wrist_view, right_wrist_view — 480x640
action representationarms RELATIVE, hands ABSOLUTE, both NON_EEF
action horizon16 steps @ 30 fps (~0.53 s)
language keyannotation.human.action.task_description

A matching modality config is required at inference time; see Usage below.

Training

base modelnvidia/GR00T-N1.7-3B (VLM backbone nvidia/Cosmos-Reason2-2B)
data600 episodes / 224,608 frames @ 30 fps, single task
trainableprojector + flow-matching DiT action head — the 2B backbone stays frozen
batch size32 (global, 1x A100 80GB)
optimizerAdamW, lr 1e-4, cosine decay, warmup ratio 0.05, weight decay 1e-5
precisionbf16
steps15,000 of 20,000
hardware1x A100 80GB PCIe, ~5 h for the full 20,000 steps

--tune-llm and --tune-visual were left off, so this checkpoint adapts the action head and projector only.

Usage

Requires Isaac-GR00T (N1.7 / gr00t_n1d7) and access to the gated backbone nvidia/Cosmos-Reason2-2B.

python
from gr00t.model.gr00t_n1d7.setup import Gr00tPolicy
from gr00t.data.embodiment_tags import EmbodimentTag

# register the modality config for NEW_EMBODIMENT first — see the repo's
# openarm_config.py (arms RELATIVE, hands ABSOLUTE, action horizon 16)
import openarm_config  # noqa: F401

policy = Gr00tPolicy(
    model_path="PID0930/groot-n1d7-openarm-bottle-sort-ckpt15000",
    embodiment_tag=EmbodimentTag.NEW_EMBODIMENT,
    device="cuda",
)

Open-loop evaluation against a held-out episode:

sh
uv run python gr00t/eval/open_loop_eval.py \
    --dataset-path <your lerobot dataset> \
    --embodiment-tag NEW_EMBODIMENT \
    --model-path PID0930/groot-n1d7-openarm-bottle-sort-ckpt15000 \
    --traj-ids 0 --execution-horizon 16 --steps 400 \
    --modality-keys left_arm left_hand right_arm right_hand

Contents

Full training-state checkpoint, including optimizer.pt so training can be resumed. Inference needs only the safetensors shards plus config.json, processor_config.json, statistics.json and embodiment_id.json.

Limitations

  • Trained on a single task with a fixed scene layout. Episodes are unusually uniform (357-386 frames, 11.9-12.9 s), so robustness to layout, lighting or object changes is untested.
  • No validation or real-robot success rate has been measured. Treat as a research artifact.
  • The frozen backbone means visual features were not adapted to this robot's cameras.

License

Apache 2.0, inherited from nvidia/GR00T-N1.7-3B.