張國有,高 希
(太原科技大學 計算機科學與技術學院,山西 太原 030024)
隨著中國經(jīng)濟的高速發(fā)展,城市生活垃圾產(chǎn)量逐年升高。根據(jù)國內統(tǒng)計年鑒數(shù)據(jù),城市生活垃圾清運量從2003年的14 856.5萬噸[1]增加到2021年的23 511.7萬噸[2],平均每年相較2003年增長3.64%。垃圾分類已在國內全面展開,目前需要解決的主要問題是人們生產(chǎn)和生活中產(chǎn)生各種各樣的垃圾,人們有時候是很難準確判斷出其所屬的種類。按照2017年發(fā)布的《生活垃圾分類制度方案》,垃圾主要分為“以塑料、金屬制品為主的可回收垃圾;以瓜果蔬菜食物為主的廚余垃圾;以過期藥品和廢棄電子產(chǎn)品為主的有害垃圾;以建筑垃圾為主的其他垃圾”四大類,此分類標準符合中國國情,能夠切實地落地實施。
相較于傳統(tǒng)的圖像分類任務,以落地于實際工程應用為目的的垃圾分類,不僅需要達到高準確率、實時性快的特點,而且還需要具備從多種多樣的垃圾圖像中提取顯著語義特征,以應對生活場景中多種的垃圾類別。近年來,多位研究學者對垃圾分類的細粒度圖像分類問題展開了研究,并提供了新思路。趙冬娥等[3]利用SAM判別方法在可回收垃圾的高光譜圖像中實現(xiàn)檢測與分類,取得了更高的分類準確度,可達到99.33%。高明等[4]針對垃圾分類中類別易混淆、背景干擾等挑戰(zhàn),提出一種新型的像素級空間注意力機制PSATT(pixel-level spatial attention)。薛麗霞等[5]提出一種基于卷積神經(jīng)網(wǎng)絡并融合注意力機制和語義關聯(lián)性的多標簽圖像分類方法,可以有效地學習標簽之間語義關聯(lián)性,并提升多標簽圖像分類效果。馬雯等[6]針對人工分揀垃圾環(huán)境差、任務繁重且分揀效率低的問題 ,基于現(xiàn)有深度卷積神經(jīng)網(wǎng)絡模型,提出改進的Faster R-CNN目標檢測模型與VGG16及ResNet50卷積神經(jīng)網(wǎng)絡相結合的方法,與傳統(tǒng)Faster R-CNN算法相比,該方法平均精確度提高8.26百分點,綜合識別率達到81.77%,且能夠減少圖像處理時間。Seredkin等[7]開發(fā)了一種基于Fast R-CNN[8]在傳送帶上檢測和分類廢物的方法,使得神經(jīng)網(wǎng)絡模型的平均精度為64%。Yang M等[9]使用具有尺度不變特征變換的支持向量機和卷積神經(jīng)網(wǎng)絡。實驗表明:支持向量機的性能優(yōu)于CNN,由于難以找到最佳超參數(shù),CNN并未得到充分訓練。
現(xiàn)有的垃圾圖像分類方法,其運算準確度能達到90%以上,但在實際應用環(huán)境中,模型往往不能直接搭建在現(xiàn)有設備,例如:樹莓派開發(fā)板、單片機等。造成的主要原因有:模型在算力較好的GPU等設備中訓練,與實際應用環(huán)境計算能力相差甚遠,增加模型參數(shù)量雖然能夠提升準確率,但是其模型大小遠超應用設備可用內存。針對以上問題,該文以ShuffleNet V2[10]網(wǎng)絡為基礎進行改進,引入SE模塊和最大公約數(shù)分組卷機方法,從而減少算法運行時間,提升算法性能。主要貢獻有:
(1)在ShuffleNet V2網(wǎng)絡的基礎上,重新設計網(wǎng)絡單元結構,以適應網(wǎng)絡能夠在樹莓派等算力小的開發(fā)板上低延時運行。
(2)在網(wǎng)絡中引入SE模塊[11](Squeeze-and-Excitation),通過自適應評估網(wǎng)絡單元處理后的每個通道信息,獲取相應通道的相應權重因子,從而強化重要特征層的信息。
(3)針對多級分類問題,一方面在網(wǎng)絡末端連續(xù)拼接214、4個節(jié)點的全連接層。另一方面,在損失計算和準確率計算中針對多級分類,引入損失權重和準確率權重,提升模型對多級分類任務的適應能力。
深度可分離卷積,是將傳統(tǒng)的三維卷積核分解為一個逐通道處理的二維卷積(Depthwise Convolution)完成空間相關性的映射操作,和一個跨通道的1×1大小的三維普通卷積核,即逐點卷積(Pointwise Convolution)來增強特征提取,完成跨通道相關性的映射操作。逐通道卷積是完全在二維平面內進行的卷積操作,那么就必須要保證卷積核的數(shù)量和輸入特征矩陣的通道數(shù)相同,如此能夠完成映射跨通道相關性任務。而普通1×1大小的三維卷積的卷積核和輸入特征圖具有相同的通道數(shù),既保證了不同通道之間的跨通道映射,還能夠以增加卷積核個數(shù)的方式為不同通道增加跨通道映射的可能性。
假設,輸入特征圖分辨率為Ii×Ii,卷積核尺寸為Ck×Ck,k為卷積核在寬、高維度包含的權值數(shù)量,輸入通道為P,輸出通道為Q。普通的三維卷積經(jīng)過一次卷積操作后,產(chǎn)生的參數(shù)量為W1,計算量為WFLOPs1,如式(1)、(2)所示:
W1=Ck×Ck×P×Q
(1)
WFLOPs1=Ck×Ck×P×Q×Ii×Ii
(2)
深度可分離卷積產(chǎn)生的參數(shù)量為W2,計算量為WFLOPs2,如式(3)、(4)所示:
W2=Ck×Ck×1×P+1×1×P×Q
(3)
WFLOPs2=Ck×Ck×1×P×Ii×Ii+1×1×P×Q×Ii×Ii
(4)
相同大小卷積核的深度可分離卷積和普通卷積,在參數(shù)量方面的比值為W,在計算量方面的比值為WFLOPs,其計算如式(5)所示:
(5)
當卷積核為3×3×64時,輸入特征圖通道和輸出特征圖通道均為64,則傳統(tǒng)普通的三維卷積的參數(shù)量為36 864,而深度可分離卷積的參數(shù)量為4 672,在不考慮偏置的情況下同比縮減為原來的12.7%。經(jīng)過分析對比可知,采用深度可分離卷積,在輕量化網(wǎng)絡方面相較于傳統(tǒng)卷積網(wǎng)絡能夠大幅降低運算復雜度。
深度可分離卷積中的Depthwise Convolution是一種特殊的分組卷積,即:輸入特征矩陣通道數(shù)、卷積核個數(shù)、輸出特征矩陣通道數(shù)相等的分組卷積。
分組卷積最早出現(xiàn)在AlexNet[12]中,分組卷積和普通卷積過程的不同在于:分組卷積對輸入特征矩陣和卷積核進行了分組,卷積核只與相同分組的輸入特征矩陣進行卷積操作,不同組之間不進行信息融合。相較于普通卷積在所有的輸入特征圖上做卷積運算,屬于通道密集連接方式(channel dense connection),而組卷積則是一種通道稀疏連接方式(channel sparse connection),類似于全連接層之后的隨機失活(dropout)。使用分組卷積的網(wǎng)絡如Xception[13]、MobileNet V3[14]、ResNeXt[15]等。其中,Xception和MobileNet采用了深度可分離卷積。在卷積操作過程中,分組卷積和普通卷積參數(shù)量WGC、WCC,如式(6)、(7)所示:
(6)
WCC=Ck×Ck×P×Q
(7)
其中,Q表示分組卷積和普通卷積生成相同尺寸特征矩陣的深度,G表示輸入特征在分組卷積運算的channel維度的分組數(shù)量,且其值必為輸入特征和輸出特征的公約數(shù)。
通過對比公式(6)、(7),分組卷積在參數(shù)量方面僅僅是普通卷積的1/G,在計算量方面大幅降低,AlexNet指出在網(wǎng)絡結構中用分組的卷積操作,增加filter之間的對角相關性,降低過擬合的風險,具有正則化的效果。但是,分組卷積相對于普通卷積還存在一定的不足:大量的分組卷積在網(wǎng)絡中疊加,受限于分組方式,只有屬于相同組的特征層才能進行“信息交流”,不同組之間的特征層在網(wǎng)絡傳遞過程中始終保持閉塞狀態(tài),降低了網(wǎng)絡結果在最終輸出方面涵蓋不同特征層之間信息表達的可能性。
為提高不同特征層之間信息交流的目的,ShuffleNetV1中使用通道混洗的方式,能夠在不增加網(wǎng)絡參數(shù)量的情況下完成不同特征層之間的信息交流。通道混洗能夠完成不同特征層之間的信息交流,且相較于使用逐點卷積,具有不增加網(wǎng)絡參數(shù)量的優(yōu)點。其操作流程是在組卷積運算完成之后,將不同分組特征層內部重新分組成與組卷積相同分組數(shù)的內部分組,將不同分組特征層中的內部分組特征層按照順序依次抽取,即可獲得通道混洗后的特征矩陣。
圖1(a)、(b)是ShuffleNet V1網(wǎng)絡的兩個主要基本單元。在ShuffleNet V1單元(a)中,輸入特征經(jīng)過兩條支路,其中右側分支進行了2次1×1逐點卷積、1次3×3深度可分離卷積以及以此通道混洗操作。而左側支路則不對輸入特征進行任何操作,最終兩條支路特征相加、激活,得到最終的輸出特征。單元(a)針對輸入特征和輸出特征維度相同的情況,而單元(b)的右側支路采用了和單元(a)基本相同的操作,左側采用了3×3大小、步距為2的平均池化操作。最終,將兩側支路的輸出特征在channel維度拼接在一起,得到寬高減半、深度加倍的特征矩陣。

