18

Jetson Nano 2GB系列文章(30):DeepStream 摄像头“实时性能"

前面介绍过使用 deepstream-app 工具,启用多个视频进行车辆与行人的识别,并且启动“追踪”功能进行物件追踪的高级功能,接下来就教大家如何在 deepstream-app 里调用 USB 与 CSI 摄像头,并且与先前的视频同时启用来进行物件识别的应用。

这里使用 Jetson Nano 2GB 作为实验平台,上面安装一个 CSI 摄像头与一个 USB 摄像头。

在调用摄像头之前,建议先确认一下摄像头的位置与分辨率等信息,因为 DeepStream 会检查设定文件里的分辨率是否符合要求。使用 v4l2-utils 工具包来检查摄像头的信息,请按照以下步骤进行安装,并且检测摄像头分辨率:
qqqqqqqqqqqqqqqqqqq.png
下面显示的信息,表示目前接上一个 imx-219 的 CSI 摄像头,以及一个 USB 2.0摄像头。

wwwwwwwwwwwwwwwwwwwww.png

接下执行以下指令,查看个别摄像头可使用的分辨率为多少:
eeeeeeeeeeeeeeeeeeee.png
下面显示的信息,表示CSI摄像头(device=0)能支持3264x2464、3264x1848、1920x080、1640x1232、1280x720 等 5 种分辨率

rrrrrrrrrrrrrrrrrrrr.png

下面显示的信息,表示 USB 摄像头(device=1)能支持 640x480、352x288、320x240、176x144、160x120 等 5 种分辨率

tttttttttttttttt.png

接下来看看在DeepStream路径(/opt/nvidia/deepstream/deepstream)的samples/configs/deepstream-app 下面有个  source2\_csi\_usb\_dec\_infer\_resnet\_int8.txt 文件,这是专门以 CSI 与 USB 摄像头为输入源的配置,里面可以看到以下关于摄像头设置的内容:
yyyyyyyyyyyyyyyyyyyyyyyyyyyyy.png

[source1]下面的参数有点小问题,用粗体标识出来,因为我们装载的USB摄像头最大分辨率为640x480,因此这里的camera-width与camera-height都必须修改为摄像头所支持的分辨率,此外就是最下面的camera-v4l2-dev-node的部分,前面检查出来这台Jetson Nano 2GB上的USB摄像头编号为“1”,请按照实际状况修改。

将上面三地方修改完后,就可以直接执行以下指令去启动摄像头:

uuuuuuuuuuuuuuuuuu.png
由于配置文件里面原本设定使用INT8的精度去做推理,但是Jetson Nano 2GB并不支持,因此DeepStream自动切换成FP16精度,这需要重新生成对应的TensorRT引擎,会花点时间。

iiiiiiiiiiiiiiiiiiiiiiiiii.png

执行之后就能看的画面上出现类似以下的画面,上下分别是CSI摄像头与USB摄像头的显示,由于选择的模型是检测“Car”与“Person”的,所以在这里没有检测到任何目标物件。

ooooooooooooooooooo.png

另外看一下先前下指令的终端上,显示在Jetson Nano 2GB上的执行性能如下截屏

pppppppppppppppppp.png

两个摄像头都能达到18FPS左右性能,总性能在36FPS左右,已经非常接近实时识别的速度,非常好。您可以试试旋转摄像头或者将手放在前面晃一晃,看看延迟状况如何?应该是很流畅的。

接下来,再添加两个视频文件一起进来执行检测,我们以系统上提供的视频文件做示范:
/opt/nvidia/deepstream/deepstream/samples/streams/sample\_1080p\_h264.mp4

  • /usr/share/visionworks/sources/data/pedestrians.h264

将这两个的设定添加到文件里的[source2]与[source3],内容如下:
aaaaaaaaaaaaaaaaaaa.png
最后调整文件最开始的“[tiled-display]”下面,将“columns=”的值改成“2”,存档后重新执行下面指令:
ssssssssssssssssssssssssssssssssssss.png
现在可以看到如下图,两个摄像头与两个视频总共4个输入源同时执行的推理的功能。

dddddddddddddddd.png

接下来看看此时的性能如何?(如下图)居然每个输入源只剩下8FPS的性能,总性能在32FPS左右,似乎有点慢了。这个问题有补救的办法吗?

gggggggggggggggggggggggggg.png

实时上问题出现在[primary-gie]使用的模型上,因为Jetson Nano(含2GB)的计算资源较为缺乏,因此DeepStream专门为Nano提供resnet10.caffemodel\_b8\_gpu0\_fp16.engine特调版加速引擎,存放在“../../models/Primary\_Detector\_Nano”路径下,这是第一个需要做修改的地方:

  • model-engine-file=../../models/Primary\_Detector\_Nano/resnet10.caffemodel\_b8\_gpu0\_fp16.engine

其次就是下面的“config-file”置换成支持Nano版本的配置文件,如下:

  • config-file=config\_infer\_primary\_nano.txt

修改完使用的模型之后,重新执行deepstream-app进行物件检测,发现每个数据源的识别性能,立即从原本的8FPS提升到14FPS,也就是总性能从32FPS上升到56FPS左右,提升大约1.8倍。到这里否已经满足样的性能呢?

如果还觉得不满足的时候,那就继续看下去,还有大招在后面。只要我们将[primary-gie]下面的“interval”参数设为“1”,这时候再执行看看性能如何?

下面的截屏是调整 interval 参数之后的性能,有没有吓一跳?瞬间提升一倍。

hhhhhhhhhhhhhhhhhhhhhhh.png

经过三步骤调整之后,我们在Jetson Nano 2GB上的4个数据源,识别性能都超过27FPS,总性能合计超过100FPS,并且维持识别效果

现在是不是对Jetson Nano 2GB的性能感到非常满意了!

jjjjjjjjjjjjjjjjjjjj.png

推荐阅读
关注数
7021
内容数
61
深耕嵌入式 AI 计算,助力自主机器研发
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息