Jetson Nano( 七)deepstream yolov4
软硬件版本
Jetson Nano 4G
JP 4.4.1
CUDA 10.2
CUDNN 8.0
TensorRT 7.1.3.0
deepstream 5.0
Jetson 上环境库如:tensorflow pycuda torch1.5/1.6 torchvision 0.7等放在了网盘需要的自取:
链接:https://pan.baidu.com/s/163UMVcgapcpo6YDyrgj_Wg
提取码:ldql
deepstream的安装 请参考上篇:
https://blog.csdn.net/djj199301111/article/details/110186640
模型转换流程
Darknet模型 /Pytorch模型 —— ONNX模型 —— TRT模型
- 首先准备自己的yolov4模型darknet或者pytorch版本皆可。
- 使用
https://github.com/Tianxiaomo/pytorch-YOLOv4
下脚本转为onnx模型。
注意:本步骤在开发机上运行
python demo_darknet2onnx.py <cfgFile> <weightFile> <imageFile> <batchSize>
#python ./demo_darknet2onnx.py ./cfg/yolov4.cfg ./cfg/yolov4.weights ./data/dog.jpg 1
python demo_pytorch2onnx.py <weight_file> <image_path> <batch_size> <n_classes> <IN_IMAGE_H> <IN_IMAGE_W>
#python ./demo_pytorch2onnx.py ./cfg/yolov4.pth ./data/dog.jpg 1 80 416 416
- 使用trt命令转为engine模型。
- 3.1 拷贝onnx模型至nano。
- 3.2 使用trt转换:
/usr/src/tensorrt/bin/trtexec --onnx=./yolov4_pt.onnx --minShapes=input:1x3x416x416 --optShapes=input:1x3x416x416 --maxShapes=input:1x3x416x416 --workspace=2048 --saveEngine=./yolov4.engine --fp16
以上为本次设置的参数情况;设置大了会报显存不足的情况,有需求的朋友,可以多试几次。
转换过程估计在1-2小时左右
- 3.3 测试engine模型
使用https://github.com/Tianxiaomo/pytorch-YOLOv4
下的demo_trt.py脚本测试:
python demo_trt.py <tensorRT_engine_file> <input_image> <input_H> <input_W>
#
注意:
- Darknet模型 /Pytorch模型 —— ONNX模型 步骤是在开发机上操作的(本人在nano上会内存不足报错)。
- ONNX模型 —— TRT模型 步骤在nano上运行。
- 这里batchSize可设置1;设置4或8能提高一些推理速度;由于内存不足,本文中设置都是1。
- 本文中模型输入尺寸为:416*416。
- 需要添加虚拟内存否则无法转换成engine。
Deepstream 配置
1.将deepstream_yolov4 拷贝到 /opt/nvidia/deepstream-5.0/sources/
2.配置文件修改:
-
deepstream_app_config_yoloV4.txt:
-
模型路径
-
标签路径
-
批次大小
-
模式格式(FP32 FP16 INT8)
-
视频路径
-
config_infer_primary_yoloV4.txt:
-
输入尺寸大小
-
模型路径
-
标签数量
-
置信度
3.运行测试
deepstream-app -c deepstream_app_config_yoloV4.txt
App run successful
说明运行成功
参考
https://github.com/NVIDIA-AI-IOT/yolov4_deepstream
https://github.com/Tianxiaomo/pytorch-YOLOv4