南航金城學院機電工程與自動化學院 李朝宇 田 莉 劉偉康 閆文龍 吳家潤
隨著人們的生活水平越來越高,生活垃圾的處理變成了社會的一大難題,為解決居民日常生活中的垃圾分類問題,提出了基于圖像識別的垃圾分類系統(tǒng)。將卷積神經(jīng)網(wǎng)絡部署在服務器里,并通過API接口移植到樹莓派主控板中,實現(xiàn)前后端分離的設計,設計了垃圾分類器的機械結構,最終實現(xiàn)了垃圾自動分類功能,系統(tǒng)具有較高識別率,維護成本低,方便實用的特點,為實現(xiàn)智慧城市,提高居民宜居感,提高資源利用率提供一種解決方案。
目前城市里每天會產(chǎn)生2.55萬t左右的生活垃圾,人均每天產(chǎn)生1.1kg,而且數(shù)量還在上漲,如此多的垃圾,如果不對其進行垃圾分類,將會造成資源的大量浪費以及對環(huán)境的巨大破壞。目前多個城市已經(jīng)強制推行垃圾分類,但是由于配套設施的不完善和人們的垃圾分類意識不足,垃圾分類的成效不太理想。本文通過搭建云服務器,設計并不斷優(yōu)化卷積神經(jīng)網(wǎng)絡、對生活垃圾中的可回收垃圾、有害垃圾、廚余垃圾、其他垃圾進行了高效智能識別,設計出可自動進行垃圾分類的智能垃圾桶,為構建生態(tài)文明城市提供一種智能化解決方案。
本系統(tǒng)的硬件設計采用樹莓派作為控制器,垃圾桶的桶體為圓柱形,等分為4個分類桶,分類桶的桶蓋向內凹陷成錐形槽,在垃圾桶左方架設一個支撐架用于支撐人工操作顯示屏,并且在錐形槽正上方安裝攝像頭及燈泡,調整角度使其能夠最大范圍內識別垃圾,架設四個舵機撥片操作云臺,通過樹莓派發(fā)出指令,使對應的舵機箱蓋打開,對各種垃圾進行精確的分類處理。機械裝置的3D示意圖如圖1所示。
圖1 垃圾桶硬件平臺3D模型
整體的系統(tǒng)設計如圖2所示,是攝像頭對停駐層上的垃圾進行數(shù)據(jù)采集,并將圖像信息傳入OpenCV計算機視覺庫,經(jīng)由圖像處理后交由云端的Tensorflow中進行整合訓練,最終結果返回給樹莓派,樹莓派主控應用Electron控制flask進行頁面交互和舵機控制,服務器端負責管理數(shù)據(jù)并利用卷積神經(jīng)網(wǎng)絡訓練模型,提供應用API接口,由flask進行調用,形成了前后端分離的設計。
圖2 垃圾分類系統(tǒng)總體設計圖
卷積神經(jīng)網(wǎng)絡(CNN)有較好的非線性形變穩(wěn)定性,即當我們將垃圾位置進行平移后,仍能得到同樣的檢測結果。卷積神經(jīng)網(wǎng)絡結構可分為卷積層、最大池化層和全連接層,其結構如圖3所示。
圖3 卷積網(wǎng)絡結構圖
卷積層:卷積層的作用是對輸入數(shù)據(jù)進行卷積運算。卷積神經(jīng)網(wǎng)絡中每個卷積層需要使用激活函數(shù)。激活函數(shù)是對卷積層的數(shù)據(jù)結果運用激活函數(shù)進行非線性映射,本文使用ReLU作為激活函數(shù),其函數(shù)定義為:
即輸入<0,輸出=0。輸入>0,輸出=輸入。
與其他函數(shù)相比,ReLU激活函數(shù)的優(yōu)點是收斂快,梯度運算簡單。ReLU激活函數(shù)的函數(shù)圖像如圖4所示:
圖4 ReLU激活函數(shù)
池化層:池化層的主要作用是通過對上一層輸出做降維處理,即取特征圖的最大值使其降低維度,如圖5所示。
圖5 最大池化層示意圖
全連接層:將二維特征圖轉換為一維的向量,該層執(zhí)行最后一個矩陣乘法器以計算輸出。
圖6 全連接網(wǎng)絡圖
圖6所示是一個簡單的全連接網(wǎng)絡圖,表示全連接層上的每個節(jié)點都與上層的節(jié)點連接,其中x1、x2、x3為全連接層的輸入數(shù)據(jù),a1、a2、a3為輸出數(shù)據(jù),全連接層的計算公式如下:
本文采用神經(jīng)網(wǎng)絡ResNet50預訓練模型,該模型利用殘差學習來解決退化問題。
Resnet的擬合方程是,如下的公式:
其中H(x)為當前網(wǎng)絡中擬合的殘差映射,F(xiàn)(x)和x分別是一個block層的輸出和輸入,本文采用三層block結構,如圖7所示,可以有效提高模型運算速度。
圖7 ResNet50網(wǎng)絡結構
數(shù)據(jù)集是神經(jīng)網(wǎng)絡訓練的基礎,系統(tǒng)目標是將可回收材料從居民的日常垃圾中區(qū)別出來,所以根據(jù)居民垃圾的可回收分類標準,本項目從網(wǎng)上收集了17350張開源照片,對圖片進行人工標注并將圖片分為可回收垃圾、有害垃圾、廚余垃圾和其他垃圾??砂褦?shù)據(jù)集分為訓練集和測試集用于神經(jīng)訓練,分別得到各自的損失值和精度值,將訓練集上的損失值和精度值用于更新參數(shù),而測試集用于評估模型。
2.4.1 訓練環(huán)境
訓練環(huán)境搭建在服務器中,選擇Tensorflow1.6作為深度學習的框架,代碼的實現(xiàn)環(huán)境是Python3.6,Keras2.3.1作為代碼的深度學習庫,Keras是基于Python編寫的高級神經(jīng)網(wǎng)絡,它能夠以Tensoflow作為后端運行。
2.4.2 模型訓練
首先導入需要的包和庫,并定義神經(jīng)網(wǎng)絡參數(shù),如學習效率λ=0.0001,防過擬合參數(shù)dropout=0.5,加載數(shù)據(jù)集,并對其進行預處理,將圖片統(tǒng)一設置成(224,224,3)的三通道RGB圖片,對圖片隨機剪切、翻轉和旋轉等操作,最后引入Resnet50預訓練模型。定義卷積層,設置卷積核大小,步幅strides=1,對圖像進行低級特征提取,邊界填充=0,激活函數(shù)選用Relu,加入卷積核權重weight decay=0.0001和偏置送入激活函數(shù)中。定義最大池化層,對輸入特征降維縮小最后全連接節(jié)點個數(shù),定義全連接層,dropout層與Relu激活函數(shù)能有效降低過擬合概率,提高數(shù)據(jù)訓練時間,使用SVM支持向量機對輸出進行分類,將垃圾分為可回收垃圾、有害垃圾、廚余垃圾和其他垃圾。
2.4.3 模型優(yōu)化
Tensorflow的模型在運行時,需要優(yōu)化參數(shù),使損失函數(shù)達到最小,故需引入Adam優(yōu)化器,優(yōu)化器的任務是在每一個Epoch中計算損失函數(shù)的梯度,并更新參數(shù)。本系統(tǒng)設置學習率,矩估計指數(shù)衰減率,步長。
將Tensorflow訓練中的數(shù)據(jù)保存,并可視化之后,發(fā)現(xiàn)損失函數(shù)值最低為0.78,識別精度最高為95.52%。如圖8所示。
圖8 損失函數(shù)變化圖
用測試集中的圖片,對其在PC端的識別精度進行測試,如表1所示,模型在PC端運行良好,能基本區(qū)分測試圖片,測試準確率最高可達到95%。如圖9所示。
圖9 識別精度變化圖
表1 神經(jīng)網(wǎng)絡模型在PC端的識別率數(shù)據(jù)表
將神經(jīng)網(wǎng)絡模型部署在服務器端上后,使用測試圖片進行識別測試,獲得識別準確率,如表2所示,部署后的卷積神經(jīng)網(wǎng)絡識別準確率與在PC端上運行時準確率一致,移植效果較好。
表2 神經(jīng)網(wǎng)絡模型在服務器端的識別率數(shù)據(jù)表
樹莓派是基于Linux開發(fā)的,我們需要開發(fā)一個能在Linux環(huán)境下穩(wěn)定運行的桌面應用。ELECTRON-VUE相當于一個瀏覽器的外殼,可以把網(wǎng)頁程序嵌入到硬件程序里面,可以運行在桌面上的一個程序,可以把網(wǎng)頁打包成一個在桌面運行的程序,通俗來說就是軟件,一個可以構建跨平臺桌面程序。
圖10 人機交互界面設計圖
在人機交互軟件上,除自動運行方式外,還可讓用戶在軟件上手動選擇垃圾種類,啟動分類裝置動作。如圖10所示。
本系統(tǒng)針對垃圾分類問題,提出了通過搭建云服務器,設計并不斷優(yōu)化卷積神經(jīng)網(wǎng)絡,可對生活垃圾中的可回收垃圾、有害垃圾、廚余垃圾、其他垃圾進行智能識別。垃圾識別精度達到了95.52%,滿足設計的應用需求,具有良好的應用前景。