材料表
Raspberry Pi 4 (4GB)
(182-2096)
SD卡(16G)
(174-7337)
网络摄影机
(125-4274)
Mini HDMI传输线
(176-5748)
.
屏幕、键盘、鼠标
实现影像分类分成几个步骤:
在TM网页中搜集数据,训练模型,在网站中实时影像分类。
导出模型及卷标文件。
至树莓派官网下载最新版本的RPi4映像档。
安装模型框架Tensorflow Lite。
安装OpenCV套件。
实现影像分类于RPi4。
了解以上步骤后,其建置RPi4环境的时间花得最久,但读者们仍可同步进行,例如:
RPi4在刻录SD卡或安装套件时,又同时在TM网站搜集数据及训练模型。
Teachable Machine Teachable Machine™介绍
TM网站可供初学者认识AI人工智能的神经网络应用平台,主要是以「监督式学习Supervised learning」建置而成的训练平台。目前网站针对使用者提供三种不同的AI应用,分别是影像分类项目(Image Project)、声音辨识项目(Audio Project) 与身体姿态辨识项目(Pose Project),也提供了Tensorflow、Tensorflow.js与Tensorflow Lite三种训练模型框架,可供使用者汇入如RPi4的装置来实现边缘运算。
每个项目都被设计成三个步骤,分别是搜集(Gather)、训练(Train) 与汇出(Export)。
请选择 「Image Project」开始项目
Step1. 在TM网页中搜集数据,训练模型,在网站中实时影像分类。
进入页面后会看到几项操作流程,a.设定卷标及搜集数据、b.训练集及c及时预览功能和导出模型。
可直接按下「Record 10 Second」,网页便会倒数计时持续拍摄直到10秒结束,如果认为10秒的张数太少,可以按下齿轮,可以更改秒数等相关参数。初始参数有「24FPS」 (理论值为每秒钟拍24张)、「Hold-to-record OFF」(关闭手动拍摄)、「Delay: 2 seconds」(2秒后才开始拍摄)、「Duration: 10 second 」(拍摄10秒钟,理论值约可拍摄240张,但实际上要取决于网页执行效能),本文将秒数调成25秒,可以删掉一些拍摄失败的照片,再者也可以使数据量丰富。
按下「Save Setting」à 「Record 25 seconds」,开始拍摄,拍摄完成可将拍得不好或模糊的图片删除。
本文建立了5种类别,分别是「mouse」、「nothing」、「RaspberryPi」、「PEN」、「Bruce Lee」,但有一个种类必须要建立的是「nothing」,意思是没有照到「mouse」、「RaspberryPi」、「PEN」、「Bruce Lee」时的情形。当初笔者忘了建立「nothing」种类,当没有照到物品时,就会一直认为「mouse」。
要分辨的影像张数尽量不要相差太远,本文接近约莫300张左右,在「nothing」类别较多张是为了没有照到的影像都要视为「nothing」,故照了很多「mouse」、「RaspberryPi」、「PEN」、「Bruce Lee」以外的照片。
接下来是训练模型,按下「Train Model」即可。但要修改参数,请按下「Advanced」,预设参数有「Epochs :50」(50个训练回合)、「Batch Size: 16」(批次大小)、「Learning Rate:0.001」(学习率),以下分别说明。
Epochs:
训练的回合设定,训练回合数和时间成正比,若要针对细微变化的差异进行辨识时则要提高回合数,会助于模型辨识效能,但特别要注意的是过高的回合数可能会使模型产生「过适Overfitting」的问题,若是过低的回合数会产生「乏适Underfitting」的问题,但无论是甚么问题都会降低模型辨识效能。
Batch Size:
适当的批次大小设定有助于模型的优化,而且可以提高训练的速度,及减少训练误差。
Learning Rate:
学习率设定影响着训练模型寻找最佳解的过程中是否会收敛或发散。若设定过大,虽会快速收敛,但也可能难以收敛产生震荡甚至发散;相对的,设定过小会导致寻找最佳解时缓慢收敛。读者们若有兴趣,可以搜寻『梯度下降法』。
在训练过程中会跑出对话框 ,提醒使用者不要更动到标签类别以免影响训练。
训练完成后即可在网页上作及时的影像推论,影像来源除了根据摄影机之外,还可以从计算机端及Google云端汇入照片进行对象辨识。
Step2. 导出模型及卷标文件
按下「Export Model」后可导出模型文件及卷标文件
请选「Tensorflow Lite」à「Quantized」à「Download my model」。「Floating point」格式建议在个人计算机的环境操作;「Quantized」格式适合在像Raspberry Pi的单板计算机操作则有最佳效能;「Edge TPU」格式则仅限于Google Coral 的系列产品,如: Google Coral USB Accelerator 或 Google Coral Dev Board 的产品上。
Step3. 至树莓派官网下载最新版本的RPi4映像档。
请到 https://www.raspberrypi.org/downloads/raspbian/ 下载 「Raspbian Buster with desktop」,此版本为桌面简易版,没有多余的软件,且较不占SD卡空间。下载至计算机后,须将档案解压缩,再准备一张16G的SD卡,利用Win32 Disk Imager 软件(下载点: https://sourceforge.net/projects/win32diskimager/)刻录至SD卡中。
a部分先选择RPi4 的映像档;b部分选择刻录SD卡的磁盘位置(要小心不要选错,以免烧错扇区);c部分则选择数据到「装置」,将映像档刻录至SD卡内。
刻录完成后可将SD卡插至RPi4 卡槽后,但先别急着开机,而是先将RPi4链接到屏幕再开机,否则开机后再接屏幕是没有画面的,最后在接上键盘、鼠标即可,这样较好设定网络。将网络和地区都设定好之后,请开启RPi4图示à「Preferences」à「Raspberry Pi configuration」à「Interfaces」,将所有功能开启后重新启动,以便可用远程软件控制RPi4。
本文所使用的远程联机软件为MobaXterm (下载处: https://mobaxterm.mobatek.net/download.html) ,此软件优点除了可以远程联机RPi4,也可以对RPi4传输档案,但RPi4必须要和MobaXterm同个网域,开启后请按「Session」à「SSH」à在「Remote host*」输入RPi4 IP(本文IP为192.168.12.56),联机成功会出现「login as:」,请输入预设帐号pi ,再来是默认输入密码raspberry(密码不会显示在画面上),按下Enter即可登入成功。
之后的安装套件步骤可直接将指令复制并贴至MobaXterm中。
登入RPi4成功画面。
Step4. 安装模型框架Tensorflow Lite。
请到https://www.tensorflow.org/lite/guide/python 官方网站下载套件,新下载的RPi4 映像档的版本预设为Raspbian Buster ,Python 版本为3.7版 ,所以在MobaXterm请输入:
$ pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_armv7l.whl
(P.S. $指令不需要复制)
Step5. 安装OpenCV套件。
扩展文件系统到整张SD卡
首先在MobaXterm输入$ sudo raspi-config
选择"7 Advanced Options" à "A1 Expand filesystem ",重开机。
删除不必要的软件Wolfram Engine和LibreOffice,非必要做,但可以省下约1G的SD卡容量。$ sudo
apt-get purge wolfram-engine
$ sudo apt-get purge libreoffice *
$ sudo apt-get clean
$ sudo apt-get autoremove
更新及升级所有套件包
$ sudo apt-get update && sudo apt-get upgrade
安装开发者套件CMake 需要用来编译
$ sudo apt-get install build-essential cmake pkg-config
安装有关OpenCV的相依套件
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-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 libgtk-3-dev
$ sudo apt-get install libcanberra-gtk*
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python3-dev
下载0版至RPi4 。
$ cd ~
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.0.0.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.0.0.zip
并解压缩文件案
$ unzip opencv.zip
$ unzip opencv_contrib.zip
建立opencv 和 opencv_contrib文件夹及将档案投递文件夹内
$ mv opencv-4.0.0 opencv
$ mv opencv_contrib-4.0.0 opencv_contrib
先在opencv文件夹内建立名为build的文件夹
$ cd ~/opencv
$ mkdir build
$ cd build
使用CMake来设置OpenCV 4环境(从这步骤开始是最花时间)
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF
调整RPi4的SWAP交换空间,来解决编译OpenCV内存不足的问题。
$ sudo nano /etc/dphys-swapfile
请把 CONF_SWAPSIZE=100改成 2048重新开启SWAP服务
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
开启四核心编译OpenCV
$ make -j4
安装OpenCV
$ sudo make install
$ sudo ldconfig
重新调整RPi4的SWAP 交换空间
$ sudo nano /etc/dphys-swapfile
将CONF_SWAPSIZE=2048改成 100
重新开启SWAP服务
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Step6. 实现影像分类于RPi4
将Step2 下载模型及卷标文件解压缩后透过MobaXterm传入RPi4中
汇入OpenCV 档于专案文件夹内
$ cd converted_tflite_quantized/
$ ln -s /usr/local/python/cv2/python-3.7/cv2.cpython-37m-arm-linux-gnueabihf.so cv2.so
在执行程序之前需要下载分类器的档案,连结: https://reurl.cc/4R3dVL
连接上Webcam 至RPi4 USB中,本文范例是将下列指令写入RPi4的Terminal里执行,读者们亦可输入至MobaXterm。
$ python3 TM2_tflite.py --model model.tflite --labels labels.txt
则可成功开启画面。如果执行不成功则需要多尝试几次,检查摄像头是否使能,摄像头最好插在蓝色的USB口的第一个,如果仍然不成功
可去这个网址查看
执行
wget https://github.com/TMRH20/RF24/archive/master.zip
sudo apt-get install libboost-python-dev
cd RF24-master
. /configure --driver=RPi
make
sudo make install
cd pyRF24
sudo python setup.py install
sudo python3 setup.py install
再重复以上步骤
cd gcs
gcs为.py文件夹
python3 TM2_tflite.py --model model.tflite --labels labels.txt
不能开启摄像头时
sudo raspi-config
配置好finish
然后将命令多运行几遍