GRAFT: Geometric Refinement and Fitting Transformer for Human Scene Reconstruction

Pradyumna YM · Yuxuan Xue · Yue Chen · Nikita Kister · István Sárándi · Gerard Pons-Moll

Project page · arXiv · Code

TL;DR — A learned HSI prior that predicts iterative geometry-grounded refinements to reconstruct humans in scenes from a single image. Matches optimization-based contact quality at ~50× lower runtime; as a plug-and-play prior it boosts existing methods by up to 44% contact F1 — no retraining needed.

This repository holds the released weights and the benchmark assets we produced.

What is here

file what it is
graft.pt the main model (16.2 M parameters)
graft_no_visual.pt the "without visual features" ablation — same architecture with drop_vis_feats=True, so the refinement sees scene geometry only
eval/scene_image.png the PROX empty-scene view the model consumes as its second input
eval/rich_scene_imgs/ the same for RICH, per (sequence, camera) — 33 files
eval/contact_vertice_weights.pkl per-vertex weights for the vertex-to-scene metric
eval/prox_quantitative_depth.pkl PROX scene depth, carried by the evaluation context

These are our artifacts. The datasets themselves (PROX, RICH), the SMPL-X body models, and the NLF detector are not redistributed here — the repository's scripts/download_assets.py tells you where to obtain each.

Licence

These weights are released for non-commercial research use only (CC BY-NC 4.0). The code in the GitHub repository is MIT; this split follows NLF's.

The pipeline also loads MapAnything's weights (CC BY-NC 4.0) and NLF's (non-commercial research), and SMPL-X is under its own non-commercial research licence — so use of GRAFT as released is non-commercial research use.

Usage

git clone https://github.com/pradyumnaym/graft && cd graft
bash install.sh
python scripts/download_assets.py     # pulls this repository
from graft import GRAFTModel

model = GRAFTModel.from_pretrained("graft").cuda().eval()
out = model.predict("photo.jpg", scene_image="empty_room.jpg")
out.vertices        # (n_people, 10475, 3) in the scene's camera frame, metres

The two checkpoints load into the same class and differ only in configuration. Note they use different SMPL-X hand-mean conventions, which is why from_pretrained will not guess a config for a bare checkpoint path — getting that flag wrong changes the hands silently rather than failing.

Results

model benchmark PA-MPJPE V2S L2 V2S angle Prec Rec F1
graft PROX 49.73 184.36 50.92 0.556 0.638 0.594
graft RICH 46.32 224.66 34.60 0.473 0.743 0.578
graft-no-visual PROX 52.56 188.47 51.92 0.534 0.510 0.522
graft-no-visual RICH 45.52 223.10 34.06 0.434 0.717 0.540

Inference is 174 ms per image on an H100 (one person, three refinement iterations). See the repository for the per-stage breakdown and for what "reproduced exactly" is scoped to.

Citation

@misc{ym2026graft,
  title        = {GRAFT: Geometric Refinement and Fitting Transformer for Human Scene Reconstruction},
  author       = {Pradyumna YM and Yuxuan Xue and Yue Chen and Nikita Kister and Istv{\'a}n S{\'a}r{\'a}ndi and Gerard Pons-Moll},
  year         = {2026},
  eprint       = {2604.19624},
  archivePrefix = {arXiv},
  url          = {https://arxiv.org/abs/2604.19624},
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for ympradyumna/graft