| <div align="center"> | |
| <p align="center"> <img src="resources/logo.png" width="100px"> </p> | |
| <h2>Effective Whole-body Pose Estimation with Two-stages Distillation </h2> | |
| <a href='https://arxiv.org/abs/2307.15880'><img src='https://img.shields.io/badge/ArXiv-2307.15880-red'></a> | |
| [](https://paperswithcode.com/sota/2d-human-pose-estimation-on-coco-wholebody-1?p=effective-whole-body-pose-estimation-with-two) | |
| [Zhendong Yang](https://yzd-v.github.io/page/), [Ailing Zeng](https://ailingzeng.site/), [Chun Yuan](https://scholar.google.com/citations?user=fYdxi2sAAAAJ&hl=en&oi=sra), [Yu Li](http://yu-li.github.io/) | |
| <img src="resources/lalaland.gif" style="height:200px" /> <img src="resources/iron.gif" style="height:200px" /> | |
| <p>          DWPose                      DWPose + ControlNet (<i>prompt: Ironman</i>) </p> | |
| </div> | |
| # ππ» DWPose ππ» | |
| This repository is the official implementation of the [Effective Whole-body Pose Estimation with Two-stages Distillation](https://arxiv.org/abs/2307.15880) (ICCV 2023, CV4Metaverse Workshop). Our code is based on [MMPose](https://github.com/open-mmlab/mmpose/tree/main) and [ControlNet](https://github.com/lllyasviel/ControlNet-v1-1-nightly). | |
| <p align="center"><img src="resources/architecture.jpg" width="650px"/> | |
| βοΈ We release a series of models named DWPose with different sizes, from tiny to large, for human whole-body pose estimation. Besides, we also replace Openpose with DWPose for ControlNet, obtaining better Generated Images. | |
| ## π₯ News | |
| - **`2023/12/03`**: DWPose supports [Consistent and Controllable Image-to-Video Synthesis for Character Animation](https://humanaigc.github.io/animate-anyone/). | |
| - **`2023/08/17`**: Our paper [Effective Whole-body Pose Estimation with Two-stages Distillation](https://arxiv.org/abs/2307.15880) is accepted by ICCV 2023, CV4Metaverse Workshop. π π π | |
| - **`2023/08/09`**: You can try DWPose with [sd-webui-controlnet](https://github.com/Mikubill/sd-webui-controlnet) now! Just update your sd-webui-controlnet >= v1.1237, then choose dw_openpose_full as preprocessor. | |
| - **`2023/08/09`**: We support to run onnx model with cv2. You can avoid installing onnxruntime. See branch [opencv_onnx](https://github.com/IDEA-Research/DWPose/tree/opencv_onnx). | |
| - **`2023/08/07`**: We upload all DWPose models to [huggingface](https://huggingface.co/yzd-v/DWPose/tree/main). Now, you can download them from baidu drive, google drive and huggingface. | |
| - **`2023/08/07`**: We release a new DWPose with onnx. You can avoid installing mmcv through this. See branch [onnx](https://github.com/IDEA-Research/DWPose/tree/onnx). | |
| - **`2023/08/01`**: Thanks to [MMPose](https://github.com/open-mmlab/mmpose/tree/main). You can try our DWPose with this [demo](https://openxlab.org.cn/apps/detail/mmpose/RTMPose) by choosing wholebody! | |
| <p align="center"><img src="resources/demo.png" width="800px"> | |
| ## π Installation | |
| See [installation instructions](INSTALL.md). This branch uses onnx. You can try DWPose for ControlNet without mmcv. | |
| ## π Results and Models | |
| ### π DWPose on COCO. We release a series of DWPose models. | |
| <p align="center"><img src="resources/compare.jpg" width="350px"/> | |
| Results on COCO-WholeBody v1.0 val with detector having human AP of 56.4 on COCO val2017 dataset | |
| | Arch | Input Size | FLOPS (G)| Body AP | Foot AP | Face AP | Hand AP | Whole AP | ckpt | ckpt | | |
| | :-------------------------------------- | :--------: | :--------: | :-----: | :-----: | :-----: | :-----: | :------: | :--------------------------------------: | :-------------------------------------: | | |
| | [DWPose-t](mmpose/configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-t_8xb64-270e_coco-ubody-wholebody-256x192.py) | 256x192 |0.5| 0.585 | 0.465 | 0.735 | 0.357 | 0.485 | [baidu drive](https://pan.baidu.com/s/1X2sVxv4JOZ5WFvOBiwjrNA?pwd=nmvw) | [google drive](https://drive.google.com/file/d/1Csbg56QvB0TtFamJ6pPWNil7h6WziDwl/view?usp=sharing) | | |
| | [DWPose-s](mmpose/configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-s_8xb64-270e_coco-ubody-wholebody-256x192.py) | 256x192 |0.9| 0.633 | 0.533 | 0.776 | 0.427 | 0.538 | [baidu drive](https://pan.baidu.com/s/1k2JxCtJL9dIGU-h31UBQOA?pwd=hcf2) | [google drive](https://drive.google.com/file/d/10TuEeLhArxfd4e6bnE7YgmBI9RFvu9DL/view?usp=sharing) | | |
| | [DWPose-m](mmpose/configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-m_8xb64-270e_coco-ubody-wholebody-256x192.py) | 256x192 |2.2| 0.685 | 0.636 | 0.828 | 0.527 | 0.606 | [baidu drive](https://pan.baidu.com/s/183ovcYHV6I5TQ9Wu1eS-eg?pwd=rcry) | [google drive](https://drive.google.com/file/d/13ZWnGDteGBmjALtErYS8AHhMBBNAN9en/view?usp=sharing) | | |
| | [DWPose-l](mmpose/configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-l_8xb64-270e_coco-ubody-wholebody-256x192.py) | 256x192 |4.5| 0.704 | 0.662 | 0.843 | 0.566 | 0.631 | [baidu drive](https://pan.baidu.com/s/1bWEeiFL5UGoDj9Nkazb98w?pwd=u7ek) | [google drive](https://drive.google.com/file/d/1PHKN3p873dgCSh_YRsYqTZVj-kIbclRS/view?usp=sharing) | | |
| | [DWPose-l](mmpose/configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-l_8xb32-270e_coco-ubody-wholebody-384x288.py) | 384x288 |10.1| 0.722 | 0.704 | 0.887 | 0.621 | 0.665 | [baidu drive](https://pan.baidu.com/s/168T2XGXQDli8j03e_dOJdg?pwd=ajcq) | [google drive](https://drive.google.com/file/d/1Oy9O18cYk8Dk776DbxpCPWmJtJCl-OCm/view?usp=sharing) | | |
| ### π¦ DWPose for ControlNet. | |
| First, you need to download our Pose model dw-ll_ucoco_384.onnx ([baidu](https://pan.baidu.com/s/1nuBjw-KKSxD_BkpmwXUJiw?pwd=28d7), [google](https://drive.google.com/file/d/12L8E2oAgZy4VACGSK9RaZBZrfgx7VTA2/view?usp=sharing)) and Det model yolox_l.onnx ([baidu](https://pan.baidu.com/s/1fpfIVpv5ypo4c1bUlzkMYQ?pwd=mjdn), [google](https://drive.google.com/file/d/1w9pXC8tT0p9ndMN-CArp1__b2GbzewWI/view?usp=sharing)), then put them into ControlNet-v1-1-nightly/annotator/ckpts. Then you can use DWPose to generate the images you like. | |
| ``` | |
| cd ControlNet-v1-1-nightly | |
| python gradio_dw_open_pose.py | |
| ``` | |
| #### Non-cherry-picked test with random seed 12345 ("spider man"): | |
| <p align="center"><img src="resources/jay_pose.jpg" width="600px"/> | |
| #### Comparison with OpenPose | |
| <p align="center"><img src="resources/generation.jpg" width="600px"/> | |
| #### Run inference on any images | |
| ``` | |
| cd ControlNet-v1-1-nightly | |
| python dwpose_infer_example.py | |
| ``` | |
| Note: Please change the image path and output path based on your file. | |
| ## π’ Datasets | |
| Prepare [COCO](https://cocodataset.org/#download) in mmpose/data/coco and [UBody](https://github.com/IDEA-Research/OSX) in mmpose/data/UBody. | |
| UBody needs to be tarnsferred into images. Don't forget. | |
| ``` | |
| cd mmpose | |
| python video2image.py | |
| ``` | |
| If you want to evaluate the models on UBody | |
| ``` | |
| # add category into UBody's annotation | |
| cd mmpose | |
| python add_cat.py | |
| ``` | |
| ## βTrain a model | |
| ### Train DWPose with the first stage distillation | |
| ``` | |
| cd mmpose | |
| bash tools/dist_train.sh configs/distiller/ubody/s1_dis/rtmpose_x_dis_l__coco-ubody-256x192.py 8 | |
| ``` | |
| ### Train DWPose with the second stage distillation | |
| ``` | |
| cd mmpose | |
| bash tools/dist_train.sh configs/distiller/ubody/s2_dis/dwpose_l-ll__coco-ubody-256x192.py 8 | |
| ``` | |
| ### Tansfer the distillation models into regular models | |
| ``` | |
| cd mmpose | |
| # if first stage distillation | |
| python pth_transfer.py $dis_ckpt $new_pose_ckpt | |
| # if second stage distillation | |
| python pth_transfer.py $dis_ckpt $new_pose_ckpt --two_dis | |
| ``` | |
| ## βTest a model | |
| ``` | |
| # test on UBody | |
| bash tools/dist_test.sh configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-l_8xb64-270e_ubody-wholebody-256x192.py $pose_ckpt 8 | |
| # test on COCO | |
| bash tools/dist_test.sh configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-l_8xb64-270e_coco-ubody-wholebody-256x192.py $pose_ckpt 8 | |
| ``` | |
| ## π₯³ Citation | |
| ``` | |
| @inproceedings{yang2023effective, | |
| title={Effective whole-body pose estimation with two-stages distillation}, | |
| author={Yang, Zhendong and Zeng, Ailing and Yuan, Chun and Li, Yu}, | |
| booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision}, | |
| pages={4210--4220}, | |
| year={2023} | |
| } | |
| ``` | |
| ## π₯ Acknowledgement | |
| Our code is based on [MMPose](https://github.com/open-mmlab/mmpose/tree/main) and [ControlNet](https://github.com/lllyasviel/ControlNet-v1-1-nightly). | |