Robotics
LeRobot
Safetensors
act
tactile
manipulation
Dimios45 commited on
Commit
b94f4fe
·
verified ·
1 Parent(s): a04391d

final checkpoint (114.4 epochs) + model card

Browse files
README.md ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ library_name: lerobot
4
+ tags: [robotics, lerobot, act, tactile, manipulation]
5
+ datasets: [aryankakad/tactile_charger_inserting]
6
+ ---
7
+
8
+ # act_tactile_charger_20ep
9
+
10
+ **ACT** policy — **vision + tactile** — trained on **20 episodes**.
11
+
12
+ Task: *grab and remove the charger from the socket and put it in the black box*
13
+
14
+ Trained with [LeFlexiTac](https://github.com/TNA001-AI/lerobot_tactile), a LeRobot fork adding
15
+ FlexiTac tactile sensing. Docs: <https://tna001-ai.github.io/LeFlexiTac/docs.html>
16
+
17
+ ## Training data
18
+
19
+ | | |
20
+ |---|---|
21
+ | dataset | [`aryankakad/tactile_charger_inserting`](https://huggingface.co/datasets/aryankakad/tactile_charger_inserting) |
22
+ | episodes | 20 (indices 0–19) |
23
+ | frames | 10,717 @ 30 fps |
24
+ | cameras | `observation.images.top`, `observation.images.gripper` (224×224) |
25
+ | tactile | `observation.tactile.primary` (12×32) |
26
+ | state / action | 6-DoF SO-100 follower |
27
+
28
+ ## Configuration
29
+
30
+ | | |
31
+ |---|---|
32
+ | steps | 38,300 |
33
+ | batch size | 32 |
34
+ | **epochs** | **114.4** |
35
+ | `chunk_size` | `100` |
36
+ | `n_action_steps` | `100` |
37
+ | `vision_backbone` | `resnet18` |
38
+ | `dim_model` | `512` |
39
+ | `n_encoder_layers` | `4` |
40
+ | `n_decoder_layers` | `1` |
41
+ | `use_vae` | `True` |
42
+ | `kl_weight` | `10.0` |
43
+ | `optimizer_lr` | `1e-05` |
44
+ | `optimizer_weight_decay` | `0.0001` |
45
+ | `n_tactile_tokens` | `4` |
46
+ | `tactile_encoder_type` | `cnn` |
47
+
48
+ Every model in this series is **epoch-matched at ~114.4 epochs**, so dataset size and
49
+ sensor modality are the only variables across the set.
50
+
51
+ ## Training command actually used
52
+
53
+ Run on 1× AMD Instinct MI300X (ROCm 6.2.4). `HIP_VISIBLE_DEVICES` selected the GPU,
54
+ so `--policy.device=cuda` refers to that single card.
55
+
56
+ ```bash
57
+ python -u -m lerobot.scripts.lerobot_train \
58
+ --dataset.repo_id=aryankakad/tactile_charger_inserting \
59
+ --dataset.episodes='[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]' \
60
+ --policy.type=act --policy.use_tactile=true \
61
+ --policy.tactile_features='["observation.tactile.primary"]' \
62
+ --policy.n_tactile_tokens=4 \
63
+ --policy.repo_id=Dimios45/act_tactile_charger_20ep \
64
+ --policy.private=true --policy.device=cuda \
65
+ --output_dir=outputs/train/B_act_tactile_20ep --job_name=B_act_tactile_20ep \
66
+ --batch_size=32 --num_workers=8 --steps=38300 --save_freq=10000 --wandb.enable=true
67
+ ```
68
+
69
+ ## Evaluation / rollout
70
+
71
+ Not run here — this machine has no robot attached. To evaluate, run on the machine with the
72
+ SO-100 and sensors, loading the policy with `--policy.path=Dimios45/act_tactile_charger_20ep`.
73
+
74
+ Reference: the `lerobot-record` eval invocations in
75
+ [`tactile_cmd.txt`](https://github.com/TNA001-AI/lerobot_tactile/blob/main/tactile_cmd.txt)
76
+ and the [project docs](https://tna001-ai.github.io/LeFlexiTac/docs.html). You will need to
77
+ supply your own robot port, camera serials, and a `primary` tactile sensor entry matching training.
78
+
79
+ ## Notes
80
+
81
+ - Two ROCm-specific fixes were required in the fork: `persistent_workers=True` on the
82
+ dataloader (epoch boundaries otherwise stalled ~410 s each), and keeping
83
+ `cudnn.benchmark` **off** (on ROCm it triggers an exhaustive MIOpen search that can
84
+ precede step 1 by hours).
85
+ - Training loss is **not** a proxy for task success. Compare policies by rollout success
86
+ rate, especially on contact-rich phases.
87
+ - The source dataset's task string is labelled `stack cup` — a mislabel carried over from
88
+ an earlier session. It does not affect ACT, which is not language-conditioned.
config.json ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": "act",
3
+ "n_obs_steps": 1,
4
+ "input_features": {
5
+ "observation.state": {
6
+ "type": "STATE",
7
+ "shape": [
8
+ 6
9
+ ]
10
+ },
11
+ "observation.images.gripper": {
12
+ "type": "VISUAL",
13
+ "shape": [
14
+ 3,
15
+ 224,
16
+ 224
17
+ ]
18
+ },
19
+ "observation.images.top": {
20
+ "type": "VISUAL",
21
+ "shape": [
22
+ 3,
23
+ 224,
24
+ 224
25
+ ]
26
+ },
27
+ "observation.tactile.primary": {
28
+ "type": "STATE",
29
+ "shape": [
30
+ 12,
31
+ 32
32
+ ]
33
+ }
34
+ },
35
+ "output_features": {
36
+ "action": {
37
+ "type": "ACTION",
38
+ "shape": [
39
+ 6
40
+ ]
41
+ }
42
+ },
43
+ "device": "cuda",
44
+ "use_amp": false,
45
+ "use_peft": false,
46
+ "push_to_hub": true,
47
+ "repo_id": "Dimios45/act_tactile_charger_20ep",
48
+ "private": true,
49
+ "tags": null,
50
+ "license": null,
51
+ "pretrained_path": null,
52
+ "chunk_size": 100,
53
+ "n_action_steps": 100,
54
+ "normalization_mapping": {
55
+ "VISUAL": "MEAN_STD",
56
+ "STATE": "MEAN_STD",
57
+ "ACTION": "MEAN_STD",
58
+ "TACTILE": "MEAN_STD"
59
+ },
60
+ "vision_backbone": "resnet18",
61
+ "pretrained_backbone_weights": "ResNet18_Weights.IMAGENET1K_V1",
62
+ "replace_final_stride_with_dilation": false,
63
+ "pre_norm": false,
64
+ "dim_model": 512,
65
+ "n_heads": 8,
66
+ "dim_feedforward": 3200,
67
+ "feedforward_activation": "relu",
68
+ "n_encoder_layers": 4,
69
+ "n_decoder_layers": 1,
70
+ "use_vae": true,
71
+ "latent_dim": 32,
72
+ "n_vae_encoder_layers": 4,
73
+ "temporal_ensemble_coeff": null,
74
+ "use_tactile": true,
75
+ "tactile_encoder_type": "cnn",
76
+ "tactile_input_shape": [
77
+ 12,
78
+ 32
79
+ ],
80
+ "tactile_dropout": 0.3,
81
+ "tactile_features": [
82
+ "observation.tactile.primary"
83
+ ],
84
+ "n_tactile_tokens": 4,
85
+ "dropout": 0.1,
86
+ "kl_weight": 10.0,
87
+ "optimizer_lr": 1e-05,
88
+ "optimizer_weight_decay": 0.0001,
89
+ "optimizer_lr_backbone": 1e-05
90
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0e011a2e00263c8e2cc30ce50b64c39865eebf11aa1a6760d452933accf96621
3
+ size 213388992
policy_postprocessor.json ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "policy_postprocessor",
3
+ "steps": [
4
+ {
5
+ "registry_name": "unnormalizer_processor",
6
+ "config": {
7
+ "eps": 1e-08,
8
+ "features": {
9
+ "action": {
10
+ "type": "ACTION",
11
+ "shape": [
12
+ 6
13
+ ]
14
+ }
15
+ },
16
+ "norm_map": {
17
+ "VISUAL": "MEAN_STD",
18
+ "STATE": "MEAN_STD",
19
+ "ACTION": "MEAN_STD",
20
+ "TACTILE": "MEAN_STD"
21
+ }
22
+ },
23
+ "state_file": "policy_postprocessor_step_0_unnormalizer_processor.safetensors"
24
+ },
25
+ {
26
+ "registry_name": "device_processor",
27
+ "config": {
28
+ "device": "cpu",
29
+ "float_dtype": null
30
+ }
31
+ }
32
+ ]
33
+ }
policy_postprocessor_step_0_unnormalizer_processor.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:44d4d7be9139b14b3b0810abf88febcbcc7f3862b89e7f2783278919aab3e232
3
+ size 9644
policy_preprocessor.json ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "policy_preprocessor",
3
+ "steps": [
4
+ {
5
+ "registry_name": "rename_observations_processor",
6
+ "config": {
7
+ "rename_map": {}
8
+ }
9
+ },
10
+ {
11
+ "class": "lerobot.processor.tactile_processor.TactileValidationProcessorStep",
12
+ "config": {}
13
+ },
14
+ {
15
+ "registry_name": "to_batch_processor",
16
+ "config": {}
17
+ },
18
+ {
19
+ "registry_name": "device_processor",
20
+ "config": {
21
+ "device": "cuda",
22
+ "float_dtype": null
23
+ }
24
+ },
25
+ {
26
+ "registry_name": "normalizer_processor",
27
+ "config": {
28
+ "eps": 1e-08,
29
+ "features": {
30
+ "observation.state": {
31
+ "type": "STATE",
32
+ "shape": [
33
+ 6
34
+ ]
35
+ },
36
+ "observation.images.gripper": {
37
+ "type": "VISUAL",
38
+ "shape": [
39
+ 3,
40
+ 224,
41
+ 224
42
+ ]
43
+ },
44
+ "observation.images.top": {
45
+ "type": "VISUAL",
46
+ "shape": [
47
+ 3,
48
+ 224,
49
+ 224
50
+ ]
51
+ },
52
+ "observation.tactile.primary": {
53
+ "type": "STATE",
54
+ "shape": [
55
+ 12,
56
+ 32
57
+ ]
58
+ },
59
+ "action": {
60
+ "type": "ACTION",
61
+ "shape": [
62
+ 6
63
+ ]
64
+ }
65
+ },
66
+ "norm_map": {
67
+ "VISUAL": "MEAN_STD",
68
+ "STATE": "MEAN_STD",
69
+ "ACTION": "MEAN_STD",
70
+ "TACTILE": "MEAN_STD"
71
+ }
72
+ },
73
+ "state_file": "policy_preprocessor_step_4_normalizer_processor.safetensors"
74
+ }
75
+ ]
76
+ }
policy_preprocessor_step_4_normalizer_processor.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:44d4d7be9139b14b3b0810abf88febcbcc7f3862b89e7f2783278919aab3e232
3
+ size 9644
train_config.json ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dataset": {
3
+ "repo_id": "aryankakad/tactile_charger_inserting",
4
+ "root": null,
5
+ "episodes": [
6
+ 0,
7
+ 1,
8
+ 2,
9
+ 3,
10
+ 4,
11
+ 5,
12
+ 6,
13
+ 7,
14
+ 8,
15
+ 9,
16
+ 10,
17
+ 11,
18
+ 12,
19
+ 13,
20
+ 14,
21
+ 15,
22
+ 16,
23
+ 17,
24
+ 18,
25
+ 19
26
+ ],
27
+ "image_transforms": {
28
+ "enable": false,
29
+ "max_num_transforms": 3,
30
+ "random_order": false,
31
+ "tfs": {
32
+ "brightness": {
33
+ "weight": 1.0,
34
+ "type": "ColorJitter",
35
+ "kwargs": {
36
+ "brightness": [
37
+ 0.8,
38
+ 1.2
39
+ ]
40
+ }
41
+ },
42
+ "contrast": {
43
+ "weight": 1.0,
44
+ "type": "ColorJitter",
45
+ "kwargs": {
46
+ "contrast": [
47
+ 0.8,
48
+ 1.2
49
+ ]
50
+ }
51
+ },
52
+ "saturation": {
53
+ "weight": 1.0,
54
+ "type": "ColorJitter",
55
+ "kwargs": {
56
+ "saturation": [
57
+ 0.5,
58
+ 1.5
59
+ ]
60
+ }
61
+ },
62
+ "hue": {
63
+ "weight": 1.0,
64
+ "type": "ColorJitter",
65
+ "kwargs": {
66
+ "hue": [
67
+ -0.05,
68
+ 0.05
69
+ ]
70
+ }
71
+ },
72
+ "sharpness": {
73
+ "weight": 1.0,
74
+ "type": "SharpnessJitter",
75
+ "kwargs": {
76
+ "sharpness": [
77
+ 0.5,
78
+ 1.5
79
+ ]
80
+ }
81
+ },
82
+ "affine": {
83
+ "weight": 1.0,
84
+ "type": "RandomAffine",
85
+ "kwargs": {
86
+ "degrees": [
87
+ -5.0,
88
+ 5.0
89
+ ],
90
+ "translate": [
91
+ 0.05,
92
+ 0.05
93
+ ]
94
+ }
95
+ }
96
+ }
97
+ },
98
+ "revision": null,
99
+ "use_imagenet_stats": true,
100
+ "video_backend": "torchcodec",
101
+ "streaming": false
102
+ },
103
+ "env": null,
104
+ "policy": {
105
+ "type": "act",
106
+ "n_obs_steps": 1,
107
+ "input_features": {
108
+ "observation.state": {
109
+ "type": "STATE",
110
+ "shape": [
111
+ 6
112
+ ]
113
+ },
114
+ "observation.images.gripper": {
115
+ "type": "VISUAL",
116
+ "shape": [
117
+ 3,
118
+ 224,
119
+ 224
120
+ ]
121
+ },
122
+ "observation.images.top": {
123
+ "type": "VISUAL",
124
+ "shape": [
125
+ 3,
126
+ 224,
127
+ 224
128
+ ]
129
+ },
130
+ "observation.tactile.primary": {
131
+ "type": "STATE",
132
+ "shape": [
133
+ 12,
134
+ 32
135
+ ]
136
+ }
137
+ },
138
+ "output_features": {
139
+ "action": {
140
+ "type": "ACTION",
141
+ "shape": [
142
+ 6
143
+ ]
144
+ }
145
+ },
146
+ "device": "cuda",
147
+ "use_amp": false,
148
+ "use_peft": false,
149
+ "push_to_hub": true,
150
+ "repo_id": "Dimios45/act_tactile_charger_20ep",
151
+ "private": true,
152
+ "tags": null,
153
+ "license": null,
154
+ "pretrained_path": null,
155
+ "chunk_size": 100,
156
+ "n_action_steps": 100,
157
+ "normalization_mapping": {
158
+ "VISUAL": "MEAN_STD",
159
+ "STATE": "MEAN_STD",
160
+ "ACTION": "MEAN_STD",
161
+ "TACTILE": "MEAN_STD"
162
+ },
163
+ "vision_backbone": "resnet18",
164
+ "pretrained_backbone_weights": "ResNet18_Weights.IMAGENET1K_V1",
165
+ "replace_final_stride_with_dilation": false,
166
+ "pre_norm": false,
167
+ "dim_model": 512,
168
+ "n_heads": 8,
169
+ "dim_feedforward": 3200,
170
+ "feedforward_activation": "relu",
171
+ "n_encoder_layers": 4,
172
+ "n_decoder_layers": 1,
173
+ "use_vae": true,
174
+ "latent_dim": 32,
175
+ "n_vae_encoder_layers": 4,
176
+ "temporal_ensemble_coeff": null,
177
+ "use_tactile": true,
178
+ "tactile_encoder_type": "cnn",
179
+ "tactile_input_shape": [
180
+ 12,
181
+ 32
182
+ ],
183
+ "tactile_dropout": 0.3,
184
+ "tactile_features": [
185
+ "observation.tactile.primary"
186
+ ],
187
+ "n_tactile_tokens": 4,
188
+ "dropout": 0.1,
189
+ "kl_weight": 10.0,
190
+ "optimizer_lr": 1e-05,
191
+ "optimizer_weight_decay": 0.0001,
192
+ "optimizer_lr_backbone": 1e-05
193
+ },
194
+ "output_dir": "outputs/train/B_act_tactile_20ep",
195
+ "job_name": "B_act_tactile_20ep",
196
+ "resume": false,
197
+ "seed": 1000,
198
+ "cudnn_deterministic": false,
199
+ "num_workers": 8,
200
+ "batch_size": 32,
201
+ "steps": 38300,
202
+ "eval_freq": 20000,
203
+ "log_freq": 200,
204
+ "tolerance_s": 0.0001,
205
+ "save_checkpoint": true,
206
+ "save_freq": 10000,
207
+ "use_policy_training_preset": true,
208
+ "optimizer": {
209
+ "type": "adamw",
210
+ "lr": 1e-05,
211
+ "weight_decay": 0.0001,
212
+ "grad_clip_norm": 10.0,
213
+ "betas": [
214
+ 0.9,
215
+ 0.999
216
+ ],
217
+ "eps": 1e-08
218
+ },
219
+ "scheduler": null,
220
+ "eval": {
221
+ "n_episodes": 50,
222
+ "batch_size": 50,
223
+ "use_async_envs": false
224
+ },
225
+ "wandb": {
226
+ "enable": true,
227
+ "disable_artifact": false,
228
+ "project": "lerobot",
229
+ "entity": null,
230
+ "notes": null,
231
+ "run_id": "queg8q99",
232
+ "mode": null,
233
+ "add_tags": true
234
+ },
235
+ "peft": null,
236
+ "use_rabc": false,
237
+ "rabc_progress_path": null,
238
+ "rabc_kappa": 0.01,
239
+ "rabc_epsilon": 1e-06,
240
+ "rabc_head_mode": "sparse",
241
+ "rename_map": {},
242
+ "checkpoint_path": null
243
+ }