极智AI | deepstream6.0部署yolov3和yolov4教程

本文涉及的产品
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
简介: 大家好,我是极智视界,本文介绍了使用 deepstream6.0 部署 yolov3 和 yolov4 的方法。

大家好,我是极智视界,本文介绍了使用 deepstream6.0 部署 yolov3 和 yolov4 的方法。

Yolo 系列是工程中应用十分广泛的目标检测算法,特别是从 yolov3 开始,逐步的进化,到 yolov4、yolov5 等,工程的接受度越来越高。而 deepstream 是英伟达提出的一套加速深度学习落地的 pipeline 应用,那么当 deepstream 遇到 yolo,会擦出什么样的火花呢,让我们来看。

关于 deepstream 的安装教程,可以查阅我之前写的几篇:《【经验分享】ubuntu 安装 deepstream6.0》、《【经验分享】ubuntu 安装 deepstream5.1》。

先来看下 deepstream6.0 source 的目录结构:

  • apps
  • apps-common
  • audio_apps
  • sample_apps:例程,如 deepstream-app、deepstream-test1...
  • gst-plugins:gstreamer 插件
  • include:头
  • libs:库
  • objectDetector_FasterRCNN:FasterRCNN 示例
  • objectDetector_SSD:SSD 示例
  • objectDetector_Yolo:YOLO 示例
  • tools: 日志相关


1、deepstream6.0 部署 yolov3

通过上述的 objectDetector_Yolo 工程来跑 yolov3,在 objectDetector_Yolo 工程里主要关注以下几个模块:

  • nvdsinfer_custom_impl_Yolo:yolov3 工程实现代码;
  • nvdsinfer_yolo_engine.cpp:解析模型、生成引擎
  • nvdsparsebbox_Yolo.cpp:输出层的解析函数,解析目标检测框
  • trt_utils.cpp 和 trt_utils.h:构造 TensorRT网络的工具类的接口和实现
  • yolo.cpp 和 yolo.h:生成 yolo 引擎的接口和实现
  • yoloPlugins.cpp 和 yoloPlugins.h:YoloLayerV3 and YoloLayerV3PluginCreator 的接口和实现
  • kernels.cu:cuda核底层实现
  • config_infer_xxx_.txt:模型的配置;
  • deepstream_app_config_xxx.txt:Gstreamer nvinfer 插件的配置文件;
  • xxx.cfg、xxx.weights:模型文件;

有以上这些就够了,下面开始。

1.1 下载模型文件

deepstream6.0 SDK 中是没有 yolov3 的模型文件的,需要自行下载,给出传送。

yolov3.cfg:https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg

yolov3.weights:https://link.zhihu.com/?target=https%3A//pjreddie.com/media/files/yolov3.weights

这里多说一句,如果你有 TensorRT 的 yolov3.engine 的话,就不需要原始模型文件了,如果没有 .engine 的话,其实会根据原始文件先生成 .engine。

1.2 配置 config_infer_primary_yolov3.txt

