方浩文,施華君
(中國電子科技集團公司第三十二研究所,上海 201808)
衛星遙感圖像經過處理后得到的衛星圖像包含了大量的信息,具有數據量大和數據類型復雜多樣的特點.傳統的目標檢測識別方法難以適應海量數據,依賴人工標注,非常耗時耗力,且強烈依賴于專業知識和數據本身的特征[1].而近年來非常活躍的深度學習[2-4]則提供了非常有效的特征提取框架,使得其在衛星遙感圖像的識別和分類中也具有很好的效果.本文采用了深度學習網絡中的卷積神經網絡(CNN),這是一種能從大量數據中自動學習目標特征的模型,并且已成為目標檢測與識別領域的研究熱點[5-10].
基于CNN的目標檢測算法的基本流程為特征提取網絡、區域建議生成、感興趣區域分類.采用卷積神經網絡作為特征提取網絡,對檢測算法的檢測性能具有顯著影響.通常采用的卷積神經網絡有AlexNet[11],ZF[12],VGGNet[13],GoogleNet[14],ResNet[15]等,這些網絡通過逐步加深網絡來提高性能.本文采用了Keras框架及其中的VGGNet神經網絡模型并取得了良好的效果.
目前,已有基于深度學習技術的衛星圖像分類識別應用,如俞汝劼等使用了YOLO算法[16]與圖像分割進行了衛星圖像中航空器的識別[17],保證了算法精度與實時性.又如D.Duarte等利用了對偶連接和加寬卷積的CNN來進行衛星圖像中建筑物損毀分類[18],提升了一定的分類準確度.
衛星圖像包含了天氣因素,如霧天、多云等.這些天氣因素會影響地物特征的識別,同時也可以作為天氣特征進行識別.何愷明在2009年提出了暗通道除霧算法[19],指出沒有霧的圖像其像素點在至少一個顏色通道上具有很低的強度,所以可以根據這個先驗和霧圖像模型來判斷圖像中霧的厚度并還原出一個沒有霧的圖像.由于所有圖像都具有天氣特征,所以意識到此算法可以利用在衛星圖像識別分類方面后,本文使用的方法便利用了此除霧算法進行圖像預處理作為改進.
正則化是一種為了避免過擬合而常用的方法,嶺回歸正則化即L2范數正則化[20],通過對模型系數的L2范數進行懲罰,來達到在擬合數據的同時使模型權重盡可能小的目的.本文采用此方法進行了最后標簽之間相關性的處理.
第1部分簡要介紹深度學習VGGNet網絡模型、Keras框架和F2Score評測指標;第2部分介紹了識別分類方法的設計及展示系統的框架,在數據預處理小節介紹了如何利用上述除霧算法等技巧進行數據增強,隨后介紹了基于VGGNet模型的訓練和預測的流程,說明了如何使用上述正則化方法利用標簽的相關性進行預測,最后一小節介紹了基于Django的在線識別分類展示系統的框架設計及搭建方法;第3部分介紹實驗的設計和細節,并將實驗結果進行對比來得出結論,最后說明本方法的下一步研究方向.
VGGNet[13]是牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一起開發的深度卷積神經網絡.VGGNet探索了卷積神經網絡的深度及性能之間的關系,通過反復堆疊3×3的小型卷積核和2×2的最大池化層,VGGNet成功構筑了16~19層深的卷積神經網絡(如圖1所示).VGGNet相比之前的網絡結構,錯誤率大幅下降,并取得了ILSVRC2014比賽分類項目的第二名和定位項目的第一名.同時具有很好的拓展性,遷移到其他圖片數據上的泛化性非常好.

