劉 瑾,季順平
武漢大學遙感信息工程學院,湖北 武漢 430079
從立體或多視航空航天遙感圖像重建地面三維場景一直是攝影測量與遙感中的核心問題。自動獲取立體像對中每個像素的同名點是:三維重建的關鍵技術,通常稱為“圖像密集匹配”。圖像密集匹配可分為4個過程[1]。第1步是匹配代價的計算。像素值的亮度差、相關系數及互信息是一些經典的匹配代價。這些代價主要基于灰度、梯度或信息熵,以待匹配圖像塊作為模板,按照給定的相似性度量在搜索區域內逐像素遍歷計算。這些匹配代價雖然實現簡單,但易受無紋理區域、表面鏡反射、單一結構和重復圖案的影響[2]。第2步是匹配代價聚合。代價聚合通常是對匹配點鄰域內所有匹配代價加權求和。代價聚合能達到局部濾波的效果。但傳統的算法中,包括半全局匹配法和圖割法(GraphCut)[3],都對代價聚合做了不同程度的簡化。第3步是視差值計算。最小匹配代價對應的視差值即為最優結果。通常采用能量函數的方法計算最優視差值。最后一步是視差精化。該步驟是對視差值執行優化的過程,包括一系列后處理技術,如左右一致性檢驗、中值濾波、子像素增強等。最后可由密集匹配獲得視差圖,轉換為深度信息,從而重建三維場景。
在各個階段,經典匹配算法都或多或少地采用了經驗性的方法而非嚴格的數學模型,如設計特征、測度、聚合方式等,并做了不同程度的簡化,如認為鄰域內像素的匹配代價獨立,因此難以達到數學上的最優。采用深度學習算法,是否能夠克服上述傳統方法中的難點、進一步提高匹配精度,是值得深入研究的問題。
密集匹配作為三維重建的核心內容,受到廣泛的重視。圖割法[3]是一種經典的全局立體匹配算法。利用圖論的思想,將求解圖的最小割算法作為核心技術,以求解二維區域的能量最小問題。PMVS(patch-based multi-view stereo)算法[4]首先提取特征點并進行匹配,然后以特征點為中心擴張到周圍面塊,對面塊匹配,得到準密集匹配點。在效率上,圖割法等全局匹配算法采用近似最優的優化方法,計算量大,運行時間過長,不太適合大容量的遙感影像。2008年提出了效率更高的半全局匹配方法(semi-global matching,SGM)[5]。SGM將匹配點鄰域的二維代價聚合替代為多個簡單的一維代價聚合,對當前區域的16個一維方向進行動態規劃計算,以求解最小代價。影像塊匹配算法[6](patch-match method)利用圖像的局部相關性,認為匹配點周圍的區域也相互匹配。文獻[7]開發的SURE軟件是基于SGM的多視影像匹配算法。
隨著機器學習的普及,深度學習[8-11]在各個研究領域都得到了廣泛的應用。尤其是卷積神經網絡(convolutional neural networks,CNN),不僅提高了圖像識別和分類的準確性,提升了在線運算效率,更關鍵的是它避免了各類特征設計。一些研究者逐漸將深度學習引入到立體匹配中,在計算機視覺標準測試集上的匹配結果逐漸超過傳統匹配方法,展示了一定的優越性。
基于深度學習的密集匹配有兩種策略:只學習立體匹配4個標準步驟中的一部分和端到端學習。前者的例子包括MC-CNN網絡[12],只用于學習匹配代價,以及SGM-Net網絡[13],在SGM中引入CNN學習懲罰項,以解決懲罰參數調整困難的問題。
端到端的學習策略是直接從立體像對預測視差圖。DispNet[14]是一種用于視差圖預測的普適的全卷積網絡。GC-Net(geometry and context network)[2]利用像素間的幾何信息和語義信息構建3D張量,從3D特征中學習視差圖。PSM-Net(pyramid stereo matching network)[15]是由空間金字塔池和三維卷積層組成的網絡,將全局的背景信息納入立體匹配中,以實現遮擋區域、無紋理或重復區域的可靠估計。CRL(cascade residual learning)[16]串聯了兩個改進的DispNet[14]網絡,第1個網絡得到立體像對間的初始化視差值,第2個網絡利用第1個網絡的殘差值進一步精化。文獻[17]提出一種Highway網絡結構,引入多級加權殘差的跳接,利用復合損失函數進行訓練。以上方法均在監督方式下運行。文獻[18]設計了一種卷積神經元網絡,利用左右圖像(和右左圖像)的視差一致性學習視差圖,無需真實視差圖作為訓練。
深度學習方法已經較成功地應用于計算機視覺標準測試集的立體匹配,但是應用于遙感影像的處理尚不成熟。本文研究了深度學習的方法在航空遙感影像密集匹配上的性能,并在多個數據集上與經典方法和商業軟件進行比較。此外,本文還評估了深度學習在航空遙感圖像匹配中的泛化能力,即在計算機視覺標準數據集上訓練的模型,是否能直接應用到航空遙感影像中。
MC-CNN通過深度卷積神經元網絡的自我學習,得到最優的相似性測度,用于匹配代價的計算,而取代相關系數、灰度差等經驗設計的方法。
MC-CNN中包括兩種不同結構的網絡:Fast結構和Slow結構,前者比后者的處理速度更快,但得到的視差值精度稍遜于后者。兩種結構均利用一系列卷積層從輸入圖塊中提取特征向量,依據特征向量計算圖塊間的相似性。Fast結構采用固定的余弦度量(即點積)比較提取出的兩個特征向量是否相似,Slow結構嘗試用一系列全連接層學習出特征向量間的相似性分數。由于Slow網絡對訓練數據集容量和內存均有較高要求,本文采用Fast網絡作為試驗網絡。網絡框架如圖1所示。
Fast結構是一種連體(siamese)網絡,兩個子網絡分別由多個卷積層組成,且共享參數,分別用于提取左圖塊和右圖塊中的特征向量。在本文中,卷積層數設置為4,卷積核大小為3×3。兩個歸一化特征向量通過點積得到相似性分數。MC-CNN每次輸入一對正負樣本,計算損失值,并通過最小化Hinge Loss函數訓練網絡。設s+、s-分別為正負樣本的輸出,限差為m, 則Hinge Loss定義為max(0,m+s--s+)。在本文試驗中,m設置為0.2。
MC-CNN只用于學習代價函數,諸如代價聚合[19]、半全局匹配、左右一致性檢驗、子像素增強、中值濾波和雙邊濾波等后處理步驟參考了SGM的相關流程。
GC-Net采用端到端的學習策略,直接學習從核線立體像對到深度圖的可微映射函數。GC-Net將視差看作第3維,構建圖像-視差張量。由3D卷積學習特征,得到最優視差圖(即3D張量中的一個曲面)。在圖2中,立體像對首先通過一系列共享的2D卷積核提取特征圖。第2步,將特征圖串聯并構建代價立方體(cost volume)。具體的,以左片特征圖為例,設其寬度和長度分別為w和h,右片相對于左片的最大視差為n。將對應的右片特征圖每次平移一個像素,即共生成n張圖。左片特征圖與平移后的n張右片特征圖逐個串聯,得到w×h×(n+1)的3D張量。第3步,利用3D卷積和3D反卷積學習一系列的3D特征圖,其最終的大小為W×H×n。H和W分別為原始圖像的長寬。第4步,通過定義一個SoftArgmin函數,將3D特征圖壓縮為2D視差圖d′。最后,采用d′與參考視差圖d之間的一次范式誤差作為代價函數,反向傳播并迭代得到最優參數。
在試驗中,2D卷積部分包含18個卷積層,每一層含32個卷積核,其中第1層的卷積核大小為5×5,剩余17層均為3×3。3D卷積部分包含14個卷積層,卷積核大小均為3×3×3。前兩層的卷積核個數為32,后3層為128,剩余3D卷積層的卷積核個數為64。反卷積部分由5層反卷積組成,反卷積核大小為3×3×3,每一層的反卷積核個數分別為64/64/64/32/1。
DispNet網絡以FlowNet(flow estimation network)[20]網絡為基礎,是一種通用的全卷積神經元網絡,由編碼和解碼兩階段組成,以核線影像對為輸入,直接輸出對應的視差圖。其中編碼階段由6個卷積層組成,前兩層的卷積核大小分別為7×7和5×5,其余層均為3×3。解碼部分由5個上卷積層組成,卷積核大小為4×4。每一尺度的特征圖都與真實視差圖比較,得到對應的損失值。在訓練過程中采用加權的方式賦予這些損失值不同的重要程度。DispNet網絡的示意圖如圖3所示。DispNet網絡采用Adam優化器調整模型中的權值,學習速率設置為1e-4,且每200 k次迭代學習速率減半。