圖1 ShuffleNet單元
ShuffleNet V2網(wǎng)絡則主要由兩個單多次疊加完成,如圖1(c)、(d)。在ShuffleNet V2單元(c)中,輸入特征首先按照通道數(shù)一分為二,相當于對輸入特征在channel維度進行了二分組操作,每一組之間有各自的分支結構,左側進行不采取任何操作的同等映射,右側進行2次1×1逐點卷積和1次3×3深度可分離卷積,兩側的輸入和輸出通道數(shù)相同。兩側輸出特征在channel維度完成拼接融合,并使用通道混洗以保證兩側特征充分融合。單元(d)在維度方面,主要完成通道加倍、寬高減半操作,屬于下采樣模塊。單元(d)右側相對于(c)的右側采用步距為2的深度可分離卷積,完成特征的2倍下采樣。左側支路進行1次步距為2的3×3深度可分離卷積和1次1×1逐點卷積。兩側支路通過channel維度的拼接,完成特征的通道加倍。在ShuffleNet V2相較于V1,將通道混洗操作從右側支路中遷移到主路上,不僅在很大程度上解決了分組卷積阻礙不同特征層“信息交流“的問題,而且能夠加強兩側支路輸出特征的信息融合。
在實際的模型搭建和測試環(huán)節(jié)中發(fā)現(xiàn),直接使用ShuffleNet V2網(wǎng)絡,模型參數(shù)量依舊很大,不能部署在樹莓派開發(fā)板。
為了進一步降低模型參數(shù)量,且最大范圍保證準確度,秉承以下原則重新設計網(wǎng)絡模型:(1)在計算量相同的卷積運算下,輸入特征與輸出特征具有相同通道數(shù)時,參數(shù)量最小;(2)在組卷積運算時,參數(shù)量隨組卷積分組個數(shù)呈正相關;(3)網(wǎng)絡設計的分支程度越高,耗時越長的分支對網(wǎng)絡的運行效率將起到?jīng)Q定作用。
Shuffle-SENet單元如圖2所示。

