人工智能新组合玩法——PYNQ-Z1 FPGA开发板+Intel Movidius NCS

 

为什么Movidius NCS与PYNQ-Z1 FPGA开发板特别适合?...



Intel Movidius神经计算棒是一个USB外型的神经网络计算加速引擎,基于Myriad 2芯片,这是Intel收购的Movidius公司的推出的VPU(Visual Processing Unit), 用于加速神经网络计算,适用于低功耗需求的应用。Movidius NCS可以配合单板计算机板如树莓派、BeagleBone、Up Board等使用,当然,还有一些特殊的板子如本文的主角PYNQ-Z1。

目前上面这些板子都可以单独运行神经网络软件,但是在速度上并不是很快,所以它们在快速移植应用的领域潜力不大,但是如果配合一根Movidius NCS,所有复杂的神经网络计算都可以传输到Myriad 2芯片上,这就可以实现极其快速的推断时间。



为什么Movidius NCS与PYNQ-Z1 FPGA开发板特别适合?

目前,人工智能和神经网络正在许多应用中找到新的用途,但其中最大、发展最快的是计算机视觉。PYNQ-Z1是当今开发嵌入式视觉应用程序的最佳平台之一,原因如下:它具有HDMI输入和HDMI输出,并且它具有FPGA架构,可用于硬件加速图像处理算法。所以,尝试将这些匹配起来,看看可以实现哪些好玩、有趣的内容。

在开始之前可能很多工程师还有疑问:为什么不直接在Zynq FPGA上加速神经网络?这不才是在PYNQ-Z1开发板上实现加速神经网络的的理想方式嘛,况且之前就有过在赛灵思FPGA上完成的项目(QNN和BNN项目)。

不幸的是,神经网络非常耗费资源,PYNQ-Z1拥有成本较低的Zynq器件之一,其中FPGA资源可能对神经网络有一定的限制(这是一个非常普遍的陈述,但显然取决于你希望的网络来做)。在笔者看来,PYNQ-Z1上的FPGA资源更好的利用方式是用于图像处理,以支持外部实现的神经网络,例如NCS。



安装硬件

OK,言归正传,我们来看看如何在PYNQ-Z1 FPGA开发板上实现NCS运行。首先,您要将Movidius NCS连接到PYNQ-Z1开发板,但要做到这一点,您需要一个带电的 USB集线器,因为功耗问题,因为你会发现PYNQ-Z1本身无法为NCS提供足够的电流。

笔者首先尝试没有USB集线器的情况下PYNQ-Z1甚至不会启动。是的,所以说这篇文章的封面图是有误导性的,但它更简单,它让你感兴趣,不是吗?

设置PYNQ-Z1的MicroSD卡

你需要在PYNQ-Z1上安装大量Linux和Python软件包,因此建议为PYNQ-NCS项目使用单独的、全新的MicroSD卡,使用Win32DiskImager将预编译的PYNQ镜像烧录。



安装依赖关系