圖3 DispNet網絡結構Fig.3 The structure of DispNet
遷移學習(transfer learning)[21]是一種將從源數據集學習的模型應用于新的目標數據集的策略。如果已有模型能夠直接應用于目標數據集上,將避免大量工作,特別是在目標集樣本不充足的情況下。遷移學習可分為直推式遷移和模型微調(fine-tuning)。
直推式遷移學習使用源數據集的訓練模型,在不進行任何參數調整的情況下,直接對目標數據集進行預測。該方法要求模型本身具有良好的泛化能力,且要求源任務和目標任務是同一類問題。
利用少量目標數據集樣本進行模型微調是另一種常見的遷移學習模式。將預訓練模型的參數作為初值,用目標數據集的樣本進行精調整,以減少新模型訓練需要的迭代次數,并彌補樣本量不足帶來的弊端。
參數遷移可分為兩種:一種是微調所有層的參數;另一種是僅調整最后幾層,并凍結具有普遍性和重用性底層特征。由于本文涉及的網絡層數較淺,統一采用前一種方式。

圖4 參數遷移Fig.4 Parameter transfer
為全面評價深度學習方法在航空遙感立體像對密集匹配中的性能,本文試驗中共采用5套數據集,其中KITTI、Driving是開源的近景數據集,Hangzhou、München、Vaihingen 3套是采集自無人機平臺和傳統航攝平臺的完整航空遙感數據集。
KITTI街景數據集[22]采集自汽車車頂上安裝的兩個高分辨率立體相機。真實深度值是由一個旋轉激光掃描儀記錄所得,點云密度約為影像像素的30%。KITTI數據集包括KITTI2012和KITTI2015。KITTI2012數據集為灰度核線影像,平均大小為1240×376像素,包含194對訓練圖像和195對測試圖像。KITTI2015數據集包含灰度影像和彩色影像,平均大小為1242×375像素;包括200對訓練圖像和200對測試圖像。KITTI數據集只提供訓練集的真實深度圖參考,因此,本文將訓練集中的80%作為訓練集,剩余20%作為測試集以統計精度。這也是其他文獻通行的方法。
Driving數據集[23]是一套虛擬的街景影像集。它是由一個汽車模型動態行駛在虛擬街景模型中,每一幀獲取一對立體像對。Driving數據集提供多種參數設置下的共超過4000對數據,并提供密集的真實視差圖。其數據量比現有的其他數據集多幾個數量級,有效促進了大型卷積神經元網絡的訓練。Driving數據集中的左右像對為核線影像,影像大小固定為960×540。本文試驗中選取了300對數據,其中80%作為測試集,其余20%作為測試集。
Hangzhou數據集由無人機采集。無人機在距地面約640 m的低空拍攝,記錄了2017年8月杭州附近山村地區的場景。包括4條航帶20張9000×6732像素的像片,具有80%的航向重疊度和60%的旁向重疊度。影像中包括高速公路、低矮房屋、工業廠房、裸露田地、樹林,以及裸露山體等地物類型。由LiDAR獲得的該地區的激光點云作為地面真實深度值。
本文在空中三角測量解算后,將原始影像兩兩糾正為核線影像,并由激光點云得到對應每個同名像素點的視差值。受計算機顯卡容量的限制,原始大小的航空影像不能直接用于訓練,因此將核線影像裁剪為1325×354像素的子圖像。通過手工挑選的方式去除一部分山區不理想的影像對(主要是LiDAR點云誤差),剩余的328對影像作為訓練集,40對作為測試集。
München數據集和Vaihingen數據集采集自航攝飛機拍攝的標準航空遙感影像。兩套影像均為德國地區的場景。其中München包含3條航帶15張14 114×15 552像素的航空影像,具有80%的航向重疊度和80%的旁向重疊度。影像中的主要地物類型為城市建筑、道路、綠化帶等。Vaihingen為3條航帶36張鄉村影像,大小為9420×14 430像素;航向重疊度60%,旁向重疊度60%。影像中的地物多為平坦的種植區,其余為密集低矮的房屋以及樹林、河流等。兩套數據分辨率高,地物清晰,分別作為城市和鄉村的典型,具有較強的代表性。
兩套數據中,作為參考的地面高程信息以半密集的DSM形式提供。該DSM由7種商業軟件生成,取中值作為最終深度值,目視精度較高。
與Hangzhou數據處理過程類似,將糾正后的核線影像分別裁剪為1150×435像素和955×360像素大小的子圖像。經篩選后,最終得到由540對影像構成的München數據集以及由740對影像構成的Vaihingen數據集。訓練集和測試集的比例設置為4∶1。
為全面評價深度學習在航空遙感影像中的性能和泛化能力,本文設計了兩類試驗。第1類是利用3套航空數據集Hangzhou、München、Vaihingen測試各種深度學習方法的性能,并與經典的SGM和主流攝影測量軟件SURE作對比。第2類是測試深度學習模型的泛化性能。包括將計算機視覺標準測試集上訓練的模型直接應用于航空影像,以及測試基于目標集小樣本訓練的遷移學習。
所有試驗均以訓練后的網絡模型在測試集上的結果作為評價依據。本文采用三像素誤差(three-pixel-error,3PE)和一像素誤差(one-pixel-error,1PE)作為評價標準。如3PE指點位誤差小于3個像素的個數占所有像素的百分比。
所有的深度學習算法均在Linux系統下實現。其中MC-CNN在深度學習框架torch下實現,采用Lua語言編寫核心代碼。GC-Net模型和DispNet模型分別在Keras和Tensorflow下實現,采用Python作為主要語言。所有模型的訓練和測試均在NVIDIA Titan Xp 12 G GPU上運行。
試驗評估了3種網絡模型MC-CNN、GC-Net、DispNet在密集匹配上的表現,并與SGM、商業軟件SURE比較。各種方法/軟件的設定如下:
(1) MC-CNN:MC-CNN的訓練輸入是以匹配點為中心的9×9窗口。在訓練階段,模型每次輸入128對正負樣本,采用小批量梯度下降法最小化損失,動量設置為0.9。所有數據迭代14次,學習速率設置為0.002。第11次迭代后,學習速率調整至0.000 2。預測階段,輸入一對核線立體像對,輸出相似性分數,通過一系列后處理過程得到最終的視差圖。
(2) GC-Net:訓練輸入為整幅核線像對及對應的視差圖。GC-Net在稀疏的視差圖上訓練效果較差,因此只在3套密集型的數據集上訓練模型(不能處理的數據集在表1中統一以“—”表示)。輸入數據的批量大小設置為1,所有數據迭代50次,學習速率設置為0.001。測試階段直接輸出視差圖及精度。
(3) DispNet:整幅核線影像對作為輸入。批量大小設置為32。所有數據迭代1500次,學習速率設置為0.000 1,并在訓練過程中逐漸下降。輸出視差圖及精度。
(4) SGM:采用Opencv3.0庫中自帶函數,并附加高斯平滑、中值濾波等后處理過程。以批處理的方式對每一套測試集進行處理,由生成的視差圖和真實視差圖比較計算點位誤差并統計精度。
(5) SURE:作為商業軟件,輸入為所有原始影像及外方位元素信息,輸出為OSGB格式的三維模型。因此只在3套航空影像數據集上進行試驗。該軟件輸出的三維模型反映的是地物點的真實坐標,為了參與精度評定,由三維坐標計算每個點在核線影像上對應的視差值,并與真實視差值比較。
傳統方法和深度學習方法在5套數據集上的表現見表1。
從表1可見,第1,在3種深度學習方法中,端到端的GC-Net模型表現最好。在3套數據集上均優于其他方法,在地勢平坦的Vaihingen數據集上精度達到99.7%(98.0%)。在地物高差變化較大的München數據集上,3PE比第2名的MC-CNN模型高2%左右,1PE高出近9%。在效果較差的Driving數據集上,92.6%的測試精度遠超其他方法。
第2,MC-CNN模型表現良好且穩定,在各套數據集上的精度均遠超SGM,在KITTI2015和Hangzhou數據集上優勢最明顯。在München和Vaihingen兩套航空影像數據集上,與基于多視匹配的SURE相當。在Hangzhou數據集上稍遜色于SURE。
第3,DispNet模型在遙感影像數據集上表現最差,甚至弱于SGM。DispNet網絡結構屬于通用架構,而非專門為立體匹配設計。在1PE標準上較差的結果反映了通用模型架構在密集匹配任務上的局限性。
第4,GC-Net在所有方法中表現最優;MC-CNN與基于多視匹配的商業軟件SURE相當,且遠優于SGM;DispNet表現最差。本文預測:若在GC-Net或MC-CNN中加入多視約束,基于深度學習的方法將可能明顯超越傳統方法。
圖5分別展示了兩種深度學習方法和一種傳統方法在3套航空影像數據集上的預測視差圖。從上到下分別是立體像對的左圖、右圖、參考深度圖、MC-CNN、GC-Net、SGM方法的預測結果。可見GC-Net表現最為優秀,與參考圖最為相似;而傳統方法SGM效果略差。
圖6是由4種方法的視差圖恢復得到的三維立體場景。從上到下分別是左圖、參考三維場景、MC-CNN、GC-Net、SGM和SURE的預測結果。由圖6可見,SURE在Hangzhou數據集上有一定的扭曲,其他方法則表現相對較好。在München數據集上,各種方法均較為接近參考三維場景,但SURE的側面紋理更加細致。在地勢平坦的Vaihingen數據集上,所有方法都達到了很好的水平。
3.2.1 直接遷移學習
直接遷移學習是將預訓練得到的模型,直接應用于目標數據集的預測。表2是基于MC-CNN的預訓練模型在目標集上的測試結果。訓練集表示用于模型訓練的源數據集,測試集表示目標數據集。例如,對于Hangzhou目標數據集,若用自身作為源數據集訓練,其精度為95.3%(加粗的對角線元素);若采用KITTI2012作為源數據集,則其精度為94.4%。
試驗的測試精度同樣由3PE和1PE評價。總體而言,基于MC-CNN的深度學習方法具有良好的泛化能力,3PE標準上其模型退化程度(即采用其他數據源進行訓練導致的精度降低)為0.2%~2.2%,在1PE標準上為0.8%~5.6%。即使用預訓練的模型直接預測而不進行任何新的學習,MC-CNN依然遠超SGM,并與SURE軟件幾乎相當。

