前言
小生专注于软硬件结合领域的IT产品设计开发,AI、物联网什么的都是我关注的。
最近发现了个新玩意儿“Intel神经计算棒”,自然不会放过。
当!当!当!就是下图这玩意儿。
那么问题来了,神经棒这名字起得,到底是什么呢?人工智障吗?来贴一段新鲜热乎的新闻:
英特尔人工智能大会2018年11月14日在北京举行。逾千名AI开发者、研究人员以及英特尔的客户和伙伴齐聚,探讨AI的发展,了解英特尔AI技术组合的最新进展。会上,英特尔发布了英特尔神经计算棒二代(简称英特尔NCS 2),利用该计算棒可以在网络边缘构建更智能的AI算法和计算机视觉原型设备。
英特尔公司全球副总裁兼人工智能产品事业部总经理Naveen Rao发布英特尔神经计算棒二代英特尔NCS 2基于英特尔Movidius Myriad X视觉处理单元(VPU),并得到英特尔 OpenVINO工具包的支持,与上一代神经计算棒相比性能更优,能够以可负担的成本加快深度神经网络推理应用的开发。英特尔NCS 2支持深度神经网络测试、调整和原型制作,可以帮助开发者进入实际应用的量产阶段
里面有几个关键词值得注意:就是这两年非热门的“边缘计算”。人工智能搞得如火如荼,配上边缘计算才是好味道。
继续贴文章,有兴趣的童鞋可以去看原文。
什么是边缘计算
在网络边缘产生的数据正在逐步增加,如果我们能够在网络的边缘结点去处理、分析数据,那么这种计算模型会更高效。许多新的计算模型正在不断的提出,因为我们发现随着物联网的发展,云计算并不总是那么高效的。接下来文章中将会列出一些原因来证明为什么边缘计算能够比云计算更高效,更优秀。
为什么需要边缘计算
云服务的推动:云中心具有强大的处理性能,能够处理海量的数据。但是,将海量的数据传送到云中心成了一个难题。云计算模型的系统性能瓶颈在于网络带宽的有限性,传送海量数据需要一定的时间,云中心处理数据也需要一定的时间,这就会加大请求响应时间,用户体验极差。
物联网的推动:现在几乎所有的电子设备都可以连接到互联网,这些电子设备会后产生海量的数据。传统的云计算模型并不能及时有效的处理这些数据,在边缘结点处理这些数据将会带来极小的响应时间、减轻网络负载、保证用户数据的私密性。
终端设备的角色转变:终端设备大部分时间都在扮演数据消费者的角色,比如使用智能手机观看爱奇艺、刷抖音等。然而,现在智能手机让终端设备也有了生产数据的能力,比如在淘宝购买东西,在百度里搜索内容这些都是终端节点产生的数据。
下面两幅图,图1是传统云计算模型下的范式,最左侧是服务提供者来提供数据,上传到云中心,终端客户发送请求到云中心,云中心响应相关请求并发送数据给终端客户。终端客户始终是消费者的角色。
图2是现在物联网快速发展下的边缘计算范式。边缘结点(包括智能家电、手机、平板等)产生数据,上传到云中心,服务提供商也产生数据上传到云中心。边缘结点发送请求到云中心,云中心返还相关数据给边缘结点。
什么是边缘计算
边缘计算指的是在网络边缘结点来处理、分析数据。这里,我们给出边缘结点的定义,边缘结点指的就是在数据产生源头和云中心之间任一具有计算资源和网络资源的结点。比如,手机就是人与云中心之间的边缘结点,网关是智能家居和云中心之间的边缘结点。在理想环境中,边缘计算指的就是在数据产生源附近分析、处理数据,没有数据的流转,进而减少网络流量和响应时间。
边缘计算的优点
在人脸识别领域,响应时间由900ms减少为169ms
把部分计算任务从云端卸载到边缘之后,整个系统对能源的消耗减少了30%-40%。
数据在整合、迁移等方面可以减少20倍的时间。
---------------------
作者:逃离地球的小小呆
来源:CSDN
原文:https://blog.csdn.net/gui951753/article/details/80952907
版权声明:本文为博主原创文章,转载请附上博文链接!
对比显卡机、数据中心机、甚至核显,NCS确实性能不如,但是要想NCS是为ARM架构的嵌入式系统提供AI算力支持的。
所以NCS的关键词是:低功耗、低成本、中等性能。
他最好的伙伴是树莓派这类的嵌入式Linux设备。被设置在边缘节点的大面积铺设的终端设备。
总之就是:可离线、更自主、更快、更多的想象空间。
很多带机器视觉和人工智能的终端设备构建的物联网生态可以基于此成型。
要点说明:
首先来解释几个要点,方便想解决问题查询到本文的朋友们:
1. Modivius SDK已经被OpenVINO框架替换了,只要安装好OpenVINO你就可以为所欲为了
2. 虽然系出同门,都是Linux,做AI研发,想珍惜生命的话请使用Ubuntu。CentOS、RedHat都不行,Debian也差点。小生都有这些系统在生成环境运行的主机。也曾经想在CentOS上安装TF和Caffe框架,在各种修改编译脚本,源码编译依赖的情况下,过关斩将,冲破重重难关最终放弃。结果换Ubuntu一键搞定。主要还是软件源和安装包的区别,在Ubuntu那是Well Prepared。所以,少年郎听一句劝:“学AI请用Ubuntu”。
3. 先进技术资料少请谷歌,学好英语很重要。
4. Intel官网上说OpenVINO只支持Ubuntu 16.04 LTS是不对的,能解决依赖都可以,我就是拿18.04来安装的。比较新的OS版本能省很多事。
5. OpenVINO的作用是优化Tensorflow、Caffeine、MxNet训练好的模型,生成专用的模型格式文件放在Intel的各种终端上无缝运行。所以不是用来学习“深度学习”的,是用来应用的。
6. 学习“深度学习”的话,Python不重要,会用就好下。数学分析一定要会,尤其是矩阵、矢量、场、梯度、卷积、算子等基本的数分知识。千万别被广告给骗了,以为学会Python就好了,那是连门都没入。没学过数分的朋友们请直接放弃,你还有大好的人生。
7. 本文默认您已掌握 Python、Anaconda的使用,已经Tensorflow、Caffe等框架的安装。可以用pip安装对应依赖库
缩写说明
NCS2
Neural Compute Stick 2 神经计算棒2代
安装步骤
安装自然要遵守官方的说明:Intel神经计算棒官网
步骤 1. 买买买
多实诚的介绍,如果你还没有计算棒的话,可以通过里面给出的链接来购买。我就不做广告了,又没收广告费。
另外再说明下:OpenVINO框架不仅仅可以运行在NCS2上,还可以运行在据说很高端的Arria FPGA上,以及CUDA上、Intel的Iris显卡上。甚至是酷睿的CPU上。所以只要有满足以上条件的硬件,其实都可以用来测试OpenVINO,不需要额外购买。
想在CPU上的同学再注意一下:官方说明只有在第6代到第8代的酷睿CPU上可以支持,就是Sky Lake、 Kaby Lake、Wisky Lake架构的CPU。再简单点就是 i5、i7 6XXX-8XXX的U。主要是要支持SSE4.2、AVX2等性能提升很大的指令集。
当然啦,相对于配齐这些设备,在老PC上加个NCS2成本更低。
步骤 2. 安装Toolkit
Toolkit下载链接:Intel® Distribution of OpenVINO™ toolkit,
需要填写一些认证信息后就到了下载页。里面有三个选择: for Window、 for Linux 、with FPGA support for Linux;
其实呢,选项基本是蒙你的,大小都一样 3.4G。那个FPGA的支持我觉得暂(gen)时(ben)用不到,是给数据中心的Arria FPGA提供编译环境的,单单这项安装后的体积要占掉5G,一张Arria 10X要5w+的价格,还是不要考虑了。
国内的环境,下载整个安装包比网络安装模式更靠谱。我选了R5版,暂时不要用最新的,因为都是坑,我才不做小白鼠,出了问题都地方问。
步骤 3. 安装
第二部下载下来的文件丢在这里:
cd ~/Downloads tar xvf l_openvino_toolkit_
.tgz cd l_openvino_toolkit_
./install_cv_sdk_dependencies.sh
./install_GUI.sh
解压安装包,先执行cv的依赖项的安装,再通过GUI界面执行OpenVINO的安装。
BUG Note :注意安装脚本实际有一些问题,需要做修正。尤其是用sudo安装的时候,某几个库被安装到了root文件夹下造成找不到。
比如说,我碰到的问题就是protobuf 3.6.1说依赖找不到,最后用了 pip install --user protobuf==3.6.1 才通过。
然后通过GUI安装主体:
步骤3. 配置NCS的USB驱动
就是写一个USB驱动文件注册给系统,操作如下:
cd ~/Downloads
cat <
97-myriad-usbboot.rules SUBSYSTEM=="usb", ATTRS{idProduct}=="2150", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="2485", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idProduct}=="f63b", ATTRS{idVendor}=="03e7", GROUP="users", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
EOF
sudo cp 97-myriad-usbboot.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules3sudo udevadm trigger4sudo ldconfig5rm 97-usbboot.rules
Downloads文件夹下多了个 97-myriad-usbboot.rules的文件,内容如下:
安装在系统对应的文件夹( /etc/udev/rules.d/ )下:
这样插入NCS2的时候,系统就能正常识别了。
步骤4. 测试安装
执行一下语句,测试安装是否成功:
先安装运行依赖、模型
cd ~/intel/computer_vision_sdk/deployment_tools/model_optimizer/install_prerequisites/
./install_prerequisites.sh
再运行DEMO例程
cd ~/intel/computer_vision_sdk/deployment_tools/demo
./demo_squeezenet_download_convert_run.sh -d MYRIAD
注意这里的-d参数, MYRIAD才是NCS2的新片架构名称,所以目标设备是 MYRIAD,编译的文件会输出到FP16文件夹下。
其他的-d参数可以是CPU和FPGA
运行结果
如果你出现了以下结果说明成功了:
识别结果:跑车,置信度0.83,耗时14.82ms,吞吐量67FPS,性能那是相当棒。
为了验证是不是官方的跑分作假,我又增加了个测试, 这张图片大小达到了2292*1445,比1080p还大,基本可以认为是高清图片的处理了:
识别为山地车,置信度0.75,耗时15ms,吞吐量 65.3
可以看到性能还不错,仅仅是延迟了一点点。
安装完成!
没有坑?!这么简单!
才怪嘞,问题大了。我就来说了大家都可能碰到的吧。
因为OpenVINO说自己不仅仅是ModiviusSDK,而是视频输入、处理、输出都带的全家桶。然而自己只做了处理部分,输入输出用的啥呢。
搞CV嘛,OpenCV舍我其谁。
我们再去OpenCV官网看一下:
看看发布时间,正式OpenVINO的发布时间,其中赫然写着含有来自VINO的提交,果然有PY交易!
问题出就出在这个OpenCV上。VINO安装的时候默认使用的是内置的定制版OpenCV(4.0.1-openVino)。
这个版本是提前编译好的。有没有记得我说过VINO是可以CPU运行的,而且必须是6-8代的酷睿,就是因为用到了SSE4.2的指令集。
如果使用这个内置的OpenCV的话,会报错 :
This OpenCV build doesn't support current CPU/HW configuration
参考 OpenCV上的Issue
我用了一台旧机器,所以CPU不支持POPCNT和SSE4_2报错。这么说OpenVINO不能用了!
那是不是就要买新机器了呢?嗯我差点就去买了!
后来多方查找资料,发现安装GUI的时候的一句提示:You can set OpenCV_DIR to use your OpenCV。
果然还是要编译自己的OpenCV!
好,下载源码,用cmake配置安装。
注意配置中勾选 BUILD_PNG, BUILD_JPEF, BUILD_TIFF,因为这几个库安装的位置不在/usr/lib,OpenCV找不到,并且内建库可以用jpeg-turbo等。因为后面运行Demo的时候还有个no rule to make target "libopencv_imgcodecs.so" 的坑
在这里我使用cmake-gui,省事儿~
然后make & make install 完事儿!
OpenCV编译好了!
还差一个脚本修改就OK了!
修改OpenVINO运行环境脚本
原来在运行之前,会先调用 intel/computer_vision_sdk/bin/setupvars.sh的脚本配置环境。然而……
脚本有错!!!
用VIM打开,按如下修改
然后把内置的OpenCV重命名,建立一个软连接"$INSTALLDIR/opencv/share/OpenCV"到OpenCV的build目录。
然后运行Demo就OK了!
做了CV这么些年,整来整去都是OpenCV的问题,也见怪不怪了。
如果朋友们还有什么问题,欢迎邮箱来询问:[email protected]。
也欢迎业务洽谈!
下一个节目就是用树莓派跑上NCS2