0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DeepStream如何实现“组合信息”

GLeX_murata_eet 来源:NVIDIA英伟达中国 作者:NVIDIA英伟达中国 2021-08-04 09:41 次阅读

前面已经介绍过关于 DeepStream 各种输入源的使用方式,而且 Jetson Nano 2GB 上开启 4 路输入(两个摄像头+两个视频文件),都能得到 25FPS 以上的实时性能,但毕竟“单一检测器(detector)”检测出来的物件是离散型的内容,例如车、人、脚踏车这些各自独立的信息。有没有什么方法能够实现“组合信息”呢?例如“黑色/大众/SUV 车”!

DeepStream 有一个非常强大的功能,就是多模型组合检测的功能,以一个主(Primary)推理引擎(GIE:GPU Inference Engine)去带着多个次(Secondary)推理引擎,就能实现前面所说的功能。

本实验在 Jetson Nano 2GB 上,执行 4 种模型的组合检测功能,能将检测到的车辆再往下区分颜色、厂牌、车种等进一步信息,在 4 路输入视频状态下能得到 20+FPS 性能,并且我们将显示的信息做中文化处理。

nvidia@nano2g-jp450:/opt/nvidia/deepstream/deepstream/samples/models$ ls -l

总用量 24

drwxrwxrwx 2 root root 4096 7月 13 23:49 Primary_Detector

drwxrwxrwx 2 root root 4096 7月 13 22:45 Primary_Detector_Nano

drwxrwxrwx 2 root root 4096 2月 8 21:50 Secondary_CarColor

drwxrwxrwx 2 root root 4096 2月 8 21:50 Secondary_CarMake

drwxrwxrwx 2 root root 4096 2月 8 21:50 Secondary_VehicleTypes

drwxrwxrwx 4 root root 4096 2月 8 21:49 Segmentation

简单说明一下每个目录所代表的的意义:

Primary_Detector:作为项目的主检测器,这是用 Caffe 框架以 ResNet10 网络所训练的 4 类检测器,能检测“Car”、“Bicycle”、“Person”、“Roadsign”四种物件,这个数据可以在目录下的 labels.txt 中找到。

Primary_Detector_Nano:将Primary_Detector里的模型,针对 Jetson Nano(含 2GB)的计算资源进行优化的版本。

Secondary_CarColor:车子颜色的次级检测器

Secondary_CarMake:生产厂商的次级检测器

Secondary_VehicleTypes:车子种类的次级检测器

组成结构也十分简单,其中主(Primary)检测器只有一个,而且必须有一个,否则 DeepStream 无法进行推理识别。次(Secondary)检测器可以有好几个,这里的范例就是针对“Car”这个类别,再添加“Color”、“Maker”、“Type”这三类元素,就能获取视频图像中物件的更完整信息。

在 Jetson Nano 的/opt/nvidia/deepstream/deepstream/samples/config/deepstream-app 下面的 source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt,就已经把这个组合检测器的配置调试好,现在直接执行以下指令:

cd/opt/nvidia/deepstream/deepstream/samples/config/deepstream-app

deepstream-app -c source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt

现在看到启动四个视频窗,但是每个视窗的执行性能只有 8FPS,总性能大约 32FPS,并不是太理想。

接下来看看怎么优化这个配置文件

首先要执行模型组合功能功能,必须把“tracker”功能打开,不过可以关闭追踪号的显示,因此保留“enable=1”,将下面的“display-tracking-id=”设为“0”

由于我们在 Jetson Nano 2GB 版本上进行实验,需要进行以下的调整。如果您要在 AGX Xavier 或 Xavier NX 上上执行的活,请忽略这个步骤。

修改主检测器[primary-gie]的模型:配置文件中预设的是“Primary_Detector”检测器,这里得修改成专为 Nano 所训练的版本,这里修改以下几个地方:

(1) model-engine-file路径的“Primary_Detector”部分改成“Primary_Detector_Nano”

(2) config-file 的文件改成 config_infer_primary_nano.txt

