CoolFace
Datasetpublic

shinben0327/hoi-retarget

HOI-Retarget — Humanoid Human–Object Interaction Motion Project page · Code · 3D viewer · Paper: manuscript under review Learning from demonstration (LfD) has enabled humanoid robots to acquire diverse whole-body skills, but extending this paradigm to human-object interaction (HOI) is limited by the availability of robot-compatible interaction references. We present HOI-Retarget, a contact-centric retargeting method that transfers HOI onto a humanoid robot for large-scale… See the full description on the dataset page: https://huggingface.co/datasets/shinben0327/hoi-retarget.

sourceHugging Facecc-by-nc-sa-4.0updated 4d agoView on Hugging Face
1likes487downloads
Dataset Card

HOI-Retarget — Humanoid Human–Object Interaction Motion

Project page · Code · 3D viewer · Paper: manuscript under review

Learning from demonstration (LfD) has enabled humanoid robots to acquire diverse whole-body skills, but extending this paradigm to human-object interaction (HOI) is limited by the availability of robot-compatible interaction references. We present HOI-Retarget, a contact-centric retargeting method that transfers HOI onto a humanoid robot for large-scale motion-data generation. Its windowed trajectory optimization uses every labeled contact as a target in the object frame, balancing body tracking, foot support and smoothness under the robot's kinematic limits. The method can augment a single demonstration across object sizes, absorb contacts reconstructed from monocular video, and extend to several robots manipulating one object.

This is the corpus that method produces: 13,904 humanoid trajectories from five human–object interaction capture sets. Each row is one (motion, robot) pair — joint angles, a floating base, the object's 6-DoF pose, and the per-link contact flags that say which palms and feet touch the object at every frame.


Contents

Source datasets5 — OMOMO, ParaHome, NeuralDome, CoRoleHOI, IMHD²
Distinct motions6,952
Robot–motion rows13,904 (6,952 G1 + 6,952 H2)
Objects75 distinct meshes
Duration828.1 min · 13.80 h per robot pass
Collaborative912 rows; every CoRoleHOI motion is half of a pair (228 pairs per robot)
RobotsUnitree G1 (29 DoF, object scale 0.83) · Unitree H2 (31 DoF, object scale 1.0)
Passing QC6,648 G1 (95.6 %) · 6,362 H2 (91.5 %) · 13,010 of 13,904 rows (93.6 %)

Per dataset (G1, object_scale 0.83)

datasetmotionsobjectsminutesqc_passkeep %
OMOMO4,42113447.74,21595.3
ParaHome98012179.196798.7
NeuralDome91520127.886294.2
CoRoleHOI4562349.142793.6
IMHD²180724.417798.3
total6,95275828.16,64895.6

Per robot

robotDoFobject_scaledatasetsrowsqc_pass
unitree_g1290.83all 56,9526,648 (95.6 %)
unitree_h2311.0all 56,9526,362 (91.5 %)

The H2 is taller and keeps less: 90.9 % on OMOMO, 97.9 % on ParaHome, 93.3 % on NeuralDome, 78.7 % on CoRoleHOI, 96.1 % on IMHD².

Object meshes

The 13 OMOMO objects ship under assets/objects/ (44 MB of URDF, mesh and surface samples), so the 4,421 OMOMO motions are usable as downloaded. Point the code at this directory:

bash
export HOI_RETARGET_OBJECT_ROOTS=<this download>

The variable adds search roots; do not use HOI_RETARGET_ASSETS, which replaces the whole asset root and hides the robot models.

The other four datasets' meshes reach you through InterAct under CC BY-NC-SA 4.0 with written authorisation and are not redistributed here. Place them under the same root in the layout object_model_path names:

<root>/assets/objects/<object>.urdf       OMOMO — included above
<root>/<dataset>/_assets/<object>.urdf    ParaHome, NeuralDome, CoRoleHOI, IMHD²

`docs/DATA.md` covers obtaining them, and hoi-retarget-stage-object writes the URDF and surface samples for a mesh of your own.

Object names repeat across datasets but the meshes do not, so objects are keyed <dataset>__<object>. `docs/objects.jpg` is a contact sheet of all 75.


Quick start

bash
pip install datasets
python
from datasets import load_dataset
import numpy as np

ds = load_dataset("shinben0327/hoi-retarget", split="train")           # everything
ds = load_dataset("shinben0327/hoi-retarget", "omomo", split="train")  # one source dataset

clean = ds.filter(lambda r: r["qc_pass"])          # the curated subset
g1    = ds.filter(lambda r: r["robot"] == "unitree_g1")

