概述
软件架构
前文(参考链接1和2)中针对我们在整个项目中需要用到的一些技术进行了描述,现在我们说回到产品应用部分的流程,并梳理以下整个软件架构。
整个软件功能分三部分:图像预处理、目标识别算法处理和识别结果可视化。
由于我们使用的主芯片是海思的Hi3516D,一款流媒体方案的SoC,所以本文会涉及一些关于海思的SDK的实现逻辑和流程,如果是没有接触过海思方案的读者可能会有些疑惑。
图像预处理
图像预处理功能其实很简单,分为三步操作:
- 获取相机前端视频输入,视频输入的分辨率为1920 x 1080。
- 由于我们使用的Tiny YOLO V2的网络,输入层张量维度为[416, 416, 3],所以我们需要将图像下采样至416 x 416的分辨率。
- 将下采样之后的图像编码成jpg格式。
下采样和图像编码都不可能用软件在ARM上面运行完成,因为耗时比较大。所以我们通过SoC内部集成的ISS核和VSS核来进行处理。
下采样部分,我们通过调用SDK来增加一条vpss channel,绑定到系统中的VI通道,该vpss channel的输出分辨率即为我们需要下采样的目标分辨率 416 x 416,这样使用硬件去处理的话可以根据相机的帧率达到实时效果。
编码部分,我们新增一条VENC编码通道,编码格式为JPEG,直接将下采样使用的vpss channel 和这条VENC通道进行绑定。
这样,软件层面我们就可以从VENC中循环获取预处理完成的JPG图片,然后将图片中的RGB数据送到算法模块,进行算法处理即可。
后面为了降低用软件方式将JPG转RGB的耗时。在方案上通过使用海思SDK中的IVE CSC方式来实现,这样就可以直接将VPSS中的YUV420SP格式的图片转码为 IVE_IMAGE_TYPE_U8C3_PACKAGE 类型的BGR图片。通过测试CSC转码的416 x 416分辨率的图片耗时均值为20ms。这样优化了速率,同时可以省略新增的VENC通道。
算法处理
算法处理逻辑和流程前面两篇博文已经提及过,所以这里只需要将算法处理部分移植过来就可以了,处理时需要避免Movidius的device handle 和 计算图graph handle重复创建,避免重复写入相同的计算图数据,以消除一些不必要的耗时。
结果可视化
这款相机原本有两个程序,一个程序用于前端采集数据并将视频流编码为H.264/H.265格式,另一个程序是获取视频流,然后通过live555封装rtsp协议,以便PC端可以通过VLC或者其他支持rtsp协议的软件工具查看适时视频。
同样,我们的软件也会独立于这两个程序,作为一个新的服务组件存在于系统之中,这样降低了各个组件之间的耦合性。
要使算法结果可视化,我们需要在实时视频流上面增加OSD,以便查看。所以我们需要调用海思SDK中的RGN功能,增加overlay和cover_ex两种类型的RGN,一种用于显示目标的类别标签,另一种用于显示目标的box。
以上,就是我们整个软件的架构逻辑,整个流程也不算复杂。
效果分析
下面,我们看看初步调试出来的效果。
由于测试条件有限,目前我只能通过手机打开检测图片,然后将手机放置在镜头前面,让程序去识别手机图片中的目标信息。
实际上,这样的操作方式对算法识别的准确率影响其实是很大的,如果因为手机屏幕摆放角度造成光线反射量不同,导致画面上曝光程度不一致,对效果的影响很大。
如下两张图,分别用来识别人和小汽车。
图一
图二
从图一的效果来看,准确率和召回率都还基本满足需求,但是检测的坐标有不太准确,会有一些偏差。图二也是同样的情况,部分结果中坐标偏差较大。这个效果确实有待优化。
算法效率
现在,我把整个处理过程拆分之后分别测试耗时,得出如下表一中的数据:
Function | Time(ms) |
---|---|
ncFifoWriteElem | 70~90 |
ncGraphQueueInference | 10 |
ncFifoReadElem | 10 |
从上表中看出FifoWriteElem这个接口耗时峰值达到了90ms,这个接口功能是将输入图片写到VPU中,输入图像的大小是 416 x 416 x 3个float32型数据,估算一下传输速率大概在2.4MB/s的样子,这样看,传输速率还不是很高。
目前为止,调出来的算法处理速率达到6fps。
设备性能
相传VPU的芯片功耗很低,但是在测试过程中,发现USB频繁出现断连的情况,算法运行一段时间之后,USB会就disconnect了,无论VPU连接PC机还是智能相机时都有这个问题。目前还没找到故障原因。
总结
到目前为止,项目整个功能就已经实现了,同时也实现了效果可视化。后面的工作就是对算法mAP的调优以及耗时方面的优化。力求达到一个不错的效果。所以,博文的更新暂告一个段落,效果优化之后再更新后续内容。
参考链接
1、ARM+Movidius VPU 目标识别调试笔记(一)
2、ARM+Movidius VPU 目标识别调试笔记(二)
3、Movidius VPU移植ssd_mobilenet问题记录
最后
以上就是糊涂哑铃为你收集整理的ARM+Movidius VPU 目标识别调试笔记(三)软件架构效果分析算法效率设备性能总结参考链接的全部内容,希望文章能够帮你解决ARM+Movidius VPU 目标识别调试笔记(三)软件架构效果分析算法效率设备性能总结参考链接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复