用树莓派做一个实时垃圾分类器|超实用!!
此開源項目由樹莓派愛好者基地人工智能部門謝遠倫、任劍杰、沈超,共同協作完成。在此感謝各位成員的付出與努力。正是有各位的付出,樹莓派生態才能越來越豐富!
一、項目概述
簡介:該垃圾分類項目主要在于對各種垃圾進行所屬歸類,本次項目采用keras深度學習框架搭建卷積神經網絡模型實現圖像分類,最終移植在樹莓派上進行實時視頻流的垃圾識別。
前期:主要考慮PC端性能,并盡可能優化模型大小,訓練可采用GPU,但調用模型測試的時候用CPU運行,測試幀率和準確性(測試10張左右圖像的運行時間取平均值或實時視頻流的幀率)。
后期:部署在樹莓派端,在本地進行USB攝像頭實時視頻流的垃圾分類(歸類)。
框架語言: keras+python。PC端:Keras: 2.2.0Opencv: 3.4Python: 3.6Numpy:1.16二、數據集
data1: https://www.kaggle.com/asdasdasasdas/garbage-classification
數據集包含6個分類:cardboard (393), glass (491), metal (400), paper(584), plastic (472) andtrash(127).
data2: https://www.kesci.com/home/dataset/5d133d11708b90002c570588
該數據集是圖片數據,分為訓練集85%(Train)和測試集15%(Test)。其中O代表Organic(有機垃圾),R代表Recycle(可回收)。
data3 : https://copyfuture.com/blogs-details/2020083113423317484akwfwu4mzs89w
一共 56528 張圖片,214 類,總共 7.13 GB。
三、leNet5 模型搭建
本次項目采用深度學習來進行圖像識別,如今深度學習中最流行的無疑是卷積神經網絡,因此,我們搭建了包含5層卷積層的神經網絡來進行垃圾分類。
由于本次項目包含三個數據集,對應三個類別(6分類,2分類,214分類),但是設計的模型都是一樣的,因此,下面就以data1進行網絡搭建、訓練、測試講解。
卷積神經網絡實例
在正式訓練之前我們還使用了數據增廣技術(ImageDataGenerator)來對我們的小數據集進行數據增強(對數據集圖像進行隨機旋轉、移動、翻轉、剪切等),以加強模型的泛化能力。
1、模型構建
其中conv2d表示執行卷積,maxpooling2d表示執行最大池化,Activation表示特定的激活函數類型,Flatten層用來將輸入“壓平”,用于卷積層到全連接層的過渡,Dense表示全連接層(128-128-6,最后一位表示分類數目)。
參數設置:為訓練設置一些參數,比如訓練的epoches,batch_szie,learning rate等
在這里我們使用了SGD優化器,由于這個任務是一個多分類問題,可以使用類別交叉熵(categorical_crossentropy)。但如果執行的分類任務僅有兩類,那損失函數應更換為二進制交叉熵損失函數(binary cross-entropy)
2、模型保存
將神經網絡在data1數據集上訓練的結果(參數,權重文件)進行保存,方便后期調用訓練好的模型進行預測。
模型保存文件名為:trash_data1_AlexNet3.h5, 我們設置為保存模型效果最好的一次。
四、訓練并測試
首先是觀察數據,看看我們要識別的垃圾種類有多少,以及每一類的圖片有多少。
1、訓練結果
訓練代碼已經寫好了,接下來開始訓練(圖片歸一化尺寸為128,batch_size為32,epoches為5000,一般5k就已經算比較多的啦,效果好的話可以提前結束)。
進行訓練
訓練過程中的打印結果:
2、模型保存
3、預測單張圖片
現在我們已經得到了我們訓練好的模型trash_data1_AlexNet3.h5,然后我們編寫一個專門用于預測的腳本predict.py
預測腳本中的代碼編寫思路是:載入訓練好的模型-》讀入圖片信息-》預測-》展示預測效果
我們這里寫了一個循環測試,方便計算單張圖像的預測時間
4、測試結果
data1:
model size: 178M
acc accuracy(test) :86%
硬件:AMD R5 3600 內存:16G
測試100張圖像耗時:2.37s
單張圖像耗時:0.0237s
data2:
model size: 128M
acc accuracy(test) :94%
硬件:AMD R5 3600 內存:16G
測試1112張圖像耗時:90.52s
單張圖像耗時:0.0814
data3
model size: 128M
acc accuracy(test) :72%
硬件:AMD R5 3600 內存:16G
測試1112張圖像耗時:8.69s
單張圖像耗時:0.077
五、樹莓派端部署/配置深度學習環境
系統環境:2020-08-20-raspios-buster-armhf-full
**工程要求:Tensorflow 1.14.0+ Keras 2.2.4 + Python 3.7 **
1、配置好ssh和vnc之后,換源:
第一步,先備份源文件
sudo cp/etc/apt/sources.list /etc/apt/sources.list.baksudo cp/etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak第二步,編輯系統源文件
sudo nano/etc/apt/sources.list第三步,將初始的源使用#注釋掉,添加如下兩行清華的鏡像源。Ctrl+O ++ Ctrl+X
【注意】這里的樹莓派系統是Raspbian-buster系統,在寫系統源鏈接時要注意是buster,網上很多教程都是之前stretch版本,容易出錯!
debhttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contribnon-free rpideb-srchttp://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contribnon-free rpi第四步,保存執行如下命令sudo apt-get update,完成源的更新軟件包索引。
sudo apt-get update&&upgrade第五步,還需要更改系統源
sudo nano/etc/apt/sources.list.d/raspi.list用#注釋掉原文件內容,用以下內容取代:用#注釋掉原文件內容,用以下內容取代:
debhttp://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main uideb-srchttp://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui第六步,配置換源腳本,更改pip源
新建文件夾:
mkdir ~/.pipsudo nano~/.pip/pip.conf在pip.conf文件中輸入以下內容:
[global]timeout=100index-url=https://pypi.tuna.tsinghua.edu.cn/simple/extra-index-url=http://mirrors.aliyun.com/pypi/simple/[install]trusted-host=pypi.tuna.tsinghua.edu.cnmirrors.aliyun.com2、python虛擬環境配置
首先進行系統軟件包更新
sudo apt-getupdate sudo apt-getupgradesudorpi-update然后更新自帶的pip,由于Raspbian自帶的pip3為9.0.1版本,較為老舊,我們使用以下命令來更新pip3:
python3 -mpip install --upgrade pip嘗試在更新完pip3后,鍵入命令:
pip3 list新建個文件夾(虛擬環境用)
cd Desktopmkdir tf_picd tf_pi安裝虛擬環境這個好東西
python3 -mpip install virtualenv增加環境變量,使得該好東西可以用起來
sudo chmod -R777 /root/.bashrcsudo nano ~/.bashrc把exportPATH=/home/pi/.local/bin/:$PATH 放到最后,添加環境變量
source ~/.bashrc成功了之后:整一個虛擬環境
virtualenvenvsourceenv/bin/activate3、安裝tensorflow1.14.0
用電腦下載:(鏈接)python3.7版本只能安裝1.14.0-Buster版本的TensorFlow
https://github.com/lhelontra/tensorflow-on-arm/releases/tag/v1.14.0-buster
用U盤將這個文件拷到樹莓派上,建一個bag文件夾存放
安裝依賴包:
sudo aptinstall libatlas-base-dev安裝一些環境
sudo apt-getinstall -y libhdf5-dev libc-ares-dev libeigen3-devpython3 -mpip install keras_applications==1.0.8 --no-depspython3 -mpip install keras_preprocessing==1.1.0 --no-depspython3 -mpip install h5py==2.9.0sudo apt-getinstall -y openmpi-bin libopenmpi-devsudo apt-getinstall -y libatlas-base-devpython3 -mpip install -U six wheel mock安裝tensorflow
cd envcd bagpip3 install tensorflow-1.14.0-cp37-none-linux_armv7l.whl這里要安裝二十分鐘。。。出錯了再來一遍就好了。。
測試是否成功并查看版本:
pythonimport tensorflow as tftf.version4、安裝keras
安裝一些依賴
sudo apt-getinstall libhdf5-serial-devpip3 installh5pysudo apt-getinstall gfortransudo aptinstall libopenblas-devpip3 install-i https://pypi.tuna.tsinghua.edu.cn/simple/ pillowsudo pip3install pybind11第一個下載numpy:第一次的時候發現安裝成功但調用失敗了,我覺得是numpy版本過高導致出錯了
下載keras還是tensorflow的時候會自動下載numpy(之前已存在,它會先卸載再安裝高版本的numpy,之前不存在,它會直接安裝高版本的numpy),所以要先下載keras,再卸載numpy,然后再安裝低版本的numpy
看一下子numpy版本,太高了
重新安裝
pip3uninstall numpypip3 installnumpy==1.16.0第二個下載scipy【直接pip安裝百分之九十九的可能都會失敗。所以先下載再安裝。。。先下載這個鏈接復制到樹莓派上,然后解壓到指定文件夾/home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages下】
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/aa/d5/dd06fe0e274e579e1dff21aa021219c039df40e39709fabe559faed072a5/scipy-1.5.4.tar.gz
cd/home/pi/Desktop/tf_pi/env/bagtar -zxvf scipy-1.5.4.tar.gz-C /home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages
然后進到這個文件夾里開啟安裝:【花里胡哨的各種代碼配置呀啥的,會安裝三十分鐘左右】
cd /home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages/scipy-1.5.4pythonsetup.py installpip3 list看一看:【太六了,終于成功了】
再使用這個命令安裝keras:
pip3 install keras==2.2.4請注意;由于在virtualenv里面,一定一定要避免sudo pip3 install,否則會安裝到默認路徑下!發現keras安裝到默認環境了,所以調用不成功,pip list沒有
解決辦法重新安裝
pip3install keras==2.2.4安裝好了之后記得reboot重啟一下子。
5、開始測試;import keras前面加import os就能忽略提示
因為keras可以配合很多框架,我們用的tf所以會有backend的提示
進入虛擬環境:
cd ~/Desktop/tf_pisourceenv/bin/activate pythonimport tensorflowas tftf.__version__import kerasprint(keras.__version__)六、用樹莓派跑分類識別的代碼
系統環境:2020-08-20-raspios-buster-armhf-full
**工程要求:Tensorflow 1.14.0+ Keras 2.2.4 + Python 3.7 **
1、把代碼還有圖片集,拷到樹莓派上
其實Filezilla這個FTP傳輸就很方便
2、激活虛擬環境
cd ~/Desktop/tf_pisourceenv/bin/activate3、克隆代碼并進入代碼目錄
克隆代碼
cd ~/Desktop/tf_pi/envgit clone https://gitee.com/yangkun_monster/raspberrypi-Garbage-classification.git若提示git命令未找到:
sudo apt-get install git進入代碼目錄:
cd ~/Desktop/tf_pi/env/Garbage-Classification/code1這里更改test.py的測試集路徑
pythontest.py發現有個文件解碼有問題,于是根據錯誤的消息的路徑,去這里:
/home/pi/Desktop/tf_pi/env/lib/python3.7/site-packages/keras/engine在.decode(‘utf-8’)前面加.encode(‘utf8’)
再次到測試這里運行python test.py,解決了!
測試AlexNet需要把test.py文件里的權重文件路徑改了,把輸入圖片維度由(150,150) 改為(128,128)
Code1測試結果:test100張玻璃
| 精度 | 89% | 87% |
| 時間 | 307秒 | 80秒 |
Code2測試結果:test100張窗簾(兩種,R可回收,O不可回收)
| 精度 | 98% | 98% |
| 時間 | 309秒 | 46秒 |
七、樹莓派安裝opencv并測試視頻接口
系統環境:2020-08-20-raspios-buster-armhf-full
工程要求:opencv 3.4.6.27
cd ~/Desktop/tf_pisource env/bin/activate cd ~/Desktop/tf_pi/env/laji/code1python data1_video_test.py1、安裝必要的庫
pip3 install numpysudo apt-get install libhdf5-dev -y build-dep libhdf5-devsudo apt-get install libatlas-base-dev -ysudo apt-get install libjasper-dev -ysudo apt-get install libqt4-test -ysudo apt-get install libqtgui4 -ysudo apt install libqt4-testpip3 install libqtgui4sudo apt-get install cmakesudo apt installcmake-qt-guisudo apt-get install libgtk2.0-devsudo apt-get install pkg-configpip3 install boostpip3 install dlib2、電腦瀏覽器下載以下兩個文件
https://www.piwheels.org/simple/opencv-contrib-python/opencv_contrib_python-3.4.6.27-cp37-cp37m-linux_armv7l.whl
https://www.piwheels.org/simple/opencv-python/opencv_python-3.4.6.27-cp37-cp37m-linux_armv7l.whl
3、將兩個文件拷貝到樹莓派上去
4、安裝這兩個文件,先更新pip
pip install --upgrade pippip3 install 文件位置注意,由于是虛擬環境,就不能做sudo,會安裝到默認路徑
cd env/bagpip3 installopencv_contrib_python-3.4.6.27-cp37-cp37m-linux_armv7l.whlpip3 install opencv_python-3.4.6.27-cp37-cp37m-linux_armv7l.whl5、測試
先打開攝像頭設置
sudo raspi-config然后運行攝像頭程序
總結
以上是生活随笔為你收集整理的用树莓派做一个实时垃圾分类器|超实用!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国多省市推广盘扣脚手架,模架大咖怎么看
- 下一篇: 世界首款前置前驱混动8挡自动变速器山东潍