启动PYNQ-Z1,然后当LED闪烁时,打开Web浏览器访问Jupyter(http:// pynq:9090)。使用密码“xilinx”登录Jupyter,然后从屏幕右侧的下拉菜单中选择New-> Terminal。在此Linux终端中,你可以使用以下命令安装依赖项。请注意,你应该已经以root身份登录,因此不需要在这些命令中使用“sudo”:

apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev

apt-get install -y  libopencv-dev libhdf5-serial-dev

apt-get install -y protobuf-compiler byacc libgflags-dev

apt-get install -y libgoogle-glog-dev liblmdb-dev libxslt-dev

为了节省时间,这些命令仅安装尚未构建到预编译的PYNQ-Z1镜像中的软件包。如果你不是从标准的PYNQ-Z1镜像开始,那么安装Raspberry Pi的Movidius指南(它们与PYNQ-Z1相同)中显示的所有依赖关系可能会更好。

安装NCS SDK(仅限API模式)

该NCS SDK包含了一个工具包和API。该工具包用于分析,编译和调整神经网络,而API则用于将应用程序与NCS连接,这里只安装API。

我们通常会在开发PC上安装Toolkit,但这篇文章不会详细讨论这些细节。Jupyter中的终端通常会让你进入/home/xilinx目录。

您可以从该目录运行以下命令来下载NC SDK和NC App Zoo。

mkdir workspace

cd workspace

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

git clone https://github.com/movidius/ncappzoo

进入API源代码目录。

cd ncsdk/api/src

在这个目录中有一个用于编译和安装API的Makefile。我们需要对其进行小小的修改,以便将Python库安装到Python 3.6而不是Python 3.5。Makefile使用vi编辑器打开进行编辑。

vi Makefile

一旦进入vi编辑器,按“i”命令开始插入文本,使用箭头向下导航到对“python3”的引用,将光标放在它的末尾,并在该引用的末尾添加“.6”(它应该读取“python3.6”)。然后按ESC退出插入模式并输入“:x”(冒号然后x),然后按ENTER保存该文件。
现在我们可以编译并安装API。

make

make install

安装NC App Zoo

在NCS App Zoo含有大量的可以借鉴的例子应用,我们将使用其中的一个与我们的NCS一起进行简单的测试。

cd ../../../ncappzoo/apps/hello_ncs_py

我们将再次修改这个目录下的Makefile文件,用“python3.6”代替“python3”,修改并保存。

vi Makefile

运行该示例。

make run

可以看到以下输出:

making run

python3.6 hello_ncs.py;

Hello NCS! Device opened normally.

Goodbye NCS! Device closed normally.

NCS device working.

测试PYNQ-Z1的YOLO项目

现在我们可以尝试PYNQ-Z1的YOLO项目,并使用预先编译好的Graph文件(通常我们必须在PC机上使用NCS工具包编译graph文件)。首先克隆YOLO作为PYNQ-Z1项目。

cd /home/xilinx/jupyter_notebooks

git clone https://github.com/fpgadeveloper/pynq-ncs-yolo.git

然后我们下载编译好的graph文件。

cd pynq-ncs-yolo

wget http://fpgadeveloper.com/downloads/2018_04_19/graph

现在我们可以运行YOLO单镜像示例。

cd py_examples

python3.6 yolo_example.py ../graph ../images/dog.jpg ../images/dog_output.jpg

你应该得到这个输出:

Device 0 Address: 1.4 - VID/PID 03e7:2150

Starting wait for connect with 2000ms timeout

Found Address: 1.4 - VID/PID 03e7:2150

Found EP 0x81 : max packet size is 512 bytes

Found EP 0x01 : max packet size is 512 bytes

Found and opened device

Performing bulk write of 865724 bytes...

Successfully sent 865724 bytes of data in 211.110297 ms (3.910841 MB/s)

Boot successful, device address 1.4

Found Address: 1.4 - VID/PID 03e7:f63b

done

Booted 1.4 -> VSC

total time is " milliseconds 285.022

(768, 576)

class : car , [x,y,w,h]=[566,131,276,128], Confidence = 0.29101133346557617

class : bicycle , [x,y,w,h]=[384,290,455,340], Confidence = 0.24596166610717773

root@pynq:/home/xilinx/jupyter_notebooks/pynq-ncs-yolo/py_examples#

在Jupyter中,您将能够浏览输出图像并查看它(/pynq-ncs/yolo/images/dog_output.jpg)。
最终,你应该能在PYNQ-Z1开发板上运行YOLO项目,视频演示如下。



在视频中,当我们不用软件进行任何调整大小的操作时,我们会得到约3fps的视频。当我们在软件中进行大小调整时,帧频下降到大约1.5fps。

如果我们将调整大小的操作放到FPGA上运行,我们会将帧速率提高到3fps,如果我们使用线程和Zynq-7000 SoC中的第二个处理器,我们应该能够将其提升到6fps。

(原文翻译自FPGA Developer博客)


阅读推荐
  • 芯片是电子设备的“大脑”,“中国芯”何去何从?
  • 树莓派3B+性能全解析,实测对比和3B差距在哪里?
  • 【免费试用】高性能+简单易用,跨界处理器开发板野火i.MX RT1052


    关注 爱板网


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册