圖2 Shuffle-SENet單元
Shuffle-SENet網(wǎng)絡對ShuffleNet V2網(wǎng)絡的改進主要體現(xiàn)在以下3點:
(1)將ShuffleNet V2單元中多次出現(xiàn)的1×1逐點卷積,替換為1×1最大公約數(shù)分組卷積。其中為了盡可能減少分組數(shù)量且保證程序能夠穩(wěn)定運行,每次組卷積的分組數(shù)是輸入特征通道和輸出特征通道的最大因數(shù)gcd。分組數(shù)gcd在網(wǎng)絡的不同階段都是非固定、動態(tài)的,例如:輸入通道為24,輸出通道為54,那么gcd值為6。
(2)在ShuffleNet V2單元末端加入通道注意力機制(Squeeze-and-Excitation)。SE模塊通過自適應評估ShuffleNet V2單元處理后的每個通道信息,獲取相應通道的權重因子,從而強化重要特征層的信息,忽略其他特征層信息。
(3)為了適應具有多級分類任務的垃圾分類需求,在ShuffleNet V2網(wǎng)絡末端加入了兩個全連接層。第一個全連接層共214個節(jié)點,分別對應214個細分類別。第二個全連接層共4個節(jié)點,分別對應4個標準垃圾類別。
Shuffle-SENet網(wǎng)絡結構如圖3所示。

