Downloads · 30 days
11
16% of all-time downloads
khanhnd61/impact_so101_tape
impact_so101_tape is a robotics model from khanhnd61. Use it for the robotics task on the model card, and read the license before you ship it in a product. It is set up for lerobot. The card lists the license as apache-2.0.
Instruction-Modulated Perception + ACTion chunking: ACT with a language tower. Two camera frames, a 6-dim joint state and a natural-language instruction go in; a 50-step action chunk comes out in one forward pass.
Downloads · 30 days
11
16% of all-time downloads
All-time downloads
67
Public
Parameters
78M
312 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors312 MB · 100%
From the Hugging Face model README
Instruction-Modulated Perception + ACTion chunking: ACT with a language tower. Two camera frames, a 6-dim joint state and a natural-language instruction go in; a 50-step action chunk comes out in one forward pass.
The instruction enters twice — as 32 tokens appended to the DETR encoder sequence, and as FiLM scale/shift on the ResNet-18 stages, so language modulates perception rather than only the fused memory.
It is trained on a single task — khanhnd61/so101-tape, one instruction ("Put the
tape into the box") on every frame. With no instruction variation there is no gradient
signal asking the language pathway to do anything, and the FiLM head barely moves off its
zero initialization (‖W‖∞ = 0.0015 after 4000 steps).
So: this checkpoint exercises the architecture end to end and gives the CPU port a real
checkpoint to be validated against. It is not evidence that IMPACT uses language. That
claim needs a multi-task dataset whose tasks share a scene and differ only by instruction,
plus the use_film=false and language_dropout=1.0 ablation arms. Do not read the loss
curve as instruction following.
| ACT | IMPACT | |
|---|---|---|
| encoder / decoder layers | 4 / 1 | 6 / 4 |
| chunk | 100 | 50 (1.67 s at 30 Hz) |
| language | — | frozen T5-small, 32 tokens, + FiLM |
| trainable params | 34M | 78M (113M incl. the frozen tower) |
chunk_size is halved because the point of a policy you can talk to is retasking it, and
at 30 Hz a 100-step chunk means a new instruction takes up to 3.33 s to take effect.
The frozen T5-small tower is not in this checkpoint — it is fully determined by
google-t5/t5-small and re-fetched on load, so model.safetensors holds the 78M trainable
tensors. load_state_dict reports those keys as missing; that is expected.
lerobot-train --policy.type=impact \
--dataset.repo_id=khanhnd61/so101-tape_20260804_224429 \
--batch_size=8 --steps=4000 --save_freq=1000 --policy.device=cuda
3434 frames / 10 episodes, ~2.7 step/s on an RTX 3060 (≈25 min). Final l1_loss 0.146.
Runs on CPU through vla.simd's tcpu_impact
engine. Query latency (median warm, fp32):
| device | threads | latency | stall @ 30 Hz |
|---|---|---|---|
| Apple M4 | 8 | 108.8 ms | 0.065 |
| Intel i9-14900HX | 16 | 151.2 ms | 0.091 |
| AMD Ryzen 5 5500 | 12 | 190.9 ms | 0.115 |
| Raspberry Pi 5 | 4 | 1168.6 ms | 0.701 |
Stall = latency ÷ executed motion. Below 1.0 the policy keeps up with the chunk it emits; IMPACT is the only language-conditioned policy in that engine that closes the loop on a Pi 5. Latency is weight-independent, so these hold for this checkpoint.
The C++ engine is validated against this exact checkpoint: tokenization bit-exact, FiLM γ/β to 1.3e-07, action chunk to 1.5e-06 max abs against an action magnitude of 1.364 — the fp32 noise floor.