三个分类器(classifier)
时间:2022-03-17 10:51:01 | 来源:行业动态
时间:2022-03-17 10:51:01 来源:行业动态
来共同完成这项任务。
可能有人会问,那是否能在Person或RoadSign上面增加分类器?例如将前者再添加男/女、老/少分类,对后者再添加限制类、指示类、警告类的属性呢?这当然是可以的,只要你能找到合适的模型文件来搭配,或者得自己重新收集数据集进行模型训练,然后再提供对应的配置文件。
与test1范例中所不同的地方,在test2范例在pgie这个nvinfer元素之外,又添加sgie1/sgie2/sgie3这3个推理计算的元素,总共四个推理器的内容如下:
这个过程有个比较特殊的地方,就是在主推理器(这里是个检测器)与次推理器(这里是三个分类器)之间,需要透过追踪器(tracker)进行串联,这里有个很重要的原因,因为次推理器是以主推理器的范围图像去进行分类推理,包括颜色、品牌、车型等等,而追踪器可以协助记录主推理器所找到的图像范围,将这个局部的数据传送给次推理器去进行计算,这样才能建立好主次之间的关联。
因此我们会发现,只要需要进行这种主次结合的方式,必定需要调用追踪器这个元件来扮演角色,这个在deepstream-app里面也是存在的,但是这里会延伸出另一个问题,就是调用追踪器是会影响性能的,在DeepStream追踪器里面,目前支持NVDCF、KLT与IOU三种算法,其中NVDCF算法的性能最差,KLT在准确性与性能的综合表现较好,因此大部分的范例中都选择使用KLT追踪器。
附带说明的一点,就是追踪器插件接受来自上游组件的NV12-或RGBA格式的帧数据,并将输入缓冲区转换为低层库所需格式的缓冲区,再将宽度和高度转换为跟踪器要求的宽度和高度,这需要将输入帧缓冲区转换为底层库请求的格式,例如KLT使用Luma专用格式、NvDCF使用NV12或RGBA格式,IOU则不需要缓冲区。
上图是nvtracker插件的工作示意图,详细的内容请自行参考开发手册:https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvtracker.html
好了,前面已经将整体原理说明的差不多,接下来就看看test2与test1的Python代码中的差异部分,这样就更能掌握这部分的实际运作内涵。
如同前面所提到的,这个代码主要修改的部分,就是在pgie与nvvideoconvert之间,添加tracker与sgie1~3这四个元件,其他修改的部分几乎都在处理tracker的部分,包括一开始需要为追踪器是否保存追踪数据的
# 42行:给定这个变量设定是否保存追踪的数据
past_tracking_meta=[0]
# 217至238行:在 pgie与 nvvidconv 之间,添加 tracker sgie1~3
pgie = Gst.ElementFactory.make("nvinfer", "primary-inference")
-
网站
-
营销
-
设计
-
运营
-
优化
-
效率
-
专注
-
电商
-
方案
-
推广
微信公众号
版权所有© 亿企邦 1997-2022 保留一切法律许可权利。
|