1.DeepstreamApp是什么?
如果你安装完毕deepstream整体框架,会在你的系统执行目录内有可执行文件,文件名字是deepstream-app。这是一个可执行脚本文件,通过deepstream框架中的代码在安装的时候编译后install到系统根目录内。
此脚本文件可以通过终端命令行使用,使用的同时必须使用txt文本文件作为配置文件。此脚本可以通过txt配置一个“相当简单的”deepstream管道,管道中的视频源可以通过txt文本设置为各种输入,包括但不限于本地视频文件,网络上的rtsp推流等等。管道中的堆叠,一级、二级推理、跟踪、OSD等也可以通过txt文本文件进行相当简单快速的配置。
使用终端输入deepstream-app -h即可查看如何使用此脚本。
这个deepstream-app程序是安装deepstream的时候就已经编译好安装在系统里,可以在任意位置的命令终端进行调用。App分为deepstream-app和deepstream-test5-app两种。两者功能上的差别就是tset5支持类型设置为6的sink,也就是向kafka服务器收发数据的组件。其余二者大致相同。英伟达也附赠了两个app的源代码,基于C++的源代码的位置位于:(可以学习参考)
opt/nvidia/deepstream/deepstream-5.1/sources/apps/sample_apps/deepstream-app
opt/nvidia/deepstream/deepstream-5.1/sources/apps/sample_apps/deepstream-test5
2.Deepstream-App存在的意义?
deepstream-app脚本存在主要有两个意义。
首先第一个,用于工程快速验证性开发。因为deepstream-app是一个通过文本文件就能配置的管道,因此可以在您视频应用的早期阶段进行深度学习网络性能和设备硬件性能的快速测试。譬如您设计、训练了一个网络,要部署到nx上面,需要实时处理8路视频。此时您对nx的性能没有底,或者是并不知道这个网络在nx上能不能跑八路。这时候总不能现用c++或者python开发个系统再去测试吧。代码的时间是宝贵的,为了快速验证可行性,通常会先把网络设计训练完毕,然后通过deepstream-app脚本装载到简单管道里做一下压力测试。这样可以快速验证项目可行性。
其次第二个,deepstream-app可以验证网络性能瓶颈和辅助排除Bug。我之前遇到过一个大学的学生设计制作矿井安全监控,他们在3090上面跑了20多路1080p的视频流,开到22个视频流就开始卡顿,无推理结果,他们使用了c++脚本二次开发。因为他们的代码揉合了自己的代码和deepstream官方代码,有很多自定义的方法和类,短时间摸透他们的代码并不容易,且代码风格一团糟。也没有注释,这时候就开始把他们的网络通过deepstream-app配置一个22路视频同时输入的管道,通过配置发现deepstream-app本身工作正常,并没有出现卡顿无推理的情况。所以基本排除了deepstream本身的关键组件出现问题的可能。将问题锁定在了他们自己的代码位置。最后通过排查发现他们是版本控制太乱,有个学生在管道内通过tee组件插了一个支路,这个支路导致了线程崩溃。再者说,如果您的deepstream工程出现了卡顿、性能瓶颈等,完全可以把网络模型单独拿出来用txt写个简单管道,挨个排查deepstream每个单元可能的问题。如果deepstream-app都没问题,就需要自己排查自己写的部分代码。
3.Deepstream-app怎么用?
Deepstream-app的用法非常简洁。即脚本+配置文件。具体写法如下所示:
deepstream-app -c 您的配置文件.txt
脚本会自动解析您配置文件里面的内容然后组成管道。所以我们的重点应该放在这个配置文件如何写。下面,我贴出来一份以YoloV5m为范例的配置文件,逐行进行分析。
################################################################################
# Copyright (c) 2018-2020, NVIDIA CORPORATION. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
################################################################################
[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5
#gie-kitti-output-dir=streamscl
[tiled-display]
enable=1
rows=1
columns=1
width=1920
height=1080
[source0]
en