前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货 | 英特尔神经网络计算棒实现对象检测加速推理

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

作者头像
OpenCV学堂
发布2019-08-28 11:29:13
2.1K0
发布2019-08-28 11:29:13
举报

投稿作者:小黄弟 研究方向:图像分类、检测、多目标跟踪、视频行为分析、重识别等领域 来自:中国电科智慧城市建模仿真与智能技术重点实验室 文字编辑: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

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

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

OpencvDNN调用

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

代码语言:javascript
复制
D:\opencv\sources\samples\dnn

需要把

代码语言:javascript
复制
- ssd_mobilenet_v2.config
- ssd_mobilenet_v2.pb

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

代码语言:javascript
复制
python tf_text_graph_ssd.py --input ssd_inception_v2.pb \
--config ssd_inception_v2.config \ 
--output ssd_inception_v2.pbtxt \

就会生成一个

代码语言:javascript
复制
ssd_inception_v2.pbtxt 文件

OpencvDNN调用ssd_inception_v2模型,需要的是

  • ssd_inception_v2.pb
  • ssd_inception_v2.pbtxt

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

代码语言:javascript
复制
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每帧,是不是有点沮丧,太慢了,别着急,惊喜还会有的。

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

代码语言:javascript
复制
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);

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

代码如下:

代码语言:javascript
复制
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个加速棒的人啊,白花花的银子要浪费了???

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

代码语言:javascript
复制
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

执行后会生成

代码语言:javascript
复制
- ssd_mobilenet_v2.xml
- ssd_mobilenet_v2.bin

两个文件。

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

代码语言:javascript
复制
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的价格差距就知道了。

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

总结与后记

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

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

  1. 怎么把一个模型跑在多个加速棒上,别忘了,我可是有6个加速棒的人。
  2. 怎么把不同模型跑在不同的加速棒上?
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档