王 科 ,林 志 華 ,劉 豐 儉
(江蘇工程職業(yè)技術(shù)學(xué)院,南通 226007)
隨著人們生活水平的不斷提高,日常生活垃圾數(shù)量激增。據(jù)世界銀行報(bào)告,全球垃圾到2050 年將暴增70%,達(dá)到34 億噸,[1]如何有效地進(jìn)行垃圾處理成為難題。垃圾分類(lèi)是科學(xué)地進(jìn)行垃圾處理的前提,有助于可回收垃圾的再利用以及有害垃圾的無(wú)害化處理等。隨著《生活垃圾分類(lèi)制度實(shí)施方案》的實(shí)施以及若干城市的成功試點(diǎn),垃圾分類(lèi)逐漸成為人們?nèi)粘I畹囊徊糠?。一方面,垃圾分?lèi)可以減少資源浪費(fèi);另一方面,垃圾分類(lèi)可以減少環(huán)境污染,有利于生態(tài)文明建設(shè)。在目前的實(shí)施方案中,垃圾分類(lèi)主要依賴居民的主動(dòng)分類(lèi)和監(jiān)督員檢查,對(duì)居民的素質(zhì)有一定的要求且需要投入一定的人力,效果并不顯著。近年來(lái)機(jī)器視覺(jué)技術(shù)的迅猛發(fā)展給解決這一問(wèn)題提供了新思路,那就是借助于機(jī)器視覺(jué)技術(shù)進(jìn)行垃圾分類(lèi)。目前,基于深度學(xué)習(xí)的圖像分類(lèi)方法逐步多樣化,為垃圾識(shí)別的研究提供了新方向。[2-4]本文提出一種基于預(yù)訓(xùn)練深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的垃圾分類(lèi)系統(tǒng),系統(tǒng)包含算法模塊和Web 模塊。算法模塊包含數(shù)據(jù)增強(qiáng)、模型預(yù)訓(xùn)練、模型微調(diào)、模型推理等功能,并采用Dropout、Adam 和早停機(jī)制等關(guān)鍵技術(shù)。Web 模塊提供用戶交互功能。利用華為云人工智能大賽數(shù)據(jù)集進(jìn)行訓(xùn)練,驗(yàn)證模型的準(zhǔn)確性,并與VGG16 網(wǎng)絡(luò)模型進(jìn)行準(zhǔn)確性比較,最后將系統(tǒng)部署在服務(wù)器上,完成垃圾分類(lèi)系統(tǒng)的開(kāi)發(fā)。
深度卷積神經(jīng)網(wǎng)絡(luò)是一種前饋神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)深,由若干卷積層和激活函數(shù)、若干池化層、全連接層以及使用Softmax 激活函數(shù)的輸出層組成,在圖像識(shí)別領(lǐng)域應(yīng)用廣泛。[5]卷積層中的卷積核主要作用是提取圖像特征,在本設(shè)計(jì)中,經(jīng)過(guò)處理后的垃圾圖片大小統(tǒng)一為224×224 像素,經(jīng)過(guò)若干不同大小的卷積核進(jìn)行相乘相加,然后將結(jié)果經(jīng)過(guò)非線性激活函數(shù)的優(yōu)化后輸出;池化層夾在兩個(gè)連續(xù)的卷積層間,主要用于壓縮網(wǎng)絡(luò)數(shù)據(jù)和參數(shù)的數(shù)量以減少過(guò)擬合;全連接層的作用是使各神經(jīng)元進(jìn)行相互全連接。整個(gè)卷積神經(jīng)網(wǎng)絡(luò)的傳播過(guò)程如圖1 所示,包含前向傳播和反向傳播過(guò)程。在前向傳播過(guò)程中,通過(guò)對(duì)輸入的垃圾圖像數(shù)據(jù)進(jìn)行多層卷積層的卷積和池化處理來(lái)提取特征向量,將特征向量傳入全連接層,得出分類(lèi)識(shí)別的結(jié)果。若識(shí)別結(jié)果與期望值不符,則進(jìn)行反向傳播。首先求出輸出值與期望值之間的誤差,再將誤差鏈?zhǔn)椒祷?,?jì)算出每一層的誤差,最后更新權(quán)值,使得下一次前向傳播過(guò)程的垃圾分類(lèi)結(jié)果值更新。
圖1 卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程
卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)和推測(cè)過(guò)程可以歸納為從帶標(biāo)簽的數(shù)據(jù)中學(xué)習(xí)高維且抽象的特征,并泛化到同類(lèi)型的未知數(shù)據(jù)。而對(duì)于圖像識(shí)別這種視覺(jué)任務(wù),則需要更深的網(wǎng)絡(luò)提取更高維度的特征。但隨著卷積神經(jīng)網(wǎng)絡(luò)層數(shù)的增加,網(wǎng)絡(luò)中未知參數(shù)的數(shù)量會(huì)顯著增加,這需要更大的訓(xùn)練集來(lái)優(yōu)化模型參數(shù),以防止過(guò)擬合。一種解決方法是使用預(yù)訓(xùn)練網(wǎng)絡(luò),使用卷積神經(jīng)網(wǎng)絡(luò)在大型數(shù)據(jù)集(例如ImageNet)上訓(xùn)練提取足夠的一般特征,將其網(wǎng)絡(luò)結(jié)構(gòu)及淺層的網(wǎng)絡(luò)參數(shù)復(fù)制到新的網(wǎng)絡(luò)模型中,然后凍結(jié)一部分參數(shù),訓(xùn)練其余參數(shù)和全連接層參數(shù)。這種方法直接利用從海量數(shù)據(jù)中學(xué)習(xí)到的成熟模型,然后進(jìn)行微調(diào),再用現(xiàn)有的數(shù)據(jù)集進(jìn)行訓(xùn)練,準(zhǔn)確率較高。垃圾識(shí)別分類(lèi)的預(yù)訓(xùn)練步驟如下:①在預(yù)訓(xùn)練卷積基上添加自定義層,包含一個(gè)密集連接分類(lèi)層、批標(biāo)準(zhǔn)化層、分類(lèi)層;②凍結(jié)卷積基所有層;③利用垃圾分類(lèi)數(shù)據(jù)集訓(xùn)練添加的自定義層;④解凍卷積基的一部分層,即微調(diào)模型中的高階特征表示,以使它們與垃圾分類(lèi)任務(wù)更相關(guān);⑤利用垃圾分類(lèi)數(shù)據(jù)集聯(lián)合訓(xùn)練解凍的卷積層和添加的自定義層。
神經(jīng)網(wǎng)絡(luò)的訓(xùn)練依靠數(shù)據(jù)集,但數(shù)據(jù)集的采集及標(biāo)注工作耗時(shí)久、耗力多,很難得到十分充足的訓(xùn)練數(shù)據(jù),在此過(guò)程中還可能會(huì)出現(xiàn)過(guò)擬合。數(shù)據(jù)增強(qiáng)是從現(xiàn)有的訓(xùn)練樣本中生成更多的訓(xùn)練數(shù)據(jù),其方法是利用多種能夠生成可信圖像的隨機(jī)變換來(lái)增加樣本,目標(biāo)是模型在訓(xùn)練時(shí)不會(huì)兩次查看完全相同的圖像。這讓模型能夠觀察到數(shù)據(jù)的更多內(nèi)容,從而具有更好的泛化能力。為獲得更多數(shù)據(jù),可以對(duì)現(xiàn)有的數(shù)據(jù)集進(jìn)行一系列的隨機(jī)幾何變換,以提升數(shù)據(jù)樣本數(shù)量,緩解訓(xùn)練數(shù)據(jù)集的類(lèi)別數(shù)量不均衡問(wèn)題。常見(jiàn)的數(shù)據(jù)增強(qiáng)的方法有幾何變換(平移、翻轉(zhuǎn)、旋轉(zhuǎn))、隨機(jī)調(diào)整亮度等。
以易拉罐為例,對(duì)易拉罐圖像進(jìn)行隨機(jī)變換運(yùn)算后可以產(chǎn)生多張不同的圖像,圖2 顯示了變換后的4張圖像。數(shù)據(jù)樣本的擴(kuò)增可以提升模型的泛化能力,有助于抑制模型過(guò)擬合現(xiàn)象的發(fā)生。
圖2 易拉罐圖像增強(qiáng)結(jié)果
卷積神經(jīng)網(wǎng)絡(luò)中權(quán)重參數(shù)的求解依賴于前向傳播和后向傳播理論,根據(jù)鏈?zhǔn)角髮?dǎo)法則得到式(1)。
式(1)中,J 是網(wǎng)絡(luò)誤差,ωji(k)是第k-1 層網(wǎng)絡(luò)中第i 個(gè)神經(jīng)元連接到第k 層第j 個(gè)神經(jīng)元的連接權(quán)重,zj(k)是第k-1 層網(wǎng)絡(luò)連接到第k 層第j 個(gè)神經(jīng)元的輸出值。若乘積部分大于1,當(dāng)網(wǎng)絡(luò)層數(shù)增多,最終求出的梯度更新將以指數(shù)形式增加,即發(fā)生梯度爆炸;若乘積部分小于1,當(dāng)網(wǎng)絡(luò)層數(shù)增多,求出的梯度更新信息將會(huì)以指數(shù)形式衰減,即發(fā)生了梯度消失,這會(huì)使深層網(wǎng)絡(luò)的訓(xùn)練效果比淺層網(wǎng)絡(luò)的差。使用ResNet 網(wǎng)絡(luò)可以解決梯度消失或爆炸問(wèn)題。ResNet 網(wǎng)絡(luò)模型通過(guò)添加殘差捷徑,將輸入和輸出部分進(jìn)行恒等映射,從而可以輕松擴(kuò)展神經(jīng)網(wǎng)絡(luò)的層數(shù),無(wú)損地傳播梯度。
本文使用ResNet50 神經(jīng)網(wǎng)絡(luò)進(jìn)行垃圾識(shí)別,ResNet50 網(wǎng)絡(luò)分5 層,如表1 所示。其中第一層結(jié)構(gòu)較為簡(jiǎn)單,即對(duì)輸入進(jìn)行卷積計(jì)算,可視其為對(duì)輸入圖像的預(yù)處理。后4 層由殘差網(wǎng)絡(luò)構(gòu)成,分別用設(shè)計(jì)好的殘差塊依次疊加3、4、6、3 次,最后進(jìn)行全連接,經(jīng)過(guò)歸一化形成各自類(lèi)別的概率。每個(gè)恒等殘差塊中卷積核的順序分別是 1×1,3×3,1×1,其中上一個(gè) 1×1 卷積層用于減少通道數(shù),下一個(gè) 1×1 卷積層用于恢復(fù)通道數(shù),這樣就可使中間的3×3 卷積層的輸入和輸出的通道數(shù)都較小,既保持了精度又減少了計(jì)算量,因而效率更高。
表1 ResNet50 網(wǎng)絡(luò)結(jié)構(gòu)
基于TensorFlow(一個(gè)基于數(shù)據(jù)流編程的符號(hào)數(shù)學(xué)系統(tǒng))的Keras(一個(gè)由Python 編寫(xiě)的開(kāi)源人工神經(jīng)網(wǎng)絡(luò)庫(kù),可以作為T(mén)ensorflow 高階應(yīng)用程序接口)完成ResNet50 網(wǎng)絡(luò)的搭建,使用數(shù)據(jù)增強(qiáng)技術(shù)擴(kuò)充訓(xùn)練樣本數(shù)量,使用ImageNet 數(shù)據(jù)集預(yù)訓(xùn)練ResNet50 網(wǎng)絡(luò),關(guān)鍵技術(shù)如下:① Dropout 算法。ResNet50 網(wǎng)絡(luò)中參數(shù)數(shù)量約為25.6 M,即便使用數(shù)據(jù)增強(qiáng)提高樣本數(shù)量,還是存在訓(xùn)練樣本數(shù)不夠大及訓(xùn)練樣本噪聲問(wèn)題,易導(dǎo)致過(guò)擬合,故采用深度學(xué)習(xí)領(lǐng)域廣泛采用的Dropout算法[5]提高網(wǎng)絡(luò)的泛化能力。②自適應(yīng)學(xué)習(xí)率Adam 算法。學(xué)習(xí)率對(duì)于卷積神經(jīng)網(wǎng)絡(luò)的性能具有顯著影響,常見(jiàn)的學(xué)習(xí)率調(diào)整算法有 RMProp、Momentum、Adam 等。Adam 算法通過(guò)計(jì)算梯度的一階矩估計(jì)和二階矩估計(jì)而為不同的參數(shù)設(shè)計(jì)獨(dú)立的自適應(yīng)性學(xué)習(xí)率,收斂速度快,學(xué)習(xí)效率高,適合處理大數(shù)據(jù)集。③早停機(jī)制。早停是一種用來(lái)避免訓(xùn)練迭代時(shí)出現(xiàn)過(guò)擬合現(xiàn)象的正則化方法。深度網(wǎng)絡(luò)迭代訓(xùn)練時(shí),盡管在訓(xùn)練集上表現(xiàn)越來(lái)越好,錯(cuò)誤率越來(lái)越低,但實(shí)際上在某一刻,它在驗(yàn)證集的表現(xiàn)已經(jīng)開(kāi)始變差,這種現(xiàn)象在深度網(wǎng)絡(luò)的訓(xùn)練中很常見(jiàn)。[6]為避免這種情況,可以設(shè)置保存使驗(yàn)證集誤差最低的參數(shù)來(lái)獲得更優(yōu)的模型。如果在預(yù)設(shè)的耐心循環(huán)迭代次數(shù)內(nèi)驗(yàn)證誤差沒(méi)有下降,則提前終止訓(xùn)練過(guò)程,這樣能夠使得算法始終存儲(chǔ)訓(xùn)練過(guò)程中最優(yōu)的深度網(wǎng)絡(luò)模型,不僅節(jié)省了訓(xùn)練時(shí)間,而且可獲得泛化能力更好的模型。
深度學(xué)習(xí)垃圾分類(lèi)系統(tǒng)包含提供算法支持的算法模塊和實(shí)現(xiàn)用戶交互功能的Web 模塊,系統(tǒng)功能模塊如圖3 所示。Web 模塊利用Flask 框架搭建,F(xiàn)lask 是一個(gè)輕量級(jí)Web 應(yīng)用框架,具有結(jié)構(gòu)簡(jiǎn)單、部署輕快的特點(diǎn)。垃圾識(shí)別Web 界面采用Web Service 方式提供數(shù)據(jù),用戶通過(guò)post 方式將拍攝或現(xiàn)有的圖像提交給后端,后端調(diào)用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測(cè),并把結(jié)果以json 的格式返回前端。
圖3 深度學(xué)習(xí)垃圾分類(lèi)系統(tǒng)模塊圖
本文訓(xùn)練數(shù)據(jù)集采用的是華為技術(shù)有限公司云人工智能大賽提供的垃圾圖像數(shù)據(jù)集,該數(shù)據(jù)集涵蓋了生活中常見(jiàn)的垃圾,并按照最新的垃圾分類(lèi)標(biāo)準(zhǔn)將垃圾分成了可回收垃圾、廚余垃圾、有害垃圾和其他垃圾4 大類(lèi)。該數(shù)據(jù)集總共包含14 082 張圖片,其中數(shù)量最多的是可回收垃圾(8 611 張圖像),數(shù)量最少的是有害垃圾(1 150 張圖像),廚余垃圾 3 389 張,其他垃圾 1 652 張。
垃圾圖像標(biāo)簽由兩部分組成,包括4 個(gè)大類(lèi)別和40 個(gè)小類(lèi)別,其中4 個(gè)大類(lèi)別中可回收垃圾類(lèi)包含23 個(gè)小類(lèi)別,有害垃圾類(lèi)包含3 個(gè),廚余垃圾類(lèi)包含8 個(gè),其他垃圾類(lèi)包含6 個(gè)。各類(lèi)別圖像數(shù)量分布不均衡,廚余垃圾類(lèi)的菜葉菜根圖像數(shù)量最多,有736 張,最少的是其他垃圾類(lèi)的牙簽,有85 張。詳見(jiàn)圖4。
圖4 垃圾數(shù)據(jù)集數(shù)據(jù)分類(lèi)圖
對(duì)數(shù)據(jù)集進(jìn)行數(shù)據(jù)增強(qiáng)及歸一化處理后,將數(shù)據(jù)集按比例隨機(jī)劃分為8∶2,其中80%數(shù)據(jù)作為訓(xùn)練集,20%數(shù)據(jù)作為測(cè)試集。模型訓(xùn)練時(shí),采用Adam 算法對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行迭代優(yōu)化,設(shè)置初始學(xué)習(xí)率lr 為0.001,迭代過(guò)程中的樣本批處理大小設(shè)置為32,學(xué)習(xí)衰減率為0.000 5,迭代訓(xùn)練的次數(shù)為100 次,早停容忍循環(huán)次數(shù)為10 次,選擇交叉熵作為損失函數(shù)。選用的實(shí)驗(yàn)平臺(tái)的計(jì)算機(jī)配置如下:Intel Xeon Silver 4210 CPU*2,128G RAM,Ubuntu16.04 操作系統(tǒng),訓(xùn)練模型時(shí)計(jì)算并記錄分類(lèi)準(zhǔn)確率和損失值的趨勢(shì)。
ResNet50 網(wǎng)絡(luò)訓(xùn)練后的正確率及損失值趨勢(shì)如圖5 所示,模型訓(xùn)練5 輪之后測(cè)試準(zhǔn)確率趨于平穩(wěn),在26 輪訓(xùn)練結(jié)束后觸發(fā)了早停機(jī)制,提前終止訓(xùn)練。最終訓(xùn)練準(zhǔn)確率達(dá)到98.7%,測(cè)試準(zhǔn)確率達(dá)90.8%。
圖5 ResNet50 模型訓(xùn)練結(jié)果圖
為了評(píng)估當(dāng)前垃圾分類(lèi)識(shí)別神經(jīng)網(wǎng)絡(luò)模型的性能,設(shè)計(jì)VGG16 網(wǎng)絡(luò)開(kāi)展對(duì)比試驗(yàn),對(duì)比參數(shù)包括模型參數(shù)數(shù)量、準(zhǔn)確率等指標(biāo)。對(duì)比試驗(yàn)均使用微調(diào)模型的遷移學(xué)習(xí)方法,試驗(yàn)結(jié)果見(jiàn)表2。從表2 可以看出,ResNet50 的訓(xùn)練準(zhǔn)確率達(dá)到98.7%,測(cè)試準(zhǔn)確率達(dá)90.8%,結(jié)果優(yōu)于VGG16 網(wǎng)絡(luò)。
表2 不同網(wǎng)絡(luò)模型訓(xùn)練結(jié)果
在完成垃圾分類(lèi)模型的訓(xùn)練后,將訓(xùn)練好的模型集成至Web 平臺(tái),并對(duì)模型進(jìn)行分類(lèi)功能測(cè)試?;谇笆隼诸?lèi)算法分析與設(shè)計(jì),深度學(xué)習(xí)的垃圾分類(lèi)Web 平臺(tái)包括照片選取、手機(jī)拍照(移動(dòng)端)、垃圾分類(lèi)等主要功能。移動(dòng)端運(yùn)行效果如圖6 所示。Web 界面包含選擇菜單,點(diǎn)擊選擇菜單會(huì)提示照片圖庫(kù)、拍照和瀏覽3 個(gè)選項(xiàng)。選中照片圖庫(kù)將打開(kāi)相冊(cè)選擇圖片,拍照按鈕會(huì)喚醒相機(jī)進(jìn)行拍照。選中圖片后,點(diǎn)擊提交按鈕,圖片將會(huì)上傳至服務(wù)器,系統(tǒng)進(jìn)行模型推理識(shí)別并將識(shí)別結(jié)果返回前端,為用戶處理垃圾提供指導(dǎo)。上傳1 張網(wǎng)上的一次性餐盒圖片,測(cè)試?yán)R(shí)別分類(lèi)系統(tǒng)能否準(zhǔn)確識(shí)別,圖7 顯示了識(shí)別標(biāo)簽為其他垃圾/一次性快餐盒,識(shí)別結(jié)果準(zhǔn)確。進(jìn)一步隨機(jī)選取6 張不同類(lèi)別的垃圾圖片,分別是竹筷、易拉罐、電池、茶葉渣、毛絨玩具和煙蒂,圖8 顯示了垃圾圖片識(shí)別出的標(biāo)簽,可以看出識(shí)別結(jié)果無(wú)誤,識(shí)別效果良好。
圖6 系統(tǒng)在移動(dòng)端的運(yùn)行效果圖
圖7 系統(tǒng)的運(yùn)行結(jié)果示例圖
圖8 垃圾圖片識(shí)別測(cè)試結(jié)果示例圖
本文基于深度學(xué)習(xí)構(gòu)建垃圾識(shí)別分類(lèi)系統(tǒng),訓(xùn)練數(shù)據(jù)選用華為云人工智能大賽垃圾分類(lèi)數(shù)據(jù)集,并對(duì)數(shù)據(jù)集進(jìn)行數(shù)據(jù)增強(qiáng),提出基于ResNet50 網(wǎng)絡(luò)模型和遷移學(xué)習(xí)的圖像分類(lèi)方法,采用Dropout、Adam 和早停機(jī)制等關(guān)鍵技術(shù)。測(cè)試結(jié)果表明,系統(tǒng)能準(zhǔn)確識(shí)別不同類(lèi)型垃圾。