使用深度学习的方法训练得到模型之后,下一步便是将模型部署到实际的应用场景中创造效益,通常就是部署到服务器端,或者部署到移动端,我们做的是后者。
近些年来,用于将模型部署到移动端的前向推理框架比较多,例如ncnn、MACE、Tengine等,当然如果有条件,还是需要自己来做优化。
Tengine是一个由OPEN AI LAB开发的专门针对嵌入式场景的轻量化框架,我们对比了ncnn、MACE和Tengine之后发现,Tengine的速度是最快的。
前不久,Tengine还推出了Tengine Explore 版,性能比开源版更强。参与Tengine AloT 树莓派/RK3399应用征集大赛,每个开发者可以体验性能非凡的Tengine Explore版。微信扫描以下二维码参与活动:
接下来,我们对Tengine开源版,Tengine Explorer版(float32),Tengine Explorer版(int8)三者做一个比较,分别采用图像和视频的方式。
1.1、图像测试,Tengine开源版
运行Tengine Explore版本,首先需要跑通开源版本的Tengine,指导教程可以参考hey-yahei的博客。在这里,我们用RK3399来跑Mobilenet_SSD,得到的结果如下:
这里,我们对同一幅图像重复检测100次,取平均时间,可以发现平均一帧耗时176.945ms,速度还是很快的!
1.2、图像测试,Tengine Explorer版(float32)
接下来,我们用Tengine Explore 版来做同样的事情,得到结果如下:
可以看到输出多了一行Authentication failed can’t get ID,这是因为这个版本目前尚未在线**,但并不影响其运行。当然在线**之后可以用int8的方式来计算,速度会更快。这次,我们还是使用相同的模型,对同一幅图像检测100次,可以看到,平均时间降低到了142.566ms,速度提升相当可观。
1.3、图像测试,Tengine Explorer版(int8)
接下来,我们将Tengine Explore版进行在线**,解锁int8量化计算的方法。进一步提升运算速度。运行程序得到结果:
可以看到精度基本没有损失,但是时间降低到了139.237ms,非常快!
2.1、视频测试,Tengine开源版
接下来,我们基于实际需求来做一些应用。客流检测可以用在商场、公交等行业,实现自动计数,这里第一步就是检测人头。我们的模型在Mobilenet_SSD的基础上进行了压缩、裁剪等工作,在不影响最终效果的前提下减小模型的复杂度。我们用双线程同时处理两个本地视频。结果如下:
可以看到视频虽然不是很清晰,光照条件也不是很好,但是模型准确地检测出了视频中的人头,当然,目标的跟踪和计数是检测之后另外实现的。本段视频中,程序检测到上车人数为13人,下车人数为9人,平均一帧耗时大约48ms。
2.2、视频测试,Tengine Explorer版(float32)
然后我们用Tengine Explorer版来做同样的事情,结果如下:
可以看到,视频检测的结果跟开源版是一样的,但是平均时间降低到了44ms。
2.3、视频测试,Tengine Explorer版(int8)
最后,我们用Tengine Explore版的int8量化计算的方法,进一步提升运算速度。运行程序得到结果:
可以看到,int8得到的目标检测结果和float32的得到的结果差别并不是很大,最终计数的结果为上车人数13人,下车人数8人,两者也都差不多,相信调整参数之后应该就没有问题了,但是int8方式的一帧平均时间降低到了大约34ms,提升相当明显,已经接近实时应用了!当然,这只是一个demo,距离实际应用还有一些距离,需要继续努力。
最后感谢Tengine的开发者,以及举办本次活动的工作人员!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Tengine Explore版在firefly-RK3399上实现实时目标检测 - Python技术站