圖1 VGGNet各級別網絡結構圖
VGGNet擁有5段卷積,每一段內有2~3個卷積層,同時每段尾部會連接一個最大池化層來縮小圖片尺寸.每段內的卷積核數量一樣,越靠后的段的卷積和數量越多:64-128-256-512-512.其中經常出現多個完全一樣的3×3的卷積層堆疊在一起的情況,是因為3個串聯的3×3卷積層效果相當于1個7×7的卷積層,參數比后者少45%,且3個3×3的卷積層擁有比1個7×7卷積層更多的非線性變換,使得CNN對特征的學習能力更強[21].
Keras[22]是一個用Python編寫的高級神經網絡API,它能夠以Tensorflow,CNTK或者Theano作為后端運行,具有用戶友好、模塊化、以拓展性和基于Python實現的特點,同時支持卷積神經網絡和循環神經網絡以及兩者的結合,能夠在CPU和GPU上無縫運行.
F-Score[23]是一個為了平衡準確率和召回率的較為全面評價的一個分類指標.當對一個樣本集合(包括正樣本和負樣本)進行分類時,會出現以下幾種情況:
TruePositive:把本來是正樣本的分類成正樣本;
FalsePositive:把本來是負樣本的分類成正樣本;
FalseNegative:本來是正樣本的分類成負樣本;
TrueNegative:本來是負樣本的分類成負樣本.
對準確率(Precision)和召回率(Recall)的定義如下:

F-Score的定義如下:

所以F2-Score即當β=2時的F-Score,即召回率比準確率重要一倍.
何愷明提出了一種非常簡單而有效的去霧算法[19],可以同來還原圖像的顏色和能見度.與之前的方法不同,他把注意力放到了無霧圖像的統計特征上.他發現,在無霧圖像中,每一個局部區域都很有可能會有陰影,或者是純顏色的東西,又或者是黑色的東西.因此,每一個局部區域都很有可能有至少一個顏色通道會有很低的值.他把這個統計規律叫做暗通道先驗.直觀來說,暗通道先驗認為每一個局部區域都總有一些很暗的東西.由于霧總是灰白色的,因此一旦圖像受到霧的影響,那么這些本來應該很暗的東西就會變得灰白.不僅如此,根據物理上霧的形成公式,還能根據這些東西的灰白程度來判斷霧的濃度.
給暗通道先驗一個數學定義,對于任意的輸入圖像J,其暗通道可以用下式表達:

式中,Jc表示彩色圖像的每個通道,Ω(x)表示以像素X為中心的一個窗口.
暗通道先驗的理論指出:

在文獻[15]中,統計了5000多幅圖像的特征,基本符合暗通道先驗,因此可以認為是一條定理.接著進行數學推導來解決最終問題.
在計算機視覺和計算機圖形中,下述方程描述的霧圖形成模型被廣泛應用:

其中,I(x)為已有待去霧圖像,J(x)為恢復成無霧的圖像,A為全球大氣光成分,t(x)為透射率.
將式(3)做變形:

式中,c為RGB三通道.
假設在每一個窗口內透射率t(x)為常數,定義其為(x),且A已知,對式(4)兩邊求兩次最小值運算,得到:

根據暗通道先驗理論式(1),可推導出:

將式(6)帶入式(4),得到:

這就是透射率的預估值.
在實際情況下,即使天氣晴朗,空氣中也存在一定顆粒,看遠處物體還是能感覺到霧的影響,所以需要保留一定程度的霧,可以通過在式(7)中引入一個[0,1]之間的因子ω ,則式(7)修正為:

以上運算均基于全球大氣光A已知,實際可以在有霧圖像中獲取該值,步驟為:
(1)從暗通道圖中按照亮度的大小提取前1%的像素;
(2)在這些位置中,在原始有霧圖像I中尋找對應的具有最高亮度的點的值,作為A值.
當投射度t的值很小時,會導致J的值偏大,從而使得圖像整體向白場過度,因此一般可設置一閾值T0,當t值小于T0時,令t=T0.

最終的恢復公式如下:在意識到可以利用除霧算法作為在有霧圖像的地物特征識別的改進后,本方法在預處理階段對圖像進行了除霧處理,效果如圖2.