圖6 由4種方法的密集視差圖恢復出的三維場景Fig.6 3D scenes recovered from disparity maps of 4 methods

測試集精度(3PE/1PE)訓練集KITTI2012KITTI2015HangzhouMünchenVaihingenKITTI20120.963/0.8660.957/0.8480.941/0.8560.945/0.7970.946/0.813KITTI20150.958/0.7680.960/0.7780.951/0.7610.955/0.7510.953/0.750Hangzhou0.944/0.8080.942/0.8050.953/0.8160.948/0.7700.940/0.760München0.960/0.8540.960/0.8510.960/0.8440.965/0.8670.959/0.850Vaihingen0.988/0.9190.987/0.9120.987/0.9160.989/0.9220.992/0.932
表3是基于GC-Net直接遷移學習的結果。由于只有Driving、München、Vaihingen 3套數據具有密集的深度圖標簽,因此將這3套數據作為源數據集訓練模型。其數據的表示方法與表2相同。

表3 基于GC-Net的訓練模型在目標集上的測試結果
GC-Net同樣具有很強的泛化能力,但稍弱于MC-CNN。遷移學習時,3PE標準下模型退化程度約為1.5%~3%(1PE標準下為3.1%~9.9%)。測試精度平均下降2%,而MC-CNN只有0.6%。這是可以預料的,因為MC-CNN只用來學習更底層的相似測度。
3.2.2 參數微調
在目標集含有少量樣本的前提下,可以采用第2種遷移學習策略:以預訓練模型作為初值,利用目標樣本進一步微調。
表4和表5分別為基于MC-CNN方法和基于GC-Net方法的參數微調結果。“目標訓練集”表示參與訓練的目標集樣本數量,DT方法表示直接在目標集上的訓練,模型參數隨機初始化;TL方法表示參數遷移學習并微調。“相對提升”是在同樣大小的訓練集下,TL相對于DL的精度提高。在表4中,KITTI2015為源數據集,預訓練了MC-CNN模型,Hangzhou為目標集;在表5中,Vaihingen為源數據集,預訓練了GC-Net模型,München為目標集。

