,,
(浙江工業(yè)大學(xué) 信息工程學(xué)院,杭州 310023)
隨著人工智能的迅猛發(fā)展,各類人工智能產(chǎn)品(如無人駕駛汽車、醫(yī)療機(jī)器人、巡檢機(jī)器人)應(yīng)運而生,在其工作過程中需要根據(jù)外界環(huán)境因素自動做出決策,通常的實現(xiàn)方法是利用計算機(jī)視覺技術(shù)對周圍環(huán)境3維結(jié)構(gòu)進(jìn)行感知,實現(xiàn)3維重建,從而進(jìn)行決策。因此,3D場景解析是人工智能領(lǐng)域目前最火熱、最重要的研究課題之一。3D場景解析的重要基礎(chǔ)為深度信息的獲取,而單目圖像獲取深度信息是其中的重要方法。
當(dāng)前獲取場景深度信息主要有硬件實現(xiàn)與軟件實現(xiàn)兩種方法。硬件實現(xiàn)方法是利用傳感器技術(shù),例如微軟開發(fā)的3D體感攝像機(jī)Kinect,利用ToF(time of fly)原理,通過給不可見光打碼、測距光線強(qiáng)弱隨時間變化等手段,根據(jù)光線的反射時間計算距離,特點是實時性好,算法開發(fā)工作量低。但是,尚未成熟的傳感器技術(shù)導(dǎo)致輸出圖像的分辨率過低,僅僅適合室內(nèi)小范圍環(huán)境測量。
軟件實現(xiàn)方法是通過圖像處理獲取深度信息。目前最為常見的為雙目立體標(biāo)定方法[1],通過算法匹配左、右兩幅圖像中相同的特征點得到視差,再根據(jù)幾何關(guān)系算出深度,但其匹配精度較低,受光線影響較大。在此基礎(chǔ)上提出了結(jié)構(gòu)光方法,其利用有編碼的光源,主動將光源特征打在圖像上進(jìn)行匹配,精度有顯著提升,但仍對環(huán)境光線等條件有一定要求。而單目圖像對設(shè)備數(shù)量、環(huán)境條件要求較低,因此,通過單目圖像獲取深度信息是最貼近實際情況、應(yīng)用場景最為靈活的方法。
利用單目圖像獲取深度信息本身是一個病態(tài)問題,一張圖像理論上可以對應(yīng)無限張深度圖。因此,傳統(tǒng)的單目圖像獲取深度信息多是基于物體的移動、相機(jī)焦距變化[2]等方法,將深度估計作為一個概率模型來處理,精度相對較低。SFM(Structure-from-Motion)是其中經(jīng)典的方法之一[3],通過相機(jī)不同時間間隔的抓拍圖像,估計相機(jī)的姿態(tài),進(jìn)一步獲取場景中物體深度信息。
隨著近些年深度學(xué)習(xí)的發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)在圖像處理、語音識別等領(lǐng)域發(fā)揮著越來越重要的作用。CNN在特征提取、結(jié)果分類等方面無需人工干預(yù),大大提高了模型的通用性。因此,學(xué)者們開始廣泛使用CNN來研究單目圖像的深度信息估計課題。鑒于CRF((Conditional Random Fields)在語義分割上的優(yōu)異表現(xiàn),Liu等人[4]提出了將CRF應(yīng)用到單目圖像深度估計的方法,與通常直接設(shè)定CRF的一元、二元勢函數(shù)方法不同,他們將勢函數(shù)本身也作為學(xué)習(xí)對象之一,通過訓(xùn)練系數(shù)優(yōu)化勢函數(shù),從而優(yōu)化訓(xùn)練結(jié)果,但其文中提到的超像素仍需手工實現(xiàn)劃分。相比之下,Eigen等人[5]提出了一種基于多尺度網(wǎng)絡(luò)結(jié)構(gòu)的深度學(xué)習(xí)方法,通過兩個尺度對圖像分別進(jìn)行全局與局部的特征采樣,獲得最終輸出,此方法無需提供任何人工分類特征,直接在原始圖片上進(jìn)行訓(xùn)練并獲得像素級別的深度信息結(jié)果。在Eigen等人的基礎(chǔ)上,Laina等人[6]提出了一種應(yīng)用ResNet[7]的網(wǎng)絡(luò)模型,該模型利用ResNet特征前向傳遞高效的特性,并結(jié)合更深、更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),有效提高了結(jié)果精度。Godard等人[8]提出了一種利用左右圖一致性的無監(jiān)督學(xué)習(xí)方法,該方法原理類似雙目立體標(biāo)定,利用左圖樣本得到深度圖,再根據(jù)深度圖與右圖生成左圖預(yù)測結(jié)果,與左圖樣本進(jìn)行比較,實現(xiàn)了自編碼、自解碼,但上述方法在結(jié)果精度提升空間。
針對上述問題,在此提出了一種基于深度學(xué)習(xí)的單目圖像深度估計方法,根據(jù)輸入的RGB圖像,直接得到圖中各個像素對應(yīng)的深度信息。本文的主要創(chuàng)新點是:首先,提出了一種新的CNN結(jié)構(gòu),對圖像進(jìn)行3個尺度的特征提取與融合,兼顧全局特征與局部特征,優(yōu)化輸出結(jié)果;其次,網(wǎng)絡(luò)結(jié)構(gòu)中融合了DenseNet[9],加強(qiáng)了特征前向傳播,緩解了深層網(wǎng)絡(luò)梯度消失問題,并且加強(qiáng)了特征重用,實現(xiàn)多級綜合高效利用,同時還減少了參數(shù)數(shù)量。最后,通過實驗證明,多尺度的網(wǎng)絡(luò)結(jié)構(gòu)與DenseNet的加入有效提升了輸出深度圖的精度。
為了進(jìn)一步研究單目圖像深度估計方法,本文提出了一種基于DenseNet的多尺度CNN網(wǎng)絡(luò)模型。首先,將網(wǎng)絡(luò)結(jié)構(gòu)分為三個尺度,各個尺度對數(shù)據(jù)集進(jìn)行不同程度的縮放,其中第一個尺度(Scale1)輸入圖像尺寸最大,第三個尺度(Scale3)最小。第一個尺度對圖像特征進(jìn)行全局粗糙采樣,其輸出結(jié)果與第二個尺度(Scale2)的輸入圖像尺寸相同。Scale2的輸入圖像在原數(shù)據(jù)集基礎(chǔ)上結(jié)合了Scale1的輸出,Scale2更注重圖像中局部信息的采集,在上一尺度全局、粗糙的結(jié)果上進(jìn)行優(yōu)化,獲得更具局部特征的結(jié)果。類似的,Scale3的輸入是由原數(shù)據(jù)集與Scale2的輸出相結(jié)合,在進(jìn)一步優(yōu)化輸出深度圖的同時,提高了深度圖的分辨率,獲得高分辨率的輸出結(jié)果。具體網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 網(wǎng)絡(luò)模型結(jié)構(gòu)
1.2.1 全局特征粗糙采樣
Scale1的主要目的是對圖像進(jìn)行全局的采樣,在全局的層面提取圖像特征,網(wǎng)絡(luò)由DenseNet模塊、上采樣模塊與卷積層組成。Scale1的輸入圖像尺寸為240×320,首先通過兩個卷積層豐富信息特征采集,隨后利用卷積核3×3,步長為2的卷積層(簡稱3×3卷積層)代替?zhèn)鹘y(tǒng)的池化層對圖片進(jìn)行降采樣,得到的結(jié)果作為DenseNet模塊輸入。圖像通過DenseNet模塊后,由上采樣模塊對輸出結(jié)果進(jìn)行上采樣,最終圖像輸出尺寸為64×80,與Scale2輸入尺寸相同。由于Scale1的輸入圖像尺寸最大,因此Scale1的視野更廣,采集到的特征最為豐富、最為原始,在全局層面對圖像完成了一個粗糙的采樣。
1.2.2 局部特征細(xì)致采樣
Scale2通過連接層(concatenate layer)將縮放的數(shù)據(jù)集與Scale1的結(jié)果輸出組合,擴(kuò)展了輸入樣本數(shù)量,輸入圖像尺寸為64×80。與Scale1相比,Scale2考慮到圖像中像素與周邊像素深度信息的相關(guān)性,更注重局部信息,利用局部特征優(yōu)化輸出深度圖。Scale2網(wǎng)絡(luò)結(jié)構(gòu)由卷積層、上采樣模塊組成,卷積層負(fù)責(zé)豐富特征信息采樣,上采樣模塊負(fù)責(zé)獲得合適分辨率的輸出。對于卷積層部分,采用了多個3×3卷積核替換傳統(tǒng)5×5、7×7卷積核的做法,在獲得相同感受野的情況下,多個3×3卷積核相比大尺寸卷積核存在更多的非線性因子,使得判決函數(shù)更有判決性。同時,3×3卷積核的實現(xiàn)方式可以顯著減少參數(shù)量,提升訓(xùn)練速度。最終,Scale2輸出尺寸為128×160的深度圖像,與Scale3輸入尺寸相同。
1.2.3 提高分辨率,獲得預(yù)測結(jié)果
Scale3通過concatenate layer將縮放的數(shù)據(jù)集與Scale2的結(jié)果輸出組合,網(wǎng)絡(luò)結(jié)構(gòu)與Scale2類似。Scale3負(fù)責(zé)進(jìn)一步優(yōu)化圖像輸出并提高分辨率,得到空間上連貫、詳細(xì)的輸出結(jié)果。
隨著深度學(xué)習(xí)的發(fā)展,各類CNN網(wǎng)絡(luò)模型被提出,從開始的AlexNet、VGGNet,到后來的ResNet等等。DenseNet于2017年由劉壯等人提出,網(wǎng)絡(luò)結(jié)構(gòu)具有以下特點:第一,DenseNet有效地緩解了網(wǎng)絡(luò)過深帶來的梯度彌散問題,DenseNet每層都能獲取前面各層的損失函數(shù),有效加強(qiáng)了特征前向傳播,因此可以訓(xùn)練更深的網(wǎng)絡(luò)。第二,相比ResNet采用求和的方式傳播特征,DenseNet采用拼接的方式,將前面所有層輸出拼接在一起作為當(dāng)前輸入,顯著提高特征傳播效率,其非線性變換方程如式1所示。第三,DenseNet有效減少了網(wǎng)絡(luò)參數(shù),從特征重用的角度提升網(wǎng)絡(luò)性能。例如,基于ResNet的網(wǎng)絡(luò)模型通過隨機(jī)丟棄層防止過擬合,表明并非所有層都是必須的,網(wǎng)絡(luò)中存在大量冗余,造成運算量的浪費。通常,對于同樣的預(yù)測精度,DenseNet只需要ResNet一半的參數(shù)量。
xl=Hl([x0,x1....,xl-1])
(1)
DenseNet由Dense Block、Transition Layer、池化層、卷積層以及全連接層組合,Dense Block為稠密連接的highway模塊,是各層Bottleneck Layer輸出的集合。Bottleneck Layer包括卷積層、激活函數(shù)、歸一化函數(shù)以及Dropout組成。Transition Layer負(fù)責(zé)連接相鄰Dense Block,對Dense Block的輸出進(jìn)一步執(zhí)行歸一化、Dropout等處理。
本文中的DenseNet模塊由4個Dense Block和3個Transition Layer組成,并在DenseNet原有結(jié)構(gòu)上對其進(jìn)行了一定改善,是Scale1網(wǎng)絡(luò)的主要結(jié)構(gòu)。首先,對于圖像初始化部分,用多個3×3卷積層替換7×7卷積層、池化層,用小卷積核替換大卷積核,減少參數(shù)與計算量;其次,針對各個Dense Block的輸出通道數(shù),通過實驗對比,最終將各層輸出通道數(shù)從上至下確定為6、12、48、32;然后,對于Transition Layer,采用了3×3卷積層替換池化層;最后,刪除了DenseNet網(wǎng)絡(luò)結(jié)構(gòu)末尾的全局池化層和用于分類的全連接層,替換為性能更好的1×1的卷積層。
上采樣的主要目的是放大原圖像,獲得分辨率更高的輸出結(jié)果。放大圖像基本都是采用內(nèi)插值的方法,在原有圖像像素的基礎(chǔ)上在像素點之間采用插值算法插入新的像素。
在深度學(xué)習(xí)模型中,傳統(tǒng)的上采樣實現(xiàn)方式大多是先將圖像分辨率擴(kuò)展為2倍,用0填充沒有數(shù)據(jù)的像素,然后用5×5卷積層處理擴(kuò)展后的圖像實現(xiàn)插值,由于有很多0值,因此存在很多無用計算。本文中的上采樣模塊將5×5卷積核拆分為4個大小為3×3、2×3、3×2、2×2的卷積核[6],直接在原圖上進(jìn)行操作,跳過0值的處理,然后將4個輸出結(jié)果進(jìn)行交錯連接,獲得輸出結(jié)果。同時,在此基礎(chǔ)上,添加了激活函數(shù)(Relu)、歸一化函數(shù)以及卷積層,組合成上采樣模塊,有效提高了上采樣的效率。
損失函數(shù)的選擇是深度學(xué)習(xí)網(wǎng)絡(luò)模型訓(xùn)練過程重要環(huán)節(jié)之一,選擇正確的損失函數(shù)能提供更好的收斂方向,獲得更好的訓(xùn)練結(jié)果。目前通用的損失函數(shù)為L2損失函數(shù),以最小化預(yù)測結(jié)果與真實值差的歐式范數(shù)平方作為收斂方向,函數(shù)定義如式(2)所示:
(2)
容易看出,當(dāng)預(yù)測值與真實值差異較大時,L2損失函數(shù)能夠迅速下降梯度,收斂速度很快,但是當(dāng)預(yù)測值接近真實值時,L2損失函數(shù)收斂速度大大減小,梯度下降緩慢。因此,本文采用了BerHu損失函數(shù)[6],巧妙地將L1損失函數(shù)與L2損失函數(shù)結(jié)合,獲得了更好的收斂性能。其定義如式(3)所示:
(3)
(4)
表1 損失函數(shù)比較
為了驗證此模型的優(yōu)化效果,本文選擇在NYU Depth V2官方數(shù)據(jù)集上對模型進(jìn)行訓(xùn)練、測試。NYU Depth V2是微軟Kinect相機(jī)采集的室內(nèi)場景的視頻幀序列,由1449對深度信息與RGB像素對應(yīng)的圖片組成。該數(shù)據(jù)集含有3個城市的464個場景,共分為26種場景類型,1000多種對象。本文訓(xùn)練集與測試集的劃分比例為官方的249:215,將原始的480×640RGB圖與深度圖降采樣至240×320作為模型輸入,并通過預(yù)處理忽略圖片中深度信息缺省的像素。根據(jù)官方劃分,經(jīng)49個場景作為驗證集, 200個場景作為訓(xùn)練集,訓(xùn)練完成后在官方654張標(biāo)準(zhǔn)驗證圖像上對模型進(jìn)行測試。本文對訓(xùn)練圖像進(jìn)行隨機(jī)縮放、目標(biāo)平面內(nèi)旋轉(zhuǎn)、水平翻轉(zhuǎn)以及改變顏色和對比度等處理來擴(kuò)充數(shù)據(jù)集,避免模型過擬合,提升泛化能力。
實驗設(shè)備是一臺顯卡為Tesla K40C的服務(wù)器,使用TensorFlow框架。網(wǎng)絡(luò)訓(xùn)練使用隨機(jī)訓(xùn)練梯度下降優(yōu)化模型參數(shù),具體的超參數(shù)如下:批處理大小(batch size)為8,最大迭代輪數(shù)(max epoch)為1000,學(xué)習(xí)率(learning rate)為0.001,學(xué)習(xí)率每經(jīng)過10輪迭代衰90%,直至網(wǎng)絡(luò)收斂。整個模型訓(xùn)練耗時約為72個小時,CNN前向過程占時約為每張圖0.06 s,整個模型每張圖預(yù)測時間約為0.23 s,訓(xùn)練時的loss曲線如圖2所示。
在此將模型的實驗結(jié)果與同樣在NYU Depth V2數(shù)據(jù)集上進(jìn)行訓(xùn)練的相關(guān)工作進(jìn)行對比,采用了常用的衡量指標(biāo)評估結(jié)果[10]:
1)平均相對誤差(average relative error,Rel):
(5)
2)均方根誤差(root mean squared error,RMS):
(6)
圖2 各模型深度預(yù)測結(jié)果圖
3)對數(shù)空間平均誤差(average log10error,log10):
(7)
4)準(zhǔn)確率:
整個訓(xùn)練模型的學(xué)習(xí)過程為:
步驟1:輸入RGB圖像L=(x1,xj,...xn)與真實深度圖,并對數(shù)據(jù)集進(jìn)行數(shù)據(jù)擴(kuò)充。
步驟2:RGB圖像經(jīng)過網(wǎng)絡(luò)模型后得到輸出y,與真實深度值y*比較,計算di=|y-y*|。
步驟3:根據(jù)di大小,計算損失函數(shù),并更新參數(shù)。
步驟4:達(dá)到收斂條件或迭代次數(shù)上限時終止模型運行,否則重復(fù)步驟2)、3)。
通過實驗將得到的輸出結(jié)果與make3D、Eigen以及Laina的訓(xùn)練方法輸出結(jié)果進(jìn)行對比,其結(jié)果如表2所示。首先,可以看出利用CNN卷積網(wǎng)絡(luò)模型的輸出結(jié)果明顯優(yōu)于傳統(tǒng)利用先驗的幾何假設(shè)等方法,這主要得益于CNN結(jié)構(gòu)在圖像處理方面的強(qiáng)大能力,CNN結(jié)構(gòu)能夠從圖像中提取出足夠多的特征信息,且特征提取和統(tǒng)計分類都不需要人工干預(yù)。在利用CNN結(jié)構(gòu)的網(wǎng)絡(luò)模型中,輸出結(jié)果略優(yōu)于Eigen與Laina的模型輸出結(jié)果,這主要得益于DenseNet的網(wǎng)絡(luò)特性與多尺度的網(wǎng)絡(luò)結(jié)構(gòu),深度預(yù)測圖結(jié)果對比如圖2所示。
表2 NYU Depth V2數(shù)據(jù)集上實驗結(jié)果對比
針對單目圖像深度預(yù)測問題,提出了基于深度學(xué)習(xí)的多尺度網(wǎng)絡(luò)結(jié)構(gòu)模型,利用DenseNet的強(qiáng)化特征前向傳播、特征重用以及減少參數(shù)等特性,以及多尺度網(wǎng)絡(luò)結(jié)構(gòu)提供的全局預(yù)測、局部預(yù)測結(jié)果結(jié)合特性,有效提高了單目圖像深度預(yù)測精度,其結(jié)果顯著優(yōu)于傳統(tǒng)的處理方法,且在與其他CNN網(wǎng)絡(luò)模型對比中也取得更好的輸出結(jié)果。
但目前此模型仍是在有監(jiān)督的條件下訓(xùn)練,需要提供真實深度信息,因此對數(shù)據(jù)集提出了很高的要求,筆者正在嘗試構(gòu)建無監(jiān)督的訓(xùn)練模型,加大模型適用范圍。同時,此模型是直接由RGB圖訓(xùn)練得到深度結(jié)果,下一步考慮在模型中融入傳統(tǒng)的深度獲取方法,例如利用雙目標(biāo)定原理等,進(jìn)一步提升預(yù)測精度。