项目路径:GitHub - egbertYeah/YOLOv6 at dev

0. 介绍

Arxiv:https://arxiv.org/abs/2209.02976

Github: https://github.com/meituan/YOLOv6

yolov6 是美团发布的一款面向工业应用的2D目标检测算法,在检测精度和推理效率上都有所提升。yolov6 在Backbon、Neck、Head等方面都进行了改进,基于RepVGG style设计了EfficientRep BackBone 和Rep-PAN Neck,此外,优化设计了更简洁的Efficient Decouple Head.

现阶段,在Yolov6的开源项目中提供多种部署方案,本文,基于现有的TensorRT部署方案,来完成Yolov6在Deepstream框架上的推理。

1. 生成Engine

基于现有的TensorRT部署方案来生成 Yolov6n的 TensorRT Engine 文件,具体细节可参考TensorRT的部署链接,大体步骤如下:

测试环境:

  • pytorch 1.8
  • TensorRT 8.0
  • ONNX 1.12.0

Step 1:pth 转 ONNX

python ./deploy/ONNX/export_onnx.py \--weights yolov6n.pt \--img 640 \--batch 1

Step 2:生成Engine

python3 onnx_to_tensorrt.py --fp16 --int8 -v \--max_calibration_size=${MAX_CALIBRATION_SIZE} \--calibration-data=${CALIBRATION_DATA} \--calibration-cache=${CACHE_FILENAME} \--preprocess_func=${PREPROCESS_FUNC} \--explicit-batch \--onnx ${ONNX_MODEL} -o ${OUTPUT}

以 Yolov6n为例:

python3 onnx_to_tensorrt.py --fp16 --onnx ${ONNX_MODEL} -o ${OUTPUT}

2. 网络结构

当生成TensorRT Engine文件之后,需要对网络的输入和输出进行分析,来编写处理输出的脚本。

如下图所示,为Yolov6n ONNX文件的输入输出信息,从图中可以看出,网络只有一个输入和输出,输入就是图像经过预处理之后的数据,输出为预测框的信息。

下图为文章Deepstream的Yolov3使用流程 中描述的一般Yolo系列目标检测算法的流程,在这个图中网络的输出为3个不同尺度的预测框信息,在这之后需要对预测的目标框进行decode处理,使得此时的目标框的位置信息都是相对于网络输入尺度而言,最后对所有的目标框按类别进行NMS得到最后的结果。

但是,此次采用Yolov6的TensorRT 方案将decode步骤包含在模型中完成,因此输出为decode之后的目标框信息,所以此时目标框的位置是相对于原图而言的。输出的维度为【batch,目标框的个数,目标框的信息】,其中目标框的个数为8400,由80×80+40×40+20×20得到,目标框的信息为85,等于4个目标位置信息+1个目标置信度+80个类别置信度。具体形式如下图所示。

3. 解析函数实现

从章节2中,可以知道模型的输出为经过decode操作之后的所有目标框信息,因此,解析函数中主要的功能是对所有的目标框信息,按类别进行NMS,得到最后的输出,如下图所示。

在Deesptream中的nvinfer插件中提供了一个接口来处理TensorRT Engine的输出,因此只需要实现一个接口函数,并在Nvinfer 的配置文件中正确设置即可。

NMS的具体实现请参考parsebbox_YoloV6v2.cpp文件,这里就不作过多的解释。

4. 配置文件

在Deepstream中推理Yolov6需要设置两个配置文件,一个nvinfer的配置文件,一个是deepstream-app的配置文件,下面就一些主要的参数内容进行介绍。

config_infer_prinary_yoloV6.txt nvinfer的配置文件,详细配置参数含义请参考链接。

1. 图像预处理相关参数

net-scale-factor=0.0039215697906911373
maintain-aspect-ratio=1
symmetric-padding=1
scaling-filter=1
scaling-compute-hw=0
#0=RGB, 1=BGR
model-color-format=0

2. 设置模型的信息

model-engine-file=yolov6n.trt
force-implicit-batch-dim=1
batch-size=1
## 0=FP32, 1=INT8, 2=FP16 mode
network-mode=2
num-detected-classes=80
gie-unique-id=1
# Integer 0: Detector  1: Classifier
network-type=0

3.  NMS类型设置

## 1=DBSCAN, 2=NMS, 3= DBSCAN+NMS Hybrid, 4 = None(No clustering)
cluster-mode=4
# lib path
parse-bbox-func-name=NvDsInferParseCustomYoloV6        # nms实现的函数名
custom-lib-path=nvdsparsebbox_YoloV6/libnvdsinfer_custom_impl_Yolov6.so

ds_app_config_yoloV6.txt deepstream-app的配置文件,具体配置参数含义请参考链接。

  • 输入配置
[source0]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI
type=3                                # 输入数据的类型
uri=file://./sample_1080p_h264.mp4    # 输入数据的URI
num-sources=1
gpu-id=0
# (0): memtype_device   - Memory type Device
# (1): memtype_pinned   - Memory type Host Pinned
# (2): memtype_unified  - Memory type Unified
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=0container=1
codec=1
bitrate=4000000
iframeinterval=30
output-file=output_yolov6.mp4    # 输出结果路径
  • 指定nvinfer推理的模型配置文件
# config-file property is mandatory for any gie section.
# Other properties are optional and if set will override the properties set in
# the infer config file.
[primary-gie]
enable=1
gpu-id=0
#model-engine-file=model_b1_gpu0_int8.engine
labelfile-path=labels.txt
batch-size=1
#Required by the app for OSD, not a plugin property
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_prinary_yoloV6.txt   # 指定nvinfer的配置文件路径

