【mmdeploy部署系列】使用Tensorrt加速部署mmpose人体姿态库
- 0.引言
- 1.安装mmcv
- 2.使用mmpose
- (1)安装mmpose
- (2)运行mmpose
- 3.使用mmdeploy
- (1)安装ppl.cv
- (2)编译安装mmdeploy
- (3)转换模型
- (4)运行程序
- 参考文章
0.引言
mmdeploy 是 OpenMMLab 模型部署工具箱,为各算法库提供统一的部署体验。基于 mmdeploy,开发者可以轻松从训练 repo 生成指定硬件所需 SDK,省去大量适配时间。
今天尝试了一下mmdeploy部署mmpose,配置环境一不小心就陷进去了,建议小白按我的版本来搭配,mmpose和mmdeploy都选用的是最高版本,搭配的mmcv是2.x版本,不加版本号都是耍流氓,被各种默认版本号坑惨了
mmcv-v1.x和v2.x版本区别:
- 在mmcv-v1.x中,cuda版本的叫mmcv-full,cpu版本的叫mmcv;
- 在mmcv-v2.x版本中,mmcv-full被重新命名为mmcv,因此cuda版本的直接安装mmcv就可以。
目前已支持的仓库如下:
- mmcls
- mmdet
- mmseg
- mmedit
- mmocr
- mmpose
- mmdet3d
- mmrotate
- mmaction2
本机环境
- ubuntu20.04
- CUDA11.3
- Tensorrt8.4.3.1
- pytorch1.12.0
- torchvision0.13.0
1.安装mmcv
在本文中需要安装mmcv-2.x版本,之前尝试了mmcv-1.x搭配mmpose0.x和mmdeploy0.x版本,结果各种报错,建议还是按照mmcv-2.x版本
pip install openmim
mim install mmcv==2.0.0rc1
2.使用mmpose
(1)安装mmpose
在这里我们安装的mmpose版本号是v1.0.0rc0
git clone https://github.com/open-mmlab/mmpose.git -b v1.0.0rc0
cd mmpose
pip install -r requirements.txt
pip install -v -e .
# 默认会安装numpy最新版本,但是最新版本会出现一大堆问题,建议安装numpy==1.23.1版本
pip install numpy==1.23.1
(2)运行mmpose
我们使用mmpose仓库中的一个自上而下的demo来测试我们的安装是否成功,将里面的内容替换为自己的配置项就可以运行啦~
python demo/image_demo.py \
/home/lzj/Desktop/12.jpg \
configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w48_8xb32-210e_coco-256x192.py \
https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_256x192-b9e0b3ab_20200708.pth \
--out-file demo_result.jpg \
--draw-heatmap
运行后的结果如下,它会将人体骨骼点与热力图拼接在一张图上进行输出
当然也可以使用api的形式进行调用
from mmpose.apis import inference_topdown, init_model
from mmpose.utils import register_all_modules
register_all_modules()
config_file = 'configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w48_8xb32-210e_coco-256x192.py'
checkpoint_file = 'https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_256x192-b9e0b3ab_20200708.pth'
model = init_model(config_file, checkpoint_file, device='cuda:0') # or device='cpu'
# 准备一张有人的照片,把这个路径改为自己的图片路径
results = inference_topdown(model, '1.jpg')
3.使用mmdeploy
前期的准备工作具体可以参看官方文档,包括cmake 3.14+/gcc 7+/PyTorch 1.8.0+/opencv 3+
mmdeploy官网文档
(1)安装ppl.cv
ppl.cv是商汤自研的高性能图像处理库,其中包含OpenPPL团队在场景落地中总结出的一组常用图像处理和其他cv操作,可以在深度学习推理的整个pipeline中优化相关的图像预处理部分,与推理引擎ppl.nn组合完成深度学习推理的全流程。mmdeploy依赖于ppl.cv,因此需要先安装ppl.cv库:
git clone https://github.com/openppl-public/ppl.cv.git
cd ppl.cv
export PPLCV_DIR=$(pwd)
git checkout tags/v0.7.0 -b v0.7.0
./build.sh cuda
(2)编译安装mmdeploy
git clone https://github.com/open-mmlab/mmdeploy.git -b v1.0.0rc3
cd mmdeploy/
git submodule update --recursive
mkdir -p build && cd build
# 编译安装,其中-DTENSORRT_DIR和-Dpplcv_DIR需要分别换成自己的tensorrt地址和ppl.cv地址
cmake -DMMDEPLOY_BUILD_SDK=ON \
-DMMDEPLOY_TARGET_DEVICES="cpu;cuda" \
-DMMDEPLOY_TARGET_BACKENDS='trt' \
-DTENSORRT_DIR=/opt/TensorRT-8.4.3.1 \
-Dpplcv_DIR=/home/xx/ppl.cv/cuda-build/install/lib/cmake/ppl \
-DMMDEPLOY_CODEBASES=all \
-DMMDEPLOY_BUILD_SDK_PYTHON_API=ON ..
make -j$(nproc)
(3)转换模型
返回mmdeploy根目录,执行转换模型脚本,注意需要将路径更换为自己主机的路径
python tools/deploy.py \
configs/mmpose/pose-detection_tensorrt_static-256x192.py \
/home/xx/mmpose/configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w48_8xb32-210e_coco-256x192.py \
https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_256x192-b9e0b3ab_20200708.pth \
demo/resources/human-pose.jpg \
--work-dir work-dirs/mmpose/topdown/hrnet/trt \
--device cuda --dump-info
转换后的模型在work-dirs/mmpose/topdown/hrnet/trt
路径下
(4)运行程序
在根目录下新建一个trt_demo.py
的文件,将下述代码复制进去,注意修改参数
from mmdeploy_python import PoseDetector
import cv2
# 第一个参数是模型转换命令中 --work-dir选项的值
detector = PoseDetector(model_path='work-dirs/mmpose/topdown/hrnet/trt', device_name='cuda', device_id=0)
# 需要读取自己路径下的图片
img = cv2.imread('demo/resources/human-pose.jpg')
result = detector(img)
_, point_num, _ = result.shape
points = result[:, :, :2].reshape(point_num, 2)
for [x, y] in points.astype(int):
cv2.circle(img, (x, y), 1, (0, 255, 0), 2)
cv2.imwrite('output_pose.png', img)
运行程序后,会在根目录下生成一个output_pose.png
的图片,会将人的关键点画出来
# 设置环境变量
export PYTHONPATH=/home/xx/mmdeploy/build/lib/
# 执行脚本
python trt_demo.py
参考文章
1.手把手教你在 ubuntu 上使用 MMDeploy
2.open-mmlab / mmpose安装、使用教程