因为 Jetson Nano(含2GB)并不支持 int8 计算精度,因此还需要做以下修改:

(3) 将“_b4_gpu0_int8.engine”改成“_b8_gpu0_fp16.engine”

(4) 将所有“xx_gpu0_int8.engine”改成“xx_gpu0_fp16.engine”

3. 将追踪器从原本的 ibnvds_mot_klt.so 改成 libnvds_mot_iou.so,用“#”变更注释的位置就可以。

修改完后重新执行,可以看到每个窗口的检测性能提升到 10~12FPS,总性能提升到 40~48FPS,比原本提升12~50%,不过距离理想中的 25FPS 还有很大的差距。

执行过程中如果遇到“Theremay be a timestamping problem, or this computer is too slow.”这样的信息,就把[sink0]下面的“sync=”设定值改为“0”就可以。

现在看看是否还有什么可调整的空间?参考前一篇文章“DeepStream-04:Jetson Nano 摄像头实时性能”所提到的,将[primary-gie]下面的“interval=”设定为“1”,然后再执行应用时,发现每个输入源的识别性能立即提升到 20FPS 左右,总性能已经能到 80FPS 左右,比最初的 32FPS 提升大约 2.5倍,这已经很接近实时识别的性能。

好了,在Jetson Nano 2GB 上已经能达到接近实时推理的性能,是相当好的状态。

如果对于显示输出的状态有些不满意的话,我们按照下面的步骤去执行,将“英文”类别名改成“中文”,并且将边框变粗、字体放大,就能更轻松看到推理的效果:

1. 所有的显示名称,都在 models 目录下个别模型目录里的labels.txt,可以将里面的内容全部改成中文。

例如

deepstream/samples/models/Secondary_CarMake的“labels.txt”内容改为“广汽;奥迪;宝马;雪佛兰;克莱斯勒;道奇;福特;通用;本田;现代;英菲尼迪;吉普;起亚;雷克萨斯;马自达;奔驰;日产;速霸路;丰田;大众”,其他的就比照办理。

注意:这个顺序不能改变!

2. 边框宽度:修改[osd]下面的“board-width”值,推荐 2~4 比较合适;

3. 字体大小:修改[osd]下面的“texe-size”值,推荐 15~18 比较合适;

4. 其他:请自行设定

如何?这样的效果与性能就是在 Jetson Nano 2GB 实现的!

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4700

    浏览量

    128685

原文标题:NVIDIA Jetson Nano 2GB 系列文章(31):DeepStream 多模型组合检测-1

