DeepStream 多模型组合检测-1

前面已经介绍过关于 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,并不是太理想。

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

  1. 首先要执行模型组合功能功能,必须把“tracker”功能打开,不过可以关闭追踪号的显示,因此保留“enable=1”,将下面的“display-tracking-id=”设为“0”
  2. 由于我们在 Jetson Nano 2GB 版本上进行实验,需要进行以下的调整。如果您要在 AGX Xavier 或 Xavier NX 上上执行的活,请忽略这个步骤。
  3. 修改主检测器[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.其他:请自行设定

现在重新执行这个 deepstream-app 的应用,就能得到本文一开始所显示的效果:

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

 


评论:
相关文章
用乐高打造太空电梯

用乐高积木打造太空电梯,重现科幻电影中的经典场景,感受宇宙探索的无限魅力。


App Inventor 编程实例及指南-第6章 巴黎地图旅游

本章将创建一个“向导”应用,带给你一次巴黎的梦幻之旅。


乐高WEDO打印机搭建分享

本文为一个乐高WEDO打印机的教学课件,供各位参考。


机器人技术七八级考试说明及知识框架

青少年机器人技术七级、八级着重于机器人智能处理能力的学习,基本编程语言为Python,采用RDK X3作为主控。


新加坡STEM课程概述——以STEM应用学习计划为例

新加坡教育部通过一系列举措来发展本国的STEM教育。文章以新加坡 STEM应用学习计划为例,介绍其产生的背景和具体的课程设计,分析其课程设计特点,为我国中小学STEM教育的实施提供参考。


LVGL简介

LVGL(Light and Versatile Graphics Library,轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。


Emo:基于树莓派 4B DIY 能笑会动的桌面机器人

Emo 是一款个人伴侣机器人,集时尚与创新于一身。他的诞生离不开最新的树莓派 4 技术和先进的设计。他不仅仅是一款机器人,更是一个活生生的存在。


旅行者一号永不回航,致敬:64亿公里处的最后一次回眸

1990年2月14日,情人节,‘旅行者一号’正式与地球道别,转身拍下了太阳系的全家福,那最后一次回眸,留下了对‘家乡地球’所有的留恋与不舍,从此,今生今世,永不相见。


2024年青少年STEAM教育研究报告

报告由艾瑞咨询发布,对全球及中国STEAM教育发展进行了全面剖析。


STEM课程学习路径指南

新课标在秋季即将开始执行,其中信息科技课程与STEM教育是紧密相关的,如何更好的展开STEM学习,以培养孩子们的STEM思维呢?本文总结了一个STEM课程的学习路径,供家长参考。

Jetson Nano 基础教程

作者:英伟达小助理   共52讲

Jetson Nano 推出 2GB 内存版本,不仅承袭了 Jetson Nano 所有 AI 开发环境与 IOT 控制功能,也能学习或开发 Python、OpenCV 与 AI 深度学习、ROS 自动控制等应用。

课程