Home

Awesome

A Dual-Branch Self-Boosting Framework for Self-Supervised 3D Hand Pose Estimation (TIP2022)

This is the official PyTorch implementation code. For technical details, please refer to:

A Dual-Branch Self-Boosting Framework for Self-Supervised 3D Hand Pose Estimation <br /> Pengfei Ren, Haifeng Sun, Jiachang Hao, Qi Qi, Jingyu Wang, Jianxin Liao <br /> [Paper]

<img src="pic/S1-introduction.jpg" width = 900 align=middle>

3D Hand Pose Estimation and 3D Hand Mesh Reconstruction

Compared with semi-automatic annotation methods in ICVL and MSRA datasets, our self-supervised method can generate more accurate and robust 3D hand pose and hand mesh.

ICVL Dataset

demo1

MSRA Dataset

demo2

Skeleton-based Action Recognition

Using the 3D skeleton generated by DSF can greatly improve the accuracy of the skeleton-based action recognition.

MethodModalitySHREC 14SHREC 28DHG 14DHG 28
PointLSTMPoint clouds95.994.7--
Res-TCNSkeleton91.187.386.983.6
ST-GCNSkeleton92.787.791.287.1
STA-Res-TCNSkeleton93.690.789.285.0
ST-TS-HGR-NETSkeleton94.389.487.383.4
HPEVSkeleton94.992.392.588.9
DG-STASkeleton94.490.791.988.0
DG-STA (AWR)Skeleton96.3<sub>↑1.993.3<sub>↑2.694.5<sub>↑2.692.1 <sub>↑4.1
DG-STA (DSF)Skeleton96.8<sub>↑2.495.0<sub>↑4.396.3<sub>↑4.495.9<sub>↑7.9

Installation

Prerequisites

MANO

DSF/
  MANO/
    MANO_RIGHT.pkl

NYU Dataset

.../
  nyu/
    train/
      center_train_0_refined.txt
      center_train_1_refined.txt
      center_train_2_refined.txt
      ...
    test/
      center_test_0_refined.txt
      center_test_1_refined.txt
      center_test_2_refined.txt
      ...
    posePara_lm_collosion/
      nyu-train-0-pose.txt
      ...

Pretrained Model

Running DSF

Evaluation

Set load_model as the path to the pretrained model and change the phase to "test" in config.py, run

python train_render.py

Self-supervised Training

To perform self-supervised training, set finetune_dir as the path to the pretrained model with only synthetic data and tansferNet_pth as the path to the Consis-CycleGAN model in config.py. Then, change the phase to "train", run

python train_render.py

Pre-training with Synthetic Data

To perform pre-training, set train_stage to "pretrain" in config.py, run

python train_render.py

Citation

If you find our work useful in your research, please citing:

@ARTICLE{9841448,
  author={Ren, Pengfei and Sun, Haifeng and Hao, Jiachang and Qi, Qi and Wang, Jingyu and Liao, Jianxin},
  journal={IEEE Transactions on Image Processing}, 
  title={A Dual-Branch Self-Boosting Framework for Self-Supervised 3D Hand Pose Estimation}, 
  year={2022},
  volume={31},
  number={},
  pages={5052-5066},
  doi={10.1109/TIP.2022.3192708}}