yoloV4+deepstream部署
overview
模型转换(darknet–>onnx–>TensorRT)
转为onnx模型可以在本地或tx2上进行;转tensorRT模型只能在目标设备上转换
本地模型转换
需要准备pytorch和onnx。pytorch版本:
- Pytorch 1.4.0 for TensorRT 7.0 and higher
- Pytorch 1.5.0 and 1.6.0 for TensorRT 7.1.2 and higher
- pip install onnxruntime
-
git clone 转换代码 git clone https://gitee.com/Mr_xiaolong/pytorch-YOLOv4.git 或 git clone https://github.com/Tianxiaomo/pytorch-YOLOv4.git -
darknet模型转onnx:将模型权重及配置文件放入文件夹内,执行 python demo_darknet2onnx.py yolov4-tiny-416.cfg yolov4-tiny-416.weights data/dog.jpg -1 生成Onnx模型及demo图像 -
onnxz转TensorRT模型。将上一步得到的模型移动到tensorRT路径下 sudo mv yolov4_-1_3_416_416_dynamic.onnx /usr/src/tensorrt/bin 执行模型转换命令: sudo ./trtexec --onnx=yolov4_-1_3_416_416_dynamic.onnx \ --minShapes=input:1x3x416x416 --optShapes=input:4x3x416x416 --maxShapes=input:8x3x416x416 \ --workspace=2048 --saveEngine=yolov4_-1_3_416_416_dynamic.engine --fp16
Tx2模型转换(不推荐,需要额外安装pytorch,onnxruntime)
- git clone 转换代码
git clone https://gitee.com/Mr_xiaolong/pytorch-YOLOv4.git 或 git clone https://github.com/Tianxiaomo/pytorch-YOLOv4.git - darknet模型转onnx:将模型权重及配置文件放入文件夹内(此处模型由本机放入Document文件夹中),执行
python demo_darknet2onnx.py yolov4-tiny-416.cfg yolov4-tiny-416.weights data/dog.jpg -1 keypoint: a. 模型输入尺寸可选320 * 320, 416 * 416, 512 * 512 或 608 * 608等,可以根据帧率/精度进行动态调整,但需要满足以下要求: height = 320 + 96 * n, n in {0, 1, 2, 3, …} width = 320 + 96 * m, m in {0, 1, 2, 3, …} b. 为了方便调整参数进行测试,这里转换为动态模型(batchsize可以在范围内进行调整) 模型转换参考地址
模型部署
-
下载NVIDIA官方提供的YOLOV4代码。这里官方提供了两种部署方式,可以直接运行生成的tensorRT模型,也可以结合deepstream框架进行部署。 git clone https://github.com/NVIDIA-AI-IOT/yolov4_deepstream.git 将其中的deepstream_yolov4文件夹复制到/opt/nvidia/deepstream/deepstream/sources路径下(在此目录下clone代码) -
将转换好的模型移动到此文件夹 sudo mv yolov4_-1_3_416_416_dynamic.engine /opt/nvidia/deepstream/deepstream/sources/deepstream_yolov4/ -
编译 nvdsparsebbox_Yolo.cpp : 编译 sudo make CUDA_VER=10.2 若编译失败或有类别数(默认类别数为80)修改, 需重新编译,执行清理,然后重新编译。 sudo make clean CUDA_VER=10.2 sudo make CUDA_VER=10.2 -
更新配置文件 在config_infer_primary_yoloV4.txt中更新模型路径,标签等信息: 在deepstream_app_config_yoloV4.txt中更新以下信息,属性介绍: a. [tiled-display] 显示设置,多路视频输出时设置展示行列数、图像分辨率 b. [source] 设置输入源,多路输入通过 source%d来实现。demo中仅给了1-3的Type,这里设置 tpye=4为rtsp输入。其余属性设置(跳帧等)参照属性介绍。 c. [sink]设置输出方式及端口(rtsp) d. [streammux]设置批处理的batch-size大小,是否作为实时输入 e. [primary-gie]设置推理模块所用模型及标签,batch-size大小与[streammux]保持一致可以有最佳性能。 f. [tracker]设置跟踪所用的动态链接库。可以根据性能\精度表现进平衡 -
运行‘deepstream-app -c deepstream_app_config_yoloV4.txt’
相关问题解决方案
- GStreamer pipeline相关问题,清理缓存即可:
rm ${HOME}/.cache/gstreamer-1.0/registry.aarch64.bin
参考资料
- 调优相关说明
- 多模型部署triton
- deepstream镜像运行及部署
- 获取和设置Bounding Box
- 结构体参考文档
deepstream源文件路径
/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-app
|