mmdeploy快速上手

mmdeploy快速上手

若要将使用 openmmlab 的框架(如mmdet、mmcls)等训练的模型进行快速部署,同样来自 openmmlab 的 mmdeploy 无疑是最合适的选择,本文将简单地完成一个 Faster RCNN 模型的部署。

配置

本文基于如下软硬件配置:

CPU:x86-64 (any)

GPU:Nvidia (any)

OS: Ubuntu

环境与安装

为了方便,这里就不展开讲如何安装了,我们就直接使用 docker 环境来进行实验,需要在本机安装的同学可参考:安装mmdploy,或者直接参考 Dockerfile 中的步骤安装也是一样的。只要配置好相同的环境之后,后面的步骤都是一样的。

我们先拉 git 仓库,然后根据官方的 Dockerfile 来构建镜像:

git clone https://github.com/open-mmlab/mmdeploy.git
cd mmdeploy/docker/GPU
docker build . -t mmdeploy:test --build-arg  USE_SRC_INSIDE=true	# 使用阿里云的镜像安装镜像内的包

构建完成后,镜像内就已经安装好支持 ONNXRuntime 和 TensorRT 后端推理引擎和 mmdeploy 本身了。

准备检测模型

我们之前提到,本文将基于 mmdet 的 Faster RCNN 检测模型来进行部署,我们先准备好监测模型的配置文件和权重文件。

git clone https://github.com/open-mmlab/mmdetection.git
# 准备权重文件
mkdir mmdetection/checkpoints
wget https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth -P mmdetection/checkpoints

模型转换

因为之后会反复用到 mdeploy 和 mmdetection 中的内容,我们先设置 mmdeploy 和 mmdetection 的根目录地址为环境变量:

export MMDEPLOY_DIR=/your/path/to/mmdeploy
export MMDET_DIR=/your/path/to/mmdetection

接下来就可以开始进行模型转换了,我们根 Faster RCNN 的配置文件和刚刚下载好的权重文件来将模型转换为 onnx 和 tensorrt :

转换为 tensorrt

python ${MMDEPLOY_DIR}/tools/deploy.py \
    ${MMDEPLOY_DIR}/configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py \
    ${MMDET_DIR}/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
    ${MMDET_DIR}/checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
    ${MMDET_DIR}/demo/demo.jpg \
    --work-dir /tmp/fsr_trt \	# 这里笔者放在临时目录下了,大家按需选在放置的目录
    --device cuda:0 \			# 转换为trt格式,必须是在Nvidia GPU上
    --dump-info

转换为 onnx

python ${MMDEPLOY_DIR}/tools/deploy.py \
    ${MMDEPLOY_DIR}/configs/mmdet/detection/detection_onnxruntime_dynamic.py \
    ${MMDET_DIR}/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \
    ${MMDET_DIR}/checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
    ${MMDET_DIR}/demo/demo.jpg \
    --work-dir /tmp/fsr_ort \
    --device cpu \		# onnx我们用cpu来试一下
    --dump-info

之后我们会得到两个目录文件:/tmp/fsr_trt/tmp/fsr_ort ,我们看一下这个目录中有什么:

ls /tmp/fsr_trt/
# ...
# end2end.onnx
# end2end.engine
# ...

可以看到,end2end.engineend2end.onnx 就是模型文件,我们之后会用这个模型文件分别在 TensorRT 和 ONNXRuntime 两种后端上进行推理。为什么 TensorRT 的结果目录中也会有 end2end.onnx 文件呢,是因为通常由 torch 模型转换到 onnx 格式作为中转,再赚到 tensorrt。

模型推理

我们有多重进行模型推理的方式,分别是是通过 Python 的接口C++编译成的可执行文件

Python 接口

我们直接调用 mmdeploy 的 api 即可,这里我们用之前的到的 TensoRT 模型来实验:

from mmdeploy.apis import inference_model
import os
import os.path as osp

model_cfg = osp.join(os.getenv('MMDET_DIR'), 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py')
deploy_cfg = osp.join(os.getenv('MMDEPLOY_DIR'), '/configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py')
backend_files = ['/tmp/fsr_trt/end2end.engine']		# 注意这里传递的一定要是一个可迭代对象,比如列表
result = inference_model(model_cfg, deploy_cfg, backend_files, img=img, device=device)

需要注意的是 backend_files 需要接收的是一个可迭代对象,比如这里我们传的就是一个列表。当然了字符串在 Python 中也是可迭代对象,但是意义就完全错了,传进来的字符串会被遍历,就会得到类似如下这样的报错:

IsADirectoryError: [Errno 21] Is a directory: '/'

这就是将字符串去遍历,结果认为第一个符号 / 为目录了。

C++编译成的可执行文件

编译SDK

这里如果之前的环境配置使用的是 Dockerfile 构建的镜像,或者在手动配置环境方案中,在编译 MMDeploy 时开启 MMDEPLOY_BUILD_SDK 则, MMDeploy SDK是已经编译好的,即在 ${MMDEPLOY_DIR}/build/install/example 目录下有 object_detection 等一系列编译好的可执行文件,则可跳过这一小步:

cd ${MMDEPLOY_DIR}/build/install/example

# 配置ONNX Runtime库目录
export LD_LIBRARY_PATH=/path/to/onnxruntime/lib
mkdir -p build && cd build
cmake -DOpenCV_DIR=path/to/OpenCV/lib/cmake/OpenCV \
      -DMMDeploy_DIR=${MMDEPLOY_DIR}/build/install/lib/cmake/MMDeploy ..
make object_detection

这之后我们可以直接运行可执行文件,指定模型文件和图像来进行推理,这里我们用 CPU 的 ONNXRuntime 模型来测试

cd ${MMDEPLOY_DIR}/build/install/example
./object_detection cpu /tmp/fsr_ort ${MMDET_DIR}/demo/demo.jpg

到这里,简单的 mmdeploy 的快速上手就结束了,如果有更定制化的需求,可以去参考文档和源码。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值