其实,入门AI没那么难——加速深度学习推理的Intel Movidius神经计算棒(NCS)评测
背景
刚过去的2017年,人工智能毫无疑问的成为了最火爆的前沿领域,可以断定,2018年以至往后的至少5年内,这种势头必将持续,并且节节攀高。什么是人工智能?百度百科做了很多并且很专业的解释,但太繁复了,说得简单通俗点,人工智能就是要让机器学会自主思考。
要做到这一步,其核心就是建立在大数据上的深度学习,大数据基本是依靠底蕴,底蕴越强的企业则越能提供机器学习的大而全、精而细的优质范本,诸如谷歌,Facebook,阿里巴巴,腾讯等,而深度学习则依赖算法,这就是各位工程师发挥实力的地方。打个通俗点的比方,你可以把人工智能看作是小孩养成记,决定小孩成长的高度,智商是一个因素,给小孩提供的成长环境(包括教学、资源等)则是另一个重要因素,对应过来,智商就如算法,成长环境等于大数据,你能给机器提供多优秀的算法,多丰富优质的样本案例数据,就基本决定了机器在人工智能上达到的高度。
在和工程师交流的过程中,不少人都表示对深度学习感兴趣,疑问的是具体该怎么做,如何入门?目前深度学习框架比较多,但主流的无外乎那么几个,尤以Caffe以及Tensorflow为主,前者胜在图像、视频上的处理,作者是贾扬清,目前就职于Facebook,后者应用范围广,在语音、图片,自然语言处理上都可以应用,这是谷歌基于DistBelief进行研发的第二代人工智能学习系统。
难能可贵的是,Caffe以及Tensorflow这两个深度学习框架都支持主流的计算机编程语言C/C++以及Python,所以应对众多的软件从业者,在校学生,都可以且都能比较轻松的走进深度学习的大门,而你需要的,只是一个在你优化你深度学习模型时可以加速深度学习推理的辅助工具,这就是今天爱板网要给大家推荐的全球首款基于USB接口、便携小巧、且能加速深度学习推理的学习、开发、调试验证工具——由Intel推出的Movidius神经计算棒(Neural Compute Stick,为了方便,下文将简称NCS)。
不同于传统观点认为的那样,“深度学习就一定需要高性能的GPU、TPU、FPGA等硬件平台,一定需要高速的网络带宽”,NCS正在打破这种局限,为那些想入门人工智能领域的学生、从业者提供了一种边缘计算的深度学习可行性,而你达成这一切所需要的仅仅是一个支持Linux系统的便携式硬件平台,如市面上的树莓派、Up Board等,再加上一根Movidius神经计算棒即可,当然,要是有摄像头等外设那无疑是锦上添花。铺垫结束,是时候进入正题,来看看Intel的Movidius神经计算棒到底是个怎样的玩意。
Intel Movidius神经计算棒
NCS透入了一股浓浓的Intel风,蓝色主色调,此棒子是在贸泽电子购买的,79美金不含税的价格,并且从目前来看,NCS并没有区分不同国家版本,都是英文版本。
包装盒很简洁,内部配件也简单,就只有一根NCS以及一张简单的上手使用说明。
NCS的做工自然不用说,这么个小玩意售价79美金,再怎么说质量还是有保障的,全铝合金外壳,精致小巧,尺寸为72.5mm X 27mm X 14mm,差不多两根手指大小,机体挺有分量,外观设计也花了一番心思,原本想拆开看看内部电路,无奈试了好几次都没破开这个结构,暂时作罢,留给以后再说。
正面,Movidius的品牌很显眼,这是Intel16年收购的一家从事机器视觉芯片的公司,其Myraid系列VPU以低功耗高性能著称(下文详说),在大疆无人机,谷歌Clips相机上均被采用。
背面
侧边
取下NCS的USB“帽子”,自然的看到了支持USB 3.0 Type-A接口,按照Intel的说法,直接能插在电脑上即可使用,或许你再也找不出比这更方便的方式进行深度学习开发了。
虽然暂时无法拆开NCS一探内部情况,但是从目前的信息来说,我们至少知道NCS可以加速深度学习推理主要依赖于内部的视觉处理单元(Vision Processing Unit) Myriad 2。这里有必要提一下,深度学习的细分领域非常多,而NCS主要的特点是针对深度学习中的图像和视频的处理。
可以简单的看下Myriad 2 SoC内部架构,基于低功耗的28nm工艺制程,内部集成了12个128-Bit SHAVE Vector处理器以及众多硬件加速器、图像/视觉信号处理器,两个32位的RISC处理器,前者用于机器视觉,后者对处理视频和图像非常重要,Myriad 2 SoC支持的一些接口如下:
12 Lanes MIPI,每个Lane支持1.5Gbps数据带宽并且可以配置为CSI-2或者DSI
支持I2C、SPI、I2S、PWM、USB3.0(集成PHY)、SDIO、Ethernet(1Gbit)
Myriad 2具体的性能指标可以以48FPS的帧率同时处理来自12个1300万像素摄像头的数据,换句话说,以60FPS拍摄4K视频是毫无压力的,当然,这是目前很多GPU也都能做到的事,而Myriad 2的优势在于在实现这些功能的前提下保持较低的功耗,相比能够提供同等效果的GPU,Myriad 2的功耗低了最少10倍。所以,如大家所见到的一样,NCS只需要通过电脑上的USB接口供电即可。对于目前市面上火爆的需要有较强图像/视频处理能力且需要电池供电的应用,如服务型机器人、无人机、AR/VR等设备,Myriad 2有着非常大的优势。
上手使用
都说耳听为虚,眼见为实,在基本了解这根神经计算棒的硬件组成后,不妨实际来看看这玩意到底如何使用?易用性如何?实际效果又是如何?
硬件平台搭建:
1根神经计算棒(Intel Movidius Neural Compute Stick)
1个搭载ubuntu16.04系统版本的硬件平台(官方特意强调了树莓派3B,毕竟这是全球使用最广的开源单板计算机,同时也是最具性价比的硬件平台,重要的是让人人都玩得起)
不过,事与愿违,原本笔者是想用树莓派3B配合NCS使用的,无奈手上仅有的一块树莓派3B借出去了,所以暂时先用研扬科技的UP Squared Board代替,说实话,如果不考虑资金预算的话,Up Squared Board+NCS的组合更亮眼,毕竟UP Squared Board搭载USB3.0,与NCS上的USB3.0接口搭配使用更合适,能实现更高的传输速率(USB3.0 5Gbps VS USB2.0高速480Mbps),在模型推理数据很大的情况下,优势显而易见。
软件开发包(很重要,点击【阅读原文】进行下载):
Intel Movidius Neural Compute SDK(NCSDK)
Neural Compute Application Zoo (NC App Zoo)
目前,网上可以找到配套NCS使用的软件开发包主要有上面两个,放在Github上,用户很容易获取到,NCSDK属于官方提供发布的,很权威,里面包含了软件工具、API以及例程等资料,通过对这几个工具以及API的理解可以有效的了解NCS的工作原理;NC App Zoo是一个让用户可以分享自己使用NCS做的一些应用、模型的地方,有兴趣的可以点击上面的链接查看,这里主要讲下NCSDK中的几个重要的工具。
软件工具主要包括了mvNCCompile、mvNCProfile以及mvNCCheck:
mvNCCompile是将Caffe/TF模型转换为NCS可识别的graph文件
mvNCProfile是提供每层的数据用于评估Caffe/TF网络模型在NCS上的运行效率,辅助开发者优化网络模型结构
mvNCCheck是通过在NCS和Caffe/TF上运行网络比较推断的结果
API则是NCS计算神经棒的硬件调用接口,通过训练得到的网络模型可以使用mvNCCompile工具编译为能被NCS识别的graph文件,通过调用API,NCS可以通过USB接口方便的与主机(Up Squared Board、树莓派3B)通信,NCS利用训练好的网络模型计算出图像分析的结果,并传输到主机上,完成推理工作。
值得一提的是,官方提供的API同时支持C/C++以及Python语言,让用户灵活选择自己熟悉的编程语言。另外,也从官方提供的SDK中发现,目前SDK中主要支持Caffe以及Tensorflow两种深度学习框架。
在使用Up Squard Board搭建硬件平台时还有个小插曲,原本想图省事,直接使用Up Squared Board中的Ubilinux系统,不过在安装的时候发现官方提供的SDK不支持这个系统版本(如下图所示),无奈还是按照官方要求老老实实使用指定的Ubuntu 16.04版本。
在Ubuntu16.04系统中,打开命令终端窗口,使用git获取NCSDK(https://github.com/movidius/ncsdk.git),如果初次安装使用Ubuntu 16.04系统,还需要你安装git工具,这里不再啰嗦安装流程了,基本用下面的套路就可。
sudo apt update
sudo apt-get install git
git clone https://github.com/movidius/ncsdk.git
cd ncsdk
make install
make examples
另一个问题,开发工具,不论你是需要学习或者开发基于Caffe或者Tensorflow深度学习框架,都需要安装相应的开发工具,caffe还好,Tensorflow比较麻烦,需要FanQiang工具支持,这些网上都有相应的教程,点到为止。
可以看到,NCS配套的SDK中已经集成了一些网络模型,例如GoogLeNet,AlexNet,SqueezeNet等,可以直接拿来使用,开发者也可以使用自己训练的网络模型,只要这些网络模型与NCS支持的网络层匹配,当然,这要求本身有深度学习模型开发的基础了。
下面就以一个实例来了解下NCS如何加速推理工作的,在我们平时的应用中,也有不少开发者直接采用像树莓派等开源硬件平台套上CNN模型做图像识别等功能,但是会发现占用大量的CPU资源,CPU处于负荷状态且识别过程比较慢,如果使用NCS又会如何呢?笔者随意在百度上搜索了几张动物的图片进行识别测试。
因为网络模型比较多,这里选取了Alexnet的模型做修改。
修改run.py文件中识别图片路径。
第一张图片识别结果:
第二张图片识别结果:
第三张图片识别结果:
第四张图片识别结果:
可以发现,在识别是什么物种的时候还是非常准确的,至少知道了是猫、狗、马、虎,但是在具体是什么物种中的什么类型就难说了。毕竟,即便是一个人,不了解这个物种,你也不知道它具体属于华南虎还是东北虎。其中有一点需要注意的,除了第一张图片属于正面照,其它几张图片都是侧面照,从识别的结果判断也不难发现,侧面照识别的难度要远胜于正面照,当然也可能是样本有限的缘故。不过,这个模型至少应证了一件事,在有NCS加持的情况下,普通计算机在识别图像的时候确实已经超过了人。其它例程在本文就不演示了,之后笔者准备在树莓派上搭载摄像头进行相关测试,到时有缺漏的地方一起补齐。
小结
Intel Movidius神经计算棒(NCS)确实是一个不错的深度学习开发工具,可以帮助开发者分析、调试、验证神经网络,并为深度学习做推理加速,其主要优势在于开发和优化AI的离线应用。UP Squared Board+NCS的组合已经让笔者见识到了深度学习在图像识别领域中的优势,NCS神经计算棒结合Intel提供的NCSDK组合又能让开发者轻松入门AI,一句话,其实入门AI并没有想象的那么难,你欠缺的只是一个平台,后面笔者将继续体验Movidius NCS,并将以树莓派3B+NCS组合亮相,不知又会怎样?