陳 亨 謝云鵬
(廣州市城市規(guī)劃勘測設(shè)計研究院,廣東 廣州 510000)
密集匹配是攝影測量中生成數(shù)字表面模型、正射影像的關(guān)鍵技術(shù)。通過對航帶間的影像進行密集匹配,不僅能夠?qū)Σ糠值呐d趣點和特征點進行匹配,還能夠?qū)D片之間的逐像素或準稠密進行匹配,從而為下一步生產(chǎn)DSM、DOM奠定基礎(chǔ)[1-2]。
傳統(tǒng)的密集匹配過程分為以下4個步驟:1)匹配代價計算。2)代價聚合。3)計算視差。4)視差精化。傳統(tǒng)的密集匹配算法分為局部算法和全局算法,局部算法通常以像素或者局部區(qū)域為計算對象,按照匹配基元的不同可以分為基于區(qū)域、基于特征以及基于相位的密集匹配算法。全局算法通常以整幅圖的信息為計算對象來算出視差。全局算法包括動態(tài)規(guī)劃算法和圖割算法置信度傳播算法。相比之下,局部算法的優(yōu)點是易于操作、計算量較少,但是局部算法往往受到局部異常信息的影響,其效果也會受到影響。與局部算法相比,全局算法的精度更高、效果也更好,不過全局算法的計算時間比局部算法的計算時間長[3]。
隨著人工智能的飛速發(fā)展,深度學(xué)習在圖像處理領(lǐng)域的表現(xiàn)非常出色[4]。隨著GPU并行計算和云計算的不斷優(yōu)化,卷積神經(jīng)網(wǎng)絡(luò)等一系列經(jīng)典的神經(jīng)網(wǎng)絡(luò)也在飛速發(fā)展,在圖像識別、影像分類、語義分割以及密集匹配等領(lǐng)域中都有不錯的成績。
在密集匹配領(lǐng)域,利用深度學(xué)習方法的研究也層出不窮,Mayer等人提出了一種新穎的學(xué)習網(wǎng)絡(luò)DispNet,這是一種端到端的網(wǎng)絡(luò),該網(wǎng)絡(luò)通過輸入同名影像從而得到匹配結(jié)果。Wenjie Luo等人提出了一種對siamese net-works的改進方法,該方法在保證原有精度的同時,還能夠大幅度地降低匹配時間[5]。
PSMNet也是一種新的密集匹配網(wǎng)絡(luò),該網(wǎng)絡(luò)結(jié)構(gòu)結(jié)合了金字塔池化方法和3D卷積神經(jīng)網(wǎng)絡(luò)方法,能夠較好地搜集匹配區(qū)域周圍的上下文信息,從而使該方法在紋理缺乏、遮擋等病態(tài)區(qū)域有更好的表現(xiàn),這也是該文所采用的主要研究方法。
卷積神經(jīng)網(wǎng)絡(luò)通常由固定的結(jié)構(gòu)組成,它們分別是輸入層、卷積層、池化層、全連接層和Softmax層。
輸入層就是整個網(wǎng)絡(luò)的輸入,在圖像處理領(lǐng)域中,輸入層輸入的就是輸入圖像形成的三維矩陣,三維分別是圖像的高度、寬度和深度。這里的深度代表了圖像的色彩通道,例如,RGB圖像的深度為3。輸入層的三維矩陣經(jīng)過處理形成新的三維矩陣并被傳到下一層。
卷積層是卷積神經(jīng)網(wǎng)絡(luò)中最重要的部分,卷積神經(jīng)網(wǎng)絡(luò)的每個節(jié)點的輸入就是上一層神經(jīng)網(wǎng)絡(luò)的局部輸出,通常是1個3×3或者5×5大小的卷積核。卷積核通過卷積操作,提取上一層的特征,將其傳遞到下一層作為輸入。卷積運算的操作通常被認為是一個抽象圖形特征的過程,在該過程之后,一般特征三維矩陣的深度會增加。卷積層一般和池化層交替使用,在1個卷積層的后面往往會緊跟1個池化層,接著是卷積層。
池化層的作用主要是限制三維矩陣的維數(shù),通常池化層不會改變?nèi)S矩陣的深度,但是可以縮小矩陣的大小??梢詫⒊鼗瘜拥牟僮骼斫鉃榻挡蓸硬僮?,也就是將1個分辨率較高的圖片降采樣為1個分辨率較低的圖片。池化典型的池化方法有最大池化和均值池化,以2×2的卷積核為例,最大池化層是在2×2的窗口中提取出數(shù)值最大的元素,并將其作為輸出,而平均池化層的作用是在該窗口中求平均值,然后將平均值作為輸出傳遞下去。池化過程在保持原有特征的基礎(chǔ)上控制了維數(shù),通過池化操作可以大幅度地減少最后參與全連接層操作的節(jié)點個數(shù),將矩陣的維數(shù)控制在一定的范圍內(nèi),增加了移動或者扭曲的不變性。
全連接層在整個卷積神經(jīng)網(wǎng)絡(luò)中起到了分類器的作用,在經(jīng)過了卷積層和池化層的特征抽象以后,通過全連接層可以將該抽象的特征與標記空間連接起來,從而達到分類的效果。
Softmax層的主要作用就是對全連接層分類的結(jié)果進行進一步歸一化處理,使輸出的結(jié)果范圍在0~1,可以直接將輸出分類的結(jié)果認為是該分類對應(yīng)的概率。
PSMNet網(wǎng)絡(luò)的全稱是Pyramid Stereo Matching Network。該網(wǎng)絡(luò)屬于1種端到端訓(xùn)練的方法,該方法利用立體像對和深度圖來進行網(wǎng)絡(luò)訓(xùn)練?,F(xiàn)行的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)缺乏方法來獲取上下文信息,從而不能在病態(tài)區(qū)域內(nèi)尋找對應(yīng)關(guān)系,而PSMNet網(wǎng)絡(luò)能夠較好地解決該問題。PSMNet網(wǎng)絡(luò)主要由2個模型組成,分別是空間金字塔池化模型和三維卷積神經(jīng)網(wǎng)絡(luò)(3D CNN)模型。空間金字塔池化可以對不同尺度的內(nèi)容信息進行聚合,3D CNN模型進一步通過重復(fù)的自上而下/自下而上的流程來學(xué)習規(guī)范成本。
PSMNet的主要結(jié)構(gòu)如圖1所示,左右輸入的立體像對分別通過2個權(quán)值共享的卷積神經(jīng)網(wǎng)絡(luò)通道提取原始圖像中的特征,并對特征進行抽象處理。
圖1 PSMNet網(wǎng)絡(luò)結(jié)構(gòu)
該網(wǎng)絡(luò)首先分別對2幅圖片進行卷積操作,2組卷積采用權(quán)重共享的策略。其次,進入金字塔池化層,金字塔池化層在不同的尺度上進行池化融合,從而提取多尺度的信息。再次,通過一系列的池化操作來實現(xiàn)匹配代價聚合的過程,并通過3D CNN模型對聚合結(jié)果進行精化。最后,通過回歸方法輸出估計的深度。
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)一般包括2個部分,卷積的部分(包括池化層)和全連接的部分。在卷積的部分中,由于卷積核能夠通過在輸入圖像上移動來進行卷積操作,因此卷積層對圖像輸入的大小沒有限制。但是由于原始圖像經(jīng)過每個卷積層之后的大小是可以計算出來的,經(jīng)過所有卷積操作后來到全連接層,這時候的全連接層只能接收固定大小的輸入。因此,就會導(dǎo)致卷積操作只能輸入固定大小的圖片。金字塔池化模型能夠有效地克服上述缺點,其具體結(jié)構(gòu)如圖2所示(圖中fc6,fc7為金字塔池化后的全連接層,d為池化層大小)。
圖2 金字塔池化工作原理
空間金字塔池化主要有以下3個優(yōu)點:1)它能夠產(chǎn)生1個固定尺寸的輸出,不用關(guān)注輸入部分的尺寸。2)該方法采用多個尺度的窗口來提取特征,而普通的池化層僅利用1個固定尺寸的窗口來提取特征,這使該模型的魯棒性更好。3)由于該模型可以對不同尺度的特征進行提取和聚合,從而大大增加了特征提取的精度。
3D CNN 的提出是由于視頻影像中每一幀的影像具有相關(guān)性和連續(xù)性,因此需要構(gòu)建1個能夠同時處理多幀影像的卷積方式。和傳統(tǒng)的二維卷積核不同的是,3D卷積神經(jīng)網(wǎng)絡(luò)的卷積核是1個立方體,其工作結(jié)構(gòu)如圖3所示。
一般來說,傳統(tǒng)的二維卷積操作是利用1個卷積核在原始影像或者特征圖上滑動完成卷積操作,抽象出高級的特征并輸出該特征。這樣做的弊端在于卷積核只能提取單張原始影像或特征圖上的特征,沒有辦法顧及同一層其他特征圖的特征。但是3D CNN就可以很好地顧及同一層特征圖的上下文特征。
在PSMNet網(wǎng)絡(luò)中,SPP(金字塔池化)模型促進密集匹配的主要貢獻在于吸收了不同層次特征的信息。而對于PSMNet網(wǎng)絡(luò)的另一個重要的模型(3D CNN模型)來說,它的主要功能是聚合視差維度和空間維度的特征信息。在PSMNet網(wǎng)絡(luò)中主要采用了2種不同的3D卷積神經(jīng)網(wǎng)絡(luò),分別是Basic 3D CNN和Stacked hourglass 3D CNN。在Basic 3D CNN中,網(wǎng)絡(luò)僅是通過殘差塊來構(gòu)建的,Basic結(jié)構(gòu)包括了12個卷積核大小為3×3×3的卷積層。通過雙線性插值在匹配代價立方體上進行采樣(采樣大小為H×W×D,H、W和D分別為匹配代價立方體的高度、寬度和深度)。最后,采用回歸的方法來計算大小為H×W的深度圖。
為了學(xué)習更多的上下文信息,該文采用了1種Stacked hourglass 3D CNN(堆疊沙漏架構(gòu)),它由重復(fù)的自上而下/自下而上的處理與中間監(jiān)督相結(jié)合,PSMNet結(jié)構(gòu)主要由3個堆疊的沙漏網(wǎng)絡(luò)組成,每個網(wǎng)絡(luò)都產(chǎn)生1個視差圖。也就是說,這一整個堆疊沙漏網(wǎng)絡(luò)有3個輸出和模型損失。在訓(xùn)練階段,模型的總損失是由3個沙漏網(wǎng)絡(luò)輸出損失的加權(quán)和來計算的。
PSMNet并沒有直接采用距離度量來衡量匹配代價,而是采用金字塔池化層形成的特征圖,在每個視差級別上將左側(cè)的特征圖和右側(cè)的特征圖連接起來,形成匹配代價聚合。從而形成1個四維的張量(高×寬×深度×特征尺寸)。
每一個視差或深度的概率都是由通過預(yù)測的匹配代價經(jīng)過1個Softmax函數(shù)而得到的。預(yù)測的視差就是求和每一個可能的視差和概率的乘積。如公式(1)、公式(2)所示。
式中:d為預(yù)測范圍中的1個候選值;Cd為當預(yù)測視差為d時的匹配代價;Dmax是候選值的最大值;N為總像素個數(shù);e為指數(shù)函數(shù)。
這種視差回歸的方法具有良好的魯棒性,能夠克服噪聲對其的影響。
圖3 三維卷積工作原理
在該網(wǎng)絡(luò)結(jié)構(gòu)中,采用的損失函數(shù)是Smooth L1損失函數(shù),該損失函數(shù)之所以被廣泛地應(yīng)用在邊框回歸(bounding box regression)中,是因為它具有良好的魯棒性且對極端值的敏感性較低。PSMNet網(wǎng)絡(luò)的損失函數(shù)定義如公式(3)、公式(4)所示。
該次訓(xùn)練是通過遷移學(xué)習的方式進行的[6]。遷移學(xué)習的目標是使現(xiàn)有的神經(jīng)網(wǎng)絡(luò)能夠適應(yīng)新的數(shù)據(jù)集和環(huán)境,將已經(jīng)學(xué)習到的“知識”應(yīng)用到新的數(shù)據(jù)集上。它的具體做法是在1個較為成熟的神經(jīng)網(wǎng)絡(luò)模型的基礎(chǔ)上對該模型進行進一步的訓(xùn)練,使該模型能夠適應(yīng)不同的數(shù)據(jù)特性,并且可以避免因重新訓(xùn)練而浪費大量時間。PSMNet作者通過SceneFlow的數(shù)據(jù)訓(xùn)練出1個較為成熟的模型,該文在該基礎(chǔ)上利用KITTI2015數(shù)據(jù)集進行遷移學(xué)習,對之前的參數(shù)進行微調(diào),使新的模型能夠更加適應(yīng)KITTI2015數(shù)據(jù)集。
該文選用KITTI2015的訓(xùn)練數(shù)據(jù)集進行遷移學(xué)習,訓(xùn)練集為160個立體像對及其深度圖,測試集為40個立體像對。該實驗采用了Pytorch0.3.0框架,使用的是Python2.7版本,操作系統(tǒng)是Ubuntu14.1,采用的GPU是Nvida GeoForce GTX1080。模型可以預(yù)測的最大深度被設(shè)置為192;前100個迭代的初始學(xué)習率被設(shè)置為0.001,之后的迭代過程學(xué)習率被設(shè)置為0.0001,每次訓(xùn)練的批次大小被設(shè)置為12。
接下來進行效果測試,測試的過程是在Middlebury2006的測試集上利用遷移學(xué)習訓(xùn)練的成果模型進行實驗。該測試選用的Middlebury測試數(shù)據(jù)是其立體匹配中2006發(fā)布的版本,該版本分為21組圖片,分別有Baby、Bowling等不同的物體對象。該次測驗選用的實驗對象是Baby。
另外,通過opencv3.0將SGM(半全局匹配算法)和GC(圖割算法)2種傳統(tǒng)的密集匹配方法進行比較,并對實驗結(jié)果進行了定性和定量的評價。
圖4~圖9是PSMnet網(wǎng)絡(luò)、半全局匹配算法(SGM)和圖割算法(GC)在Middlebury的數(shù)據(jù)集進行對比實驗的結(jié)果。
從Middlebury的測試結(jié)果中可以較為直觀地看到利用傳統(tǒng)SGM和GC算法獲得的深度圖容易產(chǎn)生圖像噪聲,特別是在有一定遮擋的區(qū)域更為明顯。而基于PSMNet網(wǎng)絡(luò)的深度圖則十分平滑,沒有出現(xiàn)噪聲點,在影像遮擋的區(qū)域也能夠得到較好的匹配結(jié)果。
一般來說,在已知立體像對真實視差的情況下,可以用以下2種方法對結(jié)果進行分析。第一種方法是均方根誤差,其計算公式如公式(5)所示。
圖4 左視圖
圖5 右視圖
圖6 真實視差圖
圖7 PSMNet實驗結(jié)果
圖8 GC算法實驗結(jié)果
圖9 SGM算法實驗結(jié)果
另一種方法是計算誤差像素的百分比,其計算公式如公式(6)所示。
式中:E為均方根誤差;PMN為錯誤像素百分比;M和N分別為圖像的高和寬;為算法的估計視差;為實際視差值;i,j為圖像第i行、第j列像素的下標。
為了定量地比較幾種算法之間的質(zhì)量好壞,該文采用均方根誤差、錯誤像素百分比和單個樣本處理時間作為評價標準。
該實驗對KITTI2015的數(shù)據(jù)集進行了測試。實驗結(jié)果見表1。
表1 3種算法的效率比較
從表1中可以看到,相比于SGM算法和GC算法,利用深度學(xué)習的PSMNet算法的均方根誤差和錯誤像素百分比更低。與此同時,在不考慮模型訓(xùn)練時間的情況下,單個立體像對的處理時間更短。相比于SGM和PSMNet方法,GC算法處理的時間過長,不適合在需要實時處理立體像對的情況中應(yīng)用。
近些年,許多學(xué)者的工作都證明了利用深度學(xué)習方法來進行密集匹配的優(yōu)勢和可能性。通過實驗驗證不難發(fā)現(xiàn),基于深度學(xué)習的密集匹配方法與傳統(tǒng)的密集匹配算法相比,它不僅在精度方面有所提高,而且能夠更好地克服紋理缺乏、反光和遮擋等傳統(tǒng)密集匹配方法難以解決的問題。
作為新興算法的代表,PSMNet網(wǎng)絡(luò)利用了SPP(金字塔池化模型)來獲取圖像不同尺度的特征信息,并且解決了輸入圖片的大小會受限制的問題。3D CNN進一步學(xué)習通過重復(fù)的自上而下/自下而上的流程來規(guī)范成本。該算法已經(jīng)很大程度地提高了密集匹配的精度和可靠性。
與此同時,基于深度學(xué)習的密集匹配算法也有其缺點。該學(xué)習方法過于依賴訓(xùn)練數(shù)據(jù),訓(xùn)練結(jié)果的好壞與訓(xùn)練數(shù)據(jù)的數(shù)量、質(zhì)量都有很大的關(guān)系,并且在不同數(shù)據(jù)集進行算法測試的時候,也會出現(xiàn)不同的算法效果。
隨著深度學(xué)習的不斷發(fā)展以及攝影測量與遙感相關(guān)數(shù)據(jù)集的不斷建立和完善,深度學(xué)習算法會成為以后匹配算法的主流方法。