Firefly开源社区

标题: 使用Tengine Explore版在firefly-RK3399上实现实时目标检测 [打印本页]

作者: 金鹏    时间: 2019-2-14 20:55
标题: 使用Tengine Explore版在firefly-RK3399上实现实时目标检测
使用深度学习的方法训练得到模型之后,下一步便是将模型部署到实际的应用场景中创造效益,通常就是部署到服务器端,或者部署到移动端,我们做的是后者。
近些年来,用于将模型部署到移动端的前向推理框架比较多,例如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的开发者,以及举办本次活动的工作人员




作者: o0圏圏蟲0o    时间: 2019-3-15 20:45
请问这里面的测试是使用 RK3399中的两个Cortex-A72大核心吗?
作者: o0圏圏蟲0o    时间: 2019-3-15 20:48
为什么int8才比fp32快几ms呢?能否提供Tengine最新的benchmark?我们这边的测试结果是ncnn比Tengine快一些,mobilenet ssd int8 ncnn只需要136ms
作者: aaronbean    时间: 2019-4-10 10:12
o0圏圏蟲0o 发表于 2019-3-15 20:48
为什么int8才比fp32快几ms呢?能否提供Tengine最新的benchmark?我们这边的测试结果是ncnn比Tengine快一些 ...

请问怎么切换int8和fp32呢
作者: luokuipeng    时间: 2019-7-6 20:41
感觉 这个论坛的资料 好少
作者: 张珍888    时间: 2019-7-29 19:27
谢谢
作者: .....----..-    时间: 2019-12-15 21:29
学习学习




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1