圖3 Shuffle-SENet網(wǎng)絡結構
首先,對尺寸不同的圖像進行等比例水平反轉和224×224的隨機中心裁剪,完成數(shù)據(jù)的預處理操作,將預處理后的圖像經(jīng)過Shuffle-SENet網(wǎng)絡第一階段的卷積層和池化層獲得64×56×56大小的特征圖;然后,按照Shuffle-SENet網(wǎng)絡的二、三、四階段指定的網(wǎng)絡單元重復次數(shù)獲得192×7×7大小的特征圖;最后,網(wǎng)絡串聯(lián)卷積層和全局最大池化層分別將特征圖深度提升到1 024、尺寸縮小為1。為了適應具有多級分類任務的垃圾分類需求,在ShuffleNet V2網(wǎng)絡末端加入了兩個全連接層。第一個全連接層共214個節(jié)點,分別對應214個細分類別。第二個全連接層共4個節(jié)點,分別對應4個標準垃圾類別。
依照國內2017年發(fā)布的《生活垃圾分類制度方案》,包括:4個標準類別、214個細分類別,共計58 061張圖片,每個標準類別約包含14 515張,每個細分類別約包含270張。標準類別包括:有害垃圾、可回收垃圾、廚余垃圾以及其他垃圾。
在進行深度學習模型訓練之前需要將數(shù)據(jù)集圖像進行預處理,根據(jù)計算的可靠性和算力支持,首先將所有圖像隨機裁剪到224×224的統(tǒng)一像素大小,然后按照1∶1的比例對圖像進行水平反轉。參考Pytorch官網(wǎng)公布的歸一化標準,將每張圖像的RGB三通道像素值分別調整到均值為0.485、0.456、0.406,方差為0.229、0.224、0.225的正態(tài)分布。歸一化將數(shù)據(jù)映射到指定的范圍內進行處理,降低計算量,使訓練過程更加便捷快速。其計算如公式(8)所示:
(8)
其中,μ為數(shù)據(jù)均值(mean),σ為標準差(std)。
實驗采用交叉熵損失函數(shù)(Cross-Entropy Loss Function)來衡量模型預測值和真實值之間的差距。其計算如式(9)所示:
(9)
其中,Closs表示預測值和真實值之間的損失值,m表示訓練樣本數(shù)量,n表示預測類別數(shù)量,q(xij)表示樣本xi為類別j的真實概率,p(xij)表示模型預測樣本xi為類別j的概率。
對于多級分類問題,4個標準類別和214個細分類別的損失值都應該全部列入衡量范圍。因此,在公式(9)的基礎上加入權重類別損失函數(shù),其計算如式(10)所示:
Cavg=0.9Closs_major+0.1Closs_minor
(10)
其中,Cavg表示權重類別損失值,Closs_major表示模型預測細分類別的損失值,Closs_minor表示模型預測標準類別的損失值。
為了提升網(wǎng)絡對標準類別的分類能力,且在實際垃圾分類中對標準類別存在較高的分類能力,對標準類別和細分類別的損失值賦予不同的權重0.9、0.1。本研究針對多級多類別分類問題,使用交叉熵損失函數(shù)求導更為簡單,能在模型訓練過程中加快模型損失計算和更新梯度的速度。
優(yōu)化算法的選擇也是一個模型的重中之重。即使在數(shù)據(jù)集和模型架構完全相同的情況下,采用不同的優(yōu)化算法,也很可能導致截然不同的訓練效果。如果損失函數(shù)是衡量模型預測結果和真實值的差距,那么優(yōu)化方法就是指導模型在迭代過程中得到最優(yōu)解。本試驗采用SGDM[16](Stochastic Gradient Descent with Momentum)優(yōu)化器,通過引入動量機制,抑制了SGD的震蕩。其優(yōu)化方法如式(11)、(12)所示:
νt=η×νt-1+α×g(wt)
(11)
wt+1=wt-νt
(12)
其中,α表示學習率,η表示動量系數(shù),g(wt)表示在第t+1次優(yōu)化時對參數(shù)wt的損失梯度,νt表示在第t+1次優(yōu)化時權重wt+1對權重wt的差值,第一次的權重優(yōu)化設置ν0為0。實驗中設置學習率初始值α為0.01,動量系數(shù)η為0.9,在訓練周期中學習率會根據(jù)優(yōu)化策略不斷調整,以避免網(wǎng)絡的震蕩難以收斂。
在深度學習傳統(tǒng)的優(yōu)化方法中,學習率α在優(yōu)化器定義之后總是一成不變的。但是由于模型的權重在初始階段是隨機初始化的,學習率的大小會直接影響模型的穩(wěn)定性,過大的學習率會使模型震蕩難以收斂,過小的學習率則會減慢模型收斂速度。因此,該文提出了自定義學習率優(yōu)化策略,其計算方法如式(13)所示:
lrf}
(13)
其中,αt代表迭代t次數(shù)據(jù)集的學習率,lrf代表學習率的迭代相關系數(shù),lrf的值越大,學習率的變換就越穩(wěn)定,且lrf的取值在0~1之間。
學習率初始值為0.01,經(jīng)過200個epoch數(shù)據(jù)集迭代之后學習率下降到0.001,為初始值的10%。此方法通過在迭代數(shù)據(jù)集過程中動態(tài)調整學習率,避免了模型震蕩難以收斂的缺點。
Yosinski等[17]通過大量實驗評估了不同位置卷積層的遷移能力,實驗發(fā)現(xiàn):低層特征具有很強的遷移能力,而高層卷積層的特征都是和具體任務相關的抽象特征,不適合進行遷移,需要在新數(shù)據(jù)集上重新學習訓練。基于此理論,為了提高模型提取底層特征的能力,實驗采用載入底層網(wǎng)絡權重并所有權重,重新訓練的遷移學習方法。
實驗中使用到的硬件設備和軟件版本以及各種訓練參數(shù)如表1所示。