[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
labelfile-path=labels.txt
int8-calib-file=yolov3-calibration.table.trt7.0
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=1
num-detected-classes=80
gie-unique-id=1
network-type=0
is-classifier=0
cluster-mode=2
maintain-aspect-ratio=1
parse-bbox-func-name=NvDsInferParseCustomYoloV3
custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so
engine-create-func-name=NvDsInferYoloCudaEngineGet
[class-attrs-all]
nms-iou-threshold=0.3
threshold=0.7

1.3 配置 deepstream_app_config_yolov3.txt

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5
[tiled-display]
enable=1
rows=1
columns=1
width=1280
height=720
gpu-id=0
nvbuf-memory-type=0
[source0]
enable=1
type=3
uri=file://../../samples/streams/sample_1080p_h264.mp4
num-sources=1
gpu-id=0
cudadec-memtype=0
[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File
type=2
sync=0
source-id=0
gpu-id=0
nvbuf-memory-type=0
[osd]
enable=1
gpu-id=0
border-width=1
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0
[streammux]
gpu-id=0
live-source=0
batch-size=1
batched-push-timeout=40000
width=1920
height=1080
enable-padding=0
nvbuf-memory-type=0
[primary-gie]
enable=1
gpu-id=0
#model-engine-file=model_b1_gpu0_int8.engine
labelfile-path=labels.txt
batch-size=1
bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=2
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_yoloV3.txt
[tracker]
enable=1
tracker-width=640
tracker-height=384
ll-lib-file=/opt/nvidia/deepstream/deepstream-6.0/lib/libnvds_nvmultiobjecttracker.so
ll-config-file=../../samples/configs/deepstream-app/config_tracker_NvDCF_perf.yml
gpu-id=0
enable-batch-process=1
enable-past-frame=1
display-tracking-id=1
[tests]
file-loop=0

1.4 工程编译

进入到 /opt/nvidia/deepstream/deepstream-6.0/sources/objectDetector_Yolo

cd /opt/nvidia/deepstream/deepstream-6.0/sources/objectDetector_Yolo

依次执行下面两条命令,编译生成 .so 文件:

export CUDA_VER=11.4    # 设置与设备相同的CUDA版本

或者在 /opt/nvidia/deepstream/deepstream-6.0/sources/objectDetector_Yolo/nvdsinfer_custom_impl_Yolo/Makefile 中修改:

然后执行编译

make -C nvdsinfer_custom_impl_Yolo

编译后会生产动态库文件,生成了 libnvdsinfer_custom_impl_Yolo.so 动态库文件。

1.5 执行

deepstream-app -c deepstream_app_config_yoloV3.txt

这里完成了 deepstream6.0 Yolov3 的部署。


2、deepstream6.0 部署 yolov4

这里以不同的方式来部署一下 yolov4,即直接调用 TensorRT Engine,而不是从原始模型导入。

2.1 使用 darknet2onnx2TRT 生成 yolov4.engine

下载 yolov4 darknet 原始权重,给出百度网盘传送:

https://pan.baidu.com/s/1dAGEW8cm-dqK14TbhhVetA     Extraction code:dm5b

clone 模型转换工程:

git clone https://github.com/Tianxiaomo/pytorch-YOLOv4.git Yolov42TRT

开始模型转换:

cd Yolov42TRT
# darknet2onnx
python demo_darknet2onnx.py ./cfg/yolov4.cfg ./cfg/yolov4.weights ./data/dog.jpg 1
# onnx2trt
trtexec --onnx=./yolov4_1_3_608_608_static.onnx --fp16 --saveEngine=./yolov4.engine --device=0

这样就会生成 yolov4.engine。

2.2 deepstream yolov4 推理工程配置

clone deepstream yolov4 推理工程:

git clone https://github.com/NVIDIA-AI-IOT/yolov4_deepstream.git
cd yolov4_deepstream/deepstream_yolov4

配置 config_infer_primary_yoloV4.txt:

[property]
gpu-id=0
net-scale-factor=0.0039215697906911373
#0=RGB, 1=BGR
model-color-format=0
model-engine-file=yolov4.engine
labelfile-path=labels.txt
batch-size=1
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=2
num-detected-classes=80
gie-unique-id=1
network-type=0
is-classifier=0
## 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=NvDsInferParseCustomYoloV4
custom-lib-path=nvdsinfer_custom_impl_Yolo/libnvdsinfer_custom_impl_Yolo.so
[class-attrs-all]
nms-iou-threshold=0.6
pre-cluster-threshold=0.4

配置 deepstream_app_config_yoloV4.txt:

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5
[tiled-display]
enable=0
rows=1
columns=1
width=1280
height=720
gpu-id=0
nvbuf-memory-type=0
[source0]
enable=1
type=3
uri=file:/opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_1080p_h264.mp4
num-sources=1
gpu-id=0
cudadec-memtype=0
[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File
type=3
sync=0
source-id=0
gpu-id=0
nvbuf-memory-type=0
container=1
codec=1
output-file=yolov4.mp4
[osd]
enable=1
gpu-id=0
border-width=1
text-size=12
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0
[streammux]
gpu-id=0
live-source=0
batch-size=1
batched-push-timeout=40000
width=1280
height=720
enable-padding=0
nvbuf-memory-type=0
[primary-gie]
enable=1
gpu-id=0
model-engine-file=yolov4.engine
labelfile-path=labels.txt
batch-size=1
bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=0
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_yoloV4.txt
[tracker]
enable=0
tracker-width=512
tracker-height=320
ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_klt.so
[tests]
file-loop=0

把 2.1 转换生成的 yolov4.engine 拷贝到 /opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream

2.3 工程编译

进入到 /opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream

cd /opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream

依次执行下面两条命令,编译生成 .so 文件:

export CUDA_VER=11.4    # 设置与设备相同的CUDA版本

或者在 /opt/nvidia/deepstream/deepstream-6.0/sources/yolov4_deepstream/nvdsinfer_custom_impl_Yolo/Makefile 中修改:

然后执行编译

make -C nvdsinfer_custom_impl_Yolo

编译后会生产动态库文件,生成了 libnvdsinfer_custom_impl_Yolo.so 动态库文件。

2.4 执行

deepstream-app -c deepstream_app_config_yoloV4.txt

这里完成了 deepstream6.0 Yolov4 的部署。


以上分享了 deepstream6.0 部署 yolov3 和 yolov4 的方法,希望我的分享会对你的学习有一点帮助。


logo_show.gif


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
1月前
|
人工智能 并行计算 安全
从零到一,打造专属AI王国!大模型私有化部署全攻略,手把手教你搭建、优化与安全设置
【10月更文挑战第24天】本文详细介绍从零开始的大模型私有化部署流程,涵盖需求分析、环境搭建、模型准备、模型部署、性能优化和安全设置六个关键步骤,并提供相应的示例代码,确保企业能够高效、安全地将大型AI模型部署在本地或私有云上。
289 7
|
1月前
|
人工智能 安全 网络安全
揭秘!大模型私有化部署的全方位安全攻略与优化秘籍,让你的AI项目稳如磐石,数据安全无忧!
【10月更文挑战第24天】本文探讨了大模型私有化部署的安全性考量与优化策略,涵盖数据安全、防火墙配置、性能优化、容器化部署、模型更新和数据备份等方面,提供了实用的示例代码,旨在为企业提供全面的技术参考。
85 6
|
2月前
|
人工智能 数据安全/隐私保护 UED
RAG让AI大模型更懂业务解决方案部署使用体验
根据指导文档,部署过程得到了详细步骤说明的支持,包括环境配置、依赖安装及代码示例,确保了部署顺利进行。建议优化知识库问题汇总,增加部署失败案例参考,以提升用户体验。整体解决方案阅读与部署体验良好,有助于大型语言模型在特定业务场景的应用,未来可加强行业适应性和用户隐私保护。
64 5
|
1月前
|
人工智能 分布式计算 数据可视化
大模型私有化部署全攻略:硬件需求、数据隐私、可解释性与维护成本挑战及解决方案详解,附示例代码助你轻松实现企业内部AI应用
【10月更文挑战第23天】随着人工智能技术的发展,企业越来越关注大模型的私有化部署。本文详细探讨了硬件资源需求、数据隐私保护、模型可解释性、模型更新和维护等方面的挑战及解决方案,并提供了示例代码,帮助企业高效、安全地实现大模型的内部部署。
69 1
|
1月前
|
人工智能 分布式计算 数据可视化
大模型私有化部署全攻略:硬件需求、数据隐私、可解释性与维护成本挑战及解决方案详解,附示例代码助你轻松实现企业内部AI应用
【10月更文挑战第23天】随着人工智能技术的发展,大模型在各领域的应用日益广泛。然而,将其私有化部署到企业内部面临诸多挑战,如硬件资源需求高、数据隐私保护、模型可解释性差、更新维护成本高等。本文探讨了这些挑战,并提出了优化硬件配置、数据加密、可视化工具、自动化更新机制等解决方案,帮助企业顺利实现大模型的私有化部署。
64 1
|
2月前
|
Serverless 数据安全/隐私保护 前端开发
大模型代码能力体验报告之贪吃蛇小游戏《一》:Claude.ai篇 - 生成、预览和快速部署的serverless一条龙
本文介绍了通过Claude.ai生成并优化Web版贪吃蛇游戏的过程,展示了其强大的代码生成功能及用户友好的界面设计。从初始版本的快速生成到根据用户反馈调整游戏速度,再到提供多种实用工具如文件管理、版本控制和一键部署,Claude.ai不仅是一个代码助手,更像是一个全面的serverless开发平台。文中还呼吁国内厂商关注此类技术的发展。
|
2月前
|
自然语言处理 IDE 测试技术
通义灵码史上最全使用教程:秀一秀AI编程新肌肉
通义灵码是阿里云推出的一款智能编码辅助工具,基于通义大模型,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等功能。它支持 Visual Studio Code 和 JetBrains IDEs,适配多 IDE 原生设计,帮助开发者高效、流畅地编码。官方提供了详细的下载和安装指南,以及丰富的功能介绍和使用指南。
339 3
|
2月前
|
人工智能 弹性计算 自然语言处理
《触手可及,函数计算玩转 AI 大模型》解决方案体验与部署评测
在AI技术快速发展的背景下,大模型正推动各行业的智能化转型。企业为抓住机遇,纷纷寻求部署AI大模型以满足特定业务需求。阿里云函数计算凭借按量付费、卓越弹性和快速交付等优势,为企业提供了高效、安全的AI大模型部署方案。本文将详细介绍阿里云函数计算的技术解决方案及其在文生文、图像生成和语音生成等领域的应用实例,展示其在降低成本、提高效率和增强灵活性方面的显著优势。
|
8天前
|
机器学习/深度学习 人工智能 算法
AI技术在医疗诊断中的应用及前景展望
本文旨在探讨人工智能(AI)技术在医疗诊断领域的应用现状、挑战与未来发展趋势。通过分析AI技术如何助力提高诊断准确率、缩短诊断时间以及降低医疗成本,揭示了其在现代医疗体系中的重要价值。同时,文章也指出了当前AI医疗面临的数据隐私、算法透明度等挑战,并对未来的发展方向进行了展望。
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
当前AI大模型在软件开发中的创新应用与挑战
2024年,AI大模型在软件开发领域的应用正重塑传统流程,从自动化编码、智能协作到代码审查和测试,显著提升了开发效率和代码质量。然而,技术挑战、伦理安全及模型可解释性等问题仍需解决。未来,AI将继续推动软件开发向更高效、智能化方向发展。

热门文章

最新文章