Skip to content

SeanChenxy/HandMesh

Repository files navigation

Hand Mesh Reconstruction

Introduction

This repo is the PyTorch implementation of hand mesh reconstruction described in CMR and MobRecon.

Update

  • 2023-11-2. Add MobRecon (SpiralConv verison) model for more robust real-world applications. If you target on freely captured images, please try ./cmr/scripts/demo_mobrecon.sh.
  • 2022-4-28. Wrap old-version code in cmr, including CMR demo/training/evaluation and Mobrecon demo/evaluation. Add mobrecon to release MobRecon training.
  • 2021-12-7. Add MobRecon demo.
  • 2021-6-10. Add Human3.6M dataset.
  • 2021-5-20. Add CMR-G model.

Features

  • SpiralNet++
  • Sub-pose aggregation
  • Adaptive 2D-1D registration for mesh-image alignment
  • DenseStack for 2D encoding
  • Feature lifting with MapReg and PVL
  • DSConv as an efficient mesh operator
  • Complement data will be available here
  • MobRecon training with consistency learning and complement data

Install

  • Environment
    conda create -n handmesh python=3.9 conda activate handmesh 
  • Please follow official suggestions to install pytorch and torchvision. We use pytorch=1.11.0-cuda11.3, torchvision=0.12.0
  • Requirements
    pip install -r requirements.txt 
    If you have difficulty in installing torch_sparse etc., please follow this link.
  • Install MPI-IS Mesh from the source
  • You should accept MANO LICENCE. Download MANO model from official website, then run
    ln -s /path/to/mano_v1_2/MANO_RIGHT.pkl template/MANO_RIGHT.pkl 
  • Download the files you need from Google drive or Baidu cloud.

Run a demo

  • Prepare pre-trained models as

    cmr/out/Human36M/cmr_g/checkpoints/cmr_pg_res18_human36m.pt cmr/out/FreiHAND/cmr_g/checkpoints/cmr_g_res18_moredata.pt cmr/out/FreiHAND/cmr_sg/checkpoints/cmr_sg_res18_freihand.pt cmr/out/FreiHAND/cmr_pg/checkpoints/cmr_pg_res18_freihand.pt cmr/out/FreiHAND/mobrecon_spconv/checkpoints/mobrecon_densestack.pt 
  • Run

    ./cmr/scripts/demo_cmr.sh ./cmr/scripts/demo_mobrecon.sh 

    The prediction results will be saved in output directory, e.g., out/FreiHAND/mobrecon/demo.

  • Explaination of the output

    • In an JPEG file (e.g., 000_plot.jpg), we show silhouette, 2D pose, projection of mesh, camera-space mesh and pose
    • As for camera-space information, we use a red rectangle to indicate the camera position, or the image plane. The unit is meter.
    • If you run the demo, you can also obtain a PLY file (e.g., 000_mesh.ply).
      • This file is a 3D model of the hand.
      • You can open it with corresponding software (e.g., Preview in Mac).
      • Here, you can get more 3D details through rotation and zoom in.

Dataset

FreiHAND

  • Please download FreiHAND dataset from this link, and create a soft link in data, i.e., data/FreiHAND.
  • Download mesh GT file freihand_train_mesh.zip, and unzip it under data/FreiHAND/training

Human3.6M

  • The official data is now not avaliable. Please follow I2L repo to download it.
  • Download silhouette GT file h36m_mask.zip, and unzip it under data/Human36M.

Real World Testset

  • Please download the dataset from this link, and create a soft link in data, i.e., data/Ge.

Complement data

  • See this file for complement data. Then, create a soft link in data, i.e., data/CompHand.

Data dir

${ROOT} |-- data | |-- FreiHAND | | |-- training | | | |-- rgb | | | |-- mask | | | |-- mesh | | |-- evaluation | | | |-- rgb | | |-- evaluation_K.json | | |-- evaluation_scals.json | | |-- training_K.json | | |-- training_mano.json | | |-- training_xyz.json | |-- Human3.6M | | |-- images | | |-- mask | | |-- annotations | | |-- J_regressor_h36m_correct.npy | |-- Ge | | |-- images | | |-- params.mat | | |-- pose_gt.mat | |-- Compdata | | |-- base_pose | | |-- trans_pose_batch1 | | |-- trans_pose_batch2 | | |-- trans_pose_batch3 

Evaluation

FreiHAND

./cmr/scripts/eval_cmr_freihand.sh ./cmr/scripts/eval_mobrecon_freihand.sh 
  • JSON file will be saved as out/FreiHAND/cmr_sg/cmr_sg.json. You can submmit this file to the official server for evaluation.

Human3.6M

./cmr/scripts/eval_cmr_human36m.sh 

Performance on PA-MPJPE (mm)

We re-produce the following results after code re-organization.

Model / Dataset FreiHAND Human3.6M (w/o COCO)
CMR-G-ResNet18 7.6 -
CMR-SG-ResNet18 7.5 -
CMR-PG-ResNet18 7.5 50.0
MobRecon-DenseStack 6.9 -

Training

./cmr/scripts/train_cmr_freihand.sh ./cmr/scripts/train_cmr_human36m.sh ./mobrecon/scripts/train_mobrecon.sh 

A experiment log will be saved under cmr/out or mobrecon/out

Reference

@inproceedings{bib:CMR, title={Camera-Space Hand Mesh Recovery via Semantic Aggregationand Adaptive 2D-1D Registration}, author={Chen, Xingyu and Liu, Yufeng and Ma, Chongyang and Chang, Jianlong and Wang, Huayan and Chen, Tian and Guo, Xiaoyan and Wan, Pengfei and Zheng, Wen}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, year={2021} } @inproceedings{bib:MobRecon, title={MobRecon: Mobile-Friendly Hand Mesh Reconstruction from Monocular Image}, author={Chen, Xingyu and Liu, Yufeng and Dong Yajiao and Zhang, Xiong and Ma, Chongyang and Xiong, Yanmin and Zhang, Yuan and Guo, Xiaoyan}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, year={2022} }

Acknowledgement

Our implementation of SpiralConv is based on spiralnet_plus.

We also thank hand-graph-cnn, I2L-MeshNet_RELEASE, detectron2, smplpytorch(https://github.com/gulvarol/smplpytorch) for inspiring implementations.

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published