倪 黎,鄒衛軍
(南京理工大學自動化學院, 南京210094)
基于大數據的深度學習是機器學習的新領域,也是其發展的趨勢所在。深度學習的基礎結構是深度神經網絡,多層非線性運算單元組成深度學習的網絡架構,這些單元類似于生物的神經細胞,同時具有自適應的特點。
以深度學習理論為基礎的Inception是ILSVRC 2014比賽的冠軍[1],網絡結構的靈感來源于NIN[2],由Inception v1逐步發展到Icpetion v4[3-5]。該網絡從擴展網絡的寬度入手,組合了幾種不同的卷積結構,在保證層數的同時大幅減小了參數量,解決了參數冗余帶來的過擬合等問題。
Xception[6]是Inception的極端化體現,不同于常規的卷積操作,Xception使用深度可分離卷積(Depthwise Separable Convolutions),將通道間的相關性和空間相關性分開考慮,在不增加參數量的情況下取得了非常好的效果。由于Xception的優秀表現,使其在眾多領域得到應用。文獻[7]用Xception模塊改進了U-Net體系結構,從而提取了遙感圖像中的建筑物。文獻[8]則比較了Xception等網絡進行煙霧檢測的能力。
SEnet(Squeeze and Excitation Networks)[9]是Imagenet 2017圖像分類任務的第一名,其特點在于它考慮的不是從空間維度上優化神經網絡,而是著眼于特征通道之間的關系。SEnet中的SE模塊能夠增加有用特征的影響度,弱化無用特征所占的比重,從而提升網絡性能。通過與Xception網絡的結合,能夠更進一步提升Xception的準確度。
本文將SE模塊嵌入Xception中,通過實驗證明,SE模塊能夠有效地提升Xception的精確度。再將SE-Xception應用到動物種類識別中,取得了良好的效果。
卷積神經網絡(CNN)[10]主要由特征提取層和特征映射層構成,能夠自主提取圖像特征,可以直接使用原始圖像,避免了對輸入圖像的復雜預處理過程。
卷積神經網絡由一系列卷積層、激活層、池化層及全連接層構成。卷積過程提取輸入信號的不同特征,每個卷積核提取整個特征圖上的某個單一特征,多核卷積使得特征被充分提取,提取到的特征再作為輸入傳入下一層,這些特征由低級到高級層層遞進。因此,深層的網絡結構使學習的特征更加全局化。
為了解決參數過多的問題,Inception網絡中的Inception模塊使用了多分支結構增加網絡寬度,在分支中加入1×1卷積來減少參與運算的通道數,并且用全局平均池化代替了全連接層。
受到Inception模塊的啟發,Xception將前者的思路極端化,同時引入了深度可分離卷積。經過極限化對比分析,使用深度可分離卷積代替Inception模塊,將卷積操作在通道上和空間上完全分離開。首先進行通道上的卷積以獲得特征圖,再使用1×1的卷積核將這些特征圖融合起來。一個簡化的Xception模塊如圖1所示。

圖1 簡化的Xception模塊Fig.1 Simplified Xception module
Xception包含36個卷積層、14個模塊,每個模塊中包含若干個深度可分離卷積,后接池化層,并且幾乎都采用了Resnet中的殘差連接[11]。除殘差連接中的1×1卷積外,使用的卷積核全部為3×3大小。最后進行全局平均池化,經過全連接層輸出結果。
SE模塊的核心是壓縮(Squeeze)和激勵(Excitation)。在卷積操作得到具有多個通道的特征之后,使用SE模塊可以重新標定每個特征通道的權重。SE模塊分為3個步驟,分別是壓縮、激勵和重定權重(Reweight),原理圖如圖2所示。
壓縮操作使用全局平均池化(Global Average Pooling)將每個特征通道都壓縮成一個實數,這樣就將感受野擴展到全局范圍。該實數由如下公式得到

式(1)中,u為通過卷積后得到的特征圖,C為u的通道數,W×H為u的空間維度。

