目录
装32位系统
距离安装系统,具体细节已经记不清。需要一张TF卡,一个读卡器,在raspberry官网上下载官方desktop版镜像,TF卡格式化后将镜像载入卡中,需要在卡中写一个ssh文件便于之后用ssh在电脑上连接树莓派。
搜了一个文章,感觉很靠谱,读者可自行查阅参考:
git clone-U盘
在树莓派上部署机器学习柠檬分类示例,需要在其上下载paddle lite及其他文件。Paddle lite是百度一个轻量化的推理库,读者可在百度Paddle平台的官方GitHub目录下载所需版本:
https://github.com/PaddlePaddle/Paddle-Lite/releases/
uname -a //用来查询系统位数
我们可以在github下载好所需版本,将我们需要的文件夹(这里是cxx)放在树莓派的某一目录下(需和其他文件夹在同一目录下以便运行)。
我们也可以使用一条命令git clone直接下载链接里的文件:
git clone https://github.com/hang245141253/lemon.git
在尝试部署的过程中,git clone命令执行的时间很长,于是我们选择在电脑下载好后直接用U盘拷到树莓派的目录下。下图展示了文件与文件夹的从属关系:
权限及改密码
在将U盘中的文件复制到树莓派的目录中时,系统提示权限不够,要求输入密码来执行操作,然而距离安装系统已有一个月,我和老师都不记得我们是否设置过密码,于是我们尝试修改密码以获得权限。
修改树莓派用户密码的操作:
-将树莓派关机后取出sd卡,用读卡器插入电脑,在目录下打开cmdline.txt文件,在所有内容的末尾添加 init=/bin/sh, 确保与所有内容处于同一行。
-将sd卡插入树莓派,开机,显示器界面会有一个闪烁的横线,是在提示我们可以进行接下来的操作。
-输入以下内容
mount -rw -o remount / //然后回车,输入下面内容
passwd pi //注意,这里写pi意为修改pi用户的密码,同理可写root即修改root用户的密码。
-界面会让你设置新密码,写的时候不会显示密码内容,心中有数即可
passwd pi Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully-出现以上最后一句意味着密码设置好了。
-执行以下内容来同步并执行初始化
sync exec /sbin/init-接下来树莓派就自动关机了,断电,取出sd卡用读卡器插入电脑,将cmdline.txt文件之前写入的init=/bin/sh删除掉,然后再把sd卡放入树莓派开机,密码就设置好了,修改了哪个用户的密码,登陆的时候就写哪个用户。
root和其他用户
在上一步修改密码的过程中,经过一系列无知的操作,没有成功修改pi用户的密码,反而进入了root账户的界面,与老师交流后得知用root账户进行linux的学习会比较危险,因为root用户相比普通用户有更高的权限,在不小心更改了高级配置的情况下的操作是新手很难还原的,于是我们新建了另一个用户xnn用于学习。
树莓派新建用户
su -
useradd -m -s /bin/bash xnn //新建了一个用户xnn
passwd xnn //修改用户xnn的密码
接下来给予用户sudo权限
su root //切换到root用户
visudo //打开root配置文件
找到 root ALL=(ALL:ALL) ALL
紧接着写一行 xnn ALL=(ALL:ALL) ALL 然后保存退出即可
安装cmake opencv
C++准备环境:
主要安装OpenCV3.2.0(推荐3.2)与CMake3.10sudo apt-get update sudo apt-get install gcc g++ make wget unzip libopencv-dev pkg-config wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz tar -zxvf cmake-3.10.3.tar.gz cd cmake-3.10.3 ./configure make sudo make install
以上代码运行需要半个小时及以上,时间不充足者视情况再开始。
具体Cmake是什么还不了解,以及cmakelist文件的语法规则,仍需学习。
运行柠檬分类项目
将文件夹按前文放在树莓派目录下后,进入code目录,运行两个sh文件,即可直接得到结果。
cd code //进入code文件夹,里面有images,models,cmakelists.txt,cmake.sh,labels.txt,run.sh,main.cc
sh cmake.sh //编译,每次main.cc或其他文件内容有改动,都需要重新编译
sh run.sh //执行,预测分类结果
迁移表情识别项目
在柠檬分类的基础上对代码进行几点改动,即可运行之前我们在aistudio上主攻的表情识别项目。
这是code文件夹:
改动有以下几点:
images文件夹选择我们测试数据集里的若干个表情替换掉之前的柠檬照片,并各自命好名字。
models文件夹删除之前的模型框架及模型参数以及用于推理部署的静态nb模型,分别替换为表情识别的三个文件。
cmake.sh文件,选择适用的raspbery3B推理库,上面一行注释掉。
labels.txt文件,写入我们的目标分类结果。
main.cc文件中,替换为我们数据库的均值和标准差。
在运行时,报错数据没有对齐,这里模型的输入时256*256的图片,于是在resize这里把他改为256。
run.sh文件,同样把它改为Raspberry3B版本,执行预测的图片的名字替换成images文件夹里对应图片的名字。
至此,执行 sh cmake.sh, sh run.sh,得到运行结果。
相较于这个模型在aistudio上运行,树莓派上运行的结果会有上面这一张的预测不准确,考虑可能是opt工具对模型进行裁剪优化时影响了模型的准确度。接下来需要做的工作有数据增强以及添加一个人脸识别模型,毕竟使用摄像头时,比数据集多了背景和色彩的影响。
总结
经过这两天的部署实操,对linux增加了一些了解,同样对柠檬示例的代码也有了更多的认识,接下来还是要做一些数据增强、和添加人脸识别模型的处理,同时也需要再补一些机器学习和opencv的基础知识,老师已经给发了两门课程,再接再厉。