表4 MC-CNN方法在不同數量訓練樣本下的預測結果

表5 GC-Net方法在不同數量訓練樣本的預測結果
表4中,當用25對訓練集直接訓練模型時,可達到94.4%的精度;樣本量增加一倍時,測試精度提高0.09%左右。可見,MC-CNN方法對訓練樣本的數量要求不高,少量樣本的微調也能得到較好的訓練模型。當采用遷移學習策略時,25對訓練樣本可達到94.9%的精度,相比于隨機初值的直接訓練,具有0.5%的優勢。
在表5的GC-Net方法中,只用25對訓練樣本時,直接訓練模型(DT)僅有78.3%的測試精度;樣本量增加一倍時,測試精度達到90.2%,提高11.9%。當樣本量逐漸增加,最終達到97.2%。可見,相比于MC-CNN,端到端的GC-Net需要更多的訓練樣本。而采用遷移學習并微調的策略(TL),25對訓練樣本即可達到96.5%的精度。
從以上統計結果可見,遷移學習并微調對于模型精度的提高提供了較好的幫助。樣本量越少,遷移學習的作用越大。同時在試驗中發現,遷移學習不僅能提高精度,還可以減少在目標集上訓練新模型的迭代次數,以更短的時間得到更優的結果。因此,本文建議:在基于深度學習的密集匹配中,盡量以訓練好的模型作為目標數據集的初值,以得到效率和精度上的提升。
本文將深度學習方法引入到航空影像的密集匹配中,在多個數據集上與傳統方法做了詳細的比較,并分析了深度學習的泛化能力。首先,驗證了深度學習方法與商業軟件SURE相比略有優勢,且遠遠好于SGM。其次,在深度學習方法中,GC-Net作為端到端的方法,取得了最好的效果,只學習相似性測度的MC-CNN次之。最后,測試了深度學習在立體密集匹配中的泛化能力并發現:MC-CNN和GC-Net具有較強的泛化能力,在標準數據庫上訓練的模型,可直接用于航空數據集,且3PE精度下降并不明顯,尤其以MC-CNN表現最佳。這種泛化能力來自圖像匹配只依賴于底層特征,而這些特征無論在近景、航空甚至模擬場景都是通用的。此外,通過遷移學習和參數微調,深度學習方法可實現效率和性能的同時提升。