Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

使用Movidius神经计算棒(NCS)运行Caffe图片分类模型

$
0
0

作者:裴凡江

概要

Movidius神经计算棒(NCS – Neural Computing Stick)是Movidius推出的基于Myriad 2视觉处理单元(VPU – Visual Processing Unit)的神经计算棒,其最大的特性是可以在1瓦的功率下提供超过每秒1000亿次浮点运算的性能。这一特性使它可以被集成到低功耗的便携设备上,让这些低功耗设备也具有直接运行实时深度神经网络(DNN – Deep Neural Network)的能力,从而使得各种人工智能应用都能够离线部署。

通常来说,开发使用NCS的应用主要分为三个步骤:

  1. NN模型的训练:这一阶段的工作主要是训练出DNN模型,需要在运算能力强大的工作站或者服务器上进行。目前NCS支持Caffe和Tensorflow框架训练出来的模型。
  2. DNN模型的编译和调优:NCS的VPU是无法直接运行第一步骤中训练好的Caffe/TensorFlow模型的(比如Caffe框架训练出的caffemodel文件)。NCS SDK提供了专门的工具用于编译和优化Caffe/TensorFlow模型,最终将模型编译成NCS可以运行的专用模型文件(graph)。这一阶段的工作通常在运行Ubuntu的台式机或者笔记本上完成。
  3. 最后一步我们将在目标设备(集成NCS硬件的设备)上调用 NCS SDK API运行DNN模型。NCS SDK API提供了Python和C语言的支持。下文我们运行Caffe图片分类模型时将给出基于Python的实现。

使用NCS运行Caffe图片分类模型

准备工作

  1. 装备Ubuntu 16.04操作系统的Intel x86_64开发机;
  2. 将NCS通过USB 3.0接口连接开发机;
  3. 安装Movidius NCS SDK和Caffe到开发机,详细安装手册可以参考以下链接:https://software.intel.com/zh-cn/articles/how-to-deploy-tensorflow-and-caffe-for-intel-hardware-platform-into-movidius-ncs-sdk

训练Caffe图片分类的DNN模型

DNN网络的训练并不是此文的目的,这里我们直接借用以下文档中所训练出的Caffe模型和测试数据集。读者可以自行按照文档的步骤训练出完全一致的Caffe模型(文档提供基于Windows系统的操作指南,其在Ubuntu系统下同样适应)https://software.intel.com/zh-cn/articles/the-caffe-practice-on-windows-the-war-between-cat-and-dog

DNN模型的编译

如前文所述,Caffe训练出来的DNN模型是无法直接运行到NCS上的,我们需要使用NCS SDK所提供的编译工具mvNCCompile将Caffe模型编译成专用的graph文件:

mvNCCompile ./dogsvscats.prototxt -w stored_model_iter_10000.caffemodel -s 12 -o ./dogvscat_test.graph

相关参数说明:

   -w:需要编译的Caffe模型

   -s:最多使用多少个SHAVEs(最大值为12)

   -o:编译输出结果(graph文件名)

NCS上运行编译好的DNN模型

完成了DNN模型的编译工作之后,我们就可以调用NCS SDK提供的API,来运行我们的图片分类模型了。为此,我们新建一个python源文件(这里我们命名为image-classifier.py),然后开始我们的Python代码编写工作(注: 以下代码实现参考了Movidius官方提供的示例代码:https://github.com/movidius/ncappzoo/blob/master/apps/image-classifier/image-classifier.py

首先我们需要引用相关的python模块(这里的mvnc.mvncapi就是NCS SDK提供的Python API封装):

然后我们配置运行图片分类模型所需的参数,包括模型相关的参数,以及图片相关的参数:

参数的补充说明如下:

GRAPH_PATH:通过NCS SDK中的mvNCCompile工具编译好的graph文件

IMAGE_PATH:需要做推理的图片

LABELS_FILE_PATH:label文件

IMAGE_MEAN:图像均值(由训练DNN模型过程中计算得到)

IMAGE_STDDEV:图片缩放值

IMAGE_DIM:图片的维度(由训练DNN模型之前设置)

                 

接下来我们就可以分五个步骤来调用NCS进行推理工作了

  1. 获取系统可用NCS列表,并打开第一个可用的NCS
  2. 将graph文件加载到NCS
  3. 将需要推理的图片加载到NCS
  4. 获取并打印推理结果
  5. 释放相关资源

运行结果

将以上步骤中涉及到的代码(包括模块引用以及参数设置)保存到image-classifier.py文件并在终端中运行,将会看到类似这样的输出结果:

结语

文中介绍了如何利用单个NCS运行Caffe DNN模型,事实上如果我们将多个NCS同时集成到设备上,那么就可以获得近乎线性的性能提升。比如文章所介绍的图片分类模型,我们可以让不同的NCS实例同时对不同的图片做预测,以获得成倍的性能提升。这在真实应用场景下同样适应,例如我们对摄像头实时捕捉到的图像做物体识别时,同样可以将视频的不同帧按照时序分别交给不同的NCS实例进行识别,以获得加倍的FPS(每秒处理帧数)。

参考文献

NCS SDK快速上手:https://developer.movidius.com/start

NCS SDK与Caffe的集成:https://software.intel.com/zh-cn/articles/how-to-deploy-tensorflow-and-caffe-for-intel-hardware-platform-into-movidius-ncs-sdk

在Windows上的Caffe实战 – 猫狗大战:https://software.intel.com/zh-cn/articles/the-caffe-practice-on-windows-the-war-between-cat-and-dog

NCS SDK参考手册:https://movidius.github.io/ncsdk/

Intel Caffe:https://software.intel.com/zh-cn/ai-academy/frameworks/caffe

NCS 购买:https://developer.movidius.com/buy

关于作者

裴凡江是英特尔酷睿与视觉计算事业部的一名应用软件工程师,专注于在英特尔平台上与开发者的合作和业务拓展。力求将英特尔卓越的软硬件平台与开发者的软硬件产品完美结合,提供最优客户体验。


Viewing all articles
Browse latest Browse all 583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>