# RTMO 本项目的步骤适用于mmpose中的RTMO算法,库中其它姿态估计算法的使用方式以此类推。 ## 论文 `RTMO: Towards High-Performance One-Stage Real-Time Multi-Person Pose Estimation` - https://arxiv.org/pdf/2312.07526.pdf ## 模型结构 为了提高关键点预测速度,无法选择计算量较大的模型,于是,作者选择了ResNet-50以及对GPU计算更为友好的CSPDarknet,同时去掉yolo系列经典模型结构中计算量最大的最大特征图的检测头。
## 算法原理 借鉴yolopose的基本思想,先利用onestage方法生成BBox,但此时作者提出了改进思想,不在生成BBox的同时生成Kpt,而是对BBox所在的姿态特征图进行特征变换和维度转换,利用全连接层来控制关键点的个数,对BBox的坐标进行xy分离、位置编码和维度转换操作,再将两者相乘得到特征融合的结果,对此结果的关键点进行有监督训练,经过论文中提出的损失监督,便获得更好的关键点预测结果。
## 环境配置 ``` mv mmpose-rtmo_pytorch mmpose # 去框架名后缀 ``` ### Docker(方法一) ``` docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-centos7.6-dtk23.10-py38 # 为以上拉取的docker的镜像ID替换,本镜像为:229ce1daddf6 docker run -it --shm-size=32G -v $PWD/mmpose:/home/mmpose -v /opt/hyhal:/opt/hyhal --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name rtmo bash cd mmpose pip install -r requirements.txt pip install mmcv-2.0.1+gite2f0eed.abi0.dtk2310.torch1.13-cp38-cp38-manylinux2014_x86_64.whl # dcu版mmcv,可从光合社区下载。 pip install -v -e . # 安装mmpose=1.3.0 # 训练时会自动下载目标检测权重到项目默认指定位置:yolox_s_8x8_300e_coco_20211121_095711-4592a793.pth ``` ### Dockerfile(方法二) ``` cd mmpose/docker docker build --no-cache -t rtmo:latest . docker run --shm-size=32G --name rtmo -v /opt/hyhal:/opt/hyhal --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video -v $PWD/../../mmpose:/home/mmpose -it rtmo bash # 若遇到Dockerfile启动的方式安装环境需要长时间等待,可注释掉里面的pip安装,启动容器后再安装python库:pip install -r requirements.txt。 cd mmpose pip install mmcv-2.0.1+gite2f0eed.abi0.dtk2310.torch1.13-cp38-cp38-manylinux2014_x86_64.whl # dcu版mmcv,可从光合社区下载。 pip install -v -e . # 安装mmpose=1.3.0 # 训练时会自动下载目标检测权重到项目默认指定位置:yolox_s_8x8_300e_coco_20211121_095711-4592a793.pth ``` ### Anaconda(方法三) 1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: - https://developer.hpccube.com/tool/ ``` DTK驱动:dtk23.10 python:python3.8 torch:1.13.1 torchvision:0.14.1 apex:0.1 mmcv:2.0.1 # cd mmpose & pip install -v -e . # 安装mmpose=1.3.0 ``` `Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应。` 2、其它非特殊库参照requirements.txt安装 ``` pip install -r requirements.txt ``` ## 数据集 `COCO2017` - http://cocodataset.org/#download 项目中已提供用于试验训练的迷你数据集,[`coco.zip`](./data/coco.zip)解压即可使用,训练数据目录结构如下,用于正常训练的完整数据集请按此目录结构进行制备: ``` data/coco/ ├── annotations/ │ ├── person_keypoints_train2017.json │ ├── person_keypoints_val2017.json │ └── ... ├── train2017/ │ ├── xxx.png │ ├── xxx.png │ └── ... ├── val2017/ │ ├── xxx.png │ ├── xxx.png │ └── ... ``` `更多资料可参考源项目的README_origin.md` ## 训练 ### 单机多卡 ``` cd mmpose sh train.sh # if bug: Timeout while waiting for Database: /root/.cache/miopen/2.15.3.0b020ba8a/gfx92678.ukdb. rc=00000005 # then: rm -rf /root/.cache/miopen/2.15.3.0b020ba8a/* ``` ## 推理 ``` python demo/inferencer_demo.py tests/data/coco/ --pose2d configs/body_2d_keypoint/rtmo/coco/rtmo-s_8xb32-600e_coco-640x640.py --pose2d-weights checkpoint/epoch_xxx.pth --vis-out-dir vis_results # 采用coco2017自己训练的权重推理 # 官方默认权重推理:python demo/inferencer_demo.py tests/data/coco/000000000785.jpg --pose2d rtmo --vis-out-dir vis_results ``` ## result 输入人物图片:
识别出人物关键点:
### 精度 测试数据:"tests/data/coco/",测试算法为RTMO-s,其bockbone为CSPDarknet,其中V100的精度为论文中作者公开结果,推理框架:pytorch。 | device | AP | AP50 | AP75 | APM | APL | AR | |:---------:|:----:|:----:|:----:|:----:|:----:|:----:| | DCU Z100SM | 67.8 | 87.8 | 73.9 | 61.6 | 77.1 | 71.6 | | GPU V100 | 66.9 | 88.8 | 73.6 | 61.1 | 75.7 | 70.9 | ## 应用场景 ### 算法类别 `姿态估计` ### 热点应用行业 `制造,广媒,能源,医疗,家居,教育` ## 源码仓库及问题反馈 - http://developer.hpccube.com/codes/modelzoo/mmpose-rtmo_pytorch.git ## 参考资料 - https://github.com/open-mmlab/mmpose.git - https://zhuanlan.zhihu.com/p/649761492