其他分享
首页 > 其他分享> > 英伟达DeepStream学习笔记10——DeepStream5.0中Yolo v3的使用

英伟达DeepStream学习笔记10——DeepStream5.0中Yolo v3的使用

作者:互联网

英伟达DeepStream学习笔记10——DeepStream5.0中Yolo v3的使用

运行环境
硬件设备:

$ deepstream-app --version-all
deepstream-app version 5.0.0
DeepStreamSDK 5.0.0
CUDA Driver Version: 10.2
CUDA Runtime Version: 10.2
TensorRT Version: 7.1
cuDNN Version: 8.0
libNVWarp360 Version: 2.0.1d3

参考:
https://github.com/NVIDIA-AI-IOT/yolov4_deepstream

一、背景

Yolo系列的目标检测算法对目标检测技术起到绝对性的推进作用。Yolov3是YOLO(You Only Look Once)系列中的第三版,相比之前的算法,特别是针对小目标,精度总体上用显著提升。

DeepStream是英伟达开发的在TX2、AGX Xavier等设备上用于简化开发难度的一个流分析工具包用于构建AI-powered应用。DeepStream接收流数据(USB/CSI camera, video from file 或者RTSP流)作为输入,同时使用AI和computer vision用于生成insights为了更好的理解环境,将像素转换成insights。Deep Stream SDK可用于构建视频分析解决方案,用于智慧城市中的交通和行人理解,医院中的健康和安全监控,零售商店的自检和分析,检测制造工厂中组件缺陷等。

二、运行DeepStream5.0中Yolo v3示例代码

示例源码路径在:
\opt\nvidia\deepstream\deepstream-5.0\sources\objectDetector_Yolo 中,

2.1 Yolov3项目代码文件夹结构

在这里插入图片描述
该项目中支持Yolov3,Yolov3 tiny和 Yolov2, Yolov2 tiny。大家可以根据自己的实际情况选择不同的网络模型。本文章以Yolov3为例讲解怎么编译执行。在上面的文件中nvdsinfer_custom_impl_Yolo文件夹实现了Yolov3的tensorrt engine生成,bounding box的处理包括decode和NMS两步。该文件夹下包含如下一些文件:
在这里插入图片描述

2.2 编译运行Yolov3

2.2.1下载权重文件和配置文件

首先准备好yolov3.cfg和yolov3.weights,这个可以从yolo v3官方提供的下载地址下载。下载后放置到

或者用百度网盘下载:
链接:https://pan.baidu.com/s/1KUi1v3q9qXqbd5Aq6InM4A
提取码:xhoa

2.2.2 修改config_infer_primary_yoloV3.txt文件

然后修改每个相应config_infer_primary_yolo中模型地址。
该文件中各项配置含义如下:

[property]
gpu-id=0
net-scale-factor=0.0039215697906911373
#0=RGB, 1=BGR
model-color-format=0

 # 模型网络结构文件路径
custom-network-config=yolov3.cfg

# 模型权重文件路径
model-file=yolov3.weights

# 模型生成的推理引擎路径。
# 注意:这个配置如果注释的话,每次都会重新生成引擎,而生成引擎的过程很慢。
# 当这项配置打开时,这样只会在第一次生成引擎,后续启动会很快。
#model-engine-file=yolov3_b1_gpu0_int8.engine

 # 类别标签文件的路径
labelfile-path=labels.txt
int8-calib-file=yolov3-calibration.table.trt7.0
 # 设置推理精度,0表示fp32, 1表示int8,  2 表示fp16。
  # 从fp32到fp16再到int8, 推理速度会越来越快,但推理精度会越来越差。
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=1
# 目标检测的类别
num-detected-classes=80
gie-unique-id=1
network-type=0
is-classifier=0
 # 选择NMS算法
## 0=Group Rectangles, 1=DBSCAN, 2=NMS, 3= DBSCAN+NMS Hybrid, 4 = None(No clustering)
cluster-mode=2
maintain-aspect-ratio=1

# 解析检测框的函数名称
parse-bbox-func-name=NvDsInferParseCustomYoloV3

# 编译的动态库路径。我们在下文中会执行命令编译得到这样的so动态库文件
custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so

# 生成引擎的函数名称
engine-create-func-name=NvDsInferYoloCudaEngineGet
#scaling-filter=0
#scaling-compute-hw=0

[class-attrs-all]

# NMS的阈值
nms-iou-threshold=0.3

 # 检测框的过滤阈值
threshold=0.7

对于Yolo系列网络给出一个总体的框架流程图。
在这里插入图片描述

2.2.3 编译工程

进入objectDetector_Yolo文件夹下

export CUDA_VER=10.0
make -C nvdsinfer_custom_impl_Yolo     

这时候会在nvdsinfer_custom_impl_Yolo文件夹里生成.so文件

2.2.4 运行示例

deepstream-app -c deepstream_app_config_yoloV3.txt

2.2.5 效果图

第一次运行等待了接近4分钟后,才开始运行
在这里插入图片描述
等第一次运行结束后,可以把config_infer_primary_yoloV3.txt文件中

# 当这项配置打开时,这样只会在第一次生成引擎,后续启动会很快。
model-engine-file=yolov3_b1_gpu0_int8.engine

名字可能不是默认的,我的是

# 当这项配置打开时,这样只会在第一次生成引擎,后续启动会很快。
model-engine-file=model_b1_gpu0_int8.engine

再次运行,速度会快很多。

标签:DeepStream,伟达,Yolov3,10,Yolo,custom,engine,文件,2.2
来源: https://blog.csdn.net/mao_hui_fei/article/details/117650211