Jade Dungeon

树莓派安装 Intel Movidius 神经元计算棒2代

编译安装

本次使用的版本是2018.5.445,安装请在下面链接中查看最新的安装包版本: https://software.intel.com/en-us/articles/OpenVINO-Install-RaspberryPI

下载OpenVINO toolkit for Raspbian安装包:

https://download.01.org/openvinotoolkit/2018_R5/packages/l_openvino_toolkit_ie_p_2018.5.445.tgz

安装中需要cmake,执行:

sudo apt-get install cmake

配置路径与环境。 执行以下命令,会自动对setupvars.sh文件做修改

sed -i "s|<INSTALLDIR>|$(pwd)/inference_engine_vpu_arm|" inference_engine_vpu_arm/bin/setupvars.sh

再配置环境,有两种做法

一种是临时的,只对该次的窗口有效

source inference_engine_vpu_arm/bin/setupvars.sh

还有永久性的,打开.bashrc文件,再最后一行添加一句:

source /home/pi/Downloads/inference_engine_vpu_arm/bin/setupvars.sh

保存,再打开一个新的终端,如果出现:

[setupvars.sh] OpenVINO environment initialized

就表示成功了

添加USB规则

将当前Linux用户添加到users组:

sudo usermod -a -G users "$(whoami)"

注:这里要说的是我们现在是root用户,如果打开新窗口的话起始用户是pi, 所以出现:

[setupvars.sh] OpenVINO environment initialized

是对于pi用户来说的,如果在新窗口中用root执行程序,其实并没有成功加载setupvars.sh 需要自己再执行一遍:

source /home/pi/Downloads/inference_engine_vpu_arm/bin/setupvars.sh

才能给root用户配置好。

接下来配置USB规则,执行:

sh inference_engine_vpu_arm/install_dependencies/install_NCS_udev_rules.sh

如果显示下面的内容表示安装成功了:

[install_NCS_udev_rules.sh] udev rules installed

demo测试验证安装是否成功

构建和运行对象检测示例,这个例子是执行人脸检测的。 转到包含示例源代码的文件夹:

cd inference_engine_vpu_arm/deployment_tools/inference_engine/samples
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a"
make -j2 object_detection_sample_ssd

编译完成后下载网络和权重文件:

wget --no-check-certificate https://download.01.org/openvinotoolkit/2018_R4/open_model_zoo/face-detection-adas-0001/FP16/face-detection-adas-0001.bin

wget --no-check-certificate https://download.01.org/openvinotoolkit/2018_R4/open_model_zoo/face-detection-adas-0001/FP16/face-detection-adas-0001.xml

我已经下载好了:

../../code/intel-ncs/

然后自己在网上找一张人脸的图片,执行

./armv7l/Release/object_detection_sample_ssd   \
	-m face-detection-adas-0001.xml -d MYRIAD    \
	-i <path_to_image>

<path_to_image>是人脸图片的绝对路径

如果运行成功,会在build文件夹下输出一副out_0.bmp图片:

到这里表示计算棒运行成功!

Opencv + python api调用方法

有时候我们是在python下做开发,这里也有提供了Opencv + python的运行例子 新建一个文件夹,先建立一个face_detection.py文件,写入:

import cv2 as cv
# Load the model 
net = cv.dnn.readNet('face-detection-adas-0001.xml', 'face-detection-adas-0001.bin') 
# Specify target device 
net.setPreferableTarget(cv.dnn.DNN_TARGET_MYRIAD)
# Read an image 
frame = cv.imread('/path/to/image')
# Prepare input blob and perform an inference 
blob = cv.dnn.blobFromImage(frame, size=(672, 384), ddepth=cv.CV_8U) net.setInput(blob) 
out = net.forward()
# Draw detected faces on the frame 
for detection in out.reshape(-1, 7): 
    confidence = float(detection[2]) 
    xmin = int(detection[3] * frame.shape[1]) 
    ymin = int(detection[4] * frame.shape[0]) 
    xmax = int(detection[5] * frame.shape[1]) 
    ymax = int(detection[6] * frame.shape[0])
    if confidence > 0.5:
        cv.rectangle(frame, (xmin, ymin), (xmax, ymax), color=(0, 255, 0))
# Save the frame to an image file 
cv.imwrite('out.png', frame)

在文件夹中放入刚刚我们下载的那两个文件: face-detection-adas-0001.binface-detection-adas-0001.xml 还有用于检测用的脸的图片face.jpeg

此时是在root权限下,我们执行:

source /home/pi/Downloads/inference_engine_vpu_arm/bin/setupvars.sh

然后执行:

python3 face_detection.py

程序成功运行没报错,则表示运行成功,然后我们会在文件夹下看见输出结果,检测成功。

其他踩过的坑

我用的是豆瓣的镜像,速度还可以,当然你也可以根据自己的喜好自己选清华的或者中科大的。 要点5:有很多内容需要从github下载,github没有被墙,但是网络很不稳定,暂时没有好的加速办法,通常只要能够连接成功,速度还是不错的,连接不成功的原因极有可能是响应时间很容易超过200+ms,解决的唯一办法就是。。。多试几次。。。。。。

