楊國亮,李放,朱晨,許楠
(江西理工大學(xué) 電氣工程與自動化學(xué)院,江西 贛州 341000)
遙感場景分類是根據(jù)遙感圖像的內(nèi)容進(jìn)行特征提取,使用分類器對抽象出來的特征進(jìn)行分類,從而對遙感場景進(jìn)行分類和識別的過程。精準(zhǔn)而快速的場景分類可以降低如地理目標(biāo)檢測、土地利用分析、土地覆蓋分析、城市規(guī)劃等遙感解譯任務(wù)的難度,并提高解譯精度。
傳統(tǒng)場景分類算法多數(shù)是基于人工特征提取的,這些算法依賴大量的專業(yè)知識以及專家經(jīng)驗來設(shè)計針對不同任務(wù)的特征描述子,此種基于人工特征提取的場景分類方法難以取得較好的泛化效果。近年來,隨著卷積神經(jīng)網(wǎng)絡(luò)的快速發(fā)展,遙感圖像場景分類的準(zhǔn)確率和泛化能力得到了極大提升[1-2]。Krizhevsky等[3]于2012年憑借AlexNet取得了ImageNet大規(guī)模視覺識別挑戰(zhàn)賽圖像分類和目標(biāo)定位任務(wù)的冠軍,展現(xiàn)了卷積神經(jīng)網(wǎng)絡(luò)在圖像領(lǐng)域上的巨大潛力。在此之后,vgg-16[4]、GoogLeNet[5]、ResNet[6]等網(wǎng)絡(luò)的提出及發(fā)展[7-8]大大提高了分類任務(wù)的分類準(zhǔn)確度的同時應(yīng)用領(lǐng)域也逐漸多元[9-10]。但是這些網(wǎng)絡(luò)性能得到提高的同時也使得模型的深度與參數(shù)的數(shù)量快速增加,這會導(dǎo)致模型訓(xùn)練困難,存儲空間占用大,訓(xùn)練、預(yù)測時間長等問題,對于集成卷積網(wǎng)絡(luò)的方法更是如此。近年來,越來越多的研究都聚焦在了網(wǎng)絡(luò)模型的效率問題。2017年發(fā)表在ICLR上的利用fire module的SqueezeNet,同年發(fā)表在CVPR上的利用深度可分離卷積的MobileNet,以及之后發(fā)表的ShuffleNet[11]、Xception[12]和MobileNetv2[13],這些網(wǎng)絡(luò)在保持相似精度的同時大量縮減網(wǎng)絡(luò)參數(shù)數(shù)量,通過減少網(wǎng)絡(luò)的參數(shù)與計算量來解決網(wǎng)絡(luò)的效率問題。
本文在MobileNetv2的基礎(chǔ)上,結(jié)合了Densenet的密集連接思想,通過引入密集連接,調(diào)整瓶頸擴(kuò)張系數(shù)等方式構(gòu)建了一個新的改進(jìn)網(wǎng)絡(luò)。新的網(wǎng)絡(luò)有效降低了網(wǎng)絡(luò)的參數(shù)量和計算量,網(wǎng)絡(luò)更加輕量和有效,同時具有與原始網(wǎng)絡(luò)相似的分類準(zhǔn)確率。
現(xiàn)代先進(jìn)網(wǎng)絡(luò)需要的高計算資源遠(yuǎn)遠(yuǎn)超出了移動和嵌入式設(shè)備的能力。Mobilenetv2網(wǎng)絡(luò)[13]是針對此種限制設(shè)計出來的一種新型的網(wǎng)絡(luò)結(jié)構(gòu)。該網(wǎng)絡(luò)可以在保持相似準(zhǔn)確度的情況下有效減少網(wǎng)絡(luò)中的參數(shù)量與計算量。
MobileNetv2的主要貢獻(xiàn)來自Linear Bottlenecks和Inverted Residual block[13]。Linear Bottlenecks即去除網(wǎng)絡(luò)中輸出維度較小的層后的激活函數(shù)Relu,將其改為線性激活。這種改進(jìn)降低了使用Relu函數(shù)造成的信息損失。Inverted Residual block的設(shè)計采用了先升維、后降維的結(jié)構(gòu),與傳統(tǒng)的Residual block先降維、后升維的結(jié)構(gòu)相反,減少了信息的損失。同時網(wǎng)絡(luò)設(shè)計了擴(kuò)張系數(shù)t以控制網(wǎng)絡(luò)的大小。MobileNetv2的瓶頸結(jié)構(gòu)如圖1所示,其中每層的輸入與輸出如表1所示。表1中,k表示輸入通道數(shù);h表示輸入的高;w表示輸入的寬;t表示擴(kuò)張系數(shù);s表示步長;k’表示輸出通道數(shù)。
圖1 MobileNetv2瓶頸圖(左圖步長為1,右圖步長為2)
表1 瓶頸各層的輸入輸出
DenseNet[14]的設(shè)計不同于ResNet,在一個Dense塊中,層的輸入為之前所有層輸出的拼接。對于殘差網(wǎng)絡(luò)來說,第l層的輸出等于第l-1層的輸出加上對l-1層的非線性變換,即:xl=Hl(xl-1)+xl-1;而對于Densenet來說,[x0,x1,…,xl-1]表示將第0層到第l-1層的輸出特征圖拼接,故此時第l層的輸出為xl=Hl([x0,x1,…,xl-1])。Dense塊結(jié)構(gòu)[14]如圖2所示。
圖2 Dense block圖
這種設(shè)計提升了信息和梯度在網(wǎng)絡(luò)中的傳輸效率,Dense塊中的每層都能直接從損失函數(shù)獲得梯度信息,并且直接得到輸入信號。除此之外,這種網(wǎng)絡(luò)結(jié)構(gòu)同時還具有正則化的效果,對于過擬合現(xiàn)象有一定的抑制作用。
對于目前很多高效的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來說,深度可分離卷積[12](depthwise separable convolution)都是非常重要的一個設(shè)計。在改進(jìn)網(wǎng)絡(luò)中將繼續(xù)沿用這一設(shè)計。深度可分離卷積的設(shè)計思想是將一個標(biāo)準(zhǔn)卷積分成兩個部分,第一部分為深度卷積(depthwise convolutions),depthwise convolution將3×3的卷積核應(yīng)用在每一個輸入通道上,產(chǎn)生與輸入通道數(shù)個數(shù)相同的結(jié)果;第二部分逐點卷積(pointwise convolutions)為普通的1×1卷積,它被用來將depthwise convolution的輸出進(jìn)行線性組合。過程如圖3所示[12]。
圖3 深度可分離卷積
深度可分離卷積的計算量與標(biāo)準(zhǔn)卷積計算量的比值如公式(1)所示。
(1)
式中:DK為卷積核的尺寸;M為輸入通道數(shù);N為輸出通道數(shù);DF為特征圖的大小。從公式中可以看出使用3×3大小的卷積核可以將計算量減小為標(biāo)準(zhǔn)卷積的九分之一。
在設(shè)計瓶頸的時候采用先升維后降維的策略并在降維后使用線性激活來避免激活函數(shù)Relu對信息的損失,與原網(wǎng)絡(luò)不同的是,本文去除了殘差連接,在輸出特征圖大小一致的瓶頸之間使用密集連接代替殘差,借助特征復(fù)用來提升信息和梯度在網(wǎng)絡(luò)中的傳輸效率,同時密集連接使用的是拼接而不是求和,這會造成瓶頸的輸出通道數(shù)的快速增加,從而導(dǎo)致網(wǎng)絡(luò)參數(shù)和計算量的增加。所以這里沒有和原始網(wǎng)絡(luò)一樣將擴(kuò)張系數(shù)t設(shè)定為默認(rèn)值6,而是對擴(kuò)張系數(shù)進(jìn)行了適當(dāng)?shù)恼{(diào)整,控制網(wǎng)絡(luò)的規(guī)模。擴(kuò)張系數(shù)的調(diào)整范圍限制在1到6。在設(shè)計網(wǎng)絡(luò)時使用了擴(kuò)張系數(shù)為1的瓶頸,但是在設(shè)計瓶頸的時候并沒有刪除最初的1×1卷積層,因為1×1卷積不僅可以提高網(wǎng)絡(luò)的表現(xiàn)能力,更重要的是1×1的卷積層可以將多個特征圖線性組合,從而實現(xiàn)了跨通道的信息整合。因為網(wǎng)絡(luò)引入了密集連接,所以認(rèn)為初始的1×1卷積即使擴(kuò)張系數(shù)為1也同樣對網(wǎng)絡(luò)性能的提高有著積極的作用。文中設(shè)計的瓶頸結(jié)構(gòu)如圖4所示。
圖4 本文瓶頸
改進(jìn)網(wǎng)絡(luò)的結(jié)構(gòu)如圖5所示,圖中的c表示瓶頸的輸出通道數(shù)。
圖5 改進(jìn)網(wǎng)絡(luò)的結(jié)構(gòu)圖
本文采用了密集連接來代替原網(wǎng)絡(luò)中的殘差連接,使得梯度與信息可以在網(wǎng)絡(luò)中得到更好的傳遞。同時為了解決在多個輸出拼接作為下一個瓶頸的輸入時所產(chǎn)生的通道數(shù)過大的問題,在設(shè)計網(wǎng)絡(luò)的時候放棄了原網(wǎng)絡(luò)在多個輸出通道數(shù)相同的瓶頸堆疊,之后對下一個瓶頸的輸出通道數(shù)進(jìn)行放大,最終使得網(wǎng)絡(luò)的通道數(shù)逐步增加。首先對輸出通道數(shù)進(jìn)行縮小,之后堆疊數(shù)個步長為1的瓶頸,借助密集連接來對輸出通道數(shù)進(jìn)行拼接,最終使得網(wǎng)絡(luò)的通道數(shù)得到放大的設(shè)計,此種設(shè)計可以有效減少網(wǎng)絡(luò)的參數(shù)量與計算量。同時,為了保證網(wǎng)絡(luò)的復(fù)雜度與表現(xiàn)力,使用了一個T=1,S=1的瓶頸和一個T=1,S=2的瓶頸的組合來完成輸出通道數(shù)縮小的過程,如圖5 bottleneck4和bottleneck5、bottleneck8和bottleneck9的使用。本文的網(wǎng)絡(luò)在網(wǎng)絡(luò)較深的位置僅使用一個步長為2的瓶頸進(jìn)行通道數(shù)的縮減,主要原因是基于網(wǎng)絡(luò)參數(shù)與計算量的考慮,如bottleneck15的使用。同時,網(wǎng)絡(luò)在bottleneck13、bottleneck14、bottleneck17和bottleneck18的位置減小了擴(kuò)張系數(shù)t,主要想法是這些瓶頸的輸入經(jīng)過數(shù)次拼接,通道數(shù)已經(jīng)增加到了一定程度。而拼接導(dǎo)致的通道數(shù)增加在一定程度上可以代替或者部分代替擴(kuò)張系數(shù)對于通道數(shù)的擴(kuò)張作用。每個瓶頸的輸入與輸出大小與表1中給出的值相同。擴(kuò)張系數(shù)t的調(diào)整范圍為大于等于1、小于6的整數(shù)。
瓶頸的參數(shù)量計算方法見公式(2)。
P=t×Cin×Cin+9×t×Cin+t×Cin×Cout
(2)
式中:P表示參數(shù)量;t表示擴(kuò)張系數(shù);Cin表示輸入通道數(shù);Cout表示輸出通道數(shù)。
瓶頸的計算量如公式(3)、公式(4)所示。公式(3)、公式(4)中采用的步長分別為1、2,其中h表示輸入的高;w表示輸入的寬;t表示擴(kuò)張系數(shù);Cin表示輸入通道數(shù);Cout表示輸出通道數(shù);s表示步長的大小。
M=h×w×Cin×(Cin+9+Cout)
(3)
(4)
文中設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)所對應(yīng)的參數(shù)和計算量見表2。改進(jìn)網(wǎng)絡(luò)的參數(shù)個數(shù)共計2 852 496,較原網(wǎng)絡(luò)減少約16%,計算量減少了約13%。經(jīng)過改進(jìn)之后的網(wǎng)絡(luò)的計算量與參數(shù)量都取得了不錯的壓縮程度。參數(shù)與計算量的減少主要原因是因為步長為2的瓶頸的輸出通道是減小的而后通過多個瓶頸的輸出拼接使得之后瓶頸的輸入得以放大,此種操作會使得最初的幾個瓶頸的輸入通道數(shù)較少,即這些瓶頸內(nèi)的參數(shù)與計算量也較少。而拼接本身并不會產(chǎn)生多余的參數(shù)與計算量。與此設(shè)計不同的是,在原始網(wǎng)絡(luò)中,步長為2的瓶頸會對通道數(shù)進(jìn)行放大,再將這些輸出作為輸入傳入到下一個瓶頸時必然會產(chǎn)生更多的參數(shù)與計算量。
表2 網(wǎng)絡(luò)參數(shù)及計算量
本文的實驗環(huán)境為Ubuntu14.04系統(tǒng),Intel core i7-4790CPU,內(nèi)存為8 GB,顯卡為GTX 1080 8 G GDDR5,搭配tensorflow-1.4.0,cuda8.0,cudnn6.5,使用的數(shù)據(jù)集為遙感圖像場景分類數(shù)據(jù)集NWPU-RESISC45[15]。該數(shù)據(jù)集是由西北工業(yè)大學(xué)(NWPU)創(chuàng)建的REmote傳感圖像場景分類(RESISC)的公開可用基準(zhǔn)。該數(shù)據(jù)集包含31 500個圖像,涵蓋飛機(jī)場、棒球場等45個場景類,每個類有700個圖像,示例如圖6所示。
圖6 NWPU-RESISC45示例圖
首先將數(shù)據(jù)集圖片大小統(tǒng)一為224×224。本文實驗均未使用預(yù)訓(xùn)練參數(shù),為避免訓(xùn)練集圖像過少造成的不利影響,尤其是參數(shù)較多的大型網(wǎng)絡(luò),故從每一類場景中隨機(jī)抽取500張作為訓(xùn)練集,即訓(xùn)練集的數(shù)目為500×45;剩余的作為測試集,數(shù)目為200×45。在訓(xùn)練之前,對數(shù)據(jù)集進(jìn)行數(shù)據(jù)增強(qiáng)。對每張訓(xùn)練集圖片進(jìn)行2次隨機(jī)旋轉(zhuǎn)、1次左右翻轉(zhuǎn)、3次隨機(jī)亮度處理、3次隨機(jī)對比度處理,使得數(shù)據(jù)集更加多樣。最終的數(shù)據(jù)集規(guī)模為5 000×45張圖片,預(yù)處理效果見圖7。為了驗證原始和旋轉(zhuǎn)等操作后的測試圖片分類效果,對于測試集的每張圖片進(jìn)行了1次隨機(jī)旋轉(zhuǎn)、1次左右翻轉(zhuǎn)、2次隨機(jī)亮度處理和2次隨機(jī)對比度處理,最終測試集規(guī)模為1 400×45張圖片。
圖7 訓(xùn)練集預(yù)處理(左上角的圖像為原始圖像)
為了說明改進(jìn)網(wǎng)絡(luò)的有效性來自網(wǎng)絡(luò)設(shè)計而不是超參數(shù)調(diào)整或者訓(xùn)練策略的不同,在訓(xùn)練2種網(wǎng)絡(luò)時采用一致的設(shè)定。在訓(xùn)練MobileNetv2和改進(jìn)網(wǎng)絡(luò)時設(shè)定每個批(batch)包含32張圖片。在訓(xùn)練的過程中,使用了RMSprop優(yōu)化方法來加速訓(xùn)練,訓(xùn)練開始時設(shè)置的初始學(xué)習(xí)率為0.045,訓(xùn)練的過程中使用tensorboard對loss值進(jìn)行可視化監(jiān)控,當(dāng)損失下降困難時,暫停訓(xùn)練并且調(diào)低學(xué)習(xí)率的大小。在本次實驗中學(xué)習(xí)率下降了3次,分別下降為0.022 5、0.012 5、0.005。隨著學(xué)習(xí)率的下降,loss值會繼續(xù)減小,說明調(diào)低學(xué)習(xí)率的做法的確對于網(wǎng)絡(luò)的訓(xùn)練可以起到積極作用。在實驗結(jié)束后,使用tensorboard對遙感場景的分類準(zhǔn)確率、召回率和訓(xùn)練過程中的loss值變化曲線進(jìn)行可視化顯示,方便對2種網(wǎng)絡(luò)進(jìn)行對比。在訓(xùn)練的過程中,原始網(wǎng)絡(luò)完成一步訓(xùn)練的時間大約為0.350 s,而改進(jìn)網(wǎng)絡(luò)完成一步訓(xùn)練只需要大約0.250 s,完成每步訓(xùn)練的時間縮短了大約28%,改進(jìn)的網(wǎng)絡(luò)在縮短訓(xùn)練時長方面有著較好的效果。
圖8為訓(xùn)練過程中的loss值曲線。從圖8可以看出2條loss曲線差別不大,在訓(xùn)練之初原始網(wǎng)絡(luò)loss值下降速度略快于改進(jìn)網(wǎng)絡(luò),而后二者的loss值基本相近,原始網(wǎng)絡(luò)稍低于改進(jìn)網(wǎng)絡(luò),這說明在對原始網(wǎng)絡(luò)的規(guī)模進(jìn)行縮減時并沒有使網(wǎng)絡(luò)的訓(xùn)練變得困難。
圖8 Loss值(smooth=0.6)
為了更好地說明問題,本文使用相同的訓(xùn)練策略和數(shù)據(jù)集訓(xùn)練了幾種應(yīng)用廣泛的網(wǎng)絡(luò)結(jié)構(gòu)。使用這些網(wǎng)絡(luò)對測試集的圖片進(jìn)行評估,測試時批的大小設(shè)置為50,測試集共計63 000張圖片,即1 260個批。
圖9為網(wǎng)絡(luò)在測試集準(zhǔn)確率變化曲線。從圖9可以看出在訓(xùn)練的過程中改進(jìn)網(wǎng)絡(luò)和原始MobileNetv2網(wǎng)絡(luò)在遙感圖像場景分類任務(wù)上有著較高的準(zhǔn)確率,訓(xùn)練結(jié)束時本文網(wǎng)絡(luò)的準(zhǔn)確率為92.54%,MobileNetv2為93.49%,二者相差不足1%。Inceptionv3為91.44%,Res50為89.60%,而在ImageNet大規(guī)模數(shù)據(jù)集上表現(xiàn)出色的Inceptionv4網(wǎng)絡(luò)在遙感圖像場景分類數(shù)據(jù)集上的表現(xiàn)不夠理想,準(zhǔn)確率為84.9%。實驗結(jié)果顯示Inceptionv4網(wǎng)絡(luò)不適合遙感圖像的場景分類任務(wù)。
圖9 測試集準(zhǔn)確率
圖10為召回率變化曲線。可以看出,5種網(wǎng)絡(luò)在召回率方面都有不錯的效果,除了Inceptionv4的96.65%和res50的97.96%以外,其余網(wǎng)絡(luò)的召回率都可以達(dá)到99%以上。幾種網(wǎng)絡(luò)的詳細(xì)對比見表3。
圖10 測試集召回率
表3 幾種網(wǎng)絡(luò)性能的對比
結(jié)合圖9、圖10和表3的實驗結(jié)果綜合分析這5種網(wǎng)絡(luò)在遙感圖像分類任務(wù)上的表現(xiàn)。Inceptionv4網(wǎng)絡(luò)的場景分類效果是這5種網(wǎng)絡(luò)中最差的一個,不足85%的場景分類準(zhǔn)確率說明此網(wǎng)絡(luò)并不適合遙感圖像場景分類任務(wù)。Inceptionv3雖然可以達(dá)到91%的分類精度,但是在訓(xùn)練次數(shù)較少時準(zhǔn)確率大幅低于剩下的3個網(wǎng)絡(luò),而且Inceptionv3的參數(shù)量也更多。Res50的各項結(jié)果均不如改進(jìn)網(wǎng)絡(luò)和MobileNetv2。在改進(jìn)網(wǎng)絡(luò)與原MobileNetv2的對比中,改進(jìn)網(wǎng)絡(luò)參數(shù)量減少了55萬,計算量減少了3 800萬,完成一步訓(xùn)練的耗時減少了28%左右,完成一次測試集評估用時減少了20%左右,分類準(zhǔn)確率只下降了0.9%,召回率下降了0.3%,改進(jìn)網(wǎng)絡(luò)在基本保持了遙感圖像場景分類任務(wù)的分類準(zhǔn)確率的同時,減少了網(wǎng)絡(luò)的參數(shù)量和計算量,提高了網(wǎng)絡(luò)的訓(xùn)練速度與預(yù)測評估速度。網(wǎng)絡(luò)較原始MobileNetv2更加輕量高效,在遙感圖像場景分類任務(wù)上取得了較好的效果,網(wǎng)絡(luò)瓶頸的輸出特征圖的部分顯示如圖11所示。測試集中每個分類的準(zhǔn)確度如圖12所示。根據(jù)圖12可以看出在絕大多數(shù)的情況下網(wǎng)絡(luò)有著不錯的性能。
注:最左側(cè)為第一個卷積層的特征圖,從左至右分別對應(yīng)文中圖5所示結(jié)構(gòu)的瓶頸1至瓶頸18。特征圖尺寸對應(yīng)文中表2輸出所示。圖11 網(wǎng)絡(luò)部分特征圖
圖12 每個分類的準(zhǔn)確率
為了可以使用卷積神經(jīng)網(wǎng)絡(luò)對遙感場景圖像進(jìn)行分類時既保證分類準(zhǔn)確率又減小網(wǎng)絡(luò)的參數(shù)量與計算量,使得網(wǎng)絡(luò)輕量高效,將DenseNet中的密集連接引入到MobileNetv2中,借助特征圖的復(fù)用提高網(wǎng)絡(luò)性能。利用一個擴(kuò)張系數(shù)為1,步長為1的瓶頸與一個擴(kuò)張系數(shù)為1,步長為2的瓶頸的組合壓縮特征圖的通道數(shù)。并將部分瓶頸的擴(kuò)張系數(shù)減小以控制網(wǎng)絡(luò)的整體規(guī)模。最后,在遙感圖像場景分類數(shù)據(jù)集NWPU-RESISC45上進(jìn)行實驗。實驗結(jié)果表明,改進(jìn)的網(wǎng)絡(luò)在基本保持場景分類精度的同時,完成每步訓(xùn)練的時間、前饋計算消耗時長、網(wǎng)絡(luò)參數(shù)數(shù)量、網(wǎng)絡(luò)計算量都得到了一定程度的減小,說明了模型對于遙感圖像場景分類任務(wù)的可行性與實用性。