圖2 圖像除霧算法使用前后對比
可以看到地物特征明顯更為顯著,更有利于對地物特征進行識別,之后將通過實驗證明除霧算法的有效性.
有監督機器學習主要問題即在規則化參數的同時最小化誤差,最小化誤差為了模型能很好擬合訓練數據,而規則化參數是為了防止模型過擬合訓練數據.如果參數太多,會導致模型復雜度上升,導致過擬合.于是正則化的作用有:
(1)約束參數,降低模型復雜度;
(2)規則項的使用還可以約束我們的模型的特性.這樣就可以將人對這個模型的先驗知識融入到模型的學習當中,強行地讓學習到的模型具有人想要的特性,例如稀疏、低秩、平滑等等.
一般來說,監督學習可以看成最小化如下目標函數:

其中,求和部分第一項L(yi,f(xi;ω))為誤差平方和,第二項 λ Ω(ω)為懲罰項,為了使模型盡量簡單,我們需要通過規則化函數 Ω (ω)來對參數 ω 進行約束.然而Ω(ω)的不同取得的效果也不同,主要常見的 Ω (ω)有L0,L1和L2范數.
L0范數指向量中非0的元素的個數.如果用L0范數來規則化一個參數矩陣ω的話,就是希望ω的大部分元素都是0.L1范數是指向量中各個元素絕對值之和,也稱Lasso回歸正則化.
L1范數為L0范數的最優凸近似,L1范數和L0范數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用.參數稀疏可以實現對特征的自動選擇,會學習篩選掉信息量不夠的特征,且會讓模型更容易解釋.在本數據集中,因為大量特征具有相關性,如天氣特征中,有晴朗標簽則不會有云、霧天氣標簽,河流常出現在雨林旁邊,道路常在住房和農業處出現.故不適合使用更有利于處理稀疏特征數據的L1范數.
L2范數又稱嶺回歸正則化,是指先對向量中各元素進行求平方和,然后再求平方根.通過讓L2范數的規則項||ω||2最小,可以使得ω的每個元素都接近于0.
L2范數可以使參數變小,從而使得模型更簡單,因此不僅可以防止過擬合,還可以讓優化求解變得穩定與快速[24].嶺回歸正則化在本數據集中表現良好,精度更高且更好適應與擬合.故本方法采用了添加嶺回歸正則化層來進行特征之間相關性的處理.
因為衛星數據數量龐大,會有許多諸如云、霧等天氣因素干擾使得我們無法看清地物特征,此時可以使用圖像除霧算法使得類似路、水、農田等標簽更明顯,從而能夠得到更好的地物特征.本文對訓練數據進行了除霧算法操作(圖3),同時保留原有數據進行對比.由于進行了去霧處理,所以針對其中包含云、霧等標簽的圖像會降低特征,下一節會講述如何處理這個問題.
其次在訓練數據時還需要通過變換圖像大小來進行輸入,然后通過數種數據增強方法進行隨機變換,從而增加了訓練數據集大小,并可以更好地防止過擬合以及增強模型的魯棒性.
因為使用了除霧算法可能會導致某些標簽變換過大,本方法采用了對每個標簽進行單獨訓練模型的方式(圖4),即使用除霧后和未除霧的原始訓練集進行每個標簽的單獨訓練,得到了每個標簽在不同訓練集上的準確率.由于一張圖中可能會含有數個標簽,于是選擇每個標簽在驗證集上表現更好的使用的訓練集訓練出的模型,將標簽進行整合,從而減少除霧算法帶來的負面效果.例如,除霧后訓練出沒有霧標簽的圖像在未除霧時訓練出有霧標簽,則說明此圖像有霧標簽的準確度更高,在驗證集上驗證結果也是如此.

圖3 數據預處理流程

