Instructions to use NeoteAI/n0-twam-task-specific with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use NeoteAI/n0-twam-task-specific with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("NeoteAI/n0-twam-task-specific", dtype=torch.bfloat16, device_map="cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
Add model card
Browse files
README.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
---
|
| 4 |
+
|
| 5 |
+
# N0-TWAM task-specific checkpoints (one checkpoint per task)
|
| 6 |
+
|
| 7 |
+
Twenty task-specific post-trained N0-TWAM checkpoints: the 8 UniVTAC single-arm tasks and
|
| 8 |
+
the 12 NeoSim tasks (4 single-arm + 8 dual-arm). Each checkpoint was post-trained on a single
|
| 9 |
+
task.
|
| 10 |
+
|
| 11 |
+
The action space of each checkpoint, **absEE** (absolute end-effector) or **delta EE**
|
| 12 |
+
(horizon delta), is listed per task below.
|
| 13 |
+
|
| 14 |
+
## UniVTAC 8
|
| 15 |
+
|
| 16 |
+
| Task (NeoSim env) | Arms | Action space | `TWAM_SERVE_TASK` | Prompt (send verbatim) |
|
| 17 |
+
|---|---|---|---|---|
|
| 18 |
+
| `insert_hole` | single | delta EE | `univtac_insert_hole_rot6d_current` | Insert the peg into the hole |
|
| 19 |
+
| `insert_tube` | single | delta EE | `univtac_insert_tube_rot6d_current` | Insert the tube into the slot |
|
| 20 |
+
| `grasp_classify` | single | delta EE | `univtac_grasp_classify_hdf5_current` | Grasp classify |
|
| 21 |
+
| `pull_out_key` | single | delta EE | `univtac_pull_out_key_rot6d_current` | Extract a key from a lock |
|
| 22 |
+
| `insert_HDMI` | single | delta EE | `univtac_insert_HDMI_rot6d_current` | Insert the HDMI connector into the slot |
|
| 23 |
+
| `put_bottle_in_shelf` | single | delta EE | `univtac_put_bottle_in_shelf_rot6d_current` | Place a bottle onto a shelf |
|
| 24 |
+
| `lift_can` | single | absEE | `univtac_lift_can_rot6d_current` | Lift the can |
|
| 25 |
+
| `lift_bottle` | single | absEE | `univtac_lift_bottle_rot6d_current` | Lift the bottle |
|
| 26 |
+
|
| 27 |
+
## NeoSim 12
|
| 28 |
+
|
| 29 |
+
| Task (NeoSim env) | Arms | Action space | `TWAM_SERVE_TASK` | Prompt (send verbatim) |
|
| 30 |
+
|---|---|---|---|---|
|
| 31 |
+
| `grasp_chip` | single | absEE | `univtac_grasp_chip_hdf5_current` | Grasp chip |
|
| 32 |
+
| `insert_USB` | single | delta EE | `univtac_insert_USB_hdf5_current` | Insert USB |
|
| 33 |
+
| `phone_socket_replug` | single | absEE | `univtac_phone_socket_replug_hdf5_current` | Pull a phone connector out of its socket and plug it back in |
|
| 34 |
+
| `pour_ball` | single | delta EE | `univtac_pour_ball_hdf5_current` | Grasp a cup and pour the balls inside it out onto a plate |
|
| 35 |
+
| `dual_bowl_place_stack` | dual | delta EE | `univtac_dual_bowl_stack_hdf5_current` | Use dual arms to stack a bowl |
|
| 36 |
+
| `dual_plate_place_stack` | dual | delta EE | `univtac_dual_plate_stack_hdf5_current` | Use dual arms to stack a plate |
|
| 37 |
+
| `dual_bowl_unstack` | dual | delta EE | `univtac_dual_bowl_unstack_hdf5_current` | Use dual arms to unstack a bowl |
|
| 38 |
+
| `dual_screw_sleeve` | dual | delta EE | `univtac_dual_screw_sleeve_hdf5_current` | Use dual arms to screw the sleeve |
|
| 39 |
+
| `dual_cup_unstack` | dual | delta EE | `univtac_dual_cup_unstack_hdf5_current` | Use dual arms to unstack the cups |
|
| 40 |
+
| `dual_cup_handover_place` | dual | delta EE | `univtac_dual_cup_handover_hdf5_current` | Use dual arms to hand over a cup |
|
| 41 |
+
| `dual_cup_place_stack` | dual | delta EE | `univtac_dual_cup_stack_hdf5_current` | Use dual arms to stack a cup |
|
| 42 |
+
| `dual_gear_holder` | dual | delta EE | `univtac_dual_gear_holder_hdf5_current` | Use dual arms to place the gear in the holder |
|
| 43 |
+
|
| 44 |
+
## Serving and evaluation
|
| 45 |
+
|
| 46 |
+
Everything needed besides this repo is public: the code
|
| 47 |
+
(<https://github.com/neoteai/N0-TWAM>), the base model components
|
| 48 |
+
(`NeoteAI/n0-twam-base`: `vae/`, `text_encoder/`, `tokenizer/`) and the simulator with its
|
| 49 |
+
evaluation clients (<https://github.com/neoteai/NeoSim>, Isaac Sim 4.5.0 / Isaac Lab 2.1.1).
|
| 50 |
+
|
| 51 |
+
**1. Build a serve bundle** for one task (N0-TWAM repo):
|
| 52 |
+
|
| 53 |
+
```bash
|
| 54 |
+
python script/make_serve_bundle.py \
|
| 55 |
+
--checkpoint /path/to/this-repo/checkpoints/univtac8/lift_can \
|
| 56 |
+
--base /path/to/n0-twam-base --bundle /path/to/bundles/lift_can
|
| 57 |
+
```
|
| 58 |
+
|
| 59 |
+
The script notes that there is no `train_meta.json`; that is expected for these checkpoints.
|
| 60 |
+
|
| 61 |
+
**2. Set the inference settings** in
|
| 62 |
+
`n0_twam/configs/twam_posttrain_server_cfg.py`:
|
| 63 |
+
|
| 64 |
+
```python
|
| 65 |
+
s.num_inference_steps = 15
|
| 66 |
+
s.action_num_inference_steps = 10
|
| 67 |
+
```
|
| 68 |
+
|
| 69 |
+
**3. Start one server per task.** `TWAM_SERVE_TASK` and `TWAM_SERVE_ACTION_MODE`
|
| 70 |
+
(`absee` | `delta`) come from the tables above:
|
| 71 |
+
|
| 72 |
+
```bash
|
| 73 |
+
TWAM_SERVE_POOL=/path/to/this-repo/pool \
|
| 74 |
+
TWAM_SERVE_TASK=univtac_lift_can_rot6d_current \
|
| 75 |
+
TWAM_SERVE_ACTION_MODE=absee \
|
| 76 |
+
TWAM_SERVE_BUNDLE=/path/to/bundles/lift_can TWAM_SERVE_OUT=/path/to/serve-output \
|
| 77 |
+
python -m n0_twam.n0_twam_server --config-name multitask_server --port 29601
|
| 78 |
+
```
|
| 79 |
+
|
| 80 |
+
The config wires that task's own normalization stats, camera/tactile keys and action
|
| 81 |
+
channels. Actions must be de-normalized with the task's own stats and in the task's own
|
| 82 |
+
action space; mixing them up rescales actions by orders of magnitude.
|
| 83 |
+
|
| 84 |
+
**4. Run the client** (NeoSim repo). The `demo` task config sends the marker-less `rgb`
|
| 85 |
+
tactile image these checkpoints were trained on; the prompt is passed verbatim:
|
| 86 |
+
|
| 87 |
+
```bash
|
| 88 |
+
python eval/eval_twam_ee_cl.py lift_can demo --server_host <server-ip> --server_port 29601 \
|
| 89 |
+
--prompt "Lift the can"
|
| 90 |
+
```
|
| 91 |
+
|
| 92 |
+
Dual-arm tasks use `eval/eval_twam_ee_dual_cl.py` with the same arguments. Keep the client
|
| 93 |
+
defaults (`UNIVTAC_TICKS_PER_SLOT=2`, all tactile keyframes, per-task step limits).
|
| 94 |
+
|
| 95 |
+
## Layout
|
| 96 |
+
|
| 97 |
+
```
|
| 98 |
+
checkpoints/<suite>/<task>/transformer/ config.json + diffusion_pytorch_model.safetensors
|
| 99 |
+
pool/ serve-time task pool for the `multitask_server` config
|
| 100 |
+
norm_stat_per_robot.json delta-EE stats, one entry per task (16)
|
| 101 |
+
norm_stat_absee_per_robot.json absEE stats, one entry per task (4)
|
| 102 |
+
train/<TWAM_SERVE_TASK>/meta/ info.json + tasks.jsonl (minimal stubs, see Notes)
|
| 103 |
+
norm/<task>/ the same stats as one file per task
|
| 104 |
+
```
|
| 105 |
+
|