本帖最后由 robe.zhang 于 2020-12-22 01:00 编辑
【米尔FZ3深度学习计算卡】识别硬币视频 + 识别速度分析优化
先看视频:
米尔深度学习计算卡,识别硬币的整个系统: 除了右上角是windows10 电脑屏幕,用来替代硬币实物,其他全都是米尔深度学习计算卡识别硬币的系统。
用的摄像头是罗技c310 摄像头,本身不是很好,再加上硬币比较小,摄像头直接拍摄硬币实物时,距离近了对不上焦不清楚,距离远了太小仍然拍不清楚。直接拍摄获取视频无法使用,所以使用win10电脑播放硬币图片,替代硬币实物,让摄像头实时获取硬币视频。
米尔深度学习计算卡显示器画面: MYIR FZ3 baidu brain board. DEMO:是个标题 five_jiao: 识别的结果,本图片是五角硬币的正面,识别为 five_jiao PaddlePaddle cycle_time: 是飞浆识别一帧用时,使用代码实时计算出来的,大约是50000ns,约50ms,识别帧率极限是 20fps PaddlePaddle frame rate:飞浆预测(识别)帧率,和cycle_time对应的,约 20fps P: 0.901855 是飞浆识别置信度,0.90其实也是很高了,因为是手机拍摄硬币,电脑又播放手机图片,摄像头又拍摄电脑屏幕,图片本身失真很厉害的情况下,置信度0.90,还是很不错的 Video cycle_time 和 frame rate:这两个参数主要是模拟单线程时,显示器画面显示一帧用时和帧率,主要是分析优化识别速度用的。
优化思路: 1,测出飞浆预测一帧用时:50ms,必须要实测数据 2,单线程处理一帧用时,108ms,各个阶段用时都要知道 3,知道飞浆库多线程特性,飞浆暂时不支持多线程 基于以上3点,自己设计程序,使用3个进程:1个进程用于飞浆预测,且仅仅用于预测,目标是逼近飞浆预测速度的极限50ms,其他事情全部不干;第2个进程用来获取摄像头图像,目标是耗时不大于50ms即可,低于50ms也没啥意义;第3个进程,计算数据,显示图像等等其他事情。
从测试结果可以看到程序增加多线程优化后识别一帧用时 50ms,识别帧率 20fsp,达到模型识别极限。 对比单线程识别一帧用时 108ms,识别帧率9.2fps, 多线程优化后效果还是很直接很明显的,速度直接翻倍还多一点,直逼极限。
本程序所有灵感来源:官方源码;所有代码自己实现
自己实现起来也不难,三线程,双队列,保证一个预测进程逼近极限搞定。官方源码基本上也是这个思路
本程序的识别速度已经达到极限,没啥优化空间了,暂时到此为止
|