圖4 訓練模型及預測流程
訓練時采用了3種損失(loss)函數,其中F2Loss是一種結合了準確率和召回率的評估指標,其召回率比準確率重要一倍.所以在訓練模型時不僅僅需要訓練預測標簽的概率,還需要選擇一個合適的閾值,使得當概率大于閾值時,判斷有此標簽,否則沒有.本文對F2-Loss函數進行了改進,使得訓練時更注重于改進每個標簽的召回率,從而更符合F2-Score的評判標準.結果是對某些如全云、農業等標簽效果明顯.
許多標簽有著相關性,比如晴朗和有云、全云和有霧就不可能同時出現,而住房和農業同時出現的情況更多,即利用相關性可以更好地改進模型進行預測.所以在本文提出的方法里,采用了以下方法:先用VGGNet訓練出所有標簽的單獨概率,依前方法整合得到模型,隨后添加一個嶺回歸正則化層,以便在給定所有其他標簽的情況下重新校準每個標簽的概率.相當于在進行特定標簽的最終預測時,又添加了一個輸入為所有標簽的VGGNet預測的單獨的特定標簽嶺回歸模型.這樣一來就利用了各標簽之間的相關性來提升了模型的魯棒性,且減少了因為數據集相關性而導致的過擬合現象.并且本文做了沒有添加嶺回歸正則化層的對比實驗.
為了能夠更好地展現本方法的結果,并建立在線上傳識別圖像并展示的系統,使用Django搭建了一個在線展示系統(圖5).

圖5 展示系統設計流程
Django是一個用Python語言編寫的開源Web開發框架,鼓勵快速開發,并遵循模型-視圖-控制器(MVC)設計.功能完善,要素齊全,具有強大的數據庫訪問組件、靈活的統一資源定位符(URL)映射、豐富的模板語言,安全性和可拓展性都非常優秀.
展示系統具有以下功能:批量上傳、等待動畫、批量預測和帶標簽展示.
批量上傳后將新上傳的圖片分別保存至展示圖片保存路徑和新上傳圖片保存路徑,并對新上傳的圖片進行預測并得到標簽,于此同時,前端界面顯示等待動畫.得到標簽后對展示圖片進行標簽添加,將展示圖片保存至數據庫,并刪除新上傳圖片.這一步是為了每次上傳后只用預測新上傳的圖片,而展示圖片均已添加過標簽,直接放入展示圖片頁面即可,相比每次都要進行全部圖片預測大大提高了速度.上述操作進行完畢后等待動畫結束并進入展示圖片頁面.
為了驗證本文提出的基于深度學習的識別分類方法,對實驗設計如下.
數據來源于Planet和其合作伙伴SCCON在太陽同步軌道(SSO)和國際空間站(ISS)軌道上的4波段衛星的地球全幀分析場景圖片,并用Crowd Flower平臺以及柏林和洛杉磯的標注團隊進行標注,共分為全云(Cloudy),局部有云(Partly Cloudy),有霧(Haze),清晰(Clear)等4個天氣標簽;原始森林(Primary),水(Water),居住 (Habitation),農業 (Agriculture),道路(Road),種植 (Cultivation),裸地 (Bare Ground)等 7個常見地物標簽;刀耕火種(Slash and Burn),選擇性砍伐(Selective logging),開花 (Blooming),常規采煤(Conventional Mining),礦業采煤 (Artisinal Mining),吹倒(Blow Down)等6個不常見地物標簽.總共17個標簽,40 479張有標注的圖片.
在訓練數據經過隨機變換后以8∶2的比例隨機分成訓練集和驗證集,并進行標簽映射,將訓練集中有云、霧的圖片進行了除霧處理,并保留原始數據進行對照實驗.對所有圖片進行紅綠藍(RGB)轉換,去除各維度均值.均值來自于ImageNet數據集統計,ImageNet含有近1400多萬張圖片,涵蓋2萬多個類別,去除均值更有利于圖像訓練.隨后進行大小裁剪使得符合VGGNet輸入,并加載Keras框架中的VGGNet-16模型.
加載模型完成后進行批標準化.批標準化是近年來深度學習領域的重要成果,可以使得在深度神經網絡訓練過程中每一層神經網絡的輸入保持相同分布.隨著網絡深度的加深和訓練過程的進行,深層神經網絡在做非線性變換前的激活輸入值會逐漸發生偏移和變動,整體分布逐漸往非線性函數的取之區間的上下限兩端靠近,導致反向傳播時低層神經網絡的梯度消失,從而會使得神經網絡收斂越來越慢.而批標準化可以通過一定的手段,將每層神經網絡任意神經元的輸入值分布變成均值為0方差為1的正態分布,避免梯度消失問題.
在卷積層和全連接層之間使用扁平函數,使得多維輸入變成一維,大大減少參數使用量,避免過擬合現象.
優化器選擇自適應矩估計,初始學習率lr為0.0001,采用當評價指標不再提升時減少學習率的策略,減少因子factor為0.1,每次學習率將以lr*factor的形式減少.因為當學習停滯時,減少2倍到10倍的學學率常常能獲得較好的效果.當3個循環后評價指標都不再改善后將停止訓練.
激活函數選擇LeakyReLU,是ReLU激活函數的特殊版本,當不激活時,LeakyReLU仍然會有非零輸出,從而獲得一個小的梯度,避免ReLU可能出現的神經元“死亡”現象.
最后在預測前進行了添加嶺回歸正則化層、添加Lasso回歸正則化層和不添加的對照實驗.
本節通過對照實驗對除霧算法和嶺回歸正則化層的效果進行了驗證,具體如圖6、圖7和圖8.

