英伟达DeepStream学习笔记10——DeepStream5.0中Yolo v3的使用
2021/6/7 10:25:23
本文主要是介绍英伟达DeepStream学习笔记10——DeepStream5.0中Yolo v3的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
英伟达DeepStream学习笔记10——DeepStream5.0中Yolo v3的使用
- 一、背景
- 二、运行DeepStream5.0中Yolo v3示例代码
- 2.1 Yolov3项目代码文件夹结构
- 2.2 编译运行Yolov3
- 2.2.1下载权重文件和配置文件
- 2.2.2 修改config_infer_primary_yoloV3.txt文件
- 2.2.3 编译工程
- 2.2.4 运行示例
- 2.2.5 效果图
运行环境:
硬件设备:
$ 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两步。该文件夹下包含如下一些文件:
- kernel.cu :实现了CUDA下预测位置,objectness和classification的sigmoid和exp处理
- Makefile: 用于编译
- nvdsinfer_yolo_engine.cpp:根据网络类型创建引擎,用于生成tensorrt engine, 该例子是基于tensorrt API构建的网络定义
- nvdsparsebbox_Yolo.cpp:yolo目标检测结果的输出,用于网络预测后信息的处理包括预测框的decode和bounding box的NMS处理
- 其他文件 :用来构建Yolov3网络
- YoloPlugin: 模型搭建的一些组件以及相应的实现,是Yolo网络中的Yolo layer 的一个tensorrt custom plugin.
kernels.cu: cuda核最底层的实现
trt_utils.cpp: 建立tensorRT网络的部分,已经支持的部分
yolo.cpp :创建引擎、创建网络等的具体实现
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学习笔记10——DeepStream5.0中Yolo v3的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南