陳 亨 謝云鵬
(廣州市城市規劃勘測設計研究院,廣東 廣州 510000)
密集匹配是攝影測量中生成數字表面模型、正射影像的關鍵技術。通過對航帶間的影像進行密集匹配,不僅能夠對部分的興趣點和特征點進行匹配,還能夠對圖片之間的逐像素或準稠密進行匹配,從而為下一步生產DSM、DOM奠定基礎[1-2]。
傳統的密集匹配過程分為以下4個步驟:1)匹配代價計算。2)代價聚合。3)計算視差。4)視差精化。傳統的密集匹配算法分為局部算法和全局算法,局部算法通常以像素或者局部區域為計算對象,按照匹配基元的不同可以分為基于區域、基于特征以及基于相位的密集匹配算法。全局算法通常以整幅圖的信息為計算對象來算出視差。全局算法包括動態規劃算法和圖割算法置信度傳播算法。相比之下,局部算法的優點是易于操作、計算量較少,但是局部算法往往受到局部異常信息的影響,其效果也會受到影響。與局部算法相比,全局算法的精度更高、效果也更好,不過全局算法的計算時間比局部算法的計算時間長[3]。
隨著人工智能的飛速發展,深度學習在圖像處理領域的表現非常出色[4]。隨著GPU并行計算和云計算的不斷優化,卷積神經網絡等一系列經典的神經網絡也在飛速發展,在圖像識別、影像分類、語義分割以及密集匹配等領域中都有不錯的成績。
在密集匹配領域,利用深度學習方法的研究也層出不窮,Mayer等人提出了一種新穎的學習網絡DispNet,這是一種端到端的網絡,該網絡通過輸入同名影像從而得到匹配結果。Wenjie Luo等人提出了一種對siamese net-works的改進方法,該方法在保證原有精度的同時,還能夠大幅度地降低匹配時間[5]。
PSMNet也是一種新的密集匹配網絡,該網絡結構結合了金字塔池化方法和3D卷積神經網絡方法,能夠較好地搜集匹配區域周圍的上下文信息,從而使該方法在紋理缺乏、遮擋等病態區域有更好的表現,這也是該文所采用的主要研究方法。
卷積神經網絡通常由固定的結構組成,它們分別是輸入層、卷積層、池化層、全連接層和Softmax層。
輸入層就是整個網絡的輸入,在圖像處理領域中,輸入層輸入的就是輸入圖像形成的三維矩陣,三維分別是圖像的高度、寬度和深度。這里的深度代表了圖像的色彩通道,例如,RGB圖像的深度為3。輸入層的三維矩陣經過處理形成新的三維矩陣并被傳到下一層。
卷積層是卷積神經網絡中最重要的部分,卷積神經網絡的每個節點的輸入就是上一層神經網絡的局部輸出,通常是1個3×3或者5×5大小的卷積核。卷積核通過卷積操作,提取上一層的特征,將其傳遞到下一層作為輸入。卷積運算的操作通常被認為是一個抽象圖形特征的過程,在該過程之后,一般特征三維矩陣的深度會增加。卷積層一般和池化層交替使用,在1個卷積層的后面往往會緊跟1個池化層,接著是卷積層。
池化層的作用主要是限制三維矩陣的維數,通常池化層不會改變三維矩陣的深度,但是可以縮小矩陣的大小。可以將池化層的操作理解為降采樣操作,也就是將1個分辨率較高的圖片降采樣為1個分辨率較低的圖片。池化典型的池化方法有最大池化和均值池化,以2×2的卷積核為例,最大池化層是在2×2的窗口中提取出數值最大的元素,并將其作為輸出,而平均池化層的作用是在該窗口中求平均值,然后將平均值作為輸出傳遞下去。池化過程在保持原有特征的基礎上控制了維數,通過池化操作可以大幅度地減少最后參與全連接層操作的節點個數,將矩陣的維數控制在一定的范圍內,增加了移動或者扭曲的不變性。
全連接層在整個卷積神經網絡中起到了分類器的作用,在經過了卷積層和池化層的特征抽象以后,通過全連接層可以將該抽象的特征與標記空間連接起來,從而達到分類的效果。
Softmax層的主要作用就是對全連接層分類的結果進行進一步歸一化處理,使輸出的結果范圍在0~1,可以直接將輸出分類的結果認為是該分類對應的概率。
PSMNet網絡的全稱是Pyramid Stereo Matching Network。該網絡屬于1種端到端訓練的方法,該方法利用立體像對和深度圖來進行網絡訓練。現行的神經網絡結構缺乏方法來獲取上下文信息,從而不能在病態區域內尋找對應關系,而PSMNet網絡能夠較好地解決該問題。PSMNet網絡主要由2個模型組成,分別是空間金字塔池化模型和三維卷積神經網絡(3D CNN)模型。空間金字塔池化可以對不同尺度的內容信息進行聚合,3D CNN模型進一步通過重復的自上而下/自下而上的流程來學習規范成本。
PSMNet的主要結構如圖1所示,左右輸入的立體像對分別通過2個權值共享的卷積神經網絡通道提取原始圖像中的特征,并對特征進行抽象處理。

