孔維罡 郭乃網(wǎng) 周向東
1(復旦大學計算機科學技術(shù)學院 上海 200433) 2(國網(wǎng)上海市電力公司電力科學研究院 上海 200437)
深度圖是物體的三維表示形式之一,一般通過專用設(shè)備來獲取。由于深度圖像包含了場景距離信息,計算機就能借此來進行空間感知等工作。因此,深度圖在很多計算機視覺相關(guān)領(lǐng)域有著廣泛的應用,是3D目標檢測[1]、自動駕駛[2]、機器人視覺[3]的重要組成部分?,F(xiàn)有深度預測方法大多都是雙目深度預測,即需要立體視圖對來估計視差,但是絕大多數(shù)圖像都沒有伴隨的另一幅視圖,所以單目深度估計相比雙目具有更好應用前景和研究價值。
一般來說根據(jù)單幅圖像估計圖像像素的深度信息非常困難。為解決這一難點,研究者們認識到同一場景下的不同視角的圖片之間是有很大的關(guān)聯(lián)性的。因此參考雙目圖片預測像素深度的方法,單目圖像深度預測可以先根據(jù)給定的單目圖像對視差圖像進行預測(即根據(jù)左視圖,預測生成右視圖),然后生成視差并進行像素深度的計算。
傳統(tǒng)的單目深度估計方法效果較差,而隨著深度學習的發(fā)展,機器計算能力的加大以及數(shù)據(jù)規(guī)模的擴大,單目深度估計有了新的發(fā)展方向和新的挑戰(zhàn)。Eigen等[4]提出了一種兩個尺度的網(wǎng)絡(luò)結(jié)構(gòu),先用第一部分網(wǎng)絡(luò)預測出低分辨率的深度圖,然后用第二部分網(wǎng)絡(luò)去提煉這個輸出,最后得到深度結(jié)果。Wang等[5]意識到深度信息和圖片語義有著較強的關(guān)聯(lián)性,并利用二者的相似性建立了語義分割和深度預測的統(tǒng)一框架,二者相輔相成得到較好的預測效果。除了語義分割之外,Zhang等[6]先用RGB圖像預測表面法線和遮擋邊界,然后將之與原始深度值結(jié)合,求解所有像素點的深度。而Cao等[7]把圖像根據(jù)視點的遠近分層,對每個像素進行分類來預測每個像素的深度標簽。Kuznietsov等[8]把傳感器得到稀疏的深度數(shù)據(jù)和無監(jiān)督的方法結(jié)合起來,建立了半監(jiān)督的深度預測模型。但無論是有監(jiān)督還是半監(jiān)督,這些方法都需要使用大量的真實深度數(shù)據(jù),而真實深度需要借助紅外傳感器或者激光雷達,獲取難度較高,成本較大。Godrad等[9]設(shè)計了一種由兩個網(wǎng)絡(luò)組成的自監(jiān)督損失架構(gòu)來估計單幅圖像的深度值,該方法包括編碼器-解碼器架構(gòu)的深度估計網(wǎng)絡(luò)和基于殘差網(wǎng)絡(luò)的姿態(tài)網(wǎng)絡(luò),效果較好,但需要同一場景連續(xù)的圖像幀參與訓練,這限制了應用場景。
學術(shù)界也對視圖生成進行了深入的研究。早期視圖生成方法基于已知的不同視角的三維幾何關(guān)系,使用基于圖片的繪制技術(shù)生成新的視角,比如全景圖、視圖插值、視圖變形、全光模型、光場等方法[10]。近年來視圖生成方法大多是基于神經(jīng)網(wǎng)絡(luò)實現(xiàn)的,這些方法大致可以分為基于深度圖像的繪制和基于多視圖的視圖生成。文獻[11]利用具有真實深度的數(shù)據(jù)作為監(jiān)督,通過深度估計、圖像分割、深度細化三個網(wǎng)絡(luò)結(jié)構(gòu)得到點云和深度圖,進而渲染得到連續(xù)的新視圖。文獻[12]采用無監(jiān)督的深度估計網(wǎng)絡(luò)估計致密深度,然后使用前向映射方法將輸入投影到對應的新視圖。文獻[13]為了處理物體遮擋過多、圖像深度值變化多樣等復雜場景問題。在可學習的梯度下降方法的基礎(chǔ)上提出了基于稀疏視點和不同深度圖像層的視角合成方法。上述方法中,基于深度的繪制需要獲取成本高的地面真實深度作為監(jiān)督。而基于多視圖的生成方法需要同一場景的一些不同角度的視圖。但是絕大多數(shù)圖像都是沒有伴隨多角度視圖的,這極大限制了方法的適用性。文獻[14]設(shè)計了一種基于變換自動編碼器的結(jié)構(gòu),對給定單一原圖進行編碼,然后將原圖和目標的映射應用于該編碼,通過神經(jīng)網(wǎng)路解碼得到深度圖,然后根據(jù)相機參數(shù)把深度圖投影到原圖上進行致密匹配并編碼為光流圖,最后借助光流圖把原圖按像素變換得到目標結(jié)果。無監(jiān)督的單圖像視圖生成由于缺少深度語義信息,生成結(jié)果一般不如前兩種視圖生成方法,但這類方法不需要真實深度信息或者三維信息作為監(jiān)督,應用場景更廣泛,成本也更低。
Deep3D[15]使用卷積神經(jīng)網(wǎng)絡(luò)對單圖像提取特征,生成不同視差下的概率圖,合成對應的新視圖,然后用原圖和新視圖計算深度圖,方法不需要真實深度數(shù)據(jù)作為監(jiān)督,有比較好的效果。單圖像視圖生成和深度預測任務輸入為單幅RGB圖像(以下簡稱左圖),輸出為合成出的同一水平位置另一相機下的視圖(以下簡稱右圖)以及輸入圖像對應的深度圖。但該類方法生成的右圖中普遍存在圖像扭曲問題,針對這個問題,本文基于CenterNet[16]方法,使用深層聚合網(wǎng)絡(luò)[17](Deep Layer Aggregation,DLA)提取原始左圖的語義信息,生成物體中心的中心點熱圖。本文提出了物體中心點概率分布和視差概率分布加權(quán)結(jié)合的概率模型。補足的物體語義信息會使生成右圖的物體位置更加精確,從而產(chǎn)生更好的右圖和更準確的深度圖。
本文創(chuàng)新性地引入目標檢測模型,將像素的對象類別概率和視差概率結(jié)合起來,改進了現(xiàn)有視圖生成方法,并使用SGBM算法通過原圖和生成視圖計算得到深度圖。實驗表明本方法與現(xiàn)有相關(guān)工作相比具有更好的視圖生成和深度估計性能。
我們設(shè)計并實現(xiàn)了一個基于像素語義信息的視圖生成和深度預測方法,其設(shè)計思路如圖1所示。
圖1 本文方法設(shè)計思路
為解決生成右圖位置或輪廓不精確的問題。本文借用CenterNet生成包含物體中心點信息的熱圖,將其與視差概率圖相結(jié)合,即賦予物體中心點附近像素更高的權(quán)重,使其與背景像素距離變大,在訓練過程中逐漸逼近真實視差或者物體真實輪廓。
本方法主要由以下三個部分組成:
(1) 得到中心點熱圖。對于輸入圖像,將其輸入CenterNet的前饋DLA網(wǎng)絡(luò)中提取特征生成中心點概率熱圖(Heatmap),每一幅熱圖中的每一像素點的值服從該位置物體類別的高斯分布,本文這里暫不考慮類別因素,僅突出像素點是否為物體中心,將其歸一化為單一類的中心點熱圖。
(2) 得到視差概率分布并生成右圖。將輸入圖像輸入由卷積層和反卷積層組成的神經(jīng)網(wǎng)絡(luò),得到不同視差下的概率分布圖。將概率圖和上一步的中心點熱圖以條件概率的形式結(jié)合起來,得到加權(quán)后的視差概率圖,最后在選擇層把左圖和視差概率圖相結(jié)合,二者匹配計算得到右圖。
(3) 計算得到深度圖。將右圖和原圖作為雙目立體圖像對利用SGBM(Semi-global block matching)[18]算法就可以計算得到深度圖。
本文提出的方法主要基于目標檢測模型CenterNet和視圖生成模型Deep3D這兩個在各自問題上表現(xiàn)較好的模型。本模型通過引入像素的物體中心概率,對生成視圖的視差概率進行加權(quán)篩選,使其能更準確地生成物體和背景的位置。其總體框架如圖2所示。
圖2 總體架構(gòu)圖
CenterNet是一種anchor-free的目標檢測算法,它通過將要檢測的目標簡化到一個中心點,訓練網(wǎng)絡(luò)提取熱圖,然后回歸得到目標的大小、位置、方向等其他屬性,其架構(gòu)圖如圖3所示。
本文方法基于CenterNet框架,使用DLA網(wǎng)絡(luò)提取特征,生成中心點熱圖,用以輔助視圖生成。
如圖4所示,本文使用DLA-34網(wǎng)絡(luò)提取特征得到4倍下采樣的中心點概率熱圖。圖中數(shù)字代表圖片步長,實線框代表步驟,虛線框代表求和節(jié)點。實線箭頭是下采樣過程,虛線箭頭是可變卷積,點線箭頭是上采樣過程。DLA是一種迭代網(wǎng)絡(luò)結(jié)構(gòu),其淺層提取的幾何信息更精細,深層得到的語義信息更豐富,網(wǎng)絡(luò)從最淺、最小的尺度開始,往下迭代到更深、更大的尺度,以達到聚合傳播過程中細化特征的效果。另外,還在DLA-34結(jié)構(gòu)中所有上采樣層的前面添加了3×3的可變卷積層,并跳躍連接低層和輸出層,使圖像感受野更加精確,提高下采樣特征圖的分辨率。
圖4 添加跳連層和可變卷積的DLA-34結(jié)構(gòu)
DLA網(wǎng)絡(luò)通過高斯核擬合在圖片中計算出物體中心點最可能的位置,并將同一個類別的物體的中心點標記在圖片上,按照高斯分布生成該類的中心點熱圖,如式(1)所示。
(1)
式中:(pi,pj)為預測的中心點坐標;c為類別;σp為和目標大小相關(guān)的標準差;Yi,j,c表示該位置點為物體中心的概率,范圍為[0,1],等于1則代表該像素點為物體中心點,為0則說明該點為背景。如果兩個高斯分布重疊了,則選取重疊部分的最大值作為函數(shù)值。
目標中心點損失函數(shù)如下:
(2)
另外,相比圖片中物體是什么,本文更關(guān)注圖片每個像素是屬于物體還是背景,以及其具體所在的位置范圍。因此按式(2)將上文生成的中心點熱圖對類別數(shù)C平均,得到最終的中心點熱圖。
(3)
我們使用卷積神經(jīng)網(wǎng)絡(luò)對原圖進行特征提取,并且在每個池化層的分支后,使用反卷積層上采樣輸入的特征圖。這部分流程如圖5所示。這樣可以得到不同層級的特征圖,將每一級的特征結(jié)合在一起,得到和輸入圖像尺寸一致的特征表示。最后進行一次卷積和softmax變換,得到概率分布形式的視差圖,即不同視差值d下的視差概率分布,如式(4)所示。
圖5 生成右圖流程圖
(4)
式中:i,j為坐標;N為視差通道數(shù);z為softmax變換前的卷積層的輸出。
為了使訓練更容易,本文使用雙向線性插值初始化反卷積層。假設(shè)上采樣系數(shù)為k,則反卷積層的卷積核為2k×2k,步長為k,padding為k/2。權(quán)重初始化為:
(5)
式中:c=(2k-1-(kmod 2))/2k。
選擇層是傳統(tǒng)DIBR(Depth Image-Based Rendering,基于深度圖像的繪制)[19]操作的模型化。對于給定左視點I與及對應視差矩陣Di,j,根據(jù)式(6)可以得到右視點Oi,j。
Oi,j=Ii,j-Di,j
(6)
傳統(tǒng)方法中視差由深度和相機參數(shù)計算得到,通常不可微,這里使用式(4)計算得到的視差概率分布進行替換。另外,假設(shè)像素點視差為d和為物體中心點二者相互獨立,我們將2.2節(jié)中的中心點熱圖以條件概率形式加權(quán)進來,可以得到右視點公式。
(7)
最后,我們以計算得到的右圖和右圖地面真實值的L1損失作為訓練目標。
Ld=|O-Y|
(8)
另外,由于原始數(shù)據(jù)經(jīng)過下采樣后分辨率較低,生成的右圖較為模糊,為改進生成圖像的效果,這里按比例擴大生成的視差差異圖,然后和原始左圖計算得到右圖。
根據(jù)輸入圖像進行上述右圖計算和生成后,我們采用SGBM[15]算法進行圖像深度估計。SGBM算法通過計算左右圖中對應像素點的視差,獲得視差圖,最小化和該圖相關(guān)的函數(shù)來計算每個像素點的視差。然后根據(jù)視差和深度的轉(zhuǎn)換公式得到深度圖。視差與深度的關(guān)系如圖6所示。
圖6 深度計算示意圖
圖6中,L、R為雙目相機,P為物體,xr、xl分別為P在左右相機中成像的坐標,b為兩相機距離,f為焦距,z為物體實際深度。由圖中的三角關(guān)系可得到深度計算公式:
(9)
xl-xr即為視差d。這里計算深度圖方法可以換成雙目深度預測網(wǎng)絡(luò),以減少對相機內(nèi)參的依賴,相關(guān)工作[20]表明能有較好的效果。
本文使用KITTI數(shù)據(jù)集,KITTI數(shù)據(jù)集由包含灰度相機、彩色相機、激光雷達、光學鏡頭、GPS導航的數(shù)據(jù)采集平臺在現(xiàn)實中采集的大量場景圖片組成,可用于立體匹配、光流預測、視覺測距、三維物體檢測等計算機視覺任務。本文使用KITTI Stereo 2012[21]、KITTI Stereo 2015[22]和KITTI raw[23]組成的5 000多幅立體圖片對。圖片包括城鎮(zhèn)街道、郊外鄉(xiāng)村、高速公路等場景,每幅圖片可能包含有大量行人和汽車,并且存在各種程度的場景遮擋。其中數(shù)據(jù)集的80%用于訓練,剩下用于測試。圖片尺寸大小約為1 246×371,大小誤差為1像素。所有數(shù)據(jù)會插值為1 280×384,然后按比例縮小為320×96以縮短計算時間。
選擇層將特征表示理解成65個通道下的概率分布,65個通道代表概率為0(即不存在視差)或者視差為-31到32之間不同的值。
訓練上,目標檢測部分用CenterNet在MSCOCO[24]上的預訓練模型初始化參數(shù),視圖生成部分使用VGG16[25]初始化參數(shù),模型訓練批次為4,學習率0.000 4,共訓練100輪。網(wǎng)絡(luò)模型都使用Pytorch實現(xiàn)。
本文使用真實右圖和生成右圖的像素級平均絕對誤差(MAE)作為定量評價標準。其計算公式見式(10)所示。生成結(jié)果與相關(guān)算法Deep3D、DeepView[26]以及Chen等[14]進行了比較。
(10)
式中:H、W為圖像分辨率;f()為模型;y為真實右圖。MAE值越低越好。
比較算法中Deep3D為本文基準算法。而DeepView,是Bae等[26]提出的基于單圖像的視圖生成網(wǎng)絡(luò),包括兩種全卷積網(wǎng)絡(luò)結(jié)構(gòu),一種是DeepViewgen的,由編碼、解碼、渲染三部分構(gòu)成,使用編碼器提取各層級特征,解碼后渲染生成概率視差圖,并計算得到右圖。另一種是DeepViewdec,將RGB圖轉(zhuǎn)碼為亮度色度圖,然后由亮度和色度信號的兩個編碼解碼網(wǎng)絡(luò)分別提取特征,最后解碼結(jié)果逆變?yōu)镽GB圖像。Chen等[14]的方法是由三維變換自動編碼器、自監(jiān)督的深度信息預測、投影深度圖到原圖和視圖合成4個過程組成的網(wǎng)絡(luò)結(jié)構(gòu)。首先,模型對輸入的原始圖片以及原圖到目標的映射進行編碼,然后通過深度神經(jīng)網(wǎng)絡(luò)解碼得到預測的深度圖,接著根據(jù)相機參數(shù)把深度圖投影到原圖上,最后借助光流圖編碼對原圖進行像素變換為最后的視圖生成結(jié)果。
表1列出了本文方法和上述對比方法在KITTI測試集上的結(jié)果。
表1 視圖生成評估結(jié)果
實驗結(jié)果表明,本文使用的方法在評價標準上均超過了對比方法。相比基準算法Deep3D有較大的提升說明引入目標檢測模型確實是有成效的。而DeepViewgen也是使用概率視差圖來生成右圖,同樣也說明了概率結(jié)合中心點熱圖和概率視差圖的有效性。對于DeepViewdec,亮度色度顏色空間描述了影像的色彩和飽和度,常用于人臉檢測[27],對受亮度影響較大的場景效果較好,可能對于光照復雜的實拍場景不太適用。而相比最新的Chen等方法,本文方法在評估標準上表現(xiàn)也比較突出,可能原因是該方法模型是在合成數(shù)據(jù)集上進行的訓練,并且借助了相機參數(shù),合成數(shù)據(jù)和真實數(shù)據(jù)的差別,相機參數(shù)標定的準確程度,都影響的生成的結(jié)果。這也說明了本方法引進像素語義信息的改進思路是十分有效的。
表2列出了本文方法和Deep3D在深度預測方向上的比較。二者都是用SGBM算法計算深度,由于數(shù)據(jù)集缺少真實深度數(shù)據(jù),這里使用地面真實的左圖和右圖通過SGBM得到的深度圖作為對照,比較了同等情況下本方法和Deep3D深度預測的情況。實驗結(jié)果表明,本文方法相比原方法確實能提取出更準確的深度信息。
表2 深度預測評估結(jié)果
為驗證本方法各部分模塊的貢獻,表3展示了移除或更改本方法的部分組件之后的模型性能。
表3 消融分析
表3中使用下采樣之后的左圖和得到的差異圖計算得到右圖,然后放大為原始分辨率??梢钥闯?生成右圖的效果大大降低了。因為進行下采樣后圖片的分辨率較低,生成的右圖較模糊,后續(xù)操作按比例放大則會使之更加模糊。而使用原始左圖直接參與訓練可以在訓練過程中補足一部分精度。表3在訓練目標檢測網(wǎng)絡(luò)時使用CenterNet的3D目標檢測模型作為預訓練模型。結(jié)果顯示,雖然相對基準方法有了提升,但是仍不如直接使用二維模型訓練,原因可能是對于不帶三維信息的單二維圖像,直接使用3D模型會使初始訓練誤差加大,反而達不到更好的效果。
圖7比較了本文方法和Deep3D生成的右圖,圖中分為A、B、C三組對比圖片。每組中(a)為左圖,(b)為右圖;(c)為Deep3D生成的右圖;(d)為本文方法生成的右圖。圖8展示了一些細節(jié)對比,分別對應圖7中的A、B、C三組的細節(jié)對比:(a)為真實右圖;(b)為Deep3D生成右圖;(c)為本文方法生成右圖。從圖8中可以看出,A組中,Deep3D生成的結(jié)果車子整個歪了過來,而本文的方法車子位置和輪廓相比來看更加準確。B組中,原方法結(jié)果中的樹叢幾乎沒有紋理,而本文方法紋理相比之下保存得更多一點。C組車的紋理細節(jié)部分,本文方法的結(jié)果也比原方法的要更加的完善。實驗結(jié)果表示,相比Deep3D,本文生成的右圖圖中物體整體位置更精確,邊界更穩(wěn)定。說明引入物體目標信息是很有效的。
圖7 兩種方法右圖生成結(jié)果對比
另一方面,生成的右圖分辨率較低,這是因為原圖和經(jīng)過4倍下采樣然后放大得到的差異圖生成的右圖,放大細節(jié)后更顯得模糊虛化。此外,由于右圖是在單左圖上合成的,真實右圖中有部分物體不出現(xiàn)在左圖中,所以部分生成右圖邊界會發(fā)生畸變現(xiàn)象。本文方法相比基準方法噪點較大,這是因為本文模型使用了視差概率和中心熱圖加權(quán)相乘,生成的視差和左圖像素結(jié)合后不是整數(shù)像素點的可能性更大了,導致不可用的像素點相對變多,就需要更多地使用就近原則把生成的非整數(shù)像素點近似到相近的點,所以顯得噪點較大,但是定量評估結(jié)果說明這并不影響模型對場景的感知。
圖9展示了本文和Deep3D分別在物體和背景兩方面生成深度圖的表現(xiàn)。圖中分為A、B兩組,每組4幅圖片,依次為:(a) 左圖;(b) 左圖和真實右圖計算的深度;(c) Deep3D生成右圖計算的深度;(d) 本文生成的右圖計算的深度??梢钥闯?本方法對圖中汽車的深度預測表現(xiàn)比Deep3D要好。而在純背景場景的B組中,本方法對背景深度的計算也相對更準確。說明本方法生成的右圖更好地保留了深度信息。如果換用較好的雙目深度預測模型,將左圖和生成的右圖作為輸入,能達到較好的效果,這將可能是本文的擴展工作。
圖9 SGBM計算得到的深度圖比較
本文提出并實現(xiàn)了基于目標檢測模型的單圖像視圖生成方法。在KITTI數(shù)據(jù)集上進行了實驗和評估,結(jié)果顯示在該數(shù)據(jù)集上本方法達到了較好的效果。本文在Deep3D的基礎(chǔ)上引入了目標檢測模型的思想,將物體中心點概率和視差概率結(jié)合起來,使得生成的右圖物體更加精確,并且保留了Deep3D不需要真實深度數(shù)據(jù)監(jiān)督,端到端訓練的優(yōu)點。并進一步探討了使用生成的右圖進行深度預測。實驗顯示本文生成的右圖相比原方法在圖像深度預測方面顯示出更好的性能。