Downloads · 30 days
0
MIT-Media-Lab/egotouch-tactile-encoder-p1-v1
egotouch-tactile-encoder-p1-v1 is a robotics model from MIT-Media-Lab. 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 pytorch. The card lists the license as cc-by-nc-4.0.
Three completed seeds of the full-touch/full-pose Bash BiGRU P1 encoder trained on published clean EgoTouch atomic episodes. The model aligns an eight-frame tactile history with the synchronized eight-frame 21-joint h…
Downloads · 30 days
0
Access
Public
Updated Sep 9, 2026
Repo size
98.6 MB
Likes
0
Public
Click a slice to open those files.
.pt74 MB · 75%
From the Hugging Face model README
Three completed seeds of the full-touch/full-pose Bash BiGRU P1 encoder trained on published clean EgoTouch atomic episodes. The model aligns an eight-frame tactile history with the synchronized eight-frame 21-joint hand-pose history using symmetric masked InfoNCE.
Source code and frozen configs:
kaichen-z/VLA-HAND@31d75d2.
The mano-aligned-v1/ directory contains new H2, H4, and H8 checkpoints.
These runs use EgoTouch revision
5131b279898b6db4eb7c131ee954e53c5f61b229. That revision repairs the
left-hand rotation frame in the re-cut atomic dataset.
Unlike the original release below, the new pose target uses Method-D-compatible MANO-local keypoints:
R(global_orient_worldspace)^T @ (joints_worldspace - transl_worldspace)
| Checkpoint | P2T mAP | T2P mAP | Mean mAP |
|---|---|---|---|
| H2 | 0.06310 | 0.05683 | 0.05996 |
| H4 | 0.06904 | 0.06277 | 0.06590 |
| H8 | 0.07307 | 0.07085 | 0.07196 |
Use H8 when retrieval is the selection criterion. These values are not directly comparable with the camera-space results below because the data release and pose target changed.
The source branch and full editor report are in
hannah/tactile_editor.
See mano-aligned-v1/README.md for exact files,
checksums, and training settings.
Values are three-seed mean +/- sample standard deviation on fixed 4,096-window galleries.
| Split | Bidirectional retrieval mean mAP |
|---|---|
| validation | 0.121405 +/- 0.001201 |
| test seen | 0.121559 +/- 0.000380 |
| test unseen | 0.048720 +/- 0.000976 |
Each seed-* directory contains:
training_checkpoint.pt: model, optimizer, scheduler, epoch, step, config,
and selected validation metrics; use this to resume training.model.safetensors: complete FormalEncoderModel state dict.tactile_encoder.safetensors: standalone TactileEncoder state dict.pose_encoder.safetensors: standalone PoseEncoder state dict.pressure_masks.npy contains the left/right 151-cell non-bend validity masks.
export_manifest.json records every file size and SHA-256 checksum.
[B, 8, 21, 21], target hand, pressure values as published.[B, 8, 21, 3], target-hand joints_camspace.Clone the source repository and install Tactile/requirements.txt, then:
import numpy as np
import torch
import torch.nn.functional as F
from safetensors.torch import load_file
from egotouch_formal.model import TactileEncoder
encoder = TactileEncoder(embed_dim=64)
encoder.load_state_dict(load_file("seed-20260831/tactile_encoder.safetensors"))
encoder.eval()
pressure_masks = torch.from_numpy(np.load("pressure_masks.npy")).bool()
touch = torch.zeros(1, 8, 21, 21) # already hand-canonicalized
side = torch.tensor([1]) # 0=left, 1=right; selects validity mask
with torch.no_grad():
embedding = F.normalize(encoder(touch, pressure_masks[side]), dim=-1)
assert embedding.shape == (1, 64)
For the complete tactile-pose model, instantiate FormalEncoderModel with
task="p1", pose_temporal="gru", and embed_dim=64, then load
model.safetensors strictly.
Batch 1,024; AdamW at 1e-4 with weight decay .01; 500-step linear warmup and cosine decay; BF16; gradient norm clip 1.0; 40 epochs. The three runs completed 25,080 optimizer steps because the epoch limit was reached before the 30,000 step cap.
The initialization checkpoint is
basharkMIT/opentouch-gru-pose-encoder/epoch_300.pt,
pinned in the source downloader by SHA-256.
The exact preprocessed cache is published separately as
MIT-Media-Lab/egotouch-clean-atomic-p1-cache-v1.
The test-unseen gap shows that cross-recording-population generalization remains
substantially harder than validation/test-seen retrieval. This experiment does
not demonstrate improved future-pose prediction; no future-pose head was
trained.