圖1 PSMNet網絡結構
該網絡首先分別對2幅圖片進行卷積操作,2組卷積采用權重共享的策略。其次,進入金字塔池化層,金字塔池化層在不同的尺度上進行池化融合,從而提取多尺度的信息。再次,通過一系列的池化操作來實現匹配代價聚合的過程,并通過3D CNN模型對聚合結果進行精化。最后,通過回歸方法輸出估計的深度。
傳統的卷積神經網絡一般包括2個部分,卷積的部分(包括池化層)和全連接的部分。在卷積的部分中,由于卷積核能夠通過在輸入圖像上移動來進行卷積操作,因此卷積層對圖像輸入的大小沒有限制。但是由于原始圖像經過每個卷積層之后的大小是可以計算出來的,經過所有卷積操作后來到全連接層,這時候的全連接層只能接收固定大小的輸入。因此,就會導致卷積操作只能輸入固定大小的圖片。金字塔池化模型能夠有效地克服上述缺點,其具體結構如圖2所示(圖中fc6,fc7為金字塔池化后的全連接層,d為池化層大小)。

圖2 金字塔池化工作原理
空間金字塔池化主要有以下3個優點:1)它能夠產生1個固定尺寸的輸出,不用關注輸入部分的尺寸。2)該方法采用多個尺度的窗口來提取特征,而普通的池化層僅利用1個固定尺寸的窗口來提取特征,這使該模型的魯棒性更好。3)由于該模型可以對不同尺度的特征進行提取和聚合,從而大大增加了特征提取的精度。
3D CNN 的提出是由于視頻影像中每一幀的影像具有相關性和連續性,因此需要構建1個能夠同時處理多幀影像的卷積方式。和傳統的二維卷積核不同的是,3D卷積神經網絡的卷積核是1個立方體,其工作結構如圖3所示。
一般來說,傳統的二維卷積操作是利用1個卷積核在原始影像或者特征圖上滑動完成卷積操作,抽象出高級的特征并輸出該特征。這樣做的弊端在于卷積核只能提取單張原始影像或特征圖上的特征,沒有辦法顧及同一層其他特征圖的特征。但是3D CNN就可以很好地顧及同一層特征圖的上下文特征。
在PSMNet網絡中,SPP(金字塔池化)模型促進密集匹配的主要貢獻在于吸收了不同層次特征的信息。而對于PSMNet網絡的另一個重要的模型(3D CNN模型)來說,它的主要功能是聚合視差維度和空間維度的特征信息。在PSMNet網絡中主要采用了2種不同的3D卷積神經網絡,分別是Basic 3D CNN和Stacked hourglass 3D CNN。在Basic 3D CNN中,網絡僅是通過殘差塊來構建的,Basic結構包括了12個卷積核大小為3×3×3的卷積層。通過雙線性插值在匹配代價立方體上進行采樣(采樣大小為H×W×D,H、W和D分別為匹配代價立方體的高度、寬度和深度)。最后,采用回歸的方法來計算大小為H×W的深度圖。
為了學習更多的上下文信息,該文采用了1種Stacked hourglass 3D CNN(堆疊沙漏架構),它由重復的自上而下/自下而上的處理與中間監督相結合,PSMNet結構主要由3個堆疊的沙漏網絡組成,每個網絡都產生1個視差圖。也就是說,這一整個堆疊沙漏網絡有3個輸出和模型損失。在訓練階段,模型的總損失是由3個沙漏網絡輸出損失的加權和來計算的。
PSMNet并沒有直接采用距離度量來衡量匹配代價,而是采用金字塔池化層形成的特征圖,在每個視差級別上將左側的特征圖和右側的特征圖連接起來,形成匹配代價聚合。從而形成1個四維的張量(高×寬×深度×特征尺寸)。
每一個視差或深度的概率都是由通過預測的匹配代價經過1個Softmax函數而得到的。預測的視差就是求和每一個可能的視差和概率的乘積。如公式(1)、公式(2)所示。

式中:d為預測范圍中的1個候選值;Cd為當預測視差為d時的匹配代價;Dmax是候選值的最大值;N為總像素個數;e為指數函數。
這種視差回歸的方法具有良好的魯棒性,能夠克服噪聲對其的影響。

