Instructions to use aryankakad/cupstack_bspline_act with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use aryankakad/cupstack_bspline_act with LeRobot:
- Notebooks
- Google Colab
- Kaggle
Add checkpoint at step 100000
Browse files- checkpoints/100000/README.md +196 -0
- checkpoints/100000/config.json +83 -0
- checkpoints/100000/model.safetensors +3 -0
- checkpoints/100000/policy_postprocessor.json +12 -0
- checkpoints/100000/policy_preprocessor.json +64 -0
- checkpoints/100000/policy_preprocessor_step_3_normalizer_processor.safetensors +3 -0
- checkpoints/100000/train_config.json +230 -0
checkpoints/100000/README.md
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
library_name: lerobot
|
| 4 |
+
pipeline_tag: robotics
|
| 5 |
+
tags:
|
| 6 |
+
- robotics
|
| 7 |
+
- lerobot
|
| 8 |
+
- imitation-learning
|
| 9 |
+
- act
|
| 10 |
+
- b-spline
|
| 11 |
+
- so101
|
| 12 |
+
- bspline_act
|
| 13 |
+
datasets:
|
| 14 |
+
- aryankakad/CUPSTACKING
|
| 15 |
+
model_name: cupstack_bspline_act
|
| 16 |
+
---
|
| 17 |
+
|
| 18 |
+
# cupstack_bspline_act
|
| 19 |
+
|
| 20 |
+
An [ACT](https://huggingface.co/papers/2304.13705) policy that predicts **B-spline
|
| 21 |
+
trajectory segments** instead of discrete action chunks, trained on SO-101 cup
|
| 22 |
+
stacking. This is the "Reg.+BSP" variant from
|
| 23 |
+
[B-spline Policy: Accelerating Manipulation Policies via B-spline Action Representations](https://arxiv.org/abs/2607.09648).
|
| 24 |
+
|
| 25 |
+
The practical consequence: **you can run this checkpoint faster without retraining it.**
|
| 26 |
+
The policy outputs a curve, so executing `a(n·t)` replays the same trajectory geometry
|
| 27 |
+
n times faster. Speed-up is an inference flag.
|
| 28 |
+
|
| 29 |
+
> [!WARNING]
|
| 30 |
+
> **This checkpoint has never been evaluated on held-out data or on hardware.**
|
| 31 |
+
> It was trained on all 50 episodes with no validation split, so its numbers measure
|
| 32 |
+
> fit, not generalization. Treat first hardware runs as untested — keep the e-stop
|
| 33 |
+
> within reach. See [Limitations](#limitations).
|
| 34 |
+
|
| 35 |
+
## Usage
|
| 36 |
+
|
| 37 |
+
```bash
|
| 38 |
+
lerobot-rollout \
|
| 39 |
+
--strategy.type=base \
|
| 40 |
+
--policy.path=aryankakad/cupstack_bspline_act \
|
| 41 |
+
--policy.speed_up=1.0 \
|
| 42 |
+
--device=cuda \
|
| 43 |
+
--robot.type=so101_follower --robot.port=/dev/ttyACM0 --robot.id=FOLLOWER \
|
| 44 |
+
--robot.cameras='{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, gripper: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}' \
|
| 45 |
+
--task="stack the cups" \
|
| 46 |
+
--fps=30 --duration=30 --display_data=true
|
| 47 |
+
```
|
| 48 |
+
|
| 49 |
+
Raise `--policy.speed_up` to 2.0 or 4.0 to execute faster. Start at 1.0 and step up
|
| 50 |
+
only once the task succeeds.
|
| 51 |
+
|
| 52 |
+
### Camera naming is not optional
|
| 53 |
+
|
| 54 |
+
The policy requires exactly these observation keys, so the `--robot.cameras` dict keys
|
| 55 |
+
must be **`front`** and **`gripper`**, lowercase:
|
| 56 |
+
|
| 57 |
+
| Key | Shape |
|
| 58 |
+
|---|---|
|
| 59 |
+
| `observation.images.front` | `(3, 480, 640)` |
|
| 60 |
+
| `observation.images.gripper` | `(3, 480, 640)` |
|
| 61 |
+
| `observation.state` | `(6,)` |
|
| 62 |
+
|
| 63 |
+
Joint order is `shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll, gripper`.
|
| 64 |
+
Swapping the two cameras produces confident but wrong behaviour rather than an error.
|
| 65 |
+
|
| 66 |
+
### Requirements
|
| 67 |
+
|
| 68 |
+
This policy type is not in upstream LeRobot. You need a checkout containing the
|
| 69 |
+
`bspline_act` policy, installed with the scipy extra:
|
| 70 |
+
|
| 71 |
+
```bash
|
| 72 |
+
uv pip install -e ".[feetech,bspline]"
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
`scipy>=1.15` is required for `interpolate.generate_knots`.
|
| 76 |
+
|
| 77 |
+
### No dataset needed at inference
|
| 78 |
+
|
| 79 |
+
Unnormalization statistics are stored as buffers inside `model.safetensors`, so the
|
| 80 |
+
checkpoint is self-contained. You do not need the training dataset on the robot machine.
|
| 81 |
+
|
| 82 |
+
## Training
|
| 83 |
+
|
| 84 |
+
| | |
|
| 85 |
+
|---|---|
|
| 86 |
+
| Steps | **100,000** |
|
| 87 |
+
| Batch size | 32 |
|
| 88 |
+
| Epochs | 133.09 |
|
| 89 |
+
| Dataset | [`aryankakad/CUPSTACKING`](https://huggingface.co/datasets/aryankakad/CUPSTACKING) → B-spline converted |
|
| 90 |
+
| Episodes / frames | 50 / 24,044 @ 30 fps |
|
| 91 |
+
| Optimizer | AdamW, lr 2e-5 (backbone 1e-5), wd 1e-4 |
|
| 92 |
+
| Precision | bf16 autocast + `channels_last` |
|
| 93 |
+
| Hardware | 1× RTX 4090, 5 h 24 min |
|
| 94 |
+
| Seed | 1000 |
|
| 95 |
+
|
| 96 |
+
Learning rate is 2e-5 rather than ACT's default 1e-5, sqrt-scaled for batch 32.
|
| 97 |
+
|
| 98 |
+
### Loss
|
| 99 |
+
|
| 100 |
+
| Step | loss | l1_loss | kld_loss |
|
| 101 |
+
|---|---|---|---|
|
| 102 |
+
| 500 | 3.027 | 0.390 | 0.264 |
|
| 103 |
+
| 10k | 0.166 | 0.104 | 0.007 |
|
| 104 |
+
| 50k | ~0.111 | 0.041 | 0.007 |
|
| 105 |
+
| **100k** | **0.095** | **0.026** | **0.007** |
|
| 106 |
+
|
| 107 |
+
Training loss only — there was no validation split.
|
| 108 |
+
|
| 109 |
+
## Architecture
|
| 110 |
+
|
| 111 |
+
Standard ACT with one change: the decoder emits a B-spline **parameter matrix** rather
|
| 112 |
+
than an action chunk.
|
| 113 |
+
|
| 114 |
+
```
|
| 115 |
+
(n_knots, 1 + action_dim) = (16, 7) = 112 values per prediction
|
| 116 |
+
column 0 knot vector, in source-frame units, 0 = "now"
|
| 117 |
+
columns 1: control points, one per joint
|
| 118 |
+
```
|
| 119 |
+
|
| 120 |
+
| | |
|
| 121 |
+
|---|---|
|
| 122 |
+
| Params | 52 M |
|
| 123 |
+
| Vision backbone | ResNet18 (ImageNet init) |
|
| 124 |
+
| dim_model / chunk_size | 512 / 16 |
|
| 125 |
+
| VAE | enabled, kl_weight 10.0 |
|
| 126 |
+
| B-spline degree | 3 (cubic, C² continuous) |
|
| 127 |
+
| bspline_chunk_size | 10 |
|
| 128 |
+
| Fitting tolerance ε | 0.2 (degrees) |
|
| 129 |
+
|
| 130 |
+
Knot spacing is fitted adaptively per episode, so a fixed 16 rows covers a **variable**
|
| 131 |
+
time horizon — 0.53 s to 1.47 s per segment on this dataset, 0.84 s mean. The network
|
| 132 |
+
only runs when a segment is exhausted, which decouples policy rate from control rate.
|
| 133 |
+
|
| 134 |
+
### On the fitting tolerance
|
| 135 |
+
|
| 136 |
+
ε = 0.2 is not the paper's value. The paper uses 0.002 for metre-scale end-effector
|
| 137 |
+
actions; SO-101 stores joint targets in **degrees** (~±120), roughly 100× larger. At
|
| 138 |
+
ε = 0.002 compression is 1.06× — one knot per frame, which defeats the representation.
|
| 139 |
+
|
| 140 |
+
| ε | Compression | p99 reconstruction | Segment span |
|
| 141 |
+
|---|---|---|---|
|
| 142 |
+
| 0.05 | 1.4× | 0.05° | 0.44 s |
|
| 143 |
+
| **0.2** | **2.7×** | **0.19°** | **0.84 s** |
|
| 144 |
+
| 0.5 | 4.1× | 0.48° | 1.24 s |
|
| 145 |
+
|
| 146 |
+
2.7× sits inside the paper's reported 1.12×–3.34× range.
|
| 147 |
+
|
| 148 |
+
## Evaluation
|
| 149 |
+
|
| 150 |
+
**Offline only. No hardware evaluation has been performed.**
|
| 151 |
+
|
| 152 |
+
Open-loop prediction error — decoded trajectory vs ground-truth actions, measured on
|
| 153 |
+
**training data**:
|
| 154 |
+
|
| 155 |
+
| Checkpoint | Mean | Median | p90 | Max |
|
| 156 |
+
|---|---|---|---|---|
|
| 157 |
+
| 20k | 5.99° | 4.12° | 8.78° | 45.2° |
|
| 158 |
+
| 50k | 3.34° | 2.28° | 6.53° | 30.8° |
|
| 159 |
+
| **100k** | **2.10°** | **1.61°** | **3.86°** | **18.6°** |
|
| 160 |
+
|
| 161 |
+
Error was still falling at 100k and 2.10° is far from zero, which argues against
|
| 162 |
+
outright memorization — but this is training data, so it is not evidence of
|
| 163 |
+
generalization.
|
| 164 |
+
|
| 165 |
+
The representation is not the bottleneck: B-spline fitting reconstructs to 0.19° p99,
|
| 166 |
+
so essentially all of the 2.10° is policy prediction error.
|
| 167 |
+
|
| 168 |
+
Temporal rescaling is **exact**. On a real predicted segment (0.76 s span), `a(2t)` and
|
| 169 |
+
`a(4t)` reproduce the 1× samples to 0.00e+00, consuming the segment in 22 / 11 / 5
|
| 170 |
+
control ticks.
|
| 171 |
+
|
| 172 |
+
## Limitations
|
| 173 |
+
|
| 174 |
+
- **No validation split.** All 50 episodes were used for training (`eval_steps: 0`).
|
| 175 |
+
Generalization is unmeasured.
|
| 176 |
+
- **No hardware evaluation.** Task success rate is unknown.
|
| 177 |
+
- **Speed-up has a hardware ceiling.** The paper reaches 4× on cube picking but only 2×
|
| 178 |
+
on speed stacking before the low-level controller loses tracking. Cup stacking is the
|
| 179 |
+
same precise-placement regime, so expect degradation near 2×. Retiming does not make
|
| 180 |
+
the arm faster — past the tracking limit it overshoots rather than stopping.
|
| 181 |
+
- **Single task, single scene.** 50 demonstrations of one cup-stacking setup; no
|
| 182 |
+
robustness to lighting, camera placement, or cup position changes should be assumed.
|
| 183 |
+
- **Camera assignment is silent when wrong.** Swapped views degrade behaviour without
|
| 184 |
+
raising an error.
|
| 185 |
+
|
| 186 |
+
## Citation
|
| 187 |
+
|
| 188 |
+
```bibtex
|
| 189 |
+
@article{han2026b,
|
| 190 |
+
title={B-spline Policy: Accelerating Manipulation Policies via B-spline Action Representations},
|
| 191 |
+
author={Han, Xiaoshen and Xiong, Haoyu and Chen, Haonan and Liu, Chaoqi and
|
| 192 |
+
Torralba, Antonio and Zhu, Yuke and Du, Yilun},
|
| 193 |
+
journal={arXiv preprint arXiv:2607.09648},
|
| 194 |
+
year={2026}
|
| 195 |
+
}
|
| 196 |
+
```
|
checkpoints/100000/config.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "bspline_act",
|
| 3 |
+
"n_obs_steps": 1,
|
| 4 |
+
"input_features": {
|
| 5 |
+
"observation.state": {
|
| 6 |
+
"type": "STATE",
|
| 7 |
+
"shape": [
|
| 8 |
+
6
|
| 9 |
+
]
|
| 10 |
+
},
|
| 11 |
+
"observation.images.front": {
|
| 12 |
+
"type": "VISUAL",
|
| 13 |
+
"shape": [
|
| 14 |
+
3,
|
| 15 |
+
480,
|
| 16 |
+
640
|
| 17 |
+
]
|
| 18 |
+
},
|
| 19 |
+
"observation.images.gripper": {
|
| 20 |
+
"type": "VISUAL",
|
| 21 |
+
"shape": [
|
| 22 |
+
3,
|
| 23 |
+
480,
|
| 24 |
+
640
|
| 25 |
+
]
|
| 26 |
+
}
|
| 27 |
+
},
|
| 28 |
+
"output_features": {
|
| 29 |
+
"action": {
|
| 30 |
+
"type": "ACTION",
|
| 31 |
+
"shape": [
|
| 32 |
+
112
|
| 33 |
+
]
|
| 34 |
+
}
|
| 35 |
+
},
|
| 36 |
+
"device": "cuda",
|
| 37 |
+
"use_amp": false,
|
| 38 |
+
"use_peft": false,
|
| 39 |
+
"push_to_hub": false,
|
| 40 |
+
"repo_id": null,
|
| 41 |
+
"private": null,
|
| 42 |
+
"tags": null,
|
| 43 |
+
"license": null,
|
| 44 |
+
"pretrained_path": null,
|
| 45 |
+
"pretrained_revision": null,
|
| 46 |
+
"chunk_size": 16,
|
| 47 |
+
"n_action_steps": 16,
|
| 48 |
+
"normalization_mapping": {
|
| 49 |
+
"VISUAL": "MEAN_STD",
|
| 50 |
+
"STATE": "MEAN_STD",
|
| 51 |
+
"ACTION": "MEAN_STD"
|
| 52 |
+
},
|
| 53 |
+
"vision_backbone": "resnet18",
|
| 54 |
+
"pretrained_backbone_weights": "ResNet18_Weights.IMAGENET1K_V1",
|
| 55 |
+
"replace_final_stride_with_dilation": false,
|
| 56 |
+
"pre_norm": false,
|
| 57 |
+
"dim_model": 512,
|
| 58 |
+
"n_heads": 8,
|
| 59 |
+
"dim_feedforward": 3200,
|
| 60 |
+
"feedforward_activation": "relu",
|
| 61 |
+
"n_encoder_layers": 4,
|
| 62 |
+
"n_decoder_layers": 1,
|
| 63 |
+
"use_vae": true,
|
| 64 |
+
"latent_dim": 32,
|
| 65 |
+
"n_vae_encoder_layers": 4,
|
| 66 |
+
"temporal_ensemble_coeff": null,
|
| 67 |
+
"dropout": 0.1,
|
| 68 |
+
"kl_weight": 10.0,
|
| 69 |
+
"optimizer_lr": 2e-05,
|
| 70 |
+
"optimizer_weight_decay": 0.0001,
|
| 71 |
+
"optimizer_lr_backbone": 1e-05,
|
| 72 |
+
"bspline_degree": 3,
|
| 73 |
+
"bspline_chunk_size": 10,
|
| 74 |
+
"relative_knots": false,
|
| 75 |
+
"speed_up": 1.0,
|
| 76 |
+
"n_decoded_steps": 32,
|
| 77 |
+
"align_segments": true,
|
| 78 |
+
"align_error_threshold": 0.5,
|
| 79 |
+
"align_max_fraction": 0.2,
|
| 80 |
+
"align_exclude_last_dims": 1,
|
| 81 |
+
"replan_margin": 1.0,
|
| 82 |
+
"channels_last": true
|
| 83 |
+
}
|
checkpoints/100000/model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a77d68bc97ef70d0034826afe7e58465472f1573a40581c60defae1cbe52b24c
|
| 3 |
+
size 206360820
|
checkpoints/100000/policy_postprocessor.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "policy_postprocessor",
|
| 3 |
+
"steps": [
|
| 4 |
+
{
|
| 5 |
+
"registry_name": "device_processor",
|
| 6 |
+
"config": {
|
| 7 |
+
"device": "cpu",
|
| 8 |
+
"float_dtype": null
|
| 9 |
+
}
|
| 10 |
+
}
|
| 11 |
+
]
|
| 12 |
+
}
|
checkpoints/100000/policy_preprocessor.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "policy_preprocessor",
|
| 3 |
+
"steps": [
|
| 4 |
+
{
|
| 5 |
+
"registry_name": "rename_observations_processor",
|
| 6 |
+
"config": {
|
| 7 |
+
"rename_map": {}
|
| 8 |
+
}
|
| 9 |
+
},
|
| 10 |
+
{
|
| 11 |
+
"registry_name": "to_batch_processor",
|
| 12 |
+
"config": {}
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"registry_name": "device_processor",
|
| 16 |
+
"config": {
|
| 17 |
+
"device": "cuda",
|
| 18 |
+
"float_dtype": null
|
| 19 |
+
}
|
| 20 |
+
},
|
| 21 |
+
{
|
| 22 |
+
"registry_name": "normalizer_processor",
|
| 23 |
+
"config": {
|
| 24 |
+
"eps": 1e-08,
|
| 25 |
+
"features": {
|
| 26 |
+
"observation.state": {
|
| 27 |
+
"type": "STATE",
|
| 28 |
+
"shape": [
|
| 29 |
+
6
|
| 30 |
+
]
|
| 31 |
+
},
|
| 32 |
+
"observation.images.front": {
|
| 33 |
+
"type": "VISUAL",
|
| 34 |
+
"shape": [
|
| 35 |
+
3,
|
| 36 |
+
480,
|
| 37 |
+
640
|
| 38 |
+
]
|
| 39 |
+
},
|
| 40 |
+
"observation.images.gripper": {
|
| 41 |
+
"type": "VISUAL",
|
| 42 |
+
"shape": [
|
| 43 |
+
3,
|
| 44 |
+
480,
|
| 45 |
+
640
|
| 46 |
+
]
|
| 47 |
+
},
|
| 48 |
+
"action": {
|
| 49 |
+
"type": "ACTION",
|
| 50 |
+
"shape": [
|
| 51 |
+
112
|
| 52 |
+
]
|
| 53 |
+
}
|
| 54 |
+
},
|
| 55 |
+
"norm_map": {
|
| 56 |
+
"VISUAL": "MEAN_STD",
|
| 57 |
+
"STATE": "MEAN_STD",
|
| 58 |
+
"ACTION": "MEAN_STD"
|
| 59 |
+
}
|
| 60 |
+
},
|
| 61 |
+
"state_file": "policy_preprocessor_step_3_normalizer_processor.safetensors"
|
| 62 |
+
}
|
| 63 |
+
]
|
| 64 |
+
}
|
checkpoints/100000/policy_preprocessor_step_3_normalizer_processor.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:02568f8cfc013582b7eb3e22a63efb41cf4125b6adb6ad83935e8dbc2eb6e42c
|
| 3 |
+
size 11592
|
checkpoints/100000/train_config.json
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"dataset": {
|
| 3 |
+
"repo_id": "aryankakad/CUPSTACKING_bspline",
|
| 4 |
+
"root": null,
|
| 5 |
+
"episodes": null,
|
| 6 |
+
"image_transforms": {
|
| 7 |
+
"enable": false,
|
| 8 |
+
"max_num_transforms": 3,
|
| 9 |
+
"random_order": false,
|
| 10 |
+
"tfs": {
|
| 11 |
+
"brightness": {
|
| 12 |
+
"weight": 1.0,
|
| 13 |
+
"type": "ColorJitter",
|
| 14 |
+
"kwargs": {
|
| 15 |
+
"brightness": [
|
| 16 |
+
0.8,
|
| 17 |
+
1.2
|
| 18 |
+
]
|
| 19 |
+
}
|
| 20 |
+
},
|
| 21 |
+
"contrast": {
|
| 22 |
+
"weight": 1.0,
|
| 23 |
+
"type": "ColorJitter",
|
| 24 |
+
"kwargs": {
|
| 25 |
+
"contrast": [
|
| 26 |
+
0.8,
|
| 27 |
+
1.2
|
| 28 |
+
]
|
| 29 |
+
}
|
| 30 |
+
},
|
| 31 |
+
"saturation": {
|
| 32 |
+
"weight": 1.0,
|
| 33 |
+
"type": "ColorJitter",
|
| 34 |
+
"kwargs": {
|
| 35 |
+
"saturation": [
|
| 36 |
+
0.5,
|
| 37 |
+
1.5
|
| 38 |
+
]
|
| 39 |
+
}
|
| 40 |
+
},
|
| 41 |
+
"hue": {
|
| 42 |
+
"weight": 1.0,
|
| 43 |
+
"type": "ColorJitter",
|
| 44 |
+
"kwargs": {
|
| 45 |
+
"hue": [
|
| 46 |
+
-0.05,
|
| 47 |
+
0.05
|
| 48 |
+
]
|
| 49 |
+
}
|
| 50 |
+
},
|
| 51 |
+
"sharpness": {
|
| 52 |
+
"weight": 1.0,
|
| 53 |
+
"type": "SharpnessJitter",
|
| 54 |
+
"kwargs": {
|
| 55 |
+
"sharpness": [
|
| 56 |
+
0.5,
|
| 57 |
+
1.5
|
| 58 |
+
]
|
| 59 |
+
}
|
| 60 |
+
},
|
| 61 |
+
"affine": {
|
| 62 |
+
"weight": 1.0,
|
| 63 |
+
"type": "RandomAffine",
|
| 64 |
+
"kwargs": {
|
| 65 |
+
"degrees": [
|
| 66 |
+
-5.0,
|
| 67 |
+
5.0
|
| 68 |
+
],
|
| 69 |
+
"translate": [
|
| 70 |
+
0.05,
|
| 71 |
+
0.05
|
| 72 |
+
]
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
}
|
| 76 |
+
},
|
| 77 |
+
"revision": null,
|
| 78 |
+
"use_imagenet_stats": true,
|
| 79 |
+
"video_backend": "torchcodec",
|
| 80 |
+
"return_uint8": false,
|
| 81 |
+
"depth_output_unit": "mm",
|
| 82 |
+
"streaming": false,
|
| 83 |
+
"eval_split": 0.0
|
| 84 |
+
},
|
| 85 |
+
"env": null,
|
| 86 |
+
"policy": {
|
| 87 |
+
"type": "bspline_act",
|
| 88 |
+
"n_obs_steps": 1,
|
| 89 |
+
"input_features": {
|
| 90 |
+
"observation.state": {
|
| 91 |
+
"type": "STATE",
|
| 92 |
+
"shape": [
|
| 93 |
+
6
|
| 94 |
+
]
|
| 95 |
+
},
|
| 96 |
+
"observation.images.front": {
|
| 97 |
+
"type": "VISUAL",
|
| 98 |
+
"shape": [
|
| 99 |
+
3,
|
| 100 |
+
480,
|
| 101 |
+
640
|
| 102 |
+
]
|
| 103 |
+
},
|
| 104 |
+
"observation.images.gripper": {
|
| 105 |
+
"type": "VISUAL",
|
| 106 |
+
"shape": [
|
| 107 |
+
3,
|
| 108 |
+
480,
|
| 109 |
+
640
|
| 110 |
+
]
|
| 111 |
+
}
|
| 112 |
+
},
|
| 113 |
+
"output_features": {
|
| 114 |
+
"action": {
|
| 115 |
+
"type": "ACTION",
|
| 116 |
+
"shape": [
|
| 117 |
+
112
|
| 118 |
+
]
|
| 119 |
+
}
|
| 120 |
+
},
|
| 121 |
+
"device": "cuda",
|
| 122 |
+
"use_amp": false,
|
| 123 |
+
"use_peft": false,
|
| 124 |
+
"push_to_hub": false,
|
| 125 |
+
"repo_id": null,
|
| 126 |
+
"private": null,
|
| 127 |
+
"tags": null,
|
| 128 |
+
"license": null,
|
| 129 |
+
"pretrained_path": null,
|
| 130 |
+
"pretrained_revision": null,
|
| 131 |
+
"chunk_size": 16,
|
| 132 |
+
"n_action_steps": 16,
|
| 133 |
+
"normalization_mapping": {
|
| 134 |
+
"VISUAL": "MEAN_STD",
|
| 135 |
+
"STATE": "MEAN_STD",
|
| 136 |
+
"ACTION": "MEAN_STD"
|
| 137 |
+
},
|
| 138 |
+
"vision_backbone": "resnet18",
|
| 139 |
+
"pretrained_backbone_weights": "ResNet18_Weights.IMAGENET1K_V1",
|
| 140 |
+
"replace_final_stride_with_dilation": false,
|
| 141 |
+
"pre_norm": false,
|
| 142 |
+
"dim_model": 512,
|
| 143 |
+
"n_heads": 8,
|
| 144 |
+
"dim_feedforward": 3200,
|
| 145 |
+
"feedforward_activation": "relu",
|
| 146 |
+
"n_encoder_layers": 4,
|
| 147 |
+
"n_decoder_layers": 1,
|
| 148 |
+
"use_vae": true,
|
| 149 |
+
"latent_dim": 32,
|
| 150 |
+
"n_vae_encoder_layers": 4,
|
| 151 |
+
"temporal_ensemble_coeff": null,
|
| 152 |
+
"dropout": 0.1,
|
| 153 |
+
"kl_weight": 10.0,
|
| 154 |
+
"optimizer_lr": 2e-05,
|
| 155 |
+
"optimizer_weight_decay": 0.0001,
|
| 156 |
+
"optimizer_lr_backbone": 1e-05,
|
| 157 |
+
"bspline_degree": 3,
|
| 158 |
+
"bspline_chunk_size": 10,
|
| 159 |
+
"relative_knots": false,
|
| 160 |
+
"speed_up": 1.0,
|
| 161 |
+
"n_decoded_steps": 32,
|
| 162 |
+
"align_segments": true,
|
| 163 |
+
"align_error_threshold": 0.5,
|
| 164 |
+
"align_max_fraction": 0.2,
|
| 165 |
+
"align_exclude_last_dims": 1,
|
| 166 |
+
"replan_margin": 1.0,
|
| 167 |
+
"channels_last": true
|
| 168 |
+
},
|
| 169 |
+
"reward_model": null,
|
| 170 |
+
"output_dir": "/home/sra/mimosa/lerobot/outputs/cupstack_bspline_act",
|
| 171 |
+
"job_name": "cupstack_bspline_act",
|
| 172 |
+
"resume": false,
|
| 173 |
+
"seed": 1000,
|
| 174 |
+
"cudnn_deterministic": false,
|
| 175 |
+
"num_workers": 8,
|
| 176 |
+
"batch_size": 32,
|
| 177 |
+
"prefetch_factor": 4,
|
| 178 |
+
"persistent_workers": true,
|
| 179 |
+
"steps": 100000,
|
| 180 |
+
"env_eval_freq": 20000,
|
| 181 |
+
"log_freq": 500,
|
| 182 |
+
"eval_steps": 0,
|
| 183 |
+
"max_eval_samples": 0,
|
| 184 |
+
"tolerance_s": 0.0001,
|
| 185 |
+
"save_checkpoint": true,
|
| 186 |
+
"save_freq": 10000,
|
| 187 |
+
"use_policy_training_preset": true,
|
| 188 |
+
"optimizer": {
|
| 189 |
+
"type": "adamw",
|
| 190 |
+
"lr": 2e-05,
|
| 191 |
+
"weight_decay": 0.0001,
|
| 192 |
+
"grad_clip_norm": 10.0,
|
| 193 |
+
"betas": [
|
| 194 |
+
0.9,
|
| 195 |
+
0.999
|
| 196 |
+
],
|
| 197 |
+
"eps": 1e-08
|
| 198 |
+
},
|
| 199 |
+
"scheduler": null,
|
| 200 |
+
"eval": {
|
| 201 |
+
"n_episodes": 50,
|
| 202 |
+
"batch_size": 22,
|
| 203 |
+
"use_async_envs": true,
|
| 204 |
+
"recording": false,
|
| 205 |
+
"recording_repo_id": null,
|
| 206 |
+
"recording_private": false
|
| 207 |
+
},
|
| 208 |
+
"wandb": {
|
| 209 |
+
"enable": false,
|
| 210 |
+
"disable_artifact": false,
|
| 211 |
+
"project": "lerobot",
|
| 212 |
+
"entity": null,
|
| 213 |
+
"notes": null,
|
| 214 |
+
"run_id": null,
|
| 215 |
+
"mode": null,
|
| 216 |
+
"add_tags": true
|
| 217 |
+
},
|
| 218 |
+
"peft": null,
|
| 219 |
+
"job": {
|
| 220 |
+
"target": null,
|
| 221 |
+
"image": "huggingface/lerobot-gpu:latest",
|
| 222 |
+
"timeout": "2d",
|
| 223 |
+
"detach": false,
|
| 224 |
+
"tags": []
|
| 225 |
+
},
|
| 226 |
+
"save_checkpoint_to_hub": false,
|
| 227 |
+
"sample_weighting": null,
|
| 228 |
+
"rename_map": {},
|
| 229 |
+
"checkpoint_path": null
|
| 230 |
+
}
|