DesignSpark Electrical Logolinkedin
菜单 搜寻
提问问题

使用Google Teachable Machine 来实现Raspberry Pi 4 的影像分类推论

作者 许钰莨/曾俊霖
難度 普通
材料表
  1. Raspberry Pi 4 (4GB) (182-2096)  
  2. SD卡(16G) (174-7337)
  3. 网络摄影机 (125-4274)
  4. Mini HDMI传输线 (176-5748) .
  5. 屏幕、键盘、鼠标

 

本文实现影像分类分成几个步骤:

  • 在TM网页中搜集数据,训练模型,在网站中实时影像分类。
  • 导出模型及卷标文件。
  • 至树莓派官网下载最新版本的RPi4映像档。
  • 安装模型框架Tensorflow Lite。
  • 安装OpenCV套件。
  • 实现影像分类于RPi4。

了解以上步骤后,其建置RPi4环境的时间花得最久,但读者们仍可同步进行,例如:

RPi4在刻录SD卡或安装套件时,又同时在TM网站搜集数据及训练模型。

Teachable Machine (TM)介绍

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及时预览功能和导出模型。

首先在a部分,可将标签名称Class 1更名,接着透过计算机Webcam或Upload,从计算机或Google云端硬盘上传图片,及按下「Add a class」来增加类别。本文是开启计算机Webcam来搜集数据。

可直接按下「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

查询OpenCV 版本,会显示4.0.0版

$python3
>>> import cv2
>>> cv2.__version__
'4.0.0'
>>> exit()

可回到指令列

在RPi4实现影像分类推论!

在执行程序之前需要下载分类器的档案,连结: https://reurl.cc/4R3dVL

连接上Webcam 至RPi4 USB中,本文范例是将下列指令写入RPi4的Terminal里执行,读者们亦可输入至MobaXterm。

$ python3 TM2_tflite.py --model model.tflite --labels labels.txt

则可成功开启画面。

以下是辨识结果:nothing

以下是辨识结果:RaspberryPi

以下是辨识结果:mouse

以下是辨识结果:Bruce Lee

所有步骤在此告一段落,希望读者们能够做出属于自己项目或用于生活当中,谢谢大家!

相关文章参考:

[1] https://blog.cavedu.com/2019/10/09/raspberry-pi4-tensorflow-lite-for-python-coral-usb-accelerator/

[2] https://www.tensorflow.org/lite/guide/python  

[3] https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/

 

CAVEDU Education is devoted into robotics education and maker movement since 2008, and is intensively active in teaching fundamental knowledge and skills. We had published many books for readers in all ages, topics including App Inventor, Lego robot and IoT (Arduino / Raspberry Pi). Please check CAVEDU's website for more information: http://www.cavedu.com, http://www.appinventor.tw

21 Apr 2020, 8:20