表1 實驗配置
評價指標如下:
標準類別的Top1準確率為:
(14)

細分類別的Top5準確率為:
(15)

加權類別準確率為:
acc=0.1acctop1+0.9acctop5
(16)
本研究搭建了與ShufffleNet網(wǎng)絡具有相同版本信息的模型(Shuffle-SENet),并將具有相同版本的不同模型分別完成損失、準確率、運行速度等方面的對比。為驗證優(yōu)化后的模型結構相比ShuffleNet V2原模型的有效性,在百度飛槳提供的垃圾分類數(shù)據(jù)集上,將數(shù)據(jù)集的80%劃分為訓練數(shù)據(jù)集,20%為測試數(shù)據(jù)集,進行了相關實驗和模型預測。
3.2.1 訓練損失值對比
ShuffleNet V2、ShuffleNet V1、MobilenNet與Shuffle-SENet的所有版本,遍歷數(shù)據(jù)集200個周期,在訓練集的損失值對比如圖4所示。

圖4 訓練損失值
由訓練損失值的結果分析,文中模型所有版本損失值的下降速度和收斂速度均略微優(yōu)于ShuffleNet V2、ShuffleNet V1、MobilenNet。除卻參數(shù)量較小的0.5版模型,其余所有模型的損失值皆達到0.1,但所有模型的損失值在180個迭代周期后達到收斂。
3.2.2 預測準確率對比
ShuffleNet V2、ShuffleNet V1、MobilenNet與Shuffle-SENet的所有版本,迭代200次數(shù)據(jù)集,在測試集的準確度對比如圖5所示。

