張玉亮, 趙智龍, 付煒平, 劉洪吉, 熊永平, 尹子會
(1.國網河北省電力有限公司檢修分公司運維檢修部, 石家莊 050000;2.北京郵電大學網絡技術研究院, 北京 100190)
深度估計是環(huán)境感知的基本任務,它廣泛用于3D圖重建[1],機器人導航[2],姿態(tài)估計[3]即使定位與地圖構建(simultaneous localization and mapping,SLAM)等任務[4],也廣泛應用在無人駕駛技術的環(huán)境感知[5]中。當前獲取物體距離信息的主流是通過LiDAR系統(tǒng)和深度傳感器,但這種方法有其自身的局限性。高性能3D LiDAR成本很高,在某些惡劣天氣(雨天、霧天等)時,常伴隨著激光衰減劇烈的問題,傳播距離和測量精度將受到很大影響。基于結構光的深度傳感器(如Kinect相機)容易受到環(huán)境光的干擾,這不適用于強光和室外條件下[6]。因此,從圖像中獲取距離信息的解決方案仍然是首選。與使用傳感器獲得深度信息的方法相比,視覺解決方案具有使用簡捷,價格低廉等優(yōu)勢。原始圖像通常通過單目,雙目或多視圖立體圖像收集。多視圖立體視覺方法是利用多個視角觀察同一場景從而獲得多張圖像,通過計算多張幅圖像中的視差得到深度信息[7-8]。但是,立體攝像機在使用時需要較大的基準線和仔細的校準,從而需要大量的計算以實現(xiàn)精確的三角剖分,并且對于紋理較為稀疏的場景,在圖像中找到豐富的特征來進行匹配較為困難。
近年來使用深度學習方法從單RGB圖輸入預測場景深度,受到了研究人員的廣泛關注。Eigen等[9]提出了使用卷積神經網絡(convolution neural network,CNN)提取單目圖像的特征,并進行深度估計,首先通過對圖像進行全局深度估計,然后利用局部特征實現(xiàn)細粒度優(yōu)化,這種方法首次將深度學習應用于單目圖像深度估計任務中。Liu等[10]將條件隨機場(conditional random field,CRF)結合到CNN網絡中進行單目圖像深度估計。Cao等[11]使用離散分類的思想處理深度估計中的深度回歸問題,通過CRF結合全卷積的深度殘差網絡實現(xiàn)分類,得到最終的深度估計值。
然而,目前的單目深度估計算法只關注圖像本身的顏色特征,通過編碼器將圖像特征投影到高維特征空間,解碼器將高維特征空間投影到深度空間,這種編碼和解碼的方式僅關注圖像本身的局部特征,沒有考慮全局的場景信息,與深度相關的特征不僅僅是圖像的顏色特征,圖像中的語義信息以及空間邊緣的先驗知識對于深度估計來說都有重要的輔助作用。
與深度估計任務類似,語義分割任務也是計算機視覺中場景感知任務的一個重要部分,受到了廣泛的研究[12]。深度估計和語義分割這兩種任務都屬于場景感知任務,它們的目標可以概括為整體場景理解。深度估計是研究場景物體的空間幾何關系任務,而語義分割是研究場景不同對象的語義表征任務。在一張圖片中,每個像素通常包含豐富的語義和深度信息,對象之間的空間幾何關系與語義關系具有緊密的聯(lián)系,并且其能共享有關聯(lián)的上下文信息,這使得可以基于相同的框架來實現(xiàn)語義或深度視覺感知任務[13],因此將與任務相關的場景感知信息引入模型中,并引導模型進行深度估計。另外,超像素是由具有相似特征的像素點組成的區(qū)域塊,比如基于圖像本身的顏色、亮度和紋理等特征?;趫D像本身的特征,能通過超像素分割來分割圖像,這些超像素塊能夠表示圖像中的邊緣信息,超像素塊的邊緣也能夠組成物體對象的邊緣,因此這種信息可以作為深度估計和語義分割的一種先驗信息。
為了融合圖像中的語義信息提高單目深度估計模型的效果,現(xiàn)提出基于圖神經網絡的超像素拓撲圖模型提取圖像的對象邊界信息,這種邊界信息能夠作為輔助信息和先驗知識融合到深度估計和語義分割的聯(lián)合模型中,同時語義分割任務能夠增強共享框架對于語義信息的編碼能力,從而進一步提高單目深度估計的效果。
場景的語義分割圖捕獲了圖像的不同目標及其邊緣信息,在空間位置和信息強度上和場景的深度圖呈現(xiàn)出高度相關性,如圖1所示。因此準確的語義分割圖可幫助糾正目標邊緣的深度值,這些邊緣深度值在深度估計任務中更容易出錯。在聯(lián)合深度估計與語義分割的任務中,能夠通過共享參數模型,使模型能夠學習有效的特征,從而生成精度較高的深度圖。
圖1 多種視覺任務處理結果Fig.1 Results of multiple vision task
為了深度挖掘圖像中的多元對象的語義信息和結構信息,本文中構建新型的局部區(qū)域拓撲關系圖,通過圖神經網絡推理的方法,來進一步表達圖像的語義信息和結構信息,盡管基于圖推理的方法可以通過將每個像素視為圖中的一個節(jié)點從而直接構成拓撲圖,但是當像素數太大時,圖神經網絡的計算量也會增加。另外Shi等[14]提出了將圖像進行分割的開創(chuàng)性工作,但他們工作中基于圖的分割為對象區(qū)域形式,分割區(qū)域數量少,難以形成大型的拓撲圖。因此,使用單個像素和對象相關區(qū)域分割之間的折衷解決方案就是使用超像素分割的方法。超像素分割將圖像顏色相似和其他的特征比如位置相似的像素進行分組,得到具有一定語義屬性的表示單位和區(qū)域[15],因此本文中使用超像素分割的方法生成局部關系拓撲圖,并使用圖注意力機制這種比較有效的圖神經網絡方法學習拓撲圖的特征表示。
本文提出的聯(lián)合訓練網絡模型如圖2所示,原有的RGB圖像通過編碼器提取多尺度深層特征,編碼器是由ResNet34網絡[16]作為主要的特征提取網絡結構。RGB圖像通過簡單線性迭代聚類(simple linear iterativeclustering,SLIC)算法[17]進行超像素分割,在構建局部區(qū)域關系拓撲圖時,將每一個超像素塊作為節(jié)點,超像素塊之間的連接作為邊,使用圖注意力機制作為圖推理網絡得到圖像的增強特征層,并與原有的編碼器的輸出進行特征融合。
圖2 網絡模型結構圖Fig.2 Network model structure
之后再進一步輸入到空洞金字塔池化層(atrous spatial pyramid pooling,ASPP)[18]中,最終得到編碼器的特征表示。在解碼階段,使用了兩個解碼器分別處理深度估計任務和語義分割任務,這兩個解碼器的結構相同,但是參數不同,編碼器與解碼器之間采取類似U-net模型[19]的跳層連接方式,能夠實現(xiàn)特征的多尺度融合,例如融合低層的幾何細節(jié)信息與高層的語義信息。最終生成深度圖和語義分割圖分別進行誤差的反向傳播。編碼器負責從高分辨率低維度的圖像中提取高維特征表示,而解碼器負責從特征表示中恢復精確的對象細節(jié)。
為了能夠提取圖像中的多元對象的語義信息和結構信息,對圖像進行超像素分割,并將分割后的超像素塊作為節(jié)點,將超像素塊與其相鄰超像素塊進行相連,構成超像素拓撲圖,然后利用圖神經網絡(graph neural networks,GNN)學習拓撲圖結構的特征,將得到的深度特征與編碼器的輸出進行特征融合再輸出到ASPP模塊中。
1.3.1 超像素拓撲圖構建
本文中的超像素構建過程如算法1所示,本文的超像素分割方法通過將每個超像素作為節(jié)點并添加所有直接相鄰的超像素(即一階相連)來生成超像素拓撲圖,使用了線性迭代聚類SLIC算法分割圖像并獲得N個不規(guī)則區(qū)域來表示圖的節(jié)點。SLIC是一種無監(jiān)督的圖像分割方法,其使用K-means對圖像的局部像素進行無監(jiān)督聚類,從而產生許多均勻且緊湊的超像素塊,由于超像素由均勻像素組成,因此可以假設它是局部視覺元素的近似表示。
算法1:超像素拓撲圖構建輸入:輸入特征圖X∈RC×H×W;輸出:輸出拓撲結構圖G=(N,ε),節(jié)點特征x;1. s,N←S(I)2. x(n)←F(I,s,n),?n∈N,x(n)為節(jié)點n的特征向量3. ε←{}4. for 1≤x≤w do5. for 1≤y≤h do6. If s(x,y)≠s(x+1,y) then7. ε←ε∪{s(x,y),s(x+1,y)}8. End if9. If s(x,y)≠s(x,y+1) then10. ε←ε∪{s(x,y),s(x+1,y)}11. end if 12. end for13. end forreturn G=(N,ε),x
圖像通過超像素分割之后,通過獲得節(jié)點的特征。節(jié)點特征是由圖像超像素的顏色和位置決定的,通過計算超像素塊內所有像素點的平均值,作為超像素塊的特征。拓撲圖的邊是通過判斷超像素塊是否相鄰來計算得到的,如果超像素塊相鄰,則鄰接矩陣中的值設為1,如果超像素塊不相鄰,鄰接矩陣中的值設為0,最終返回超像素拓撲圖結構和節(jié)點特征。
1.3.2 圖推理模塊
本文設計的圖推理模塊基于Velickovic等[20]提出的圖注意力機制進行改進的。圖注意力機制能不斷更新節(jié)點特征和鄰接權重,能夠根據相鄰節(jié)點自適應地學習鄰接權重,學習節(jié)點之間的復雜關系。
圖注意力機制的圖卷積形式定義為
(1)
設中心節(jié)點為vi,則鄰居節(jié)點vj到vi的權重系數為
eij=a(WXi,WXj)
(2)
式(2)中:eij是計算兩個節(jié)點相關度的函數,定義這一種神經網絡層進行相關度計算,最終權重系數計算公式為
eij=σ[aT(WXi‖WXj)]
(3)
(4)
為了增強圖注意力機制對特征的表達能力,本文使用多頭注意力機制,對式(1)中圖注意力機制的圖卷積增加了K組相互獨立的注意力機制,并將結構進行級聯(lián),公式為
(5)
1.4.1 編碼模塊
本文設計的編碼器網絡主要結構如表1所示,編碼器的結構由六組卷積層串聯(lián)組成,首先通過第一組卷積層提取輸入RGB圖像的特征;然后對通道維度上提取出的特征進行級聯(lián)操作。第二組到第五組卷積層分別采用ResNet34模型中的Residual Block1~Residual Block4,第六組卷積層通過ASPP模塊獲取上下文多尺度特征。編碼模塊生成深度估計與語義分割相互關聯(lián)的編碼特征,且兩項任務共享模塊的參數。語義分割與深度估計兩項任務的聯(lián)合模型相比單一任務模型,其編碼模塊對場景表達能力更為突出。原因包括以下兩個方面:①編碼模塊的共享參數模型能夠進行兩種項目的誤差方向傳播任務,從而有效地引導深度估計模型在場景感知中同時學習深度信息和語義信息,并輸出更加多元的場景信息特征表示;②這兩種任務的模型在學習特征時會存在一定的噪聲影響,由于不同的場景感知任務具有不同的噪聲分布,因此使用具有共享參數的模塊對學習具有泛化能的特征表示更具優(yōu)勢,并且共享參數的模塊能夠降低模型在單一任務中過擬合的風險。
表1 編碼模塊的網絡結構Table 1 The network structure of the encoder module
1.4.2 解碼模塊
本文模型是建立在多任務學習的基礎上進行構建,多任務學習的關鍵在于任務之間的耦合關系和約束關系。為了能夠使兩種任務能夠進行耦合訓練,本文在解碼階段對兩個任務的解碼模塊進行共享傳播。由于兩種任務在處理過程中需要編解碼該任務獨有的一些具有任務特異性的特征,因此這些任務特異性的特征不希望直接在不同任務之間進行傳播和共享。而一旦使用硬參數共享方法強制傳播參數,不同任務之間的特異性特征就會在共享和傳播過程中被消除。Nekrasov等[21]通過多任務框架將大部分神經網絡層的參數均進行共享和傳播,對于每個任務的結果,僅使用兩層的卷積網絡層進行輸出,但隨著模型層數的增多,特征的可遷移性會大幅降低,因此,將共享特征直接遷移到一個特定任務中進行輸出的方法并不能完成充分的過渡。本文中基于多任務模型的深度估計網絡只共享和傳播編碼模塊的參數,然后將編碼模塊提取的特征經過深度估計任務和語義分割任務的解碼模塊進行解碼,解碼模塊的模型結構相似,但是其參數不進行傳播,最終得到語義分割圖和深度圖。
本文中使用5個解碼層來構成解碼模塊,并且兩種任務的解碼器結構相似,在解碼模塊中,雙線性插值、上映射以及反卷積等常被用于上采樣的操作。雙線性插值方法在一些任務中與其他兩種上采樣方法相比,表現(xiàn)效果較好并且參數量較少,因此本文的上采樣操作使用雙線性插值方法。兩種任務的解碼模塊總體結構相似,兩種任務模塊的區(qū)別在于語義分割解碼模塊的最后一個卷積層輸出語義分割的類別,輸出通道的個數為語義分割類別總數。本文設計的解碼模塊網絡主要結構如表2所示。
表2 解碼模塊的網絡結構Table 1 The network structure of the encoder module
本文中聯(lián)合訓練模型的損失函數包括以下三種損失函數:①深度估計損失;②語義分割損失;③跨域邊界一致性損失。損失計算公式為
L=λdld+λsls+λclc
(6)
式(6)中:ld為深度估計任務的損失;ls為語義分割任務的損失;lc為跨域邊界一致性損失。λd、λs、λc分別代表3個損失函數的權重系數,其中λd=1,λs=0.1,λc=0.1。
1.5.1 深度估計損失
對于深度學習端到端模型來說,損失函數的設計對模型最后的測試精度影響較大。本文將像素點的誤差損失作為回歸問題處理,常用的損失函數有平均絕對誤差(L1損失)以及均方誤差(L2損失),計算公式為
(7)
(8)
但有研究表明只使用平均絕對誤差或者均方誤差均不能達到較好的效果,L1損失函數的魯棒性更好,它能處理數據的全部異常值,但L1損失函數有一定不穩(wěn)定性,會產生多個解。與L1損失函數相比,L2損失函數能夠全局可導,具有比較穩(wěn)定的解,但它對異常值比較敏感,容易產生梯度爆炸的現(xiàn)象。因此本文中采用具有一定策略的加權損失函數Ruber函數,如式(9)所示,Ruber損失函數能夠抑制具有較大誤差的像素對總損失值的貢獻,從而給予較小誤差的像素更大的權重,使具有較小誤差像素的優(yōu)先級提高。
(9)
深度梯度損失函數Lgrad更加關注目標邊緣信息,對邊緣誤差給予更大得權重,使得圖像邊緣部分更加清晰,計算公式為
(10)
式(10)中:N代表深度圖像中的像素總數;?xyi和?xy′i代表模型對深度圖像像素i處的x方向梯度預測值以及深度圖像像素i處的x方向梯度真值;?yyi和?yy′i代表y方向的梯度預測值和真值。
本文中計算兩幅圖像的結構相似程度采用結構相似性指標(structure similarity index metrics,SSIM),其中SSIM計算公式為
SSIM(d,d*)=L(d,d*)+C(d,d*)+
S(d,d*)
(11)
(12)
(13)
(14)
式中:μd為輸出深度圖d的均值,表示圖像的亮度;σd為輸出深度圖d的標準差,表示圖像的對比度;σdd*為輸出深度圖d和真實深度圖d*的協(xié)方差,表示圖像的結構;其中超參數C1=1,C2=9,C3=4.5。
另外SSIM的范圍是[0,1],SSIM越大代表兩者的相似度越大,本文中使用的SSIM損失對SSIM進行轉化,公式為
(15)
式(15)中:W=11×11,即將兩張圖分成11×11后逐一計算SSIM的Loss值并求其平均值。
綜上所述,在訓練過程中使用的深度估計損失表達式為
Ld=λ1LRuber+λ2Lgrad+λ3LSSIM
(16)
式(16)中:λ1=0.6,λ2=0.2,λ3=0.2。
1.5.2 語義分割損失
本文中語義分割Loss是預測值與真實值之間的標準交叉熵,交叉熵在分類任務中經常使用,它代表了兩種概率的相似性,定義為
(17)
1.5.3 跨域邊界一致性損失
在深度估計損失和語義分割損失的基礎上,本文通過跨域邊界一致性損失對模型進行優(yōu)化,利用像素的語義標簽來改善深度預測進而實現(xiàn)兩種任務之間的顯示鏈接,提升深度圖對邊緣部位提取的能力。如果兩個相鄰的像素語義分割的標簽不同,則這兩個相鄰像素的深度值也會有不同,因此不連續(xù)項損失函數的目的是讓相鄰的像素深度值發(fā)生變化,跨域邊界一致性的損失函數的定義為
(18)
本文模型通過NYU Depth V2數據集進行訓練和驗證,該數據集包含464個通過Kinect-V1傳感器捕獲的室內場景??紤]到模型在訓練時顯存的大小限制著batch,本文中將原圖片的分辨率從640×480通過裁剪以及下采樣的方式減小為304×228。數據增強操作能夠有效避免模型過擬合,提高模型的泛化能力,并且對測試精度有所提高,本實驗通過3種方式進行數據增強:①隨機翻轉,將圖像圍繞對稱軸進行左右翻轉;②顏色抖動,對圖像的曝光度、飽和度和色調進行隨機變化;③隨機旋轉,將原有圖像和深度圖像按照r∈[-10,+10]的約束圍繞中心進行隨機旋轉。
本文使用了如下4種評價指標。
在通過Pytorch深度學習框架上實現(xiàn)本文網絡模型的訓練,使用顯存為11 GB的GTX1080Ti顯卡對模型進行訓練,對本文端到端網絡模型通過Adam優(yōu)化器進行優(yōu)化,優(yōu)化器的初始學習率設置為10-4,權重衰減參數β1和β2設置為0.9和0.999,Batch size設為8,設置訓練周期為40個epoch,每隔5個epoch就將學習率衰減為原來的10%。
2.4.1 損失函數有效性驗證
通過提出的聯(lián)合損失函數進行訓練,為了驗證聯(lián)合損失函數的效果,使用4種Loss函數組合對網絡模型進行訓練,分別是:①Ld:僅使用深度估計損失作為Loss函數;②Ld+Ls:增加語義分割模塊Loss;③Ld+Lc:僅使用跨域邊界一致性Loss函數;④Ld+Ls+Lc:最終的總損失函數。
經過實驗得到如表3定量測試結果。
對于錯誤率評價指標RMS和REL,它們的值越小代表效果越好。對于準確率評價指標δ1、δ2和δ3,它們的結果越大越好,從表3中的定量實驗可以看出,僅使用深度估計作為損失函數,得到了較差的效果。模型2與模型1相比,效果得到了提高,同時體現(xiàn)了本文提出跨域邊界一致性損失函數的效果,同時當加入了語義分割模塊之后,利用語義分割任務對深度估計任務的影響,測試結果得到了顯著的提高,最后,表3中實驗表明了使用3種損失函數得到了最好的效果。
表3 損失函數驗證結果Table 3 Verification results of loss function
2.4.2 圖推理模塊有效性驗證
本文中使用了輸入尺寸為304×228的圖像進行超像素分割,由于構建拓撲圖的過程中,將每個超像素作為拓撲圖的節(jié)點,所以超速素分割得到的超像素塊的數量就是拓撲圖節(jié)點的個數,而在圖推理過程中,節(jié)點個數是比較重要的參數,它直接決定了圖推理過程中需要學習的參數量。因此,在圖推理的有效性驗證中,將生成超像素的數量分別設為0、200、400、600、800和1 000進行測試,測試結果如圖3所示。
圖3 不同超像素個數的實驗結果Fig.3 Experimental results of different number of superpixels
從圖3中可以看出,無論超像素的數量設置為多少,使用了超像素拓撲圖推理模塊比不使用圖推理模塊的效果要好,這也驗證了超像素圖推理模塊的作用,從圖中可以看出,隨著節(jié)點數的增加,測試錯誤率指標也越來越小,當節(jié)點數為800和1 000時,測試結果較好。由于節(jié)點數越大,模型的參數量越多,考慮到訓練的時間成本,將超像素分割數量設為800。
2.4.3 與其他模型進行對比
為了驗證聯(lián)合深度估計網絡模型的先進性,本文將測試預測指標與近年來的一些相關研究工作進行對比實驗,實驗對比結果如表4所示。
表4 7種模型的誤差和精度比較結果Table 4 Error and precision comparison results of 7 models
Qi等[22]提出了幾何神經網絡,通過從單一圖像聯(lián)合預測深度和表現(xiàn)來提高深度估計的質量;Hao等[23]提出了一種結合密集特征提取器和注意力機制的單幅圖像深度圖預測方法,通過提取多尺度信息來預測精確的深度圖。DORN模型[24]使用空間的離散化策略來離散地估計深度,并將深度網絡學習重構為一個有序回歸問題,通過使用普通的回歸損耗訓練網絡,獲得了更高的精度和更快的收斂速度;Wang等[25]通過空間注意力和通道注意力獲取深度和空間位置關系,提出了基于密集塊的解碼網絡,實現(xiàn)了更大更密集的接受區(qū)域。通過與其他6種模型進行對比,可以看出本文方法獲得了最低的均方根誤差達到了0.507,雖然DORN的REL值以及Hao等[23]的δ1值比本文模型表現(xiàn)較好,但綜合比較之后,本文模型在大部分指標都能獲得最優(yōu)的表現(xiàn)。
為了更直觀地對比本文中模型與其他模型的深度估計效果,本文選取了測試集中的若干張圖片,使用不同的模型生成深度圖進行比較,結果如圖4所示。
圖4 NYU-Depth-V2數據集結果對比Fig.4 Comparison of NYU-Depth-V2 dataset
利用不同的方法對相同的數據集進行深度圖的估計生成,將預測結果深度圖進行比較,可以發(fā)現(xiàn),雖然Laina模型和文獻[22]模型在近距離的細節(jié)上能夠顯示比較清晰的輪廓,但對于遠距離的物體,比如遠處的沙發(fā)、茶具和臺燈的估計效果出現(xiàn)了細節(jié)丟失、邊緣模糊的問題。通過對比發(fā)現(xiàn),本文模型生成的深度圖信息比較完整,深度圖的可視化效果更理想,邊緣細節(jié)信息能夠解析得比較好,能夠實現(xiàn)生成高質量深度圖。
提出了一種新型的聯(lián)合深度估計任務模型,將語義分割任務和深度估計任務相結合,通過語義分割任務使共享編碼器能夠獲得提取空間語義信息的能力,另外利用圖像超像素進行構建拓撲關系圖,通過圖神經網絡模型對圖像空間語義信息進行學習,形成增強特征,從而提高聯(lián)合模型的對物體邊界的敏感性。通過多角度的實驗設計,結果表明本文提出的網絡框架,可以清晰、準確地估計出目標邊界區(qū)域的深度大小。與以往的方法相比,該方法具有優(yōu)異的性能,提高了系統(tǒng)的準確性以及模型的泛化能力。未來的工作將集中在如何使用語義信息使深度估計在移動的物體上表現(xiàn)良好。