YOCO: You Only Calibrate Once!
Fast Mocap Calibration for Dexterous Teleoperation, CoRL 2026
Yu Zhang, Yunqi Li, Yushi Du, Yi Ma, Yanchao Yang
Paper | Code | Website | Collection
YOCO generates a session-specific LoRA adapter from four paired hand poses in one forward pass, without test-time fine-tuning. One pretrained YOCO checkpoint supports normal inference and evaluation of both Tables 1 and 2.
Pretrained Models
| Directory | Model | Pairs | LoRA Rank |
|---|---|---|---|
yoco/ |
YOCO, DiT depth 4, eight flow steps | 4 | 32 |
frozen_estimator/ |
Required frozen estimator / MANO canonicalizer | - | - |
Each directory contains model.pth, config.yaml, and norm_stats.pkl. Keep
all three files together. Only load trusted checkpoints: the bundle includes
pickle-based files. The saved architecture and normalization must not be changed.
Get Started
Install uv, then:
git clone --branch release/yoco-website https://github.com/Franklin-Zhang0/YOCO.git
cd YOCO
uv sync --frozen --extra cpu
The locked environment targets Linux x86_64 and Python 3.10. For the CUDA 12.4
dependency profile, replace --extra cpu with --extra cu124 on every uv command.
See the repository's environment guide.
Obtain licensed MANO_LEFT.pkl and MANO_RIGHT.pkl separately and set their
absolute directory. The model and dataset files are publicly downloadable;
the collection is private for now. Authentication is optional for file downloads:
export MANO_PATH=/absolute/path/to/mano_models
uv run --frozen --extra cpu python scripts/download_reproduction_assets.py --models-only
The downloader uses immutable Hub revisions and validates file sizes and SHA256 hashes. The release manifest defines the checkpoint and dataset identities. No MANO model files are included.
Use The Model
from calibration_net.yoco import YOCO
model = YOCO.from_pretrained(
"assets/models/yoco",
canonicalizer_dir="assets/models/frozen_estimator",
side="right",
device="cpu",
)
model.calibrate(raw_pairs, target_pairs)
result = model.predict(raw_frames)
theta, joints = result.theta, result.joints
Both calibration arrays have shape (4, 21, 3) and contain matching raw/reference
poses in meters, using MANO's 21-joint order. raw_frames is (21, 3) or
(N, 21, 3). Outputs are 45 MANO pose angles in radians and 21 wrist-local,
palm-aligned joints in meters. Optional betas sets the hand shape.
Recalibrating starts an independent session; ordinary inference disables
conditioning dropout. ROS and a robot URDF are not required.
For an NPZ containing raw_pairs, target_pairs, and raw_frames:
uv run --frozen --extra cpu python scripts/run_yoco.py --input observations.npz --output predictions.npz
The inference guide documents joint conventions, output shapes, and a complete released-data example.
Paper Evaluation
Use scripts/reproduce_paper.py,
which runs all three seeds and verifies saved predictions automatically. The
reproduction guide
defines the prepared datasets, historical conditioning, cohorts, and metrics.
YOCO is verified against the release reference values for the selected conditioning mode. CPU legacy conditioning matches Table 2's rounded MPJPE (17.75 mm), not every value in the published row. Baselines use the paper's accuracy references; hardware timing is outside these checks.
Paper correction: "Tip-PA" in the main paper is a typo for
tip_mpjpe_mm, the unaligned fingertip MPJPE, not a Procrustes-aligned error.
This bundle supports offline checkpoint evaluation, not full training-from-scratch reproduction, hardware timing qualification, or physical robot trials.
Access And Terms
No public redistribution license is granted for these weights at this time. Dataset and MANO licenses apply independently. Obtain MANO models directly under the MANO license. The companion prepared datasets are subject to their source terms; download access does not override those terms.