圖2 SE模塊原理圖Fig.2 Schematic diagram of SE module
接著,激勵操作捕獲壓縮后的實數列信息,使用兩個全連接(FC)層增加模塊的非線性。先經過第一個全連接層降維,再通過ReLU激活,然后經過第二個全連接層升維,最后經過sigmoid激活函數,整個過程如下

式(2)中,δ為非線性激活函數ReLU,W1和W2分別為兩個FC層的參數,σ為sigmoid函數。
最后重定權重,用原特征逐通道乘以激勵操作獲得的通道重要度系數,得到重新標定的特征

(1)網絡結構
為了減少參數增長,僅在Xception的Middle flow部分嵌入SE模塊,嵌入方式如圖3所示。

圖3 SE模塊嵌入Middle flow的示意圖Fig.3 Schematic diagram of SE module embedding Middle flow
輸入的訓練圖像先經過若干個深度可分離卷積得到特征圖,再經過SE模塊、重定通道的重要程度系數,從而使得有效特征的影響力得到增強,無關特征的影響力被削弱,最后加上殘差。文獻[9]通過對比實驗比較了降維率r的不同取值對實驗結果的影響,兼顧錯誤率和參數量,本實驗SE模塊中的參數r選取16。由于沒有在特征通道數較多的層中嵌入SE模塊,因此模型的復雜度和計算量僅有微量增加。
(2)數據集
驗證實驗在Oxford-IIIT Pet[12]數據集和CUB_200_2011[13]數據集上進行。
Oxford-IIIT Pet數據集包含了37個種類的寵物,每個種類有大約200張圖片,一共7349張圖片。CUB_200_2011是一個鳥類數據集,有200個種類,11788張圖片。
將上述每個數據集所有數據的80%劃分為訓練集,20%劃分為測試集。
(3)數據預處理
為了適應網絡所需的輸入數據大小,使用二次線性插值法將原始圖片尺寸統一放縮為299×299。再進行零均值化處理,即減去同一個數據集中所有圖片的均值,使得處理后的均值為零,這樣可以加快反向傳播過程中模型的收斂。再除以所有圖片的標準差,從而使特征標準化。
(4)實驗過程
將原始的jpg格式數據集轉換為TFRecords格式(TFRecords是TensorFlow的一種標準二進制數據格式),能夠使圖片讀取更加高效。使用shuffle batch隨機打亂批量讀取,讀取的圖片數據輸入網絡,經過一系列層,最后輸出稀疏表示的分類結果。
損失函數使用Softmax交叉熵損失

式(4)中,k為預測的類別數,zj為第j個類別的預測輸出,N為一個訓練批次的大小。
優化器為Adam[14],Adam能夠在消耗更少資源的情況下使模型更快收斂。初始學習率設置為0.0001,使用指數衰減法,學習率更新公式如下

式(5)中,lr為初始學習率,β1為Adam優化算法中梯度的一階矩估計的衰減系數,β2為二階矩估計的衰減系數,t為步數。
使用的電腦配置為16G內存、i7-8700KCPU、gtx1080ti顯卡。
實驗在TensorFlow上進行,TensorFlow是谷歌2015年開源的基于數據流圖的深度學習框架,能夠快速地搭建網絡。該框架支持分布式計算,有利于大數據集和大型網絡的訓練,高效靈活,在國內外得到廣泛應用。TensorFlow可以在一個或多個CPU/GPU上運行,除計算機外,它還可以應用于移動設備等多種計算平臺上。TensorFlow提供有十分便捷的可視化工具TensorBoard,能夠以圖形和曲線的形式展現數據,使網絡結構和變量更加直觀。
在上述條件下分別訓練30000步、50000步,訓練集的精確度曲線如圖4、圖5所示。

圖 4 SE-Xception與Xception在Oxford-IIIT Pet數據集上的實驗對比Fig.4 Experiment comparison between SE-Xception and Xception on Oxford-IIIT Pet dataset
由實驗結果可知,隨著訓練步數的增加,模型通過自主學習的方式調整權值和偏差,從而降低了訓練誤差,使得精確度逐步升高。在不同的數據集上,使用原始的Xception 模塊進行訓練,獲得上升的精確度曲線。融合SE模塊后,SEXception網絡訓練獲得的精確度曲線均在Xception之上。圖4中的Oxford-IIIT Pet數據集有1%~1.7%的提升,圖5中的CUB_200_2011數據集有0.8%~1%的提升。

