王 玉, 王夢佳, 張偉紅
(吉林大學 應用技術(shù)學院, 長春 130012)
隨著社會的發(fā)展與進步, 人們對垃圾分類的重視程度也在不斷的提高。垃圾處理是目前環(huán)境保護工作中的重要環(huán)節(jié), 而垃圾分類回收是垃圾處理的前提, 通過分類投放、 收集、 運輸以及處理的方式處理回收垃圾。圖像分類技術(shù)是通過傳統(tǒng)機器視覺算法實現(xiàn)的, 需要對每張圖片的重要特征進行提取, 但隨著圖片數(shù)量、 類別的大幅增加, 傳統(tǒng)方法的特征提取變得困難, 尤其依賴于人工對數(shù)據(jù)的判斷和試錯。
國內(nèi)外對垃圾回收分類問題的研究已經(jīng)成為熱門方向, 很多國家還設有專門的政府部門和公司實施垃圾分類。在發(fā)達國家, 垃圾回收分類在日常生活中非常普遍, 回收分類的概念也非常清晰。在生活垃圾回收分類方面, 有些發(fā)達國家經(jīng)過半個多世紀的研究和經(jīng)驗積累, 形成了自己完整的分類體系, 取得了顯著的成果, 對我國的生活垃圾分類具有重要的參考意義。我國對生活垃圾管理的研究和技術(shù)應用始于20世紀80年代末, 生活垃圾分類的概念在20世紀90年代末進入我國, 但實施效果并不明顯。
為有效解決智能垃圾分類問題, 筆者提出了一種基于CNN[1]和Group Normalization的垃圾圖像分類方法。該方法無需對輸入的圖像進行預處理, 網(wǎng)絡模型通過算法提取圖像特征, 通過加入群組歸一化(Group Normalization)和網(wǎng)絡模型各層之間的協(xié)作, 克服傳統(tǒng)分類算法的缺點, 實現(xiàn)對垃圾圖像的分類。相關(guān)實驗表明, 筆者提出的方法可以較好地識別不可回收及可回收垃圾。
深度學習在圖像處理領(lǐng)域的主要網(wǎng)絡結(jié)構(gòu)包括以下幾種: 深度神經(jīng)網(wǎng)絡(DNN: Deep Neural Networks)、 深度信念網(wǎng)絡(DBN: Deep Belief Nets)、 循環(huán)神經(jīng)網(wǎng)絡(RNN: Recurrent Neural Network)、 生成式對抗網(wǎng)絡(GAN: Generative Adversarial Networks)和卷積神經(jīng)網(wǎng)絡(CNN: Convolutional Neural Networks)。在公共安全、 軍事、 農(nóng)業(yè)和日常生活等領(lǐng)域有很多應用, 卷積神經(jīng)網(wǎng)絡在機器視覺領(lǐng)域有著十分優(yōu)秀的表現(xiàn), 所以被應用于各種解決方案中[2]。以垃圾圖像分類為例, 輸入階段, 由硬件設備將垃圾圖像的光學信息通過攝像系統(tǒng)采集, 然后經(jīng)過預處理(歸一化)、 特征提取和特征分析, 將格式化的數(shù)據(jù)輸入到算法中計算并輸出。
1982年, Fukushima等[3]首次提出了深度學習模型但并未引起人們足夠的重視, 直到2012年, Krizhevsky等[4]提出Alexnet引入了全新的深層結(jié)構(gòu)和Dropout方法, 成功在計算機視覺ImageNet LSVRC 比賽中奪冠, CNN正式走近人們的視線。利用CNN技術(shù), AlphaGo橫掃圍棋界, AI成為當下熱門話題, 同時圖像識別, 人臉識別等也需要依靠深度學習, CNN的發(fā)展尤為重要。批量歸一化(BN: Batch Normalization)算法由SerGey[5]在2015年首次提出, 目的是加快神經(jīng)網(wǎng)絡的收斂速度和穩(wěn)定性, 但為解除BN只能在小批次使用的限制, Wu等[6]提出用GN(Group Normalization)替代BN。
卷積神經(jīng)網(wǎng)絡(CNN)是一類含有卷積計算且結(jié)構(gòu)具有深度的前饋神經(jīng)網(wǎng)絡, 是深度學習中具有代表性的算法之一, 是多層感知機(MLP: Multilayer Perceptron)的一個變種模型。時間延遲神經(jīng)網(wǎng)絡和LeNet-5是最早出現(xiàn)的卷積神經(jīng)網(wǎng)絡。卷積神經(jīng)網(wǎng)絡依舊是層級網(wǎng)絡, 只是層的功能和形式有了變化, 可以說是傳統(tǒng)神經(jīng)網(wǎng)絡的一個改進。卷積神經(jīng)網(wǎng)絡為判別架構(gòu)模型[7], 典型的卷積神經(jīng)網(wǎng)絡主要由輸入層、 卷積層(特征提取層)、 池化層(下采樣層)、 全連接層和輸出層組成。
卷積網(wǎng)絡的核心思想是將局部感受野、 權(quán)值共享以及時間或空間亞采樣這3種結(jié)構(gòu)思想結(jié)合獲得了某種程度的位移、 尺度、 形變不變性。卷積網(wǎng)絡在本質(zhì)上是一種輸入到輸出的映射, 能學習大量的輸入與輸出之間的映射關(guān)系, 而不需要任何輸入和輸出之間精確的數(shù)學表達式, 只要用已知的模式對卷積網(wǎng)絡加以訓練, 網(wǎng)絡就具有輸入輸出對之間的映射能力[8]。
由于當前的卷積神經(jīng)網(wǎng)絡都是偏向于更深層次的結(jié)構(gòu), 因此卷積的層數(shù)在不斷增加, 更深層次的結(jié)構(gòu)有著更高的準確性, 但是也使用了更多的資源, 產(chǎn)生了更多的訓練參數(shù)。深層的神經(jīng)網(wǎng)絡訓練時, 后層的訓練參數(shù)輸入會受到前一層訓練參數(shù)更新的影響。網(wǎng)絡模型的參數(shù)是在不斷更新和變化并向前傳播, 所以也就導致了各層的輸入在不斷變化。研究人員把這個訓練過程的參數(shù)變化稱為內(nèi)部協(xié)方差變化。即在神經(jīng)網(wǎng)絡訓練過程中, 神經(jīng)網(wǎng)絡的輸入所服從的概率分布發(fā)生變化的現(xiàn)象被稱為中間協(xié)變量遷移。針對這一現(xiàn)象的解決辦法是對每層的輸入進行歸一化處理, 即批量歸一化(BN)。然而, BN在批量尺寸變小時, 誤差會迅速增加, 從而限制了BN用于訓練更大的模型。
為解決這一問題, 有學者提出了群組歸一化(GN)[9]。如圖1所示, GN將信道分成若干組, 并在每個組內(nèi)計算歸一化的平均值和方差。GN的計算與批量大小無關(guān), 在大批量范圍內(nèi)精度穩(wěn)定。GN本質(zhì)上仍是歸一化, 但它靈活地避開了BN的問題, 同時又不同于層歸一化、 實例歸一化。GN對輸入大小為[N,C,H,W]的圖像, 首先將通道設定成若干組, 在每個組內(nèi)計算方差和平均值, 對各層的輸入進行白化運算, 讓每層的輸入服從均值為0, 方差為1的正態(tài)分布, 很好地解決了中間協(xié)變量遷移的問題, 加快了網(wǎng)絡的收斂速度, 每個子圖表示特征圖張量,N作為批次軸,C作為通道軸,H,W作為空間軸。用相同的均值和方差對藍色像素進行標準化, 通過聚集這些像素的值計算均值和方差。GN在很大的批量范圍內(nèi)表現(xiàn)得非常穩(wěn)定。當批量大小為2個樣本時, 對ImageNet中的ResNet-50, GN的誤差比BN的誤差低10.6%。
圖1 規(guī)范化方法
筆者提出一種基于卷積神經(jīng)網(wǎng)絡和歸一化技術(shù)的垃圾圖像分類方法。卷積神經(jīng)網(wǎng)絡(CNN)是一類含有卷積計算且結(jié)構(gòu)具有深度的前饋神經(jīng)網(wǎng)絡, 是深度學習中具有代表性的算法之一。傳統(tǒng)卷積神經(jīng)網(wǎng)絡算法主要由卷積層、 池化層和全連接層組成。筆者使用ResNet模型, 相比傳統(tǒng)模型引入了殘差函數(shù)的概念, 同時為解決過擬合問題引入Dropout算法。為增加神經(jīng)網(wǎng)絡的非線性, 引入激活函數(shù): 整流線形單元(ReLU: Rectified Linear Unit)。ReLU函數(shù)相對簡單, 但其計算和收斂速度非??? 有利于減少訓練量和訓練時間。使用Softmax預測輸出類別的概率, 從而實現(xiàn)圖像分類。傳統(tǒng)卷積神經(jīng)網(wǎng)絡算法主要由卷積層、 池化層和全連接層組成。在此基礎上, 筆者所提出的方法加入Group Normalization, 既可解決中間協(xié)變量偏移問題, 又可加快網(wǎng)絡收斂速度, 算法流程如圖2所示。
圖2 筆者算法流程圖
筆者采用ResNet模型, 引入殘差單元, 增加了恒等映射, 通過直接將輸入信息繞到輸出, 以此減少信息丟失、 損耗較大的問題[10]。在ResNet模型結(jié)構(gòu)中, 輸入圖像由卷積層提取特征, 再被送入池化層和分類層。假設殘差網(wǎng)絡輸入x, 期望輸出H(x), 得到H(x)=F(x)+x, 當F(x)=0時, 得到恒等映射H(x)=x。與其他網(wǎng)路模型相比, 引入殘差F(x)的概念, 即F(x)=H(x)-x, 隨著訓練層數(shù)的增加, 殘差F(x)無限接近于0。整個網(wǎng)絡只需學習輸入、 輸出殘差部分, 降低學習難度, 簡化學習過程, 且訓練誤差隨著層數(shù)的增加而減小, ResNet更適合訓練更深層的卷積神經(jīng)網(wǎng)絡。由于層數(shù)的增加、 訓練樣本偏小, 就會產(chǎn)生過擬合的問題, 為解決這一問題, 筆者引入Dropout丟棄算法。
由于ResNet可以訓練更深層的卷積神經(jīng)網(wǎng)絡, 且保持較低的誤差, 但隨著卷積層數(shù)的增加, 不可避免地產(chǎn)生過擬合問題。過擬合具體表現(xiàn)在: 模型在訓練數(shù)據(jù)上損失函數(shù)值較小, 預測準確率較高; 但在測試數(shù)據(jù)上損失函數(shù)值較大, 預測準確率較低。為減少過擬合現(xiàn)象, 筆者引入BN的同時也引入了Dropout, 在一定程度上達到正則化的效果, 同時增加了迭代次數(shù)。Dropout即丟棄算法, 屬于提高模型泛化性方法, 對神經(jīng)網(wǎng)絡單元, 按照一定的概率將其暫時從網(wǎng)絡中丟棄。運行原理是以一定概率隨機讓某些神經(jīng)元輸出設置為0, 既不參與前向傳播也不參與反向傳播[11]。
卷積神經(jīng)網(wǎng)絡特征提取是通過使用卷積核實現(xiàn)的(如3×3,5×5,7×7), 卷積核對圖像進行卷積運算得到特征圖。卷積核的大小與計算量成正比, 所以卷積核應選擇小而深, 以便減少網(wǎng)絡中的計算量(如3×3,1×1), 堆疊很小的卷積核, 模型的性能才會提升。卷積神經(jīng)網(wǎng)絡的卷積核對應一個感受野, 這使每個神經(jīng)元不需要對全局圖像做感受, 每個神經(jīng)元只感受局部的圖像區(qū)域, 然后在更高層, 將這些感受不同局部的神經(jīng)元綜合起來就可以得到全局信息。
卷積核的大小通常為奇數(shù), 因為奇數(shù)卷積核方便確認中心像素位置進而移動卷積核, 而偶數(shù)卷積核計算時, 會覆蓋之前的值, 造成計算浪費[12]。兩個3×3的堆疊卷積層的有限感受野是5×5, 3個3×3的堆疊卷積層的感受野是7×7, 故可以通過小尺寸卷積層的堆疊替代大尺寸卷積層, 并感受野大小不變, 這里所選卷積核大小為3×3。
圖像經(jīng)過卷積處理后, 加入GN, 新提出的GN解決了BN式歸一化對批量大小依賴的影響。BN有很多優(yōu)點, 例如加速訓練速度、 緩解梯度彌散等, 但BN層與批量大小關(guān)系密切, 如果批量過小, 會受到過多干擾。因為每次計算均值和方差是在一個批量上, 所以如果批量太小, 則計算的均值、 方差不足以代表整個數(shù)據(jù)分布, 雖然有不錯的效果, 但會超過內(nèi)存容量, 需掃描更多次的數(shù)據(jù)集, 導致總訓練時間變長, 而且會直接固定梯度下降的方向, 導致很難更新。由此可見BN對批量大小有很強的依賴性, 而LN(Layer Normalization)、 IN(Instance Normalization)、 GN能擺脫這種依賴, 其中GN效果最好。
常見的激活函數(shù)有sigmoid函數(shù)、 tanh函數(shù)、 ReLU函數(shù)[13]。早期研究神經(jīng)網(wǎng)絡主要采用sigmoid函數(shù)或tanh函數(shù), 輸出有界, 很容易充當下一層的輸入。相對sigmoid函數(shù)和tanh函數(shù), ReLU函數(shù)其實就是一個取最大值函數(shù)。ReLU的設計參照了神經(jīng)學科的單側(cè)抑制的特點, 所有反方向的梯度都為0, 正方向不受抑制, 梯度為輸入本身。雖然ReLU函數(shù)輸出不是zero-centered, 但其計算速度非常快, 只需判斷輸入是否大于0。收斂速度也遠大于sigmoid函數(shù)以及tanh函數(shù)。
Softmax函數(shù), 又稱歸一化指數(shù)函數(shù)[14]。它是二分類函數(shù)sigmoid在多分類上的推廣, 目的是將多分類的結(jié)果以概率的形式展現(xiàn)。Softmax用于多分類過程, 它將多個神經(jīng)元的輸出映射到[0,1]區(qū)間內(nèi), 從而進行多分類。Softmax回歸同線性回歸一樣, 也是一個單層神經(jīng)網(wǎng)絡, 輸出層相當于一個全連接層。在訓練好回歸模型后, 輸入任意樣本特征的圖像, Softmax就可以預測輸出類別的概率, 將預測概率最大的類別作為最后神經(jīng)網(wǎng)絡的輸出類別, 從而實現(xiàn)了圖像分類。
筆者選用的圖像數(shù)據(jù)集為garbage圖片集, 分為可回收和不可回收垃圾兩大類。每類總計2 164張訓練圖片, 其中219張用于測試, 1 945張用于訓練。圖像分為灰度圖像與彩色圖像?;叶葓D像的灰度值為[0,1], 彩色圖像由三維張量表示, 格式為M×N×3的矩陣,M,N為圖像長寬的像素點個數(shù)。garbage圖片數(shù)據(jù)集規(guī)模如表1和表2所示。
表1 可回收垃圾數(shù)據(jù)集
表2 不可回收垃圾數(shù)據(jù)集
該數(shù)據(jù)庫中的可回收垃圾圖像如圖3所示, 這里采用32×32像素的3通道RGB彩色圖片。在訓練前, 先將圖片預處理。
1) 圖片尺寸歸一化, 即統(tǒng)一將圖片尺寸改為32×32×3的三維張量;
2) 增加圖片差異性與多樣性, 將圖片做隨機調(diào)整, 如平移、 旋轉(zhuǎn)。
圖3 Garbage數(shù)據(jù)庫中可回收垃圾圖像示例
將大小為32×32×3的三維張量輸入網(wǎng)絡, 經(jīng)過2個2×2池化層的特征提取得到4×4×32的特征圖, 最后通過4×4×120的卷積核得到120的一個向量輸入到全連接層。利用梯度下降法訓練網(wǎng)絡, 優(yōu)化參數(shù)。
實驗使用殘差網(wǎng)絡共計迭代數(shù)據(jù)集50次, 每批次隨機選取100張圖片進行訓練, 初始學習率為0.01, batch_size為5, 學習率衰減系數(shù)為5×10-3且隨迭代次數(shù)逐漸下降。GN可以通過PyTorch和TensorFlow中支持自動區(qū)分的代碼實現(xiàn)。神經(jīng)網(wǎng)絡中使用激活函數(shù)加入非線性因素, 提高模型的表達能力。
該實驗先行選取可回收垃圾圖像進行分類, 實驗結(jié)果如圖4所示, 訓練次數(shù)為50次, 訓練集和測試集的準確度隨次數(shù)的增加而更加精準, 訓練集最高識別率為1.0, 測試集最高識別率為0.96。cost損失函數(shù)不斷減小, 訓練集最小為0.11, 測試集最小為1.2。最后準確率隨訓練次數(shù)增加和圖片數(shù)量成正相關(guān), cost損失函數(shù)成反相關(guān), 結(jié)果符合預期。
圖4 訓練中迭代次數(shù)與損失函數(shù)值的學習曲線與準確率的驗證曲線
筆者對基于卷積神經(jīng)網(wǎng)絡和群組歸一化對垃圾圖像分類進行了研究。卷積神經(jīng)網(wǎng)絡在深度學習的圖像處理方面經(jīng)過長時期發(fā)展, 技術(shù)相對成熟且經(jīng)過多次創(chuàng)新演變有很強的優(yōu)勢。根據(jù)算法提取圖像特征, 無需對輸入的圖像進行預處理, Dropout、 權(quán)值共享、 池化等技術(shù)減少了圖像過擬合, 降低算法復雜度, 增加網(wǎng)絡的魯棒性。同時, 筆者采用CNN經(jīng)典模型中的ResNet模型, 相比傳統(tǒng)CNN模型增加了殘差學習, 以解決退化問題。相比傳統(tǒng)卷積神經(jīng)網(wǎng)絡的批量歸一化, 群組歸一化是近年提出的新方法, 提出的GN解決了BN式歸一化對batch size依賴的影響, 可在快速訓練神經(jīng)網(wǎng)絡的同時降低對于硬件的需求。