转载需注明出处:https://www.codelast.com/

本文是上一篇文章的续文。
微软于2017年6月底发布了一个主要用于嵌入式系统(例如,树莓派,ARM Cortex-M0等)的机器学习库ELLEmbedded Learning Library嵌入式学习库)。
要在树莓派上使用pre-trained的模型,我们先要在PC上对其进行测试,这个测试说白了就是运行一些Python的demo程序看它们是否能正常工作。而上一篇文章,正是介绍了在Ubuntu PC上的准备工作——如果没有那些准备工作,你连测试的基础条件都不具备。
注:本文的所有操作,都是在台式机上运行的。

  • 选择模型

至此,我们终于到模型这一步了。
由于训练机器学习模型的时间通常较长,所以,训练模型这个工作肯定不能放在树莓派上干。我们可以使用别人已经预先训练好的模型来节省时间,ELL文档里推荐了两个:CNTKDarknet
本文在PC上测试ELL时,将主要使用CNTK;而在树莓派上测试ELL时,出于运行速度等种种原因考虑,不得不使用Darknet(和Darknet相比,CNTK不够轻量级)

  • 安装CNTK相关的软件

在前面的conda环境下,安装CNTK的Python package:

pip install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp36-cp36m-linux_x86_64.whl

输出类似于:

Collecting cntk==2.0 from https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp36-cp36m-linux_x86_64.whl
  Downloading https://cntk.ai/PythonWheel/CPU-Only/cntk-2.0-cp36-cp36m-linux_x86_64.whl (109.5MB)
......
Successfully installed cntk-2.0

这一步耗时较长,耐心等待吧。
然后回到ELL代码根目录,切换到gettingStarted目录并下载CNTK的ImageNet推断模型:

cd build/tutorials/vision/gettingStarted
curl -O https://www.cntk.ai/Models/Caffe_Converted/VGG16_ImageNet_Caffe.model

  • 测试模型

下面可以测试一下模型了:

(py36) [codelast@ gettingStarted]$ python cntkDemo.py

如果此时报错:

Traceback (most recent call last):
  File "cntkDemo.py", line 4, in <module>
    import cv2
ImportError: /home/codelast/.miniconda3/envs/py36/lib/python3.6/site-packages/../../libopencv_dnn.so.3.2: undefined symbol: openblas_get_num_threads
那么说明在miniconda环境下没有装openblas,安装方法:

conda install openblas

然后再试。
文章来源:https://www.codelast.com/
如果遇到“ImportError: libmpi_cxx.so.1: cannot open shared object file: No such file or directory”这种错误,说明系统里没有安装Open MPI开发包,理论上应该用下面的命令安装:

sudo apt-get install libopenmpi-dev
但是,当你安装好之后,重新运行 cntkDemo.py,不出意外的话又会遇到“ImportError: libmpi.so.12: cannot open shared object file: No such file or directory”的错误,这其实是Open MPI版本太低导致的,解决方案请看这个链接

解决了那么那么多的问题,现在总可以了吧?再次执行 cntkDemo.py,等待它运行了一段时间之后,一开始看上去还挺正常的,执行到后面又出错了:

...Finished constructing ELL layers.
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /feedstock_root/build_artefacts/opencv_1490907195496/work/opencv-3.2.0/modules/highgui/src/window.cpp, line 583
Traceback (most recent call last):
  File "cntkDemo.py", line 68, in <module>
    main()
  File "cntkDemo.py", line 61, in main
    cv2.imshow('frame', frameToShow)
......
这个问题,就是我上一篇文章里所说的,按ELL官方文档里的方法去安装OpenCV会导致的问题,在各种坑中,这是最坑爹的一个了。这个问题的解决办法请看这个链接
文章来源:https://www.codelast.com/

此时再重新执行 cntkDemo.py,确实不报错了,但是,执行到弹出GUI窗口显示摄像头拍摄的视频流的代码的时候,程序进入假死状态,不能执行后续逻辑。此时我的内心是崩溃的。本着一定要把它搞定的决心,我又做了一些尝试,使得我能够跑起来这个demo,具体请看这篇文章

当在PC上成功地跑起来了CNTK的demo之后,我们就可以认为这个model是work的,然后就要准备把它弄到树莓派上去跑了。

[原创] 在树莓派3上使用微软ELL嵌入式学习库(2)

发表评论

电子邮件地址不会被公开。 必填项已用*标注