5. Run

本次测试采用的是deepstream中提供的sample_1080p_h264.mp4,具体运行命令如下:

deepstream-app -c ds_app_config_yoloV6.txt

配置文件中设置的输出为视频,因此在同路径下会得到一个output_yolov6.mp4的文件。这里给一个输出结果截图,hhhh。

6. Yolov6n模型的mAP

基于Yolov6中的TensorRT 部署方案,在数据精度为FP16和INT8的情况下,分别测试了Yolov6n在COCO2017 val上的性能,具体效果如下图所示。

Yolov6n FP16下的mAP

Yolov6n IN8下的mAP

可以看到在FP16精度下,mAP几乎没有损失,而对应INT8精度下,mAP值下降较多。此外,Yolov6过程中,还提供了RepOpt的方式来实现面向工业应用。

【deepstream部署Yolov6】相关推荐

  1. UNet基于deepstream部署

    0. sample背景介绍 deepstream-segmentation-test这个例子讲解了如何在deepstream中部署语义分割算法U-Net.根据网络的输出类别,分为semantic se ...

  2. Jetson Nano v4.6.3:安装系统、U盘启动、安装SDK、安装PyTorch GPU、YOLOv5+DeepStream部署

    一.写在前面 本教程为个人创作,截止发布日仅在CSDN平台刊登,转载请附本文链接. 本教程直接面向YOLOv5用户,提供四个文件供下载,简单说明如下表,详细说明和下载链接在文末. 文件名称 文件类型 ...

  3. DeepStream系列之yolov6部署测试

    点击查看系列文章目录 视频教程<deepstream实战之yolov6目标检测> 0 背景 在之前的文章里,我们介绍过如何在 deepstream 中调用 yolov4 和 yolov5 ...

  4. 【Deepstream之YoloX部署】

    github: egbertYeah/yolox_deepstream (github.com) 0. 目标检测算法YoloX YoloX是旷视科技于2021年提出的目标检测算法,本文主要介绍Yolo ...

  5. 【模型部署】Jetson Xavier NX(eMMC)部署YOLOv5-5.0

    文章目录 前言 NVIDIA Jetson Jetson Xavier NX 版本区别(SD | eMMC) 规格参数 Jetpack4.6.1环境搭建 烧录系统(OS) SSD启动 SSD分区 设置 ...

  6. 盘点工业界AI项目流程以及边缘设备现状

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨白夜 来源丨江大白 编辑丨极市平台 导读 本文作者分享了自己踏入深度学习第一个项目的经验以及自己 ...

  7. CV公开课报名 | 快速搭建基于Python的车辆信息识别系统

    位来 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 时下,智慧城市和自动驾驶快速发展,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 但是从0搭建一个精度高.速度快的 ...

  8. nvidia_tao实现lpr训练

    参考官方博客:https://developer.nvidia.com/blog/creating-a-real-time-license-plate-detection-and-recognitio ...

  9. python哪家培训

    英伟达给你工具,用 Python 识别车辆信息 数据.算法和计算力是推动人工智能发展的三大要素.随着高性能 GPU.TPU 的出现,人们正在将 AI 技术的利用推向极致. 近年来,AI 模型不断突破性 ...

  10. DeepStream5.0系列之yolov5使用

    0 背景 本文旨在对 deepstream 中使用 yolov5 的方法做一介绍 测试环境: Ubuntu 18.04, CUDA 10.2, T4, jetpack4.4 软件版本:yolov5:3 ...

最新文章

  1. python中break和continue的区别
  2. Windows Phone 7 自动完成输入框控件AutoCompleteBox
  3. HDU 1556 Color the Ball 线段树 题解
  4. node.js Lordofpomelo点击登录(login)终端提示成功,页面不跳转无反应
  5. php mysql grant_mysql grant命令详解_MySQL
  6. JSP中meta http-equiv=pragma content=no-cache属性ttp-equiv功能介绍转载
  7. Linux kernel 国内repo
  8. 用Typescript如火如荼地进行angular.js
  9. Codeforces 510 E. Fox And Dinner
  10. excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
  11. [转]mysql下如何执行sql脚本
  12. python3使用smtplib通过qq邮箱发送邮件
  13. 使用matlab在图片上画框,并保存
  14. 运行python文件、电脑突然黑屏_电脑运行中总是突然黑屏怎么办?
  15. 烂笔头也需要常翻出来用用啊
  16. SAP中库存地点MRP应用控制
  17. 【SVN异常】svn: E175003: The server at ‘https://svn.example.com/!/%23MyRepo/‘ does not support the HTTP/
  18. raid配置ssd为缓存_固态硬盘做缓存如何设置
  19. 图像处理与计算机视觉基础相关领域的经典书籍以及论文
  20. 淘宝详情接口(稳定版本)

热门文章

  1. html调用ckplayer说明,CKplayer功能配置(示例代码)
  2. 16.PIO源码详解6-PIO_TX_ENGINE模块(PIO_TX_ENGINE.v)剖析
  3. 张伯旭:北京亦庄着力打造中国云产业园
  4. 你越来越孤独的3个原因
  5. 2019年 电赛C题 全国大学生电子设计竞赛试题解析与总结
  6. 神舟笔记本键盘键位互换
  7. GitHub 上史上最全的 iOS 开源项目分类汇总
  8. 计算机安全模式什么意思,什么是电脑安全模式 电脑怎么解除安全模式
  9. 74HC573并联输出
  10. Javascrpt测试