运行环境:
硬件设备:
$ 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可用于构建视频分析解决方案,用于智慧城市中的交通和行人理解,医院中的健康和安全监控,零售商店的自检和分析,检测制造工厂中组件缺陷等。
示例源码路径在:
\opt\nvidia\deepstream\deepstream-5.0\sources\objectDetector_Yolo 中,
该项目中支持Yolov3,Yolov3 tiny和 Yolov2, Yolov2 tiny。大家可以根据自己的实际情况选择不同的网络模型。本文章以Yolov3为例讲解怎么编译执行。在上面的文件中nvdsinfer_custom_impl_Yolo文件夹实现了Yolov3的tensorrt engine生成,bounding box的处理包括decode和NMS两步。该文件夹下包含如下一些文件:
首先准备好yolov3.cfg和yolov3.weights,这个可以从yolo v3官方提供的下载地址下载。下载后放置到
或者用百度网盘下载:
链接:https://pan.baidu.com/s/1KUi1v3q9qXqbd5Aq6InM4A
提取码:xhoa
然后修改每个相应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系列网络给出一个总体的框架流程图。
进入objectDetector_Yolo文件夹下
export CUDA_VER=10.0 make -C nvdsinfer_custom_impl_Yolo
这时候会在nvdsinfer_custom_impl_Yolo文件夹里生成.so文件
deepstream-app -c deepstream_app_config_yoloV3.txt
第一次运行等待了接近4分钟后,才开始运行
等第一次运行结束后,可以把config_infer_primary_yoloV3.txt文件中
# 当这项配置打开时,这样只会在第一次生成引擎,后续启动会很快。 model-engine-file=yolov3_b1_gpu0_int8.engine
名字可能不是默认的,我的是
# 当这项配置打开时,这样只会在第一次生成引擎,后续启动会很快。 model-engine-file=model_b1_gpu0_int8.engine
再次运行,速度会快很多。