圖 5 SE-Xception與Xception在CUB_200_2011數據集上的實驗對比Fig.5 Experiment comparison between SE-Xception and Xception on CUB_200_2011 dataset
使用訓練好的網絡在測試集上分別進行測試,測試集的精確度如表1所示。

表1 測試集精確度對比Table 1 Accuracy comparison of test sets
由表1可知,融合SE模塊的Xception在不同測試集上的精確度均高于原始的Xception。因此,SEnet可以進一步提高Xception的精確度。
Imagenet[15]是一個大規模圖像識別數據庫,它的出現對深度學習的發展產生了深遠的影響。該數據庫目前有14197122張圖片,共21841個類別。
從Imagenet中搜集10種動物的彩色圖片數據,剔除其中像素過小和模糊的數據后,一共有10074張。
部分種類圖片示例如圖6所示。
為了消除數據量差異對實驗結果的影響,每類數據的數據量盡量相近,均在742~1188之間,數據分布如圖7所示。
其中,9164張劃分為訓練集,910張劃分為測試集,訓練集和測試集劃分比例如圖8所示。

圖6 動物圖片數據示例Fig.6 Examples of image data for animals

圖7 動物圖片數據分布折線圖Fig.7 Polyline diagram of distribution for animals image data

圖8 訓練集與測試集劃分統計圖Fig.8 Statistical diagram of the division between training set and test set
將上述數據的訓練集作為訓練數據,使用Xception網絡進行訓練,Adam加快模型收斂。使用原始圖片訓練20000步,初步訓練的訓練集精確度曲線如圖9所示(實線)。

圖9 Xception 在動物圖片訓練集上的精確度曲線Fig.9 Accuracy curves of Xception on animal image training set
在0步~5000步之間,由于訓練誤差的快速下降,測試集的精確度迅速上升;在5000步~18000步之間,測試集的精確度仍逐步上升,但上升的趨勢逐漸平緩;18000步之后,精確度曲線最終趨于穩定,繼續訓練得到的訓練集精度為93.5%。由于數據中有除待識別物體以外的很多無關物體,網絡在訓練的過程中會學習到這些無關物體的特征,并將這些特征作為判斷依據。因此,對圖片進行適當裁剪除去冗余特征,再重新放大為299×299大小,使神經網絡能夠獲得更清晰準確的訓練數據。進行再次訓練,得到的訓練集精確度如圖9和圖10所示(虛線)。
輸入的數據集去除冗余特征后,訓練集精確度曲線收斂較快,最終精確度為95.0%,相比于不處理數據集時提升了1.5%。由此可以說明,圖像數據中的其他物體會形成干擾因素,對網絡的學習造成一定影響。再在此基礎上用SE-Xception網絡替換Xception網絡,同樣訓練20000步,獲得的訓練集精確度如圖10所示(實線)。

圖10 除去冗余特征的Xception和SE-Xception訓練集精確度曲線Fig.10 Accuracy curves of Xception and SE-Xception with redundant characteristics removed on training set
由圖10可知,將Xception網絡替換為SEXception網絡后,訓練集精確度提升了2%。用訓練好的網絡分別在測試集上進行測試,測試集精確度如表2所示。

表2 動物種類識別測試集精確度Table 2 Accuracy of animal species recognition on test set
由表2可知,測試集的精確度逐步提高,最終達到95.63%。
本文通過在TensorFlow平臺上進行實驗,證明了融合SE模塊的Xception具有更高的精確度,能夠更好地應用于圖像識別問題。在動物種類的識別任務中,收集了10種動物的圖片數據,制作成TFRecords格式。先使用Xception網絡進行訓練,輸入不經處理的原始數據時,測試集精確度只有88.79%;除去冗余特征后,測試集精確度提升到了90.87%;在此基礎上將Xception替換為SE-Xception網絡,最終測試集精確度能夠達到95.63%。