本篇文章由 VeriMake 旧版论坛中备份出的原帖的 Markdown 源码生成
原帖标题为:树莓派上铺设及使用嵌入式学习库(Embedded Learning Library)
原帖网址为:https://verimake.com/topics/61 (旧版论坛网址,已失效)
原帖作者为:陈小光(旧版论坛 id = 14,注册于 2017-04-08 16:52:28)
原帖由作者初次发表于 2017-08-26 16:17:03,最后编辑于 2017-08-26 16:17:03(编辑时间可能不准确)
截至 2021-12-18 14:27:30 备份数据库时,原帖已获得 2086 次浏览、1 个点赞、0 条回复
Microsoft公司近日发布了一个嵌入式学习库(Embedded Learning Library,以下均简称 ELL),其目的是微软一直想缩小机器学习模型,使它们能在各种设备的低能耗芯片上运行,这当中就包括用在树莓派上开发板上的预训练图像识别模型。得益于简化的机器学习模型,我们身边的摄像头、家用电器不用联网,也能一定程度的智能化。这也就是微软CEO纳德拉在今年Build开发者大会上所强调的边缘计算。
简介:Microsoft公司的ELL以牺牲部分正确性及计算速度为代价,精简机器学习模型,而将本来庞大的云端计算任务转移至性能相对低下的边缘嵌入式设备上,以实现低效设备断离网络的边缘计算。此为github上的官方指导文档和源码:https://github.com/Microsoft/ELL
敲黑板:需要强调的是,由于ELL发布时日较短,修改频率高且相对不稳定,网上各类教程文档(在此感谢前辈们的奉献,本教程只是一定程度上的修补和更新,所参考资料均在文末列出)大多存在不同程度的时效性失效问题或步骤混乱错误。虽文中流程笔者均在8月24日重装系统并亲测过,但依旧存在时效性及适配性问题,还请视具体情况应变。若读者在实际操作中发现错误或更新,亦可联系笔者,定及时听取批评并更改。
图为将ELL架设在树莓派上,并在脱网的本地设备计算由摄像头传回的图片从而返回结果:
本项目工作流程
前期准备
PC(Ubuntu 14.04 或 16.04)
树莓派 3B(ARM7l)
摄像头(排线或usb连接皆可)
PC工作
自此开始,均在terminal上工作,建议使用管理员权限运行所有命令。
下列命令是从Github上使用git下载源码。git 工具包通常默认安装在Ubuntu系统上,如果没有,打开terminal终端安装。
sudo apt-get install git
git clone https://github.com/Microsoft/ELL.git
我建议使用apt - get 包管理工具来下载和安装软件环境。首先,确保apt - get是最新的。接着按照顺序安装gcc、cmake(笔者版本3.1,更高的版本向下兼容也可以)、LLVM、libedit、zlib
sudo apt-get -y update
sudo apt-get install -y gcc cmake
apt-cache show llvm-dev
sudo apt-get install -y wget
sudo apt-get install -y libedit-dev
sudo apt-get install zlibc zlib1g zlib1g-dev
你还需要llvm - 3.9的dev版本。使用apt-get检查并安装它。
wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-3.9 main"
sudo apt-get -y update
sudo apt-get install -y llvm-3.9-dev
接着是在PC上安装python3.N版本(注:通常提倡用Miniconda来装,但PC和树莓派所用方式不同,且python版本也不一样,笔者PC的是python3.6,而树莓派是3.5,但不会有影响。树莓派的具体安装方法随后会提到)
Miniconda官网地址:https://conda.io/miniconda.html
选择适配你PC系统的版本,然后下载解压,默认目录一般为user/Downloads。之后等待及格,Miniconda 解压安装时会默认配置python3.6,同时 yes+enter 同意系统自动添加全局变量。(注:conda 命令在第一次安装时重启终端生效)
cd ~
cd Downloads/
chmod +x 文件名
./文件名
重启终端后使用conda命令安装Opencv及相关组件(个人对Opencv的适配性存疑,不同电脑似乎有不同问题,笔者在其他教程发现的相关错误在个人电脑上无法重现,暂时默认命令可行)
conda install libgtk2.0-dev pkg-config
conda install curl
conda install numpy
conda install -c conda-forge opencv
配置python沙盒环境
conda create -n py36 anaconda python=3
source activate py36
conda install libgcc
如以上命令执行正常,user左侧会出现“py36”字样,至此PC软件环境准备工作完成。
进入文初git clone的源码文件ELL的根目录,执行编译命令
mkdir build
cd build
cmake ..
make _ELL_python
如最后出现以下字样即为模型正常工作。如果报错,根据错误报告提示进而操作。
evaluators_test.test -- TBD
evaluators_test passed
Testing ModelBuilder ... Passed
modelbuilder_test passed
PC上的最后工作,为树莓派编译代码(经测试推荐使用轻量级的Darknet)
cd build/tutorials/vision/gettingStarted
curl -O https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/darknet.cfg
curl -O https://pjreddie.com/media/files/darknet.weights
连接事先准备的摄像头,并运行测试文件
python darknetDemo.py
如果画面出现摄像头捕捉图像即为成功,至此,PC上的工作全部结束。
工作环境:树莓派
之前在Ubuntu PC上的ELL文件已经编译出了一个 compiled_darknetReference_pi3 目录,现在把它拷贝到树莓派上。之后要做的,就是用这个目录下的文件,编译出一个Python module(_darknetReference.so),然后就可以在树莓派上跑ELL的image classification demo了。
在编译这个Python module之前,有一些准备工作要做——安装必需的软件。
运行前需要在树莓派上安装和Opencv(3.1.0)、Python(3.5)等相关组件。如遇下载速度过慢,可尝试更换镜像。推荐北京的源,速度较快。
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot
sudo apt-get install build-essential git cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
cd ~
git clone https://github.com/Itseez/opencv.git
cd opencv
git checkout 3.1.0
cd ~
git clone https://github.com/Itseez/opencv_contrib.git
cd opencv_contrib
git checkout 3.1.0
Opencv组件已下载完毕,但仍需安装Python并接入Opencv,否则即便有了 Python 仍无法导入cv2等模块。
sudo apt-get install python3-dev
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
pip install numpy
cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
make -j4
#上步对供电设备要求较高,请更换合适电源。如果报错,输入make clean后再make重新编译。
sudo make install
sudo ldconfig
这时我们就要用到从PC上拷贝过来的文件了
cd compiled_darknetReference_pi3
mkdir build
cd build
cmake ..
make
如果你足够幸运,那么到这么工作就结束了,让我们运行程序,对身边的物体试试吧
cd compiled_darknetReference_pi3
#python后面最好加上你安装的版本号,比如python3.5,因为系统自带的其他版本python默认不会有cv2模块
python compiledDarknetDemo.py
That is all ! 拿起摄像头对准你身旁的东西试一试吧!
参考文献(不分先后多少):
https://raspberrypi.stackexchange.com/questions/69169/how-to-install-opencv-on-raspberry-pi-3-in-raspbian-jessie
https://www.codelast.com/
https://www.saluzi.com/t/embedded-learning-library-ell/32919
https://github.com/Microsoft/ELL.git