mobilenet cpu 加速_干货 | 英特尔神经网络计算棒实现对象检测加速推理

点击上方↑↑↑“OpenCV学堂”关注我

投稿作者:小黄弟

研究方向:图像分类、检测、多目标跟踪、视频行为分析、重识别等领域

来自:中国电科智慧城市建模仿真与智能技术重点实验室

文字编辑:gloomyfish

如果你觉得文章对你有帮助,欢迎转发支持

本文小黄弟要向大家介绍的是用英特尔NCS2加速棒实现对tensorflow物体检测模型的加速,涉及到的内容有tensorflow物体检测模型,OpencvDNN模块的使用,OpenVINO的使用。对这3个模块了解的同志看起来会比较愉快,不了解的看了也能有助于睡眠。

tensorflow物体检测模型

Google开源的目标检测 API包含了许多优秀的检测模型,可任君选用,地址为:

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

如下图,每个模型的运行时间、mAP与模型的大小几乎成正比例关系,本文选用的模型是 ssd_mobilenet_v2

38c99f2e39bb6b68a72ce99a9467c9e5.png

下载模型,解压后会得到如下图文件:

43697729e92860611aa8f3ad126532ef.png

我们需要用到的就是ssd_mobilenet_v2.config及ssd_mobilenet_v2.pb文件。有了这两个文件后,可以用tensorflow调用,可以用OpencvDNN调用,也可以用OpenVINO调用,本文研究用OpencvDNN,及OpenVINO调用。

OpencvDNN调用

OpencvDNN模块调用tensorflow物体检测模型,需要通过.config及.pb文件生成一个.pbtxt文件,进入opencv下的dnn目录下,本人目录为

D:\opencv\sources\samples\dnn

需要把

- ssd_mobilenet_v2.config
- ssd_mobilenet_v2.pb

上述两个文件复制到该目录下,运行命令:

python tf_text_graph_ssd.py --input ssd_inception_v2.pb \
--config ssd_inception_v2.config \ 
--output ssd_inception_v2.pbtxt \

就会生成一个

ssd_inception_v2.pbtxt 文件

OpencvDNN调用ssd_inception_v2模型,需要的是

  • ssd_inception_v2.pb

  • ssd_inception_v2.pbtxt

好了,模型有了,撸代码吧

Net face_detection_net = readNetFromTensorflow("ssd_mobilenet_v2.pb", "ssd_mobilenet_v2.pbtxt");
face_detection_net.setPreferableBackend(DNN_BACKEND_OPENCV);
face_detection_net.setPreferableTarget(DNN_TARGET_CPU);

后端是基于OpenCV,硬件是CPU,检测效果(视频截图)如下,时间约为80ms每帧,是不是有点沮丧,太慢了,别着急,惊喜还会有的。

b3fd70e2e39e11e5babeea58430c666d.png

只需要改一个参数就可以实现加速,把后端由opencv改为基于OpenVINO的INFERENCE_ENGINE即可,硬件还是CPU,代码如下,效果图如下,瞬间飙到了40ms每帧左右,一个参数,速度快了一倍,爽歪歪

Net face_detection_net = readNetFromTensorflow("ssd_mobilenet_v2.pb", "ssd_mobilenet_v2.pbtxt");
face_detection_net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);
face_detection_net.setPreferableTarget(DNN_TARGET_CPU);

40a535fdb9387e9446bd275d0114cbeb.png

OpenVINO + NCS2 调用

NCS2

2018年11月14日在北京举行的人工智能大会上,英特尔发布了英特尔神经计算棒二代(简称英特尔NCS 2),利用该计算棒可以在网络边缘构建更智能的AI算法和计算机视觉原型设备,NCS 2是基于英特尔Movidius Myriad X视觉处理单元(VPU),并得到英特尔 OpenVINO工具包的支持。

OpenVINO计算框架

OpenVINO是英特尔基于自身现有的硬件平台开发的一种可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件。

其实上面我们已经实现了用OpenVINO来加速,不过是跑在CPU上的,下面我们要跑在NCS2上。理论上,只需要将硬件从CPU改为NCS2即可,从:

DNN_TARGET_CPU

改为

DNN_TARGET_MYRIAD

代码如下:

Net face_detection_net = readNetFromTensorflow("ssd_mobilenet_v2.pb", "ssd_mobilenet_v2.pbtxt");
face_detection_net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);
face_detection_net.setPreferableTarget(DNN_TARGET_MYRIAD);

结果如下图,但是,但是这出来的结果,检测框跟目标明显有偏移,怎么回事???难道NCS2是个坑,我可是有6个加速棒的人啊,白花花的银子要浪费了???

d49c078bbd0e7c6345994b65786f899f.png

突然有个想法attack了我,难道ssd_mobilenet_v2.pb文件要转换为Open VINO的xml及bin文件?好吧,那就转吧。进入OpenVINO的model_optmizer目录下,同时建立文件夹为ssd,把ssd_mobilenet_v2.config及ssd_mobilenet_v2.pb复制到ssd文件夹下,在model_optmizer目录下执行一下命令:

python mo_tf.py
--input_modelssd/ssd_mobilenet_v2.pb
--output=detection_boxes,detection_scores,num_detections
--tensorflow_use_custom_operations_config extensions/front/tf/ssd_v2_support.json
--tensorflow_object_detection_api_pipeline_configssd/ssd_mobilenet_v2.config

执行后会生成

- ssd_mobilenet_v2.xml
- ssd_mobilenet_v2.bin

两个文件。

好了,看看经过转换后的模型,会出现什么?加载模型代码如下:

Net face_detection_net = readNetFromModelOptimizer("ssd_mobilenet_v2.xml", "ssd_mobilenet_v2.bin");
face_detection_net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);
face_detection_net.setPreferableTarget(DNN_TARGET_MYRIAD);

效果如图所示,瞬间变好了,原来真的需要转换模型格式,执行时间约为110ms每帧,没有CPU的快,不过想想NCS2与CPU的价格差距就知道了。

4bcf27d9885f66f05348bc110e315423.png

其实只要用tensorflow物体检测框架训练,然后通过上述步骤,就可以将模型迁移到自己的数据集上,如下图,是我用ssd_mobilenet_v2迁移人头检测数据集的效果,跑在NCS2上的,效果如下图。

a8950b6946b50145fb53f9082bf3c098.png

总结与后记

我总结了一下不同硬件及后端测试对应的时间,如下图,任君选择

a9d6577c96d7998ab4906e3b65e8df21.png

那么,所有问题都解决了吗?不是的,至少还有两个问题困扰着我,

  1. 怎么把一个模型跑在多个加速棒上,别忘了,我可是有6个加速棒的人。

  2. 怎么把不同模型跑在不同的加速棒上?

欢迎留言与作者互动或联系作者本人探讨,好的留言小编负责置顶与打赏

380f9d379eadc93fd96fdc919d984bbb.png 380f9d379eadc93fd96fdc919d984bbb.png

往期精选

告诉大家你 在看

  • Opencv+TF-Slim实现图像分类及深度特征提取

  • OpenVINO开发系列文章汇总

  • 如何编译OpenCV4.1.0支持OpenVINO推断引擎加速支持

  • OpenVINO场景文字检测与识别

  • OpenVINO开发配套视频教程发布了

475737dd3d4a7b05e1253f53e79b720c.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值