倪 黎,鄒衛(wèi)軍
(南京理工大學自動化學院, 南京210094)
基于大數(shù)據(jù)的深度學習是機器學習的新領(lǐng)域,也是其發(fā)展的趨勢所在。深度學習的基礎(chǔ)結(jié)構(gòu)是深度神經(jīng)網(wǎng)絡(luò),多層非線性運算單元組成深度學習的網(wǎng)絡(luò)架構(gòu),這些單元類似于生物的神經(jīng)細胞,同時具有自適應的特點。
以深度學習理論為基礎(chǔ)的Inception是ILSVRC 2014比賽的冠軍[1],網(wǎng)絡(luò)結(jié)構(gòu)的靈感來源于NIN[2],由Inception v1逐步發(fā)展到Icpetion v4[3-5]。該網(wǎng)絡(luò)從擴展網(wǎng)絡(luò)的寬度入手,組合了幾種不同的卷積結(jié)構(gòu),在保證層數(shù)的同時大幅減小了參數(shù)量,解決了參數(shù)冗余帶來的過擬合等問題。
Xception[6]是Inception的極端化體現(xiàn),不同于常規(guī)的卷積操作,Xception使用深度可分離卷積(Depthwise Separable Convolutions),將通道間的相關(guān)性和空間相關(guān)性分開考慮,在不增加參數(shù)量的情況下取得了非常好的效果。由于Xception的優(yōu)秀表現(xiàn),使其在眾多領(lǐng)域得到應用。文獻[7]用Xception模塊改進了U-Net體系結(jié)構(gòu),從而提取了遙感圖像中的建筑物。文獻[8]則比較了Xception等網(wǎng)絡(luò)進行煙霧檢測的能力。
SEnet(Squeeze and Excitation Networks)[9]是Imagenet 2017圖像分類任務的第一名,其特點在于它考慮的不是從空間維度上優(yōu)化神經(jīng)網(wǎng)絡(luò),而是著眼于特征通道之間的關(guān)系。SEnet中的SE模塊能夠增加有用特征的影響度,弱化無用特征所占的比重,從而提升網(wǎng)絡(luò)性能。通過與Xception網(wǎng)絡(luò)的結(jié)合,能夠更進一步提升Xception的準確度。
本文將SE模塊嵌入Xception中,通過實驗證明,SE模塊能夠有效地提升Xception的精確度。再將SE-Xception應用到動物種類識別中,取得了良好的效果。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)[10]主要由特征提取層和特征映射層構(gòu)成,能夠自主提取圖像特征,可以直接使用原始圖像,避免了對輸入圖像的復雜預處理過程。
卷積神經(jīng)網(wǎng)絡(luò)由一系列卷積層、激活層、池化層及全連接層構(gòu)成。卷積過程提取輸入信號的不同特征,每個卷積核提取整個特征圖上的某個單一特征,多核卷積使得特征被充分提取,提取到的特征再作為輸入傳入下一層,這些特征由低級到高級層層遞進。因此,深層的網(wǎng)絡(luò)結(jié)構(gòu)使學習的特征更加全局化。
為了解決參數(shù)過多的問題,Inception網(wǎng)絡(luò)中的Inception模塊使用了多分支結(jié)構(gòu)增加網(wǎng)絡(luò)寬度,在分支中加入1×1卷積來減少參與運算的通道數(shù),并且用全局平均池化代替了全連接層。
受到Inception模塊的啟發(fā),Xception將前者的思路極端化,同時引入了深度可分離卷積。經(jīng)過極限化對比分析,使用深度可分離卷積代替Inception模塊,將卷積操作在通道上和空間上完全分離開。首先進行通道上的卷積以獲得特征圖,再使用1×1的卷積核將這些特征圖融合起來。一個簡化的Xception模塊如圖1所示。
圖1 簡化的Xception模塊Fig.1 Simplified Xception module
Xception包含36個卷積層、14個模塊,每個模塊中包含若干個深度可分離卷積,后接池化層,并且?guī)缀醵疾捎昧薘esnet中的殘差連接[11]。除殘差連接中的1×1卷積外,使用的卷積核全部為3×3大小。最后進行全局平均池化,經(jīng)過全連接層輸出結(jié)果。
SE模塊的核心是壓縮(Squeeze)和激勵(Excitation)。在卷積操作得到具有多個通道的特征之后,使用SE模塊可以重新標定每個特征通道的權(quán)重。SE模塊分為3個步驟,分別是壓縮、激勵和重定權(quán)重(Reweight),原理圖如圖2所示。
壓縮操作使用全局平均池化(Global Average Pooling)將每個特征通道都壓縮成一個實數(shù),這樣就將感受野擴展到全局范圍。該實數(shù)由如下公式得到
式(1)中,u為通過卷積后得到的特征圖,C為u的通道數(shù),W×H為u的空間維度。
圖2 SE模塊原理圖Fig.2 Schematic diagram of SE module
接著,激勵操作捕獲壓縮后的實數(shù)列信息,使用兩個全連接(FC)層增加模塊的非線性。先經(jīng)過第一個全連接層降維,再通過ReLU激活,然后經(jīng)過第二個全連接層升維,最后經(jīng)過sigmoid激活函數(shù),整個過程如下
式(2)中,δ為非線性激活函數(shù)ReLU,W1和W2分別為兩個FC層的參數(shù),σ為sigmoid函數(shù)。
最后重定權(quán)重,用原特征逐通道乘以激勵操作獲得的通道重要度系數(shù),得到重新標定的特征
(1)網(wǎng)絡(luò)結(jié)構(gòu)
為了減少參數(shù)增長,僅在Xception的Middle flow部分嵌入SE模塊,嵌入方式如圖3所示。
圖3 SE模塊嵌入Middle flow的示意圖Fig.3 Schematic diagram of SE module embedding Middle flow
輸入的訓練圖像先經(jīng)過若干個深度可分離卷積得到特征圖,再經(jīng)過SE模塊、重定通道的重要程度系數(shù),從而使得有效特征的影響力得到增強,無關(guān)特征的影響力被削弱,最后加上殘差。文獻[9]通過對比實驗比較了降維率r的不同取值對實驗結(jié)果的影響,兼顧錯誤率和參數(shù)量,本實驗SE模塊中的參數(shù)r選取16。由于沒有在特征通道數(shù)較多的層中嵌入SE模塊,因此模型的復雜度和計算量僅有微量增加。
(2)數(shù)據(jù)集
驗證實驗在Oxford-IIIT Pet[12]數(shù)據(jù)集和CUB_200_2011[13]數(shù)據(jù)集上進行。
Oxford-IIIT Pet數(shù)據(jù)集包含了37個種類的寵物,每個種類有大約200張圖片,一共7349張圖片。CUB_200_2011是一個鳥類數(shù)據(jù)集,有200個種類,11788張圖片。
將上述每個數(shù)據(jù)集所有數(shù)據(jù)的80%劃分為訓練集,20%劃分為測試集。
(3)數(shù)據(jù)預處理
為了適應網(wǎng)絡(luò)所需的輸入數(shù)據(jù)大小,使用二次線性插值法將原始圖片尺寸統(tǒng)一放縮為299×299。再進行零均值化處理,即減去同一個數(shù)據(jù)集中所有圖片的均值,使得處理后的均值為零,這樣可以加快反向傳播過程中模型的收斂。再除以所有圖片的標準差,從而使特征標準化。
(4)實驗過程
將原始的jpg格式數(shù)據(jù)集轉(zhuǎn)換為TFRecords格式(TFRecords是TensorFlow的一種標準二進制數(shù)據(jù)格式),能夠使圖片讀取更加高效。使用shuffle batch隨機打亂批量讀取,讀取的圖片數(shù)據(jù)輸入網(wǎng)絡(luò),經(jīng)過一系列層,最后輸出稀疏表示的分類結(jié)果。
損失函數(shù)使用Softmax交叉熵損失
式(4)中,k為預測的類別數(shù),zj為第j個類別的預測輸出,N為一個訓練批次的大小。
優(yōu)化器為Adam[14],Adam能夠在消耗更少資源的情況下使模型更快收斂。初始學習率設(shè)置為0.0001,使用指數(shù)衰減法,學習率更新公式如下
式(5)中,lr為初始學習率,β1為Adam優(yōu)化算法中梯度的一階矩估計的衰減系數(shù),β2為二階矩估計的衰減系數(shù),t為步數(shù)。
使用的電腦配置為16G內(nèi)存、i7-8700KCPU、gtx1080ti顯卡。
實驗在TensorFlow上進行,TensorFlow是谷歌2015年開源的基于數(shù)據(jù)流圖的深度學習框架,能夠快速地搭建網(wǎng)絡(luò)。該框架支持分布式計算,有利于大數(shù)據(jù)集和大型網(wǎng)絡(luò)的訓練,高效靈活,在國內(nèi)外得到廣泛應用。TensorFlow可以在一個或多個CPU/GPU上運行,除計算機外,它還可以應用于移動設(shè)備等多種計算平臺上。TensorFlow提供有十分便捷的可視化工具TensorBoard,能夠以圖形和曲線的形式展現(xiàn)數(shù)據(jù),使網(wǎng)絡(luò)結(jié)構(gòu)和變量更加直觀。
在上述條件下分別訓練30000步、50000步,訓練集的精確度曲線如圖4、圖5所示。
圖 4 SE-Xception與Xception在Oxford-IIIT Pet數(shù)據(jù)集上的實驗對比Fig.4 Experiment comparison between SE-Xception and Xception on Oxford-IIIT Pet dataset
由實驗結(jié)果可知,隨著訓練步數(shù)的增加,模型通過自主學習的方式調(diào)整權(quán)值和偏差,從而降低了訓練誤差,使得精確度逐步升高。在不同的數(shù)據(jù)集上,使用原始的Xception 模塊進行訓練,獲得上升的精確度曲線。融合SE模塊后,SEXception網(wǎng)絡(luò)訓練獲得的精確度曲線均在Xception之上。圖4中的Oxford-IIIT Pet數(shù)據(jù)集有1%~1.7%的提升,圖5中的CUB_200_2011數(shù)據(jù)集有0.8%~1%的提升。
圖 5 SE-Xception與Xception在CUB_200_2011數(shù)據(jù)集上的實驗對比Fig.5 Experiment comparison between SE-Xception and Xception on CUB_200_2011 dataset
使用訓練好的網(wǎng)絡(luò)在測試集上分別進行測試,測試集的精確度如表1所示。
表1 測試集精確度對比Table 1 Accuracy comparison of test sets
由表1可知,融合SE模塊的Xception在不同測試集上的精確度均高于原始的Xception。因此,SEnet可以進一步提高Xception的精確度。
Imagenet[15]是一個大規(guī)模圖像識別數(shù)據(jù)庫,它的出現(xiàn)對深度學習的發(fā)展產(chǎn)生了深遠的影響。該數(shù)據(jù)庫目前有14197122張圖片,共21841個類別。
從Imagenet中搜集10種動物的彩色圖片數(shù)據(jù),剔除其中像素過小和模糊的數(shù)據(jù)后,一共有10074張。
部分種類圖片示例如圖6所示。
為了消除數(shù)據(jù)量差異對實驗結(jié)果的影響,每類數(shù)據(jù)的數(shù)據(jù)量盡量相近,均在742~1188之間,數(shù)據(jù)分布如圖7所示。
其中,9164張劃分為訓練集,910張劃分為測試集,訓練集和測試集劃分比例如圖8所示。
圖6 動物圖片數(shù)據(jù)示例Fig.6 Examples of image data for animals
圖7 動物圖片數(shù)據(jù)分布折線圖Fig.7 Polyline diagram of distribution for animals image data
圖8 訓練集與測試集劃分統(tǒng)計圖Fig.8 Statistical diagram of the division between training set and test set
將上述數(shù)據(jù)的訓練集作為訓練數(shù)據(jù),使用Xception網(wǎng)絡(luò)進行訓練,Adam加快模型收斂。使用原始圖片訓練20000步,初步訓練的訓練集精確度曲線如圖9所示(實線)。
圖9 Xception 在動物圖片訓練集上的精確度曲線Fig.9 Accuracy curves of Xception on animal image training set
在0步~5000步之間,由于訓練誤差的快速下降,測試集的精確度迅速上升;在5000步~18000步之間,測試集的精確度仍逐步上升,但上升的趨勢逐漸平緩;18000步之后,精確度曲線最終趨于穩(wěn)定,繼續(xù)訓練得到的訓練集精度為93.5%。由于數(shù)據(jù)中有除待識別物體以外的很多無關(guān)物體,網(wǎng)絡(luò)在訓練的過程中會學習到這些無關(guān)物體的特征,并將這些特征作為判斷依據(jù)。因此,對圖片進行適當裁剪除去冗余特征,再重新放大為299×299大小,使神經(jīng)網(wǎng)絡(luò)能夠獲得更清晰準確的訓練數(shù)據(jù)。進行再次訓練,得到的訓練集精確度如圖9和圖10所示(虛線)。
輸入的數(shù)據(jù)集去除冗余特征后,訓練集精確度曲線收斂較快,最終精確度為95.0%,相比于不處理數(shù)據(jù)集時提升了1.5%。由此可以說明,圖像數(shù)據(jù)中的其他物體會形成干擾因素,對網(wǎng)絡(luò)的學習造成一定影響。再在此基礎(chǔ)上用SE-Xception網(wǎng)絡(luò)替換Xception網(wǎng)絡(luò),同樣訓練20000步,獲得的訓練集精確度如圖10所示(實線)。
圖10 除去冗余特征的Xception和SE-Xception訓練集精確度曲線Fig.10 Accuracy curves of Xception and SE-Xception with redundant characteristics removed on training set
由圖10可知,將Xception網(wǎng)絡(luò)替換為SEXception網(wǎng)絡(luò)后,訓練集精確度提升了2%。用訓練好的網(wǎng)絡(luò)分別在測試集上進行測試,測試集精確度如表2所示。
表2 動物種類識別測試集精確度Table 2 Accuracy of animal species recognition on test set
由表2可知,測試集的精確度逐步提高,最終達到95.63%。
本文通過在TensorFlow平臺上進行實驗,證明了融合SE模塊的Xception具有更高的精確度,能夠更好地應用于圖像識別問題。在動物種類的識別任務中,收集了10種動物的圖片數(shù)據(jù),制作成TFRecords格式。先使用Xception網(wǎng)絡(luò)進行訓練,輸入不經(jīng)處理的原始數(shù)據(jù)時,測試集精確度只有88.79%;除去冗余特征后,測試集精確度提升到了90.87%;在此基礎(chǔ)上將Xception替換為SE-Xception網(wǎng)絡(luò),最終測試集精確度能夠達到95.63%。