圖5 測試準確度
由于文中模型訓練采用遷移學習的方法,故模型訓練前期存在較高的準確度。由測試準確度結果分析,文中模型的0.5版本相較于ShuffleNet V2、MobileNet即使在參數(shù)量大幅縮減的情況下,也能保持基本一致。文中模型的1.0、1.5版本相較于ShuffleNet V2準確率基本相同,還能大幅超出ShuffleNet V1平均0.1的準確率。在迭代數(shù)據(jù)集180個周期之后,文中模型的0.5版本預測準確度開始收斂,并達到90%左右。
3.2.3 與ShuffleNet V2的運行速率對比
在保證文中模型在準確度方面基本不變的情況下,為了驗證采用最大公約數(shù)分組卷積的有效性,統(tǒng)計了所有模型分別在CPU、GPU的單幀圖像預測時間(Time on CPU、GPU)、參數(shù)量(params)以及浮點運算(FLOPs)。如表2所示,文中模型在處理速度方面能夠提升30 ms左右,在參數(shù)量方面最低降低10%,且特征深度越大參數(shù)量降低越明顯,在浮點運算量方面能降低32.8%~61.7%。將文中所有版本模型搭載到Raspberry Pi 4B+發(fā)板中。模型的0.5版本單幀預測時間1.28 s,平均準確率在80%以上。

表2 不同模型的預測速率對比
在ShuffleNet V2網(wǎng)絡的基礎上,重新設計網(wǎng)絡單元結構,以適應網(wǎng)絡能夠在樹莓派等算力小的開發(fā)板上低延時運行。另外,在網(wǎng)絡中引入SE模塊,通過自適應評估網(wǎng)絡單元處理后的每個通道信息,獲取相應通道的權重因子,從而強化重要特征層的信息。針對多級分類問題,一方面在網(wǎng)絡末端連續(xù)拼接214、4個節(jié)點的全連接層。另一方面,在損失計算和準確率計算中針對多級分類,引入損失權重和準確率權重,提升模型對多級分類任務的適應能力。綜合以上策略,雖然Shuffle-SENet網(wǎng)絡在準確率方面略有犧牲,但是在實際運行中基本滿足了垃圾分類需求,且能夠在樹莓派開發(fā)板之類算力較弱的設備中低延時、高效運行。在后續(xù)的研究之中,可以嘗試引入自注意力機制,進一步提升模型從全局信息中提取重要信息的能力和垃圾分類準確率。另外,為了提高模型的實時運行速率,一方面可以從輕量化網(wǎng)絡結構設計方面構思,另一方面采用模型壓縮的方法對模型進行一系列蒸餾、剪枝、量化等操作,將兩種方法結合使用對于提升網(wǎng)絡速率極有可能產(chǎn)生事半功倍的效果。