💃🏻 DWPose 💃🏻
本仓库是《基于两阶段蒸馏的高效全身姿态估计》(ICCV 2023,CV4Metaverse研讨会)的官方实现。我们的代码基于MMPose和ControlNet。
⚔️ 我们发布了一系列名为DWPose的模型,从小到大,用于人体全身姿态估计。此外,我们还用DWPose替换了ControlNet中的Openpose,获得了更好的生成图像。
🔥 新闻
-
2023/12/03
:DWPose支持一致且可控的图像到视频合成用于角色动画。 -
2023/08/17
:我们的论文《基于两阶段蒸馏的高效全身姿态估计》被ICCV 2023 CV4Metaverse研讨会接收。🎉 🎉 🎉 -
2023/08/09
:现在您可以在sd-webui-controlnet中尝试DWPose了!只需将sd-webui-controlnet更新至 >= v1.1237版本,然后选择dw_openpose_full作为预处理器。 -
2023/08/09
:我们支持使用cv2运行onnx模型。您可以避免安装onnxruntime。请查看opencv_onnx分支。 -
2023/08/07
:我们将所有DWPose模型上传到了huggingface。现在,您可以从百度网盘、谷歌云盘和huggingface下载它们。 -
2023/08/07
:我们发布了一个新的带有onnx的DWPose。通过这种方式,您可以避免安装mmcv。请查看onnx分支。
🐟 安装
请参阅安装说明。该分支使用onnx。您可以在不安装mmcv的情况下尝试用于ControlNet的DWPose。
🚀 结果和模型
😎 COCO上的DWPose。我们发布了一系列DWPose模型。
在COCO-WholeBody v1.0验证集上的结果,使用的检测器在COCO val2017数据集上的人体AP为56.4
架构 | 输入尺寸 | FLOPS (G) | 身体AP | 脚部AP | 面部AP | 手部AP | 整体AP | 百度网盘链接 | 谷歌云盘链接 |
---|---|---|---|---|---|---|---|---|---|
DWPose-t | 256x192 | 0.5 | 0.585 | 0.465 | 0.735 | 0.357 | 0.485 | 百度网盘 | 谷歌云盘 |
DWPose-s | 256x192 | 0.9 | 0.633 | 0.533 | 0.776 | 0.427 | 0.538 | 百度网盘 | 谷歌云盘 |
DWPose-m | 256x192 | 2.2 | 0.685 | 0.636 | 0.828 | 0.527 | 0.606 | 百度网盘 | 谷歌云盘 |
DWPose-l | 256x192 | 4.5 | 0.704 | 0.662 | 0.843 | 0.566 | 0.631 | 百度网盘 | 谷歌云盘 |
DWPose-l | 384x288 | 10.1 | 0.722 | 0.704 | 0.887 | 0.621 | 0.665 | 百度网盘 | 谷歌云盘 |
🦈 ControlNet中的DWPose
首先,你需要下载我们的姿态模型dw-ll_ucoco_384.onnx(百度网盘,谷歌云盘)和检测模型yolox_l.onnx(百度网盘,谷歌云盘),然后将它们放入ControlNet-v1-1-nightly/annotator/ckpts目录。之后你就可以使用DWPose生成你喜欢的图像了。
cd ControlNet-v1-1-nightly
python gradio_dw_open_pose.py
使用随机种子12345进行非精选测试("蜘蛛侠"):
与OpenPose的比较
在任意图像上运行推理
cd ControlNet-v1-1-nightly
python dwpose_infer_example.py
注意:请根据你的文件更改图像路径和输出路径。
🚢 数据集
在mmpose/data/coco准备COCO数据集,在mmpose/data/UBody准备UBody数据集。
UBody需要转换为图像格式。别忘了。
cd mmpose
python video2image.py
如果你想在UBody上评估模型
# 在UBody的注释中添加类别
cd mmpose
python add_cat.py
⭐训练模型
使用第一阶段蒸馏训练DWPose
cd mmpose
bash tools/dist_train.sh configs/distiller/ubody/s1_dis/rtmpose_x_dis_l__coco-ubody-256x192.py 8
使用第二阶段蒸馏训练DWPose
cd mmpose
bash tools/dist_train.sh configs/distiller/ubody/s2_dis/dwpose_l-ll__coco-ubody-256x192.py 8
将蒸馏模型转换为常规模型
cd mmpose
# 如果是第一阶段蒸馏
python pth_transfer.py $dis_ckpt $new_pose_ckpt
# 如果是第二阶段蒸馏
python pth_transfer.py $dis_ckpt $new_pose_ckpt --two_dis
⭐测试模型
# 在UBody上测试
bash tools/dist_test.sh configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-l_8xb64-270e_ubody-wholebody-256x192.py $pose_ckpt 8
# 在COCO上测试
bash tools/dist_test.sh configs/wholebody_2d_keypoint/rtmpose/ubody/rtmpose-l_8xb64-270e_coco-ubody-wholebody-256x192.py $pose_ckpt 8
🥳 引用
@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}
}
🥂 致谢
我们的代码基于MMPose和ControlNet。