CoolFace
Modelpublic

Dongkkka/Task000519_PourWater_ViTacFormer_H100_LR1e4_B512_Hand_Intern

sourceHugging Faceupdated 10d agoView on Hugging Face
0likes19downloads
Model Card

Task000519 Pour Water — SH5 ViTacFormer H100, LR 1e-4, B512

This public package contains two inference-only checkpoints from the same scratch run:

  • —checkpoints/best_validation.pt: step 34,000, selected by the lowest recorded composite validation score.
  • —checkpoints/latest_model.pt: step 110,000, exact model weights extracted from the resumable latest checkpoint; optimizer and RNG are intentionally omitted.

Default loader selection is `best_validation.pt`. The latest checkpoint is included for comparison, not because it is safer or better. This is an incomplete research checkpoint and is not approved for powered SH5 deployment.

Selection evidence

ItemResult
TaskTask519 Pour Water
Data159 Pour episodes / 123,853 frames; 142 train and 17 held-out episodes
Best validationaction L1 0.1296097; tactile L1 0.1558883 vs persistence 0.1581809; left ratios 0.9288/0.9003; right ratios 1.0051/1.0021
Lateststep-110k action L1 0.1333523; tactile L1 0.1724246; all tactile ratios above 1
OptimizerAdamW, main 1e-4, backbone 1e-5
Batch / action chunk512 / 100
Architecturebilateral 54-D state/action, 180-D tactile, future tactile 18, left-head RGB

Training stopped before the planned 300k predicted-tactile phase. Best tactile behavior was asymmetric and the combined offline release gate failed. Training loss is not deployment evidence. Review validation_history.json, train_config.json, and artifact_receipt.json before selecting a checkpoint.

Load and run non-actuating inference

Keep the complete snapshot together. This is a custom PyTorch loader, not a Transformers AutoModel or a standard LeRobot policy.

python
import sys
from pathlib import Path
from huggingface_hub import snapshot_download

root = Path(snapshot_download(repo_id="Dongkkka/Task000519_PourWater_ViTacFormer_H100_LR1e4_B512_Hand_Intern"))
sys.path[:0] = [str(root), str(root / "source_snapshot/ViTacFormer_SH5")]
from inference_loader import load_run, predict_normalized
from preprocess import prepare_observation

# Default: validation-best. For latest, pass checkpoint="latest_model.pt".
policy, stats, config = load_run(root, checkpoint="best_validation.pt", device="cuda")
batch = prepare_observation(
    image_rgb, state_history, tactile_raw_history, tactile_baseline, stats, device="cuda"
)
actions_rad, future_tactile_normalized = predict_normalized(policy, stats, batch)
# actions_rad: [1,100,54], absolute radians
# future_tactile_normalized: [1,18,180]

Required synchronized inputs and order:

  • —RGB uint8 [376,672,3], configured left-head camera, no flip or rotation.
  • —State float32 [6,54], offsets [-15,-12,-9,-6,-3,0] at 30 Hz.
  • —Raw tactile float32 [18,90], left 45 then right 45, offsets -17..0.
  • —Per-taxel tactile baseline float32 [90], calibrated with the training convention.
  • —Output action order: left arm 7, right arm 7, left hand 20, right hand 20.

Verify the package and run a non-actuating synthetic smoke test:

bash
sha256sum -c SHA256SUMS
python verify_package.py

Safety and limitations

The loader applies the saved normalization, predicted-future-tactile inference path, zero latent prior, bounded joint decoder, and arm warm-start ramp. It does not implement ROS publishing, camera/state synchronization, temporal scheduling, freshness checks, whole-chunk rejection, watchdogs, E-stop logic, or robot-specific topic mapping.

Before powered deployment, verify the exact SH5 revision, joint and tactile ordering, calibration, camera mapping, control rate, inference latency, command continuity, tracking error and stopping behavior. Complete offline replay, shadow mode and guarded low-speed trials with an operator and working E-stop. offline_release_pass=false for the exported validation-best checkpoint.

Upstream/adapted source is included under Apache-2.0. Dataset or checkpoint licensing is not inferred beyond the included source license.