Lingteng Qiu*, Peihao Li*, Heyuan Li*, Qi Zuo, Xiaodong Gu, Yuan Dong, Weihao Yuan, Rui Peng, Siyu Zhu, Xiaoguang Han, Guanying Chenβ, Zilong Dongβ
LHM++ is an efficient large-scale human reconstruction model that generates high-quality, animatable 3D avatars within seconds from one or multiple pose-free images. It achieves dramatic speedups over LHM-0.7B via an Encoder-Decoder Point-Image Transformer architecture. See the project website for more details.
| Type | Views | Feat. Dim | Attn. Heads | # GS Points | Encoder Dim. | Service Requirement | Inference Time (1v) | Inference Time (4v) | Inference Time (8v) | Inference Time (16v) |
|---|---|---|---|---|---|---|---|---|---|---|
| LHMPP-700M | Any | 1024 | 16 | 160,000 | 1024 | 8 GB | 0.79 s | 1.00 s | 1.31 s | 2.13 s |
| LHMPPS-700M | Any | 1024 | 16 | 160,000 | 1024 | 7.3 GB | 0.79 s | 1.00 s | 1.31 s | 2.13 s |
LHM++ achieves dramatic speedups via the Encoder-Decoder Point-Image Transformer architecture. Below we show the efficiency comparison across different configurations.
If you prefer Chinese documentation, please see the Chinese README.
- Core Inference Pipelineπ₯π₯π₯
- Release the codes and pretrained weights
- HuggingFace Demo Integration π€π€π€
- ModelScope Space Online Demo
- Release Training data & Testing Data (License Available)
- Training Codes Release
Clone the repository.
git clone https://github.com/aigc3d/LHM-plusplus
cd LHM-plusplus# install torch 2.3.0 cuda 12.1
pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121
pip install -U xformers==0.0.26.post1 --index-url https://download.pytorch.org/whl/cu121
# install dependencies
pip install -r requirements.txt
pip install rembg[cpu] # only use during extracting sparse view inputs.
# install pointops
cd ./lib/pointops/ && python setup.py install && cd ../../
pip install spconv-cu121
# pip install torch_scatter, see [wheel](https://data.pyg.org/whl/) for your CUDA version
# For example (PyTorch 2.3 + CUDA 12.1 + Python 3.10):
pip install torch_scatter-2.1.2+pt23cu121-cp310-cp310-linux_x86_64.whl
# install pytorch3d
pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py310_cu121_pyt230/download.html
# install diff-gaussian-rasterization
pip install git+https://github.com/ashawkey/diff-gaussian-rasterization/
# or
# git clone --recursive https://github.com/ashawkey/diff-gaussian-rasterization
# pip install ./diff-gaussian-rasterization
# install simple-knn
pip install git+https://github.com/camenduru/simple-knn/
# install gsplat
# pip install gsplat from pre-compiled [wheel](https://docs.gsplat.studio/whl/gsplat/)
# For example (PyTorch 2.3 + CUDA 12.1 + Python 3.10):
# gsplat-1.4.0+pt23cu121-cp310-cp310-linux_x86_64.whl
pip install gsplat-1.4.0+pt23cu121-cp310-cp310-linux_x86_64.whlThe installation has been tested with python3.10, CUDA 12.1. Or you can install dependencies step by step, following INSTALL.md.
Download assets (motion_video), prior models, and pretrained weights in one command:
# One-click: motion_video + prior models + pretrained weights
python scripts/download_all.py
# Skip parts (e.g. already have motion_video)
python scripts/download_all.py --skip-asset --skip-models
# Force re-download motion_video
python scripts/download_all.py --force-assetUse the download script to fetch prior models (human_model_files, voxel_grid, arcface, etc.) and LHM++ weights. Skips items that already exist. Tries HuggingFace first, falls back to ModelScope.
# Download prior models + pretrained weights (default)
python scripts/download_pretrained_models.py
# Prior models only (human_model_files, voxel_grid, BiRefNet, etc.)
python scripts/download_pretrained_models.py --prior
# LHM++ model weights only (LHMPP-700M, LHMPP-700MC, LHMPPS-700M)
python scripts/download_pretrained_models.py --models
# Custom save directory
python scripts/download_pretrained_models.py --save-dir /path/to/pretrained_modelsfrom modelscope import snapshot_download
# LHMPP-700M (default model weights)
model_dir = snapshot_download(model_id='Damo_XR_Lab/LHMPP-700M', cache_dir='./pretrained_models')
# Or: LHMPP-700MC, LHMPPS-700M
# model_dir = snapshot_download(model_id='Damo_XR_Lab/LHMPP-700MC', cache_dir='./pretrained_models')
# model_dir = snapshot_download(model_id='Damo_XR_Lab/LHMPPS-700M', cache_dir='./pretrained_models')
# LHMPP-Prior (prior models: human_model_files, voxel_grid, BiRefNet, etc.)
model_dir = snapshot_download(model_id='Damo_XR_Lab/LHMPP-Prior', cache_dir='./pretrained_models')Required for Gradio motion examples. If ./motion_video at project root is missing, downloads from Damo_XR_Lab/LHMPP-Assets (model, extracts motion_video.tar to project root):
# Requires: pip install modelscope
python scripts/download_motion_video.py
# Custom parent directory (default: . = project root)
python scripts/download_motion_video.py --save-dir .After downloading weights and data, the project structure:
βββ app.py
βββ assets
β βββ efficiency_analysis
β βββ example_aigc_images
β βββ example_multi_images
β βββ example_videos
βββ benchmark
βββ configs
β βββ train
β βββ LHMPP-1view.yaml
β βββ LHMPP-any-view.yaml
β βββ LHMPP-any-view-convhead.yaml
β βββ LHMPP-any-view-DPTS.yaml
βββ core
β βββ datasets
β βββ losses
β βββ models
β βββ modules
β βββ outputs
β βββ runners
β βββ structures
β βββ utils
β βββ launch.py
βββ dnnlib
βββ engine
β βββ BiRefNet
β βββ pose_estimation
β βββ ouputs.py
βββ exps
β βββ checkpoints
β βββ releases
β βββ ...
βββ lib
β βββ pointops
βββ pretrained_models
β βββ dense_sample_points
β βββ gagatracker
β βββ human_model_files
β βββ voxel_grid
β βββ arcface_resnet18.pth
β βββ BiRefNet-general-epoch_244.pth
β βββ Damo_XR_Lab
β βββ huggingface
βββ scripts
β βββ exp
β βββ inference
β βββ mvs_render
β βββ pose_estimator
β βββ test
β βββ convert_hf.py
β βββ download_all.py
β βββ download_motion_video.py
β βββ download_pretrained_models.py
β βββ upload_hub.py
βββ tools
β βββ metrics
βββ train_data
β βββ example_imgs
β βββ motion_video
βββ motion_video
βββ INSTALL.md
βββ INSTALL_CN.md
βββ README.md
βββ README_CN.md
βββ requirements.txtNow, we support user motion sequence input. As the pose estimator requires some GPU memory, this Gradio application requires at least 8 GB of GPU memory to run LHMPP-700M with 8-view inputs.
## Quick Start; Testing the Code
python ./scripts/test/test_app_video.py --input_video ./assets/example_videos/yuliang.mp4
python ./scripts/test/test_app_case.py
# Run LHM++ with Gradio API
python ./app.py --model_name [LHMPP-700M, LHMPPS-700M], default LHMPP-700MRunning Tips: Ensure the input images are high resolution, preferably with visible hand details, and include at least one image where the body is fully extended/spread out.
Welcome to follow our team other interesting works:
If you find our approach helpful, please consider citing our works.
LHM++ (Efficient Large Human Reconstruction Model for Pose-free Images to 3D):
@article{qiu2025lhmpp,
title={LHM++: An Efficient Large Human Reconstruction Model for Pose-free Images to 3D},
author={Lingteng Qiu and Peihao Li and Heyuan Li and Qi Zuo and Xiaodong Gu and Yuan Dong and Weihao Yuan and Rui Peng and Siyu Zhu and Xiaoguang Han and Guanying Chen and Zilong Dong},
journal={arXiv preprint arXiv:2503.10625},
year={2025}
}
LHM:
@inproceedings{qiu2025LHM,
title={LHM: Large Animatable Human Reconstruction Model from a Single Image in Seconds},
author={Lingteng Qiu and Xiaodong Gu and Peihao Li and Qi Zuo and Weichao Shen and Junfei Zhang and Kejie Qiu and Weihao Yuan and Guanying Chen and Zilong Dong and Liefeng Bo},
booktitle={ICCV},
year={2025}
}



