在边缘部署人工智能

几乎所有的日常工作中都会涉及到人工智能:语音转文本、照片标记技术、指纹识别、垃圾邮件分类。我们发现,人工智能对前沿创新做出了巨大贡献,例如精准医学、伤害预测、糖尿病视网膜病变预测等用例,以及自动驾驶汽车。

支持机器在现实生活中学习、推理、行动和适应,人工智能和机器学习帮助企业从海量数据中获得更深入的知识和洞察。大多数人工智能算法需要巨大的计算能力才能通过海量数据完成任务。因此,它们依靠服务器执行计算任务,而且许多计算任务无法在边缘、手机、计算机和供应用运行的其他设备上完成。如今人工智能开发人员寻求云服务提供商还有另一个原因:可靠性。然而,尽管能够快速地处理大量数据并提供有价值的输出,但人工智能应用仍然存在一个严重的弱点:它们的大脑在数千英里之外。这一局限性让目前的人工智能算法毫无用处,在连接分散或不在场以及必须在紧迫的时间里快速执行运算的设置下,算法的效率很低。

英特尔® Movidius™ 神经计算棒

为了在边缘开发学习推理应用,英特尔推出了高能效、低成本的英特尔® Movidius™ 神经计算棒,它是一种微型无风扇深度学习设备,采用同样低功耗、高性能英特尔 Movidius 视觉处理单元 (VPU),这种 VPU 已广泛应用于数以百万计的智能安全相机、手势控制无人机、工业机械视觉设备等设备当中。

Intel Movidius Neural Compute Stick Workflow

英特尔® Movidius™ 神经计算棒工作流程

 

英特尔® Movidius™ 神经计算棒支持轻松在计算棒上以最佳的方式运行经过训练的模型。计算棒目前支持两种深度学习神经网络框架:TensorFlow* 和 Caffe*。我们可以在您处理能力较低的计算机上轻松运行复杂的深度学习模型,如 SqueezeNetGoogLeNetAlexNet

入门

为了在处理能力较低的设备上测试英特尔® Movidius™ 神经计算棒,我尝试使用了 英特尔的 UP Squared* Grove* 物联网开发套件和英特尔 Movidius NCS。UP² (Squared) 是目前世界上最快的基于英特尔 Apollo Lake 平台的 x86 创客开发板,是支持 2015 Kickstarter 的 UP 开发板的后续产品。

NCS + UP Squared

采用 UP Squared 开发板的英特尔 Movidius 神经计算棒

 

UP2 Squared 开发板预安装了 Ubuntu 16.04 操作系统(命令行界面)。为了进行测试,我删除了 Ubuntu 16.04 并安装了 Ubuntu 18.04 LTS。成功安装操作系统后,在终端窗口上运行以下命令来安装 NC SDK:

mkdir -p ~/workspace
cd ~/workspace
sudo apt install git
git clone https://github.com/movidius/ncsdk.git
cd ~/workspace/ncsdk
sudo apt install make
make install

现在,我们来运行内置示例,测试安装。将英特尔 Movidius NCS 插入系统的 USB 端口,并在新的终端窗口上运行以下命令:

cd ~/workspace/ncsdk
make examples
python ~/workspace/ncsdk/examples/apps/hello_ncs_py

如果成功,您将收到以下消息:

Hello NCS!Device opened normally.
Goodbye NCS!Device closed normally.
NCS device working.

NCS 上的图像分类器

到目前为止我们测试了 NCS 的运行,下面我们深入研究 NCS 的深度学习推理。在 NCS 上运行图像分类演示非常简单。我们可以使用 NC App Zoo存储库对图像进行分类。您还可以参考 Ashwin Vijayakumar 的图像分类器构建 5 步骤。我来快速跟踪进程以获取最终输出,在命令窗口中运行以下步骤:

cd ~/workspace/
git clone https://github.com/movidius/ncappzoo
cd ~/workspace/ncappzoo/caffe
make all
cd ncappzoo/apps/image-classifier
sudo apt-get install python3-tk
python3 image-classifier.py

在 ncappzoo / apps 目录中有许多这样的例子可以运行。这是在 GenderNet 上运行的实时图像分类器演示(需要网络摄像头):

Live Image Classifier Demo

实时图像分类器演示

 

MNIST 在 NCS 上使用 TensorFlow

学习编程时有一个传统,您要做的第一件事就是输入 “Hello World”。就像编程有 Hello World 一样,机器学习也有 MNIST。MNIST 是一个简单的计算机视觉数据集。它包含有手写数字的图像,如下所示:

它还包括每个图像的标记,告诉我们它是哪个数字。例如,上面图像的标记是 5,0,4 和 1。NCAppZoo 存储库提供一个 Makefile,执行以下操作:

  1. 下载经过训练的模型
  2. 下载测试图像
  3. 使用神经计算 SDK 编译网络。
  4. 有一个 python 示例 (run.py),运行所有测试图像的推理,以显示如何使用包含神经计算 API 的网络。API 在神经计算 SDK 中提供。

我尝试通过以下命令,在 NCS 上使用 TensorFlow 运行预训练的 MNIST 数据集模型:

cd ~/workspace/ncappzoo/tensorflow
make all
cd ~/workspace/ncappzoo/tensorflow/mnist
make all
python3 run.py
MNIST using TensorFlow on NCS

MNIST 在 NCS 上使用 TensorFlow

 

我甚至试图给出一些随机图像来测试模型的准确性(除了 makefile 下载的那些),准确度几乎为 98.9%。

结论

NCS 入门和运行推理非常简单,只需遵循以下 5 个简单步骤,人工智能开发人员就可以轻松地在处理能力较低的设备上测试原型:

第 1 步:打开枚举的设备
第 2 步:将图形文件加载到 NCS 上
第 3 步:将单个图像卸载到英特尔 Movidius NCS 上以运行推理
第 4 步:读取和打印 NCS 的推理结果
第 5 步:卸载图形,关闭设备

到目前为止,我对 NCS 的功能印象非常深刻 — 与 UP Squared 开发板配合使用时运行良好,而且我认为它能够很好地支持离线人工智能原型设计以及人工智能和物联网之间的连接。大家不要错过,它非常适用于 Raspberry Pi。祝大家快乐、顺利地使用 NCS!

 

有关编译器优化的更完整信息,请参阅优化通知