Instructions to use ahmedsohail2003/act-so101-pickplace-dr2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use ahmedsohail2003/act-so101-pickplace-dr2 with LeRobot:
- Notebooks
- Google Colab
- Kaggle
act-so101-pickplace-dr2 β targeted-coverage retrain (a coverage whack-a-mole result)
ACT (~52M) trained from scratch on
so101-sim-pickplace-dr2 β
210 domain-randomized SO-ARM100 pick-and-place demonstrations of which ~30%
deliberately oversample a small near-field spawn band (rβ[0.19,0.23],
ΞΈβ[β14Β°,+2Β°]) covering the pocket where the previous best policy,
ACT-DR, put all
5 of its 50-episode-eval failures (spawn r β 0.19β0.21 m). Same recipe
otherwise (chunk 45, n_action_steps 15, batch 8; 75k steps to approximately
match epochs on the larger set, ~25.7 vs ~28.7). The hypothesis was β₯95%
nominal. The result is a documented negative: the targeted data closed the
measured hole everywhere we probed β and opened a new one.
Results
50 evaluation episodes, fixed eval seed (identical spawn sequence for both models):
| 50-ep nominal | failures (episode #) | |
|---|---|---|
| ACT-DR | 45/50 (90%) | {1, 10, 22, 25, 26} β all near-field, spawn rβ0.19β0.21 |
| ACT-dr2 (this model) | 44/50 (88%) | {3, 6, 8, 26, 43, 44} β five far-field, spawn rβ0.256β0.266, plus shared ep 26 |
The two failure sets share only episode 26. dr2 fixed 4 of ACT-DR's 5
failures and introduced 5 new ones β a coverage swap, confirmed on fixed
spawn grids (scripts/probe_spawns.py):
| 12-spawn fixed grid | ACT-DR | ACT-dr2 |
|---|---|---|
| old pocket (r 0.200β0.212, ΞΈ β10Β°β¦β3Β°) | 5/12 | 12/12 |
| far field (r 0.250β0.268, ΞΈ β9Β°β¦β1Β°) | 12/12 | 4/12 (0/8 at r β₯ 0.259) |
Robustness sweep (15 eps/level, same seed across levels):
| nominal | + visual DR | + physics DR | + full DR | |
|---|---|---|---|---|
| ACT-DR | 87% | 87% | 87% | 100% |
| ACT-dr2 | 80% | 87% | 73% | 93% |
Temporal ensembling (inference-only, coeff 0.01, 20 eps): 18/20 (90%) β comparable to ACT-DR's 18/20 under the same protocol.
What this negative result teaches
- Oversampling a failure pocket inside a fixed step budget appears to reallocate precision rather than add it. Under an equal-weight L1 loss, ~30% of gradient mass now serves a narrow near-field band; per-epoch relative exposure to the rest of the workspace drops correspondingly, and the policy regressed exactly where demands are highest β near maximum reach (r β₯ 0.259 m, with the spawn range capped at 0.27 m). ACT-DR, trained on the uniform 150-episode set, is 12/12 there. (Caveat: dr2 also differs in episode count and steps; the isolating control is below.)
- Point evals hide this. Nominal success barely moved (90% β 88%, well within noise at n=50). Only the per-episode failure comparison and the fixed spawn grids exposed that the model is different, not merely equal.
- The residual shared failure (episode 26, the nearest-to-base spawn) resists both data distributions.
Follow-ups this predicts: append pocket episodes to the full uniform set at a lower mixing fraction (e.g. 10β15%), or reweight per-sample loss instead of resampling β either preserves far-field exposure while still covering the pocket. The cleanest attribution experiment is an untargeted 210-episode control retrain at 75k steps, which isolates the reweighting effect from the episode-count/step changes.
Training
- LeRobot 0.6.0
lerobot-train, single Kaggle T4, AMP β 75k steps (~25.7 epochs of 210 episodes; ACT-DR: 60k steps β 28.7 epochs of 150) --policy.type=act --policy.chunk_size=45 --policy.n_action_steps=15 --batch_size=8
Use
from lerobot.policies import make_pre_post_processors
from lerobot.policies.act.modeling_act import ACTPolicy
repo = "ahmedsohail2003/act-so101-pickplace-dr2"
policy = ACTPolicy.from_pretrained(repo).to("cuda").eval()
pre, post = make_pre_post_processors(
policy_cfg=policy.config, pretrained_path=repo,
preprocessor_overrides={"device_processor": {"device": "cuda"}},
)
# batch: observation.state (1,6) + observation.images.front / .wrist (1,3,224,224) in [0,1]
action = post(policy.select_action(pre(batch)))
The Sim2Cell ACT family
| Model | Data | Nominal | Robustness (n/v/p/f) |
|---|---|---|---|
| act v1 (local) | 100 nominal eps | 65% (20 eps) | 60/60/53/40 |
| -v2 | 160 eps + recovery demos | 50% (20 eps) | 47/33/40/33 |
| -dr | 150 DR eps | 90% (50 eps) | 87/87/87/100 |
| -dr2 (this) | 210 DR eps, 30% pocket | 88% (50 eps) | 80/87/73/93 |
Full study in the Part A README.
Provenance
Data recorded by a scripted expert (success-filtered) in the author's MuJoCo
work-cell; robot model from
MuJoCo Menagerie
(trs_so_arm100, Apache-2.0).
- Downloads last month
- -