下面就是详细的踩坑经过,有一些地方可能没有那么精确但是大致意思是没错的,我实在是没有勇气和精力再来一次,把错误都截图下来,原谅我<( ̄_ ̄)> part 1:./install.sh 首先,帮助最大的是这两篇博客: http://www.mamicode.com/info-detail-2315616.html https://software.intel.com/zh-cn/articles/how-to-deploy-tensorflow-and-caffe-for-intel-hardware-platform-into-movidius-ncs-sdk 有几个关键点,首先是如果需要GPU支持,则要先安装CUDA,这个相对容易,百度一下就行; 其次是tensorflow,最好用1.3.0,CPU版本或者GPU都可以;在树莓派上尝试1.9.0,死活不行,尤其是numpy1.5.0,不知道为什么; 最后是caffe,caffe和movidius都需要opencv,movidius的要求是3.4.1以上,opencv的安装也是相当复杂,其实最主要的是有一个ippicv并行计算包需要事先下载下来,由于被墙的关系,如果不提前下,很容易死在这一步,这个问题解决了的话就容易多了,直接cmake和make就行,有教程; 重点来了,这段时间主要就忙在折腾caffe上了,在Windows上从来没有安装成功过,ubuntu上之前也只是用Python版的,用pip install安装的,这次装movidius把我折腾够呛,显示git clone失败,自己下了个caffe放在/opt/movidius里,参考2的做法,结果死活编译不过去,一直有一个错误: undefined reference to `GOMP_parallel@GOMP_4.0’ 上网查,得到一个比较可靠的说法:是因为anaconda在PATH中,导致被连接到anaconda的GCC而不是系统的GCC(https://stackoverflow.com/questions/40322301/compile-opencv-3-on-ubuntu-16-04-linking-error-usr-lib-x86-64-linux-gnu-libsox),然后按照他的说法把~/.bashrc中的export注释掉,重启(为了移除环境变量,查看环境变量用echo $PATH),重启之后一看anaconda的环境变量没了,重新执行./install.sh,坑爹的是仍然死在同一个地方(这个地方可能是因为有cmakecache,应该把/opt/movidius/caffe/build里的东西都删了重编),我直接下了个cmake-gui,用gui进行了config和generate,重新./install.sh,成功了!

part 2: make examples 注意:下面提到的Python都是python3.5版本。 为了验证是否成功,参照官网的指示,在/root/movidius/ncsdk-1.12.00.01文件夹里新开一个终端terminal,输入make example看效果,结果果不其然+妥妥的出问题了! 先是python import mvnc出错,用which python看了一下,发现默认Python是2.7,这个问题应该不大,出错信息前提示用的是3.5,再看which python3,发现是anaconda里的python3,回忆一下,似乎我把~/.bashrc中的export anaconda到PATH那一行注释取消了并且进行了重启,于是重新打开bashrc注释掉anaconda,重启,还是有问题,但是问题不一样了(上一步安装的时候出问题就是anaconda的问题,也就是把anaconda路径移除之后清理build文件夹重新编译就可以,不需要cmake-gui),提示import caffe找不到caffe,打开python3,import caffe果然不行,思考问题所在:首先,这个caffe是自己编译出来的,每个步骤都执行成功了,为了以防万一,按照某个博客的说法,万一是没执行make caffe导致的呢?进到caffe的build文件夹,直接make caffe,成功了,并且build同级目录还有python文件夹,进python文件夹,打开python3,import caffe,成功,说明应该是路径的问题,这个python caffe的路径不在python的PYTHONPATH中,打开bashrc,最后一行是有python路径的export的,但是仔细一看,这一行上面还有一行caffe的export,是~目录里的caffe,打开这个文件夹果然有一个caffe,进caffe/python,进入python用import caffe试了一下,错误是一样的,问题就是这个没错了,可能是别人用这个电脑的时候编译了一个caffe但是没成功,果断把bashrc里的对应路径删除,重启,重新make examples,新问题出现了,连接raw.githubxxxx(忘记后面的内容了,就是github的对象存储之类的)失败,先上github搜索对应的项目,找到url指明的文件是否存在,验证之后文件都是存在的,ping这个域名和ip都是可以通的,只不过响应时间很长,200多ms,可见出错的提示bad gateway没有骗我,就是网关太差,这没关系,多试几次就行了,经过重复执行make命令,该下载的终于都下完了,caffe的可以正常运行,传输数据之后预测的时间还是能够接受的,100ms到40ms之间,根据网络大小有变化。 但是后面到tensorflow又出问题了,提示tf的运行时加载失败,我的tf是1.9,pip3 list看了一下,发现我还装了tf1.10GPU版本,进入python,import tensorflow,果然提示运行时加载失败,不管他,先把gpu版本的卸载了,再次进入python,import成功,好,重新make examples,还是有问题,提示没有 ‘tensorflow.contrib.slim’ 这个模块还是什么,还是老办法,进python,把出错的import执行一遍,果然是不对的,上网找答案,结果是说可能是版本太老,果断卸载1.9,自动pip3 install tensorflow,是1.10的,在进python执行import,ok了,继续make examples,还有bad gateway的问题,老样子,多执行几次,终于把所有的文件下载完毕并且执行完毕了,movidius神经计算棒算是能用了,接下来就是怎么用的问题了。按照官方的说法,只需要对模型进行一个转换,然后用mvnc模块就能自动使用这个棒子,马上动手试试先!