凌 莉 胡佑璞 鄒承明,3,4*
1(武漢工程職業(yè)技術(shù)學院信息工程學院 湖北 武漢 431400)
2(武漢理工大學計算機科學與技術(shù)學院 湖北 武漢 430000)
3(交通物聯(lián)網(wǎng)技術(shù)湖北省重點實驗室 湖北 武漢 430000)
4(鵬城實驗室 廣東 深圳 518055)
單目深度估計任務針對輸入的單幅彩色圖像,要求估計出圖像中每個像素對應的深度信息,屬于計算機視覺領(lǐng)域研究的熱點問題之一,在許多其他領(lǐng)域有著廣泛的運用,例如:目標檢測[1]、三維重建[2]、無人駕駛[3]、姿態(tài)估計[4]等。由于圖像的空間信息屬于三維信息,通過單幅二維RGB圖像獲取每個像素的深度信息是困難的。目前可以通過硬件設(shè)備直接獲取深度信息,如微軟的Kinect相機可以搜集室內(nèi)的近距離場景的深度信息,激光測距儀可以獲取室外場景的深度。然而,設(shè)備的價格十分昂貴,并且在復雜的場景中,深度估計仍然是不明確的病態(tài)問題,面臨著許多挑戰(zhàn)。
對于深度估計,許多研究采用卷積網(wǎng)絡(luò)進行訓練,但是深度圖像對于網(wǎng)絡(luò)的底層特征信息難以利用。通過高層次特征得到的深度圖雖然與輸入圖像具有相似的輪廓結(jié)構(gòu),但是最終估計結(jié)果精度仍然較低,因為圖像缺乏大量的細節(jié)信息。
在單目場景深度估計中,一般利用物體的外觀、場景的幾何運動、物體語義等特征實現(xiàn)對深度的約束。單目深度估計的方法大致分為兩類:有監(jiān)督學習、無監(jiān)督學習。
有監(jiān)督學習方面,基于外觀特征差異與場景深度的不連續(xù)性具有對應關(guān)系這一假設(shè),深度估計被視為連續(xù)的回歸問題。Eigen等[5]首次提出使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)解決單目深度估計問題。整個網(wǎng)絡(luò)框架由一個全局的粗糙網(wǎng)絡(luò)與一個局部的精細網(wǎng)絡(luò)堆疊組成。全局網(wǎng)絡(luò)以AlexNet為基礎(chǔ),提取粗糙的全局深度信息。局部網(wǎng)絡(luò)結(jié)合原圖信息進一步優(yōu)化全局網(wǎng)絡(luò)的深度圖,獲得了不錯的效果。無監(jiān)督學習方面,Godard等[6]利用左右視圖的一致性進行無監(jiān)督的深度估計預測,通過對極幾何約束輸出視差圖,利用左右視差一致性優(yōu)化性能,提高了魯棒性。Kuznietsov等[7]提出稀疏深度圖像作為標簽的半監(jiān)督學習方法,提高性能。
為了改善圖像的細節(jié)信息,本文提出基于CNN融合了多層次特征的深度估計算法。通過CNN模型同時提取圖像的底層特征與高層特征,不同層次的深度網(wǎng)絡(luò)特征代表了不同的語義信息。高層特征表示圖像的整體空間結(jié)構(gòu),而底層特征表示圖像的局部細節(jié)。為了在最終的深度估計結(jié)果中補充細節(jié)信息,則需要融合這些不同層級的特征,從而可以提高最終的深度估計效果。通過實驗可以證明,本文方法可以較好地估計出圖像的深度信息。
全卷積神經(jīng)網(wǎng)絡(luò)中包含了大量的卷積結(jié)構(gòu),該模型可以在沒有全連接層的情況下對每個像素進行分類。全卷積神經(jīng)網(wǎng)絡(luò)用卷積層代替了卷積神經(jīng)網(wǎng)絡(luò)的全連接層,具有許多優(yōu)點:1) 網(wǎng)絡(luò)的輸入尺寸不再限制,可以利用反卷積層和上采樣的方法,輸出與原圖像同樣大小的特征圖,從而可以預測每個像素的分類,并保留輸入圖像中的空間信息;2) 無須輸入像素點周圍的整個圖像塊,方便減少存儲空間和冗余計算;3) 利用卷積運算提取圖像的整體特征,方便全局特征學習。與卷積神經(jīng)網(wǎng)絡(luò)相比,全卷積神經(jīng)網(wǎng)絡(luò)有了較大的突破,但仍有一些問題。網(wǎng)絡(luò)只對最后的特征進行處理,對于層數(shù)較深的網(wǎng)絡(luò),底層特征則沒有利用到。
(1)
反卷積操作如式(2)所示,其中輸入特征圖大小、邊緣填充、步長、卷積核大小分別記為x2、p2、s2、k2,輸出特征圖記為y2,則:
y2=x2-k2+2p2+1
(2)
CNN中使用的多維的卷積核,每層通過多個特征圖像組成。不同于傳統(tǒng)的方法,深度學習目的是利用反向傳播來自動學習圖像的表示,并非是人工特征一樣去人為地設(shè)計特征。每個卷積層通過輸入信息學習一種映射關(guān)系來表示局部空間的特征,即卷積層融合了局部空間信息和輸入圖像,并且限制于局部感受野范圍。卷積神經(jīng)網(wǎng)絡(luò)通過疊加許多的非線性層和下采樣層,便可以學習到具有全局范圍的圖像描述信息,是一種強力的特征提取手段。通過顯示的控制信息的流向,可以建立不同層之間的依賴關(guān)系,每一層的信息可以不僅來自它的上一層,還可以接收到其他層的信息,即跳躍連接。它可以容易地使用在網(wǎng)絡(luò)中。
在圖像深度估計任務中,需要通過圖像的空間信息來推測物體的深度信息,需要通過全局特征與局部特征共同判斷物體的深度信息。VGG、ResNet[8]屬于利用圖像的高層語義信息的深度模型。已有的方法大部分是利用深層的CNN網(wǎng)絡(luò)做特征的提取。包括AlexNet[9]同樣會利用深層卷積作為網(wǎng)絡(luò)的特征提取手段,來對圖像做一個整體的空間特征提取。然而,這類方法利用CNN網(wǎng)絡(luò)的高層特征圖來表示圖像,然后估計其深度。由于高層特征往往代表全局的空間結(jié)構(gòu),其中缺少大量的細節(jié)信息,影響了深度圖估計算法的最終質(zhì)量。如圖1的特征融合示意圖所示,通過將各種層次的特征連接起來,從而在最終的輸出特征中融合了代表局部細節(jié)的底層特征,進而提高了圖像的整體與細節(jié)信息,最終提高深度圖像的質(zhì)量。
圖1 多層次CNN特征融合
如圖1所示,利用反卷積融合從網(wǎng)絡(luò)中提取低層和高層特征。輸入一幅圖像,在網(wǎng)絡(luò)的前向傳播里,經(jīng)過多層卷積和池化后,輸出特征圖像的大小將持續(xù)減小。對這些不同尺度、不同層次的特征圖像進行反卷積后,疊加在相應的位置進行連接操作。
特征融合的CNN模型架構(gòu)如圖2所示,其中:conv-3-128表示卷積運算,表示卷積核大小為3×3,通道數(shù)為128,pool代表池化操作。架構(gòu)當中顯示了對應的卷積核、步長與池化信息,表明了圖像的size變化過程。
圖2 基于多層次特征融合架構(gòu)
網(wǎng)絡(luò)架構(gòu)的左側(cè)為特征提取模塊,根據(jù)多層的卷積操作提取不同層次的特征圖??梢钥闯?第一次池化操作后,輸出圖像尺寸減小到原圖像的1/2;然后在第2次池化后,減少到1/4;一直到第5次池化后,尺寸縮小至原圖像的1/32,輸出的是512維特征圖。在第5個池化操作之后增加了一層1×1、通道數(shù)為1的卷積層,將特征圖的通道數(shù)轉(zhuǎn)換為1。第一部分輸出的X0,可以表示圖像的整體空間結(jié)構(gòu)。
卷積網(wǎng)絡(luò)中的特征根據(jù)不同的層次具有不同的含義,一般來說,對于高層次的特征,由于感受野較大,因此包含了更多的全局信息,即圖像的整體空間信息。而相對于高層特征,低層次的特征由于感受野較小,所以關(guān)注點在局部區(qū)域,因此包含了大量的局部細節(jié)信息。但是,現(xiàn)有的方法大多只利用了最后的高層特征,因此導致了細節(jié)信息的丟失,使得車輛的邊緣比較模糊。但是不同層次的特征不能直接連接起來,因為它們的通道數(shù)不一致。因此需要對特征進行變化,例如:池化和采樣。得到size和通道數(shù)一致的特征圖。整體大致分為3步。
步驟3對特征圖X4進行第3次反卷積操作,目的是還原成原輸入圖像的大小,但是通道數(shù)為1,即最終輸出的深度圖像。
損失函數(shù)(Loss Function)是用來判斷模型的指標函數(shù),反映了模型的輸出預測值與實際真實值之間的距離。訓練過程中,就是要最小化損失函數(shù),使得模型達到最優(yōu)收斂的狀態(tài)。損失函數(shù)可分為兩類:經(jīng)驗風險損失函數(shù)和結(jié)構(gòu)性風險損失函數(shù)。經(jīng)驗風險損失函數(shù)表達了預測結(jié)果與實際結(jié)果的差異,而結(jié)構(gòu)風險損失函數(shù)則表達了正則化懲罰項與經(jīng)驗風險損失函數(shù)的總和。常用的損失函數(shù)有分類交叉熵損失函數(shù)和回歸均方損失函數(shù)。
KITTI數(shù)據(jù)集中包含了所需要的采集原圖像與對象的深度圖,為了學習兩種數(shù)據(jù)之間的映射關(guān)系,需要合適的損失函數(shù)來判別兩者的差,如式(3)所示。根據(jù)有監(jiān)督的模型,使用誤差進行反向傳播來更新參數(shù)權(quán)重。給定輸入的原圖像,采用回歸均方損失函數(shù),以此評估模型輸出的深度圖像與原圖像之間的距離和誤差,再更新參數(shù),使得模型逐步達到收斂的狀態(tài)。
(3)
1) 實驗參數(shù)。模型的訓練與測試均采用單塊的型號為1080Ti的GPU完成,使用的深度學習框架為TensorFlow。為了驗證本文方法的有效性,在KITTI數(shù)據(jù)集上進行測試。利用隨機梯度下降更新參數(shù),學習率lr初始化為10-3,逐步遞減至10-4。因為是端到端的網(wǎng)絡(luò)模型,所以將圖像輸入至已收斂的模型中后,輸出圖像即為對應的深度圖像。
2) 評價指標。本文使用的評價指標有平均相對誤差Abs、平方相對誤差Sq、均方根誤差RMSE和閾值δ下的精度。和傳統(tǒng)的有代表性的方法進行對比。
(1) 平均相對誤差:
(4)
(2) 平方相對誤差:
(5)
(3) 均方根誤差:
(6)
(4) 閾值δ下的精度:
(7)
(1) KITTI數(shù)據(jù)集。KITTI是一個龐大的交通數(shù)據(jù)集、不僅可以訓練車輛檢測模型,還可以訓練深度估計、語義分割等模型。因此,該數(shù)據(jù)集與本文的研究方向十分吻合。并且,本文模型也需要大量的圖像使得模型訓練收斂,而且后續(xù)的章節(jié)也需要同類型的數(shù)據(jù)集進行深度估計。本文使用公開數(shù)據(jù)集KITTI[10],由德國卡爾斯魯厄理工學院與豐田美國理工學院聯(lián)合完成。在數(shù)據(jù)集中,包含了多種類型的圖像,包含了鄉(xiāng)村、城市、高速公路等場景。圖3是KITTI數(shù)據(jù)集中的相關(guān)統(tǒng)計信息??梢钥闯?數(shù)據(jù)集中的對象類型主要有:“汽車”“貨車”“卡車”“行人”等,它們是交通場景中的常見目標。
該數(shù)據(jù)集在多個領(lǐng)域均有廣泛的應用,例如:目標識別、深度估計、語義分割等,標簽信息很豐富。本文進行深度估計研究,KITTI數(shù)據(jù)集主要包括三種數(shù)據(jù),注解文件使用XML文件標注了目標的類別以及坐標信息;圖像文件劃分了訓練集與測試集;JPG文件包含了訓練的原始圖像。圖片分辨率為1 242×375。通過PASCALVOC的格式,對KITTI數(shù)據(jù)集進行調(diào)整,主要是修改了原本的標簽格式。通過Python腳本進行處理。KITTI數(shù)據(jù)集統(tǒng)計信息如圖4所示。
圖4 KITTI數(shù)據(jù)集相關(guān)統(tǒng)計信息
(2) ApolloScape數(shù)據(jù)集。ApolloScape數(shù)據(jù)集是由百度公司的Apollo自動駕駛平臺采集的數(shù)據(jù)集[11]。通過激光雷達設(shè)備來采集大量的深度圖像,所采集的圖像來自北京、上海、深圳等城市。數(shù)據(jù)集中包含了像素級的語義標簽、3D信息、實例分割和雙目視角下的圖像等多種類型數(shù)據(jù)。其中包含了多種類型的目標,例如:小車、行人、人行道、交通標識、樓房等。圖像分辨率為3 384×2 710,數(shù)據(jù)集總共包含了17 062幅RGB圖像。其中的像素級語義標簽和視差圖可以分別轉(zhuǎn)換為相應的目標坐標信息和圖像的深度數(shù)據(jù),用于目標檢測和深度估計任務。圖5是數(shù)據(jù)集ApolloScape中的一些例子。
在KITTI與ApolloScape數(shù)據(jù)集上進行對比實驗,證明融合特征的多層次CNN深度估計算法的優(yōu)越性。圖6為對比實驗結(jié)果展示。
(a) 原圖像 (b) Garg等 (c) 本文 (d) 真實深度圖像圖6 各數(shù)據(jù)集上的深度估計結(jié)果對比
圖6顯示了本文模型在各數(shù)據(jù)集上的深度估計效果。顏色越淺,表示物體的距離越近;顏色越深,表示物體的距離越遠。真實深度圖像中天空部分深度為缺失值,則不計入深度估計區(qū)域??梢钥闯?基于多層次CNN特征融合的深度估計方法可以較好地還原圖像的深度圖,特別是能夠更好地反映不同對象之間的細節(jié)信息。例如:如圖6的第1行與第3行所示,左側(cè)停放了多個距離較近的車輛。Garg等的深度估計結(jié)果中,多個車輛之間距離的邊界十分模糊,難以區(qū)分。本文在多個對象的區(qū)分較為清晰,并且可以發(fā)現(xiàn),路中的車輛也是比較清楚的。在ApolloScape中的結(jié)果也表明本文方法的清晰度更高。原因在于本文方法是基于多種特征融合的,在CNN的感受野范圍內(nèi),既選取了高層特征,也包含了底層特征,使得圖像在整體以及局部范圍內(nèi),都可以表現(xiàn)較好。數(shù)據(jù)集的實驗結(jié)果表明,本文模型相對其他方法取得了較好的效果。與其他方法相比,通過對比誤差指標與精確度指標,本文方法取得了較好的結(jié)果,可以保證精度盡可能高、誤差盡可能小。
如表1所示,表示本文方法與其他兩種深度估計方法對比結(jié)果。Abs、Sq和RMSE這三個指標表示模型輸出的深度圖與真實深度圖像的誤差,值越小,說明模型的深度估計效果越好。與其他2種方法相比,本文提出的網(wǎng)絡(luò)結(jié)構(gòu)誤差最小,計算結(jié)果有較大的改善,特別是在Abs誤差方面。相比于文獻[12]的方法Abs、Sq和RMSE誤差分別下降了41%、42%和23%;相比于文獻[13]的方法Abs、Sq和RMSE誤差分別下降了30%、15%和2%。最后3列比較了模型在深度估計中的精度。本文模型在ApolloScape中的精度也表現(xiàn)較好。通過比較真實深度圖像與預測深度圖像的比值來表明模型的精確度,值越高,說明模型精度越高。本文方法相比于文獻[12]的方法準確率分別提升了26%、5%和1%;相比于文獻[13]的方法準確率分別提升了15%、5%和2%。結(jié)果表明,本文算法的精度較高,說明采用多種特征融合方法的有效性。
表1 定量比較結(jié)果
文獻[12]的方法同樣屬于單目深度估計方法,且應用在室外場景。通過提出一種超像素池化方法,組合不同層級的卷積特征進行上采樣。本文與文獻[12]的方法區(qū)別在于,本文通過反卷積來改變不同層級的特征圖的size,再通過直接合并特征圖達到多層次特征融合的目的,并且取得了更好的實驗效果。而文獻[13]的方法屬于一種雙目的深度估計,通過兩個固定攝像機來獲取場景的結(jié)構(gòu)化數(shù)據(jù)。根據(jù)重構(gòu)誤差來進行訓練。
雖然現(xiàn)有的許多方法都基于CNN的模型來做特征提取,但是本文在此基礎(chǔ)上進行了特征融合,通過融合高層次與低層次的特征來提高深度估計的質(zhì)量,最終達到圖像細節(jié)表現(xiàn)更好的效果。綜合圖6及表1可知,本文算法在圖像細節(jié)與指標上均表現(xiàn)較好,可以有效地在圖像中估計出場景的深度值。
為了解決CNN無法很好地利用底層特征的問題,本文提出基于多層次特征融合的卷積圖像深度估計算法。將網(wǎng)絡(luò)分為特征提取模塊與特征融合模塊,通過在對應位置添加不同特征圖像的方法,融合了不同層次、不同尺度的特征,增強了整體深度結(jié)構(gòu)細節(jié)。實驗結(jié)果表明,本文方法能夠較好地重建場景的局部細節(jié),恢復圖像的深度信息。