圖6 除霧前后部分標簽驗證集F2-Score

圖7 除霧前后總體F2-Score

圖8 添加正則化層前后總體F2-Score
由圖6和圖7可以看出,除霧算法增強了部分標簽(如water和bare_ground)的F2-Score,但同時也降低了其他的標簽(如haze和clear)的F2-Score.然而這點降低可以通過為每個標簽選擇更好的模型,并整合這些模型來解決.總體來說除霧算法提高了整體的F2-Score,效果明顯.
由圖8可以看出,相比于不添加和添加Lasso回歸正則化層,添加嶺回歸正則化層可以改善整體預測效果,對提高識別準確率有幫助,證明了添加嶺回歸正則化層的作用.
根據表1可以看出,大部分標簽的F2-Score可以達到90%以上,表現出良好的檢測效果,但有部分標簽F2-Score甚至不到50%.根據分析論證后得到以下影響分類精度的因素:
(1)數據集的大小.本方法采用的數據集總量達四萬余張圖片,總體數據集大小足夠進行訓練,故天氣標簽及常見地物標簽經過訓練后得到良好的結果,而不常見的地物標簽只有區區數百張圖片,數據集過小,故無法很好地提取特征進行訓練,從而得到的結果不如人意.但這些標簽總數不多,對總體的F2-Score影響并不大.
(2)人工標注時的誤差.由于本方法采用的數據集需要人工標注,而人工標注時由于每個人對標簽的判斷不盡相同,且同一個人也可能會對標簽的判斷前后不一,從而會出現標注誤差.這屬于不可避免的影響因素,對每個需要有標注數據集的實驗均會有影響.
(3)地物標簽的交叉.由于本數據集含有的部分標簽具有相互交叉的特點,如:農業與種植、常規采煤與礦業采煤等,故會在訓練時會影響特征的提取,從而會影響預測時標簽的分類.

表1 各標簽原始F2-Score
本方法在不斷地微調后得到的F2-Score為92.832%,證明本方法針對衛星遙感圖像取得了良好的檢測效果,準確地挖掘到了數據特征,可以作為衛星圖像識別分類系統的算法.于是本文利用此方法進行展示系統服務器搭建,部分效果如圖9所示.

圖9 衛星圖像識別分類系統(部分)
本文提出了利用除霧算法與嶺回歸正則化的基于深度學習網絡模型VGG的衛星圖像識別分類方法,針對衛星遙感圖像的特點,分析了卷積神經網絡的原理和框架結構,使用深度學習的方法進行了識別和分類.通過一系列的數據增強方法和調整,得到了合理優化的卷積神經網絡.最后將方法應用于在線識別分類展示系統.實驗結果表明本文方法能夠準確對衛星圖片進行識別分類,從而證明其有效性.如何進一步提高準確率和減少模型規模是下一步的研究方向.