文章出处:【微信号:murata-eetrend,微信公众号:murata-eetrend】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HarmonyOS NEXT应用元服务开发组合场景

    在一些场景中,一个功能上完整的UI对象可能是由若干个更小的UI组件组合而成的。若每一个小的UI组件都可以获焦并朗读,则会造成信息冗余和效率降低。同时由于可聚焦的组件过多过细,也会影响触摸浏览时走焦
    发表于 10-30 15:33

    继电器组合组合架的作用

    继电器组合组合架是电气控制系统中的重要组成部分,它们在电路中起到保护、控制和信号传递的作用。继电器组合组合架的设计和应用对于确保电气系统的稳定运行至关重要。 1. 继电器的基本概念
    的头像 发表于 09-27 14:35 423次阅读

    组合继电器的起动系如何实现驱动保护的?

    组合继电器的起动系实现驱动保护的方式主要依赖于其内部各元件的协同工作,这些元件包括接触器、热继电器、断路器以及控制继电器等。以下是具体的实现方式: 一、主要元件及其功能 接触器 功能 :接触器是起动
    的头像 发表于 09-27 14:28 223次阅读

    MSP430的模拟组合实现了真正的单芯片脉搏血氧仪设计

    电子发烧友网站提供《MSP430的模拟组合实现了真正的单芯片脉搏血氧仪设计.pdf》资料免费下载
    发表于 09-14 10:48 1次下载
    MSP430的模拟<b class='flag-5'>组合</b><b class='flag-5'>实现</b>了真正的单芯片脉搏血氧仪设计

    组合逻辑电路设计时应遵循什么原则

    一、引言 组合逻辑电路是数字电路中的一种基本类型,它由逻辑门、触发器等基本元件组成,通过逻辑门的组合实现特定的逻辑功能。组合逻辑电路广泛应用于计算机、通信、控制等领域。在设计
    的头像 发表于 08-11 11:26 970次阅读

    组合逻辑电路的结构特点是什么?

    组合逻辑电路是一种基本的数字电路,它由逻辑门组成,用于实现各种逻辑功能。组合逻辑电路的结构特点主要包括以下几个方面: 无记忆功能 :组合逻辑电路的输出仅取决于当前的输入状态,与过去的状
    的头像 发表于 08-11 11:14 762次阅读

    组合逻辑控制器是什么设备

    组合逻辑控制器(Combinatorial Logic Controller,简称CLC)是一种用于控制和管理复杂系统或设备的电子设备。它通常由多个逻辑门、触发器和其他逻辑元件组成,能够实现各种复杂
    的头像 发表于 06-30 10:29 504次阅读

    组合逻辑控制器的基本概念、实现原理及设计方法

    组合逻辑控制器(Combinatorial Logic Controller)是一种在数字电路中实现逻辑功能的设备,它根据输入信号的当前状态来产生输出信号,而不考虑输入信号的历史状态。组合逻辑控制器
    的头像 发表于 06-30 10:26 1482次阅读

    组合逻辑控制器的工作原理是什么

    基本概念、设计方法、实现技术以及应用领域。 组合逻辑控制器的基本概念 1.1 组合逻辑的定义 组合逻辑是一种数字电路,其输出仅取决于当前的输入值,而与输入信号的历史无关。这种逻辑电路的
    的头像 发表于 06-30 10:15 810次阅读

    组合逻辑控制器是用什么实现

    组合逻辑控制器是一种用于控制和管理复杂系统中各个组件之间交互的逻辑设备。它可以应用于各种领域,如计算机科学、通信、自动化控制等。在这篇文章中,我们将详细探讨组合逻辑控制器的实现方法、原理和应用。 一
    的头像 发表于 06-30 10:11 457次阅读

    NVIDIA发布DeepStream 7.0,助力下一代视觉AI开发

    NVIDIA DeepStream 是一款功能强大的 SDK,能够提供用于构建端到端视觉 AI 管线的 GPU 加速构建模块。
    的头像 发表于 05-23 10:09 545次阅读
    NVIDIA发布<b class='flag-5'>DeepStream</b> 7.0,助力下一代视觉AI开发

    是否有命令组合可以实现SD卡不擦除写入?

    常规的串行FLASH有带擦除的写命令和不擦除的写命令,SD相对来说也是FLASH,但看命令没有不擦除的写命令; 疑问,是否有命令组合可以实现SD卡不擦除写入?
    发表于 05-09 06:48

    光纤传输信息时的工作过程

    光电转换工作过程如下: 变频器主控芯片将驱动IGBT开关的信息由电信号信号转换成光信号,请问这个转换过程是通过什么电路完成的,而且传输驱动信息时是同一相的上下桥臂同时发送的,在发送端是怎么组合驱动
    发表于 02-03 11:33

    python数字排列组合需要缩进吗

    在Python中,数字排列组合实现通常需要使用循环和递归来生成所有可能的组合。对于代码块中的循环和递归部分,缩进是必需的,它用于标识这些语句属于循环或递归块的一部分。 下面是一个示例,演示了如
    的头像 发表于 11-29 16:40 367次阅读

    python打印出abcd的所有排列组合

    如何使用Python生成"abcd"的所有排列组合,我们首先需要了解排列和组合的概念。排列是一组元素的有序排列,而组合是一组元素的无序选择。 为了打印出"abcd"的所有排列组合,我们
    的头像 发表于 11-29 16:29 1334次阅读