嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

使用Movidius NCS获取你的TensorFlow

NetworkAnalysisDetail1_31c9b0a3f76e67a6c4da89ed24b276204552d90d.jpg

 

Neural Compute Stick获得来自Google的数值计算库的支持。

Movidius NCS (139-3655) 为低功耗设备带来深度学习功能,可将人工智能移出到网络边缘 。在Caffe框架支持下启动紧凑的USB3.0设备,在之前的文章中,我首先介绍了NCS,并提供了示例。 在这篇文章中,我们将回到更新的SDK,并看看最近宣布的对Google第二代机器学习系统TensorFlow的支持。

什么是张量

StressTensor_151dae3af667f9be5d4e81fc94dfbcbc16cde5eb.jpg

Stress tensor, 维基共享资源,CC BY-SA 3.0。

通过快速搜索,我们发现最简单的 —相对而言!—要了解张量的描述是什么,请参考 PhysLink.com,其中说:“数学上定义的张量是简单的数字或函数的数组,它们在坐标改变的情况下按照一定的规则进行变换。 在物理学中,张量表征物理系统的特性。“

TensorFlow被描述为使用数据流图进行数值计算的开放源代码库,其中图中的节点表示数学运算,而图边表示多维数组(张量)在它们之间通信。

 幸运的是,我们不需要真正掌握数学上的细节,就可以尝试一下TensorFlow的例子,并且了解它能让你做什么。 实际上,现有的免费可用的神经网络可能被用于许多应用中。

TensorFlow为CPU和GPU提供了支持,但当然,在我们的例子中,重负荷的提升将由Neural Compute Stick的能效更高的Myriad 2 VPU来完成。

SDK 安装

make-examples_afdebbc9c8b6d55433eb63f19deb70a55f762d3d.jpg

回到Movidius  入门指南我们注意到的第一件事情是,tar存档的下载已经被GitHub链接取代,这是一个最受欢迎的改变,应该能够更容易地更新SDK并跟踪更改。 为了安装这个我们现在简单地:

$ git clone https://github.com/movidius/ncsdk.git

$ cd ncsdk

$ sudo make install

 之后将安装Neural Compute Stick SDK:

  • NCS库→/ usr / local / lib 
  • NCS Toolkit 二进制文件→ /usr/local/bin
  • NCS 包含文件→ /usr/local/include
  • NCS Python API → /opt/movidius

PYTHONPATH环境变量也正在被更新。

接下来我们可以构建这些示例,但是我们首先需要确保NCS已经插入。

$ make examples

 

这个过程的一部分输出可以在上面的图片中看到。

TensorFlow 示例

NetworkAnalysisDetail_31c9b0a3f76e67a6c4da89ed24b276204552d90d.jpg

来自Inception v1网络分析的详细信息
  

TensorFlow的示例是与Google的Inception架构的SDK for v1和v3 一起提供,在以下文档中进行了介绍:

ANicolò Valigi 的博客文章提到 a short history of the Inception deep learning architecture.

我们首先运行V1例子:

$ cd examples/tensorflow/inception_v1

$ make all

 

该文件描述了NCS上的网络,然后使用网络的描述加上经过训练的权重文件来编译一个二进制图形,该图形在Myriad 2 VPU上执行。

接下来我们输入:

$ make run

 

这会将单个图像下载到NCS,并根据1,001个可用类别显示推断结果.

nps_electric_guitar_e7674289d71663d5ae2b7e009734de5f39e36b52.jpg

 

默认情况下,所使用的图像是一个电吉他,如上图所示。

GYTFO_Inception_v1_Output_8fb65b477bce5d5692ba05d08f71d6691a92caab.jpg

 

毫无疑问,长测量的最高结果是电吉他。

提供了一系列测试图像,并在不同的测试图像上运行推理,我们只需要编辑run.py文件并更新the image_filename变量即可。

from mvnc import mvncapi as mvnc
import sys
import numpy
import cv2

path_to_networks = './'
path_to_images = '../../data/images/'
graph_filename = 'graph'
image_filename = path_to_images + 'nps_guac.png'

 例如,把这个变成了鳄梨酱的图片。

nps_guac_4b1d70ed70a2bcc8a950daa855ec673e97d216bd.jpg

 

然后执行make再次运行,我们得到以下结果。

make_run-guac_0e36ec1f8a203265e4783710bc5b56d4556005c7.jpg

虽然开发新的神经网络架构可能是AI / ML专家的领域,但查看run.py文件—只有93行,包括版权标题和注释! 显然,使用神经网络计算API和现有的预训练网络开发应用程序应该是相对简单的。 粗略地说,Python脚本:

1.支持NCS,数字图书馆和OpenCV

2.检查NCS设备并打开它,否则会报错

3.加载预编译的二进制图

4.将输入图像转换为适当的格式

5.载入图像(我们的输入张量)

6.列出前5个推论

7.关闭NCS设备

很简单。 随着预先训练的神经网络在不同的环境和应用中的可用性,人们很容易想象这种技术将被用于多种的不同用途。

动物园旅程

GYTFO_stream_ty_gn_8704250911999978dc9f039119d381078e0eb0cf.jpg

仍然从运行TinyYolo+GoogleLeNet视频流例子

为了鼓励共享,重用和增加Movidius NCS免费提供的示例数量,Intel创建了Neural Compute Application Zoo— 一个带有脚本的GitHub repository 存储库,用于下载Caffe和TensorFlow的模型和编译图表,以及示例应用程序和数据供它们使用。

在撰写NC App Zoo中可用的应用程序时,包括一些使用多个NCS的应用程序,以便可以同时运行多个网络。 其中一个例子是stream_ty_gn,它应用程序需要一个视频流和:

1.运行一个TinyYolo推理来查找帧中与它识别识别的20个类别之一相匹配的所有对象

2.对于识别的每个对象,都会绘制一个边框

3.将较小的图像放在GoogLeNet网络上进行更详细的分类

欢迎对NC App Zoo的贡献,提供一套简单的指导准则,并通过GitHub请求提交。

结论

为什么是TensorFlow? 那么,如果你做一个快速的网络搜索,你会发现不乏博客文章,文章,甚至视频提供了介绍,还有那些涵盖更多高级主题和用于不同应用的视频。 在不到两年的时间里,谷歌的TensorFlow除了为前沿研究提供了一个活跃的平台外,还收集了大量的兴趣,同时也被投入到生产应用中。因此, 对NCS的这种支持只能有助于加速嵌入式系统中深度学习技术的发展。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin