DesignSpark Electrical Logolinkedin

Movidius 为深度学习增添优势

Neural Compute Stick (神经计算棒),让人工智能在低功率嵌入式应用中成为现实。

人工智能 (AI),与核聚变清洁能源一样,数十年来被人们认为将对社会产生深远的影响,凭借近年来取得的科技进步,人工智能终能应用到更广泛的实际应用中。但是仍有一个问题未解决:视觉处理等多种关键应用是计算密集型应用,低功耗设备的本地处理能力显然无法胜任。

Movidius — 现已归于 Intel 麾下 — 推出 Myriad 2 视觉处理单元 (VPU),解决了这个问题。该单元可在低功耗条件下实现软件可编程的机器视觉。

在本文中,我们对 Myriad VPU 技术和相关 SDK 进行初步探索,并利用神经计算棒 (NCS) 获得实际操作经验。神经计算棒支持低成本开发和原型制作。

100Gflops 功耗仅为 1W

来源:Movidius Myriad 2 VPU 产品简述

Movidius 神经计算棒 (139-3655) 带来出众的视觉处理性能,运算性能超过 100Gflops,能耗仅约 1W。采用 600MHz 系统芯片 (SoC),集成 12x VLIW 128 位处理器,核心优势为 2MB 片上存储器,传输速率为 400Gbps。

产品的主要特点有:

  • 支持 FP16、FP32 和整数运算,支持 8、16 和 32 位精度
  • 在设备上实时推断,不需要云连接
  • 快速部署现有卷积神经网络 (CNN) 型号或经独特训练的网络
  • 通过主机 PC 上的单个 USB 3.0 端口输送所有数据和电源

尽管该产品配备 USB 3.0 端口,但 USB 2.0 端口便足以应对多数应用。另外请注意,为获得更高的性能,可通过合适的 USB 集线器连接多个 NCS。

Caffe 支持

开放资源Caffe 框架 可对深度学习应用提供支持。它由伯克利人工智能研究 (BAIR) 实验室开发。Caffe 的指导原则如下:

  • 表达形式:模型与相应优化以文本形式而非代码形式给出。
  • 速度快:对于研究和类似工业而言,速度是高科技模型和海量数据的重要基础。
  • 模块化:新任务和设置需要能够灵活调整和扩展。
  • 开放性:要取得科学和应用进步,需要公共代码、参考模型以及再现性。
  • 社区性:通过共同讨论和开发 BSD-2 项目,学术研究、早期原型和工业应用可以分享成功经验。

项目网站详细介绍了 Caffe 的架构和功能。如果您像我一样极少接触人工智能技术,那么还有相当多的知识需要了解。但是无需惊慌,因为 Movidius 神经计算 (NC) SDK 囊括了框架和硬件支持,以及采用现有神经网络模型的应用示例。换句话说,您可以随时开始使用,评估网络和 NCS 硬件的性能。

SDK 安装

要安装 NC SDK,需要运行 Ubuntu 16.04 的计算机。其它系统也许能够安装,但这是唯一指定的操作系统。

下面我们将介绍简要的操作步骤,推荐下载入门指南 PDF 和其它官方文件,获得更详细的说明。

一旦下载完毕,NC SDK 可以随以下组件一起安装:

$ sudo apt-get update

$ sudo apt-get upgrade

$ tar xvf MvNC_SDK_1.07.07.tgz

$ tar xzvf MvNC_Toolkit-1.07.06.tgz

$ cd bin

$ ./setup.sh

安装可能需要一段时间,因为工具包将与相关组件一起安装。请注意,安装脚本通过更新 ~/.bashrc 文件来设置相应的 PYTHONPATH 环境变量。例如,默认安装位置应加入的代码行为:

export PYTHONPATH=$env:"/opt/movidius/caffe/python":$PYTHONPATH

如果其它用户想要使用 SDK,他们也需要将该行代码加入各自的 ~/.bashrc 文件。

假设我们仍然在二进制目录中,然后为示例代码安装 Caffe 模型:

$ cd data

$ ./dlnets.sh

如果我们回到 SDK 根目录下,那么便可安装 API:

$ cd ../..

$ tar xzvf MvNC_API-1.07.07.tgz

$ cd ncapi

$ ./setup.sh

 

要安装 NC SDK,需要运行 Ubuntu 16.04 的计算机。其它系统也许能够安装,但这是唯一指定的操作系统。

下面我们将介绍简要的操作步骤,推荐下载入门指南 PDF 和其它官方文件,获得更详细的说明。

一旦下载完毕,NC SDK 可以随以下组件一起安装:

$ sudo apt-get update

$ sudo apt-get upgrade

$ tar xvf MvNC_SDK_1.07.07.tgz

$ tar xzvf MvNC_Toolkit-1.07.06.tgz

$ cd bin

$ ./setup.sh

安装可能需要一段时间,因为工具包将与相关组件一起安装。请注意,安装脚本通过更新 ~/.bashrc 文件来设置相应的 PYTHONPATH 环境变量。例如,默认安装位置应加入的代码行为:

export PYTHONPATH=$env:"/opt/movidius/caffe/python":$PYTHONPATH

如果其它用户想要使用 SDK,他们也需要将该行代码加入各自的 ~/.bashrc 文件。

假设我们仍然在二进制目录中,然后为示例代码安装 Caffe 模型:

$ cd data

$ ./dlnets.sh

如果我们回到 SDK 根目录下,那么便可安装 API:

$ cd ../..

$ tar xzvf MvNC_API-1.07.07.tgz

$ cd ncapi

$ ./setup.sh

然后有一系列示例可以从二进制目录运行,以检验 NCS 运行效果。

$ cd ../bin

$ make example00

$ make example01

$ make example02

$ make example03

视频流推断示例

Python 流_推断示例

现在我们来看看更有趣的示例!该示例需要一台视频输入设备,我们决定使用 Logitech C920 全高清网络摄像头 (125-4272),因为它能够出色地支持 Linux 系统。

$ cd ../ncapi/tools

$ ./get_models.sh

$ ./convert_models.sh

$ cd ../py_examples/stream_infer

$ python3 stream_infer.py

哎呀!60.60% 的显示上限?!好吧,先别急着发火 — NCS 做的只是苦力活,而我们依靠卷积神经网络 (CNN) 来进行推断。公平地说,这一点可以理解。无论如何,由上图可以看出,同一示例中对咖啡杯的处理效果更好,而对其它物品也有类似的处理效果。

这里的重点是人工智能进行推断的速度 — 以及所需的能耗,这一过程对能源消耗的确很快。

示例 stream_infer.py 中使用的默认模式称为 SqueezeNet。它属于一种 CNN,识别精度与比它早 4 年左右出现的 AlexNet 相似,它可以将LSVRC-2010 ImageNet 训练集中的 130 万张高清照片分成 1000 个不同的类别。据说,Albeit SqueezNet 可以用比 AlexNet 小 510 倍的模型实现这一点。

经配置,stream_infer.py 可以使用 SqueezeNet 或 AlexNet,以便对比在 NCS 上的使用效果。这仅仅与 Python 文件接近顶端位置的注释行(取消注释行)有关。除此以外,Gender 和 GoogleNet 模型也可以用同样的方法进行配置。例如:

NETWORK_IMAGE_WIDTH = 224 # the width of images the network requires

NETWORK_IMAGE_HEIGHT = 224 # the height of images the network requires

NETWORK_IMAGE_FORMAT = "RGB" # the format of the images the network requires

NETWORK_DIRECTORY = "../../networks/GoogLeNet/" # directory of the network

示例 stream_infer.py 将在 NETWORK_DIRECTORY 中寻找 “graph”、“stat.txt” 和 “categories.txt” 文件。如果我们对比 AlexNet 和 SqueezeNet 的图片文件大小:

二值图的大小差距不到 510 倍,但也相当明显。

网络编译和分析

来源:Movidius NCS 工具包文件

新的 CNN(例如用于分类现有 CNN 未涵盖的图像)可以使用合适的框架进行设计和训练。然后该网络可编入图像文件,并使用 SDK 配备的 NCS 工具包进行配置。

面向嵌入式平台

API 必须首先与工具包安装在同一台计算机上(Ubuntu 16.04 x86-64 操作系统),但是库文件、头文件等可随后安装在其它平台上。实际上,SDK 提供了一系列 Raspbian Jessie 包。这意味着一旦安装了这些包,以及来自 Raspbian repo 的相关组件,只需在 stream_infer.py 中修改一行代码,该示例便可在 Raspberry Pi 上使用。

典型应用

Movidius VPU,用于全新 Motorola Moto Mod 中的 4K VR 像素处理。来源:movidius.com

机器视觉应用包括:

  • 无人机和机器人
  • 增强现实和虚拟现实领域
  • 可穿戴器件
  • 智能安全

Myriad VPU 在安全摄像机上的作用显而易见,例如识别停靠在车道上的车辆或区别窃贼和宠物。同样显而易见的是,它对于大幅提高家用机器人(例如吸尘器)和无人机应用(躲避或搜寻物品)价值的作用。这只是该技术的部分应用,人们很容易能够找到更多的用途。

最初的想法

在 Movidius 技术的帮助下,人工智能已广泛应用于许多实际应用中,许多先进产品纷纷寻找使用契机,例如智能手机的 4K VR 像素处理附件和无人机的感知和规避系统。神经计算棒的推出意味着任何人都可以立即开始用 Myriad 2 VPU 开展实验,同时轻松赋予现有嵌入式平台强大的深度学习能力。

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.