【mmdeploy部署系列】使用Tensorrt加速部署mmpose人体姿态库

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安装、使用教程

猜你喜欢

转载自blog.csdn.net/weixin_45921929/article/details/129259301