[paper] [video-YouTube, video-Bilibili] [slides]
This is the official implementation of our NeurIPS-2021 work: Multi-view Pose Transformer (MvP). MvP is a simple algorithm that directly regresses multi-person 3D human pose from multi-view images.
⭐⭐⭐[News] A Re-implementation is integrated into xrmocap: at https://github.com/openxrlab/xrmocap
@article{wang2021mvp,
title={Direct Multi-view Multi-person 3D Human Pose Estimation},
author={Tao Wang and Jianfeng Zhang and Yujun Cai and Shuicheng Yan and Jiashi Feng},
journal={Advances in Neural Information Processing Systems},
year={2021}
}
- Set the project root directory as ${POSE_ROOT}.
- Install all the required python packages (with requirements.txt).
- compile deformable operation for projective attention.
cd ./models/ops
sh ./make.sh
Please follow VoxelPose to download the CMU Panoptic Dataset and PoseResNet-50 pre-trained model.
The directory tree should look like this:
${POSE_ROOT}
|-- models
| |-- pose_resnet50_panoptic.pth.tar
|-- data
| |-- panoptic
| | |-- 16060224_haggling1
| | | |-- hdImgs
| | | |-- hdvideos
| | | |-- hdPose3d_stage1_coco19
| | | |-- calibration_160224_haggling1.json
| | |-- 160226_haggling1
| | |-- ...
Please follow VoxelPose to download the Shelf/Campus Dataset.
Due to the limited and incomplete annotations of the two datasets, we use psudo ground truth 3D pose generated from VoxelPose to train the model, we expect mvp would perform much better with absolute ground truth pose data.
Please use voxelpose or other methods to generate psudo ground truth for the training set, you can also use our generated psudo GT: psudo_gt_shelf. psudo_gt_campus. psudo_gt_campus_fix_gtmorethanpred.
Due to the small dataset size, we fine-tune Panoptic pre-trained model to Shelf and Campus. Download the pretrained MvP on Panoptic from model_best_5view and model_best_3view_horizontal_view or model_best_3view_2horizon_1lookdown
The directory tree should look like this:
${POSE_ROOT}
|-- models
| |-- model_best_5view.pth.tar
| |-- model_best_3view_horizontal_view.pth.tar
| |-- model_best_3view_2horizon_1lookdown.pth.tar
|-- data
| |-- Shelf
| | |-- Camera0
| | |-- ...
| | |-- Camera4
| | |-- actorsGT.mat
| | |-- calibration_shelf.json
| | |-- pesudo_gt
| | | |-- voxelpose_pesudo_gt_shelf.pickle
| |-- CampusSeq1
| | |-- Camera0
| | |-- Camera1
| | |-- Camera2
| | |-- actorsGT.mat
| | |-- calibration_campus.json
| | |-- pesudo_gt
| | | |-- voxelpose_pesudo_gt_campus.pickle
| | | |-- voxelpose_pesudo_gt_campus_fix_gtmorethanpred_case.pickle
Please follow CHUNYUWANG/H36M-Toolbox to prepare the data.
The data and pre-trained model directory tree should look like this, you can only download the Panoptic dataset and PoseResNet-50 for reproducing the main MvP result and ablation studies:
${POSE_ROOT}
|-- models
| |-- pose_resnet50_panoptic.pth.tar
| |-- model_best_5view.pth.tar
| |-- model_best_3view_horizontal_view.pth.tar
| |-- model_best_3view_2horizon_1lookdown.pth.tar
|-- data
| |-- pesudo_gt
| | |-- voxelpose_pesudo_gt_shelf.pickle
| | |-- voxelpose_pesudo_gt_campus.pickle
| | |-- voxelpose_pesudo_gt_campus_fix_gtmorethanpred_case.pickle
| |-- panoptic
| | |-- 16060224_haggling1
| | | |-- hdImgs
| | | |-- hdvideos
| | | |-- hdPose3d_stage1_coco19
| | | |-- calibration_160224_haggling1.json
| | |-- 160226_haggling1
| | |-- ...
| |-- Shelf
| | |-- Camera0
| | |-- ...
| | |-- Camera4
| | |-- actorsGT.mat
| | |-- calibration_shelf.json
| | |-- pesudo_gt
| | | |-- voxelpose_pesudo_gt_shelf.pickle
| |-- CampusSeq1
| | |-- Camera0
| | |-- Camera1
| | |-- Camera2
| | |-- actorsGT.mat
| | |-- calibration_campus.json
| | |-- pesudo_gt
| | | |-- voxelpose_pesudo_gt_campus.pickle
| | | |-- voxelpose_pesudo_gt_campus_fix_gtmorethanpred_case.pickle
| |-- HM36
The evaluation result will be printed after every epoch, the best result can be found in the log.
We train and validate on the five selected camera views. We trained our models on 8 GPUs and batch_size=1 for each GPU, note the total iteration per epoch should be 3205
, if not, please check your data.
python -m torch.distributed.launch --nproc_per_node=8 --use_env run/train_3d.py --cfg configs/panoptic/best_model_config.yaml
Datasets | AP25 | AP25 | AP25 | AP25 | MPJPE | pth |
---|---|---|---|---|---|---|
Panoptic | 92.3 | 96.6 | 97.5 | 97.7 | 15.8 | here |
You can find several ablation experiment configs under ./configs/panoptic/
, for example, removing RayConv:
python -m torch.distributed.launch --nproc_per_node=8 --use_env run/train_3d.py --cfg configs/panoptic/ablation_remove_rayconv.yaml
As shelf/campus are very small dataset with incomplete annotation, we finetune pretrained MvP with pseudo ground truth 3D pose extracted with VoxelPose, we expect more accurate GT would help MvP achieve much higher performance.
python -m torch.distributed.launch --nproc_per_node=8 --use_env run/train_3d.py --cfg configs/shelf/mvp_shelf.yaml
Datasets | Actor 1 | Actor 2 | Actor 2 | Average | pth |
---|---|---|---|---|---|
Shelf | 99.3 | 95.1 | 97.8 | 97.4 | here |
Campus | 98.2 | 94.1 | 97.4 | 96.6 | here |
MvP also applies to the naive single-person setting, with dataset like Human3.6, to come
python -m torch.distributed.launch --nproc_per_node=8 --use_env run/train_3d.py --cfg configs/h36m/mvp_h36m.yaml
To evaluate a trained model, pass the config and model pth:
python -m torch.distributed.launch --nproc_per_node=8 --use_env run/validate_3d.py --cfg xxx --model_path xxx
This repo is under the Apache-2.0 license. For commercial use, please contact the authors.