r = clean[0]
dof = np.array([np.asarray(x) for x in r["dof_pos"]])    # (T, 29) joint angles, radians
obj = np.array([np.asarray(x) for x in r["object_pos"]]) # (T, 3) object position, metres
print(r["clip_id"], dof.shape, r["object"], r["qc_flags"])

Every column is described in `docs/SCHEMA.md`.

The video column ships undecoded, so datasets alone is enough: each cell is {"bytes": <mp4>, "path": <name>}. For decoded frames, install torchcodec and ds.cast_column("video", Video()).

examples/to_pkl.py converts a row back into the contact_window.pkl layout that hoi-retarget --mode contact writes, so a row drops straight into the code repository for re-solving, rendering or contact editing.


Quality control

qc_pass is evaluated per (motion, robot): the two robots have different joint limits and fail differently.

qc_pass = False  if  wrist_runfrac > 0.50            # wrist_sustained: a wrist joint pinned beyond
                                                     # 80 % of its own half-range for >50 % of the clip
                 or  foldx_p80 >= 50                 # body_folded: the trunk folds 50 deg further
                                                     # from vertical than the human's did
                 or (limit_sat_pct >= 15 and foldx_p80 >= 15)
                                                     # body_folded: joints against their stops,
                                                     # corroborated by a real fold

foldx_p80 is source-relative — the robot's trunk fold minus the human's — so a person who genuinely squats or sits scores near zero. The flags catch physically implausible motion, not unusual interaction: a clip where the robot kicks a box or never uses its hands passes. Failing rows ship flagged, and qc_flags names the rule that fired (wrist_sustained, body_folded).

Of the three inputs only wrist_runfrac is a column here, so qc_pass can be read but not recomputed from this dataset alone.


Seeing the motions

Every row carries a 320 × 320 render of that trajectory in the video column (~50 kB), so the table preview plays each clip in place.

HOI-Retarget Contact Playback plays any clip in 3D in the browser, with search and filtering by dataset, robot, QC result or collaborative pair. It reads viewer/, which holds the same trajectories as little-endian float16, one file per (motion, robot):

viewer/index.json                  every clip, with its agents and metadata (0.25 MB gzipped)
viewer/shards/<ds>__<robot>.json   the same records grouped, for lazy loading
viewer/bin/<ds>__<robot>/<subject>.bin

Each .bin is block-major — each array whole, one after another, not interleaved per frame:

body_pos   (T, NB, 3)   then  body_quat  (T, NB, 4)  wxyz  then
object_pos (T, 3)       then  object_rot (T, 4)      wxyz  then
contact    (T, NC)      0.0 / 1.0

so object_pos begins at half-offset T*NB*3 + T*NB*4. NB is 42 for the G1 and 36 for the H2; NC is 4. Slice by block, not by a per-frame stride: the file is the same size either way, so a length check cannot tell the two readings apart.

Collaborative clips carry two agents sharing one object. Both agents store their own copy of the object track; they agree once each agent's z_offset_m is applied, and a viewer should draw the object once.


Licensing

CC BY-NC-SA 4.0: non-commercial, attribution, and derivatives carry the same licence. That is the most restrictive term among the sources, and it propagates.

source datasetits licence
OMOMOMIT
ParaHomeCC BY-NC-SA 4.0
NeuralDome / HODomeCC BY-NC-SA 4.0
CoRoleHOICC BY 4.0
IMHD²CC BY-NC-SA 4.0

These trajectories are derivative works of the source motion capture, and the contact annotations they were optimised against originate with InterAct under CC BY-NC-SA 4.0. Cite the source dataset for any clip you use; the dataset column names it and NOTICE.md gives the reference.

The OMOMO object meshes are redistributed from InterMimic under MIT (geometry © 2023 Jiaman Li, assets © 2025 Sirui Xu), notice in assets/objects/LICENSE-OBJECTS. Robot models are Unitree's, BSD-3-Clause (`docs/LICENSE-unitree.txt`). The retargeting code is BSD-3-Clause.


Citation

bibtex
@article{shin2026hoiretarget,
  title   = {HOI-Retarget: Contact-Centric Retargeting for Human-Object Interaction},
  author  = {Shin, Jihwan and L\'opez Escoriza, Adri\`a and He, Junzhe and
             Heyrman, Matthias and Hutter, Marco},
  year    = {2026},
  note    = {Manuscript under review},
  url     = {https://shinben0327.github.io/hoi-retarget}
}

Cite the source dataset your clips come from as well — the dataset column names it, and NOTICE.md lists every reference.