圖3 三維卷積工作原理
在該網絡結構中,采用的損失函數是Smooth L1損失函數,該損失函數之所以被廣泛地應用在邊框回歸(bounding box regression)中,是因為它具有良好的魯棒性且對極端值的敏感性較低。PSMNet網絡的損失函數定義如公式(3)、公式(4)所示。

該次訓練是通過遷移學習的方式進行的[6]。遷移學習的目標是使現有的神經網絡能夠適應新的數據集和環境,將已經學習到的“知識”應用到新的數據集上。它的具體做法是在1個較為成熟的神經網絡模型的基礎上對該模型進行進一步的訓練,使該模型能夠適應不同的數據特性,并且可以避免因重新訓練而浪費大量時間。PSMNet作者通過SceneFlow的數據訓練出1個較為成熟的模型,該文在該基礎上利用KITTI2015數據集進行遷移學習,對之前的參數進行微調,使新的模型能夠更加適應KITTI2015數據集。
該文選用KITTI2015的訓練數據集進行遷移學習,訓練集為160個立體像對及其深度圖,測試集為40個立體像對。該實驗采用了Pytorch0.3.0框架,使用的是Python2.7版本,操作系統是Ubuntu14.1,采用的GPU是Nvida GeoForce GTX1080。模型可以預測的最大深度被設置為192;前100個迭代的初始學習率被設置為0.001,之后的迭代過程學習率被設置為0.0001,每次訓練的批次大小被設置為12。
接下來進行效果測試,測試的過程是在Middlebury2006的測試集上利用遷移學習訓練的成果模型進行實驗。該測試選用的Middlebury測試數據是其立體匹配中2006發布的版本,該版本分為21組圖片,分別有Baby、Bowling等不同的物體對象。該次測驗選用的實驗對象是Baby。
另外,通過opencv3.0將SGM(半全局匹配算法)和GC(圖割算法)2種傳統的密集匹配方法進行比較,并對實驗結果進行了定性和定量的評價。
圖4~圖9是PSMnet網絡、半全局匹配算法(SGM)和圖割算法(GC)在Middlebury的數據集進行對比實驗的結果。
從Middlebury的測試結果中可以較為直觀地看到利用傳統SGM和GC算法獲得的深度圖容易產生圖像噪聲,特別是在有一定遮擋的區域更為明顯。而基于PSMNet網絡的深度圖則十分平滑,沒有出現噪聲點,在影像遮擋的區域也能夠得到較好的匹配結果。
一般來說,在已知立體像對真實視差的情況下,可以用以下2種方法對結果進行分析。第一種方法是均方根誤差,其計算公式如公式(5)所示。

圖4 左視圖

圖5 右視圖

圖6 真實視差圖

圖7 PSMNet實驗結果

圖8 GC算法實驗結果

圖9 SGM算法實驗結果

另一種方法是計算誤差像素的百分比,其計算公式如公式(6)所示。

式中:E為均方根誤差;PMN為錯誤像素百分比;M和N分別為圖像的高和寬;為算法的估計視差;為實際視差值;i,j為圖像第i行、第j列像素的下標。
為了定量地比較幾種算法之間的質量好壞,該文采用均方根誤差、錯誤像素百分比和單個樣本處理時間作為評價標準。
該實驗對KITTI2015的數據集進行了測試。實驗結果見表1。

表1 3種算法的效率比較
從表1中可以看到,相比于SGM算法和GC算法,利用深度學習的PSMNet算法的均方根誤差和錯誤像素百分比更低。與此同時,在不考慮模型訓練時間的情況下,單個立體像對的處理時間更短。相比于SGM和PSMNet方法,GC算法處理的時間過長,不適合在需要實時處理立體像對的情況中應用。
近些年,許多學者的工作都證明了利用深度學習方法來進行密集匹配的優勢和可能性。通過實驗驗證不難發現,基于深度學習的密集匹配方法與傳統的密集匹配算法相比,它不僅在精度方面有所提高,而且能夠更好地克服紋理缺乏、反光和遮擋等傳統密集匹配方法難以解決的問題。
作為新興算法的代表,PSMNet網絡利用了SPP(金字塔池化模型)來獲取圖像不同尺度的特征信息,并且解決了輸入圖片的大小會受限制的問題。3D CNN進一步學習通過重復的自上而下/自下而上的流程來規范成本。該算法已經很大程度地提高了密集匹配的精度和可靠性。
與此同時,基于深度學習的密集匹配算法也有其缺點。該學習方法過于依賴訓練數據,訓練結果的好壞與訓練數據的數量、質量都有很大的關系,并且在不同數據集進行算法測試的時候,也會出現不同的算法效果。
隨著深度學習的不斷發展以及攝影測量與遙感相關數據集的不斷建立和完善,深度學習算法會成為以后匹配算法的主流方法。