当前位置:首页 > 工业园区 >计算机视觉中识别出的类别有什么用途吗(计算机视觉物体识别)

计算机视觉中识别出的类别有什么用途吗(计算机视觉物体识别)

在计算机视觉的应用中,“识别”只是一个相当入门的技术。相信很多人在进行深度学习推理应用时常常会疑问:“识别出的类别有什么用?”

确认每帧图像中我们想要识别多少个类别以及它们在图像中的位置只是整个应用程序的第一步。如果没有“目标跟踪(tracking)”的能力,就很难提供视频分析的基本功能。

计算机视觉中识别出的类别有什么用途吗(计算机视觉物体识别)

标准OpenCV系统中有8种主流的目标跟踪算法。有兴趣的可以上网搜索、自行研究。

该算法的基本逻辑是比较视频相邻帧的“类别”和“位置”,因此这部分计算仍然消耗相当多的计算资源。也就是说,当视频分析软件“开启”目标跟踪功能时,它的识别性能肯定有所下降,大家首先要有这个认识。

DeepStream定位于“视频分析”应用,因此“目标跟踪”是其最基本的功能之一。

在之前使用的myNano.txt配置文件中,只需要调整一个设置值即可开启或关闭跟踪功能,非常简单。

DeepStream支持三种目标跟踪算法:IOU、KLT和NVDCF(如下图)。其中IOU性能最好,在Jetson Nano 2GB上整体性能可以达到200FPS左右; NVDCF的精度最高,但目前性能只能达到56FPS左右。KLT算法目前在性能和精度之间有较好的平衡,整体性能可以达到160FPS,因此通常选择KLT跟踪器进行演示。

算法细节不再详细解释。请查找相关技术文档自行学习。这里我们就直接进入实验流程。上一篇文章中的myNano.txt配置文件仍然是主要的。如果您不知道,只需使用source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt复制即可。通过修改里面的参数,让大家体验一下DeepStream目标跟踪的功能。

01

目标跟踪功能开关

在myNano.txt的底部,您可以看到[tracker]设置组。下面有个参数“enable=1”,就是目标跟踪功能。

现在启动一次跟踪功能。如下图所示,可以看到除了类别和框架之外,每个识别到的对象旁边还有一个数字。这个数字会一直跟随物体,从而形成“跟踪”功能。

此时的识别表现如下图。总性能(8个数字之和)约为160FPS。

如果把【trakcer】改为“enable=0”,再次执行看看结果如何?下图中,可以识别物体类别和框位置,但没有数字。

关闭跟踪功能后的识别表现如下图。总的识别性能可以达到250FPS左右。

02

切换追踪器

前面提到,DeepStream 5.0目前支持三种跟踪器,那么如何选择呢?同样在[tracker]参数组下,有三行参数,如下所示:

#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_iou.so

#ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_nvdcf.so

ll-lib-file=/opt/nvidia/deepstream/deepstream-5.0/lib/libnvds_mot_klt.so

前面带“#”的为关闭状态。请先将【tracker】切换回“enable=1”的开启状态。接下来,请添加或减去“#”位置来分别切换跟踪器选择。测试这三个跟踪器之间的差异,包括识别性能和跟踪能力。

这部分必须直接在视频中体验,所以没有截图。测试结果表明,IOU跟踪器性能最好,可以达到200FPS左右,但同一物体的数量不是很稳定。 NVDCF跟踪器的数量最稳定,但性能只有IOU的1/4左右,最多只能支持2路视频的实时分析。

KLT算法整体性能可达160FPS,最多可支持8通道实时识别。追踪能力也比IOU好很多。但该算法的CPU占用率较高,这是该算法的主要缺点。如何选择取决于实际场景和计算设备的资源。

03

获取追踪数据

提前开启目标跟踪功能的目的不仅仅是为了在显示器上看到它,而是为了将数据用于更有价值的应用。从哪里可以获得这些数据?通常需要通过Python或C++从DeepStream提供的接口获取。

这里介绍一种在不知道DeepStream接口的情况下获取目标跟踪数据的方法。只要我们在myNano.txt 中的[application] 参数组中添加一条指向“kitti-track-output-dir="PATH"”的路径,假设你想将数据存储在“/home/nvidia”路径下/track”,只需在myNano.txt中添加一行参数即可:

[应用]

kitti-track-output-dir=/home/nvidia/track

执行“deepstream -c myNano.txt”后,可以看到/home/nvidia/track目录下生成了很多文件,如下图所示:

每个文件存储“一帧”的目标跟踪结果。例如,我们测试的sample_1080p_h264.mp4视频持续48秒,每秒有30帧图像,这将生成1440个文件。

前6位“00_000”代表视频源编号,从“0”开始。如果有4个视频源,会有从“00_000”到“00_003”的数字,接下来的6位是序号,比如这个测试视频就会生成“000000.txt”~“001440.txt”,文件名是由这两部分组合而成。

这是KITTI 格式的数据。第一列是对象的类别,第二列是对象的“跟踪号”。以下数据的含义请参考KITTI格式定义。

现在我们可以依次读取这些跟踪文件,或者将这些文件发送回控制中心进行文件解析和信息提取。这不是很方便吗?相信这些内容对开发会有帮助。

责任编辑:haq

最新资讯

推荐资讯