董學(xué)強,曾連蓀
(上海海事大學(xué)信息工程學(xué)院,上海 201306)
三維重建技術(shù)是現(xiàn)代技術(shù)發(fā)展的重要領(lǐng)域,在機(jī)器視覺視覺、計算機(jī)圖形學(xué)以及機(jī)器人的研究中都發(fā)揮著至關(guān)重要的作用。尤其在機(jī)器人的領(lǐng)域中一直是一個熱點與難點;機(jī)器人中的定位、導(dǎo)航,以及避障都需要運動信息的獲取,除此之外還能為給機(jī)器人提供感知外部環(huán)境的變化和辨別真實環(huán)境中物體變化的幾何特性。其理論框架主要包括如下幾部分:(1)圖像的預(yù)處理(2)稀疏點云重建(3)稠密點云重建(4)表面重建(5)紋理映射。本文主要研究稀疏點云的構(gòu)建方法。
稀疏點云重建的基礎(chǔ)是運動的分析技術(shù)。由于圖像中包含大量的運動信息,所以獲取稀疏點云最直接的方法就是對圖像進(jìn)行直接分析,其中主要包括傳統(tǒng)方法和現(xiàn)代方法。傳統(tǒng)的對于稀疏點云的構(gòu)建是基于SFM(Structure From Motion)[1-2]。SFM的輸入主要是一段運動或者連續(xù)的圖片,然后根據(jù)2D圖之間的匹配可以推斷出相機(jī)的各個參數(shù)以及目標(biāo)物體的運動參數(shù)。
特征點的匹配可以根據(jù)SIFT或者SUFT完成,特征點跟蹤是可以通過Optical Flow實現(xiàn)?,F(xiàn)在對于圖像信息的分析我們可以通過CNN(Convolutional Neural Networks)處理,其輸入的主要的一幀圖像,通過卷積對于圖像信息的獲取,通過反卷積實現(xiàn)圖像信息的可視化,輸出的主要是圖像的深度圖,結(jié)合相機(jī)的校正矩陣可以實現(xiàn)稀疏點云的重構(gòu)。
CNN由紐約大學(xué)的Yann LeCun于1998年提出,是多層感知機(jī)(MLP)的變種。由生物學(xué)家休博爾和維瑟爾在早期關(guān)于貓視覺皮層的研究發(fā)展而來。早期因為數(shù)據(jù)集獲取的困難和計算量限制未能得到廣泛的運用?,F(xiàn)在由于科技的發(fā)展,很多成型的數(shù)據(jù)集我們可以輕松在網(wǎng)上獲取,計算機(jī)的計算量與計算速度實現(xiàn)了指數(shù)級的增長,才讓其應(yīng)用成為了可能。從2012年中CNN在ImageNet數(shù)據(jù)集中表現(xiàn)出來的驚人的分類效果,讓其又重新進(jìn)入了我們的視野,引起了我們的高度關(guān)注。CNN組成
圖1 CNN的主要結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)一般由5部分組成:輸入層、卷積層、赤化層、全連接層、Softmax層。
(1)輸入層(input layer):是整個神經(jīng)網(wǎng)絡(luò)的輸入,在一般的情況下它代表了一張圖片的像素矩陣,輸入層的長和寬代表了圖片的長和寬,其深度代表了圖片的深度1或者3,黑白圖片的深度就是1,彩色圖片具有RGB三種色彩通道一般深度就是3。
(2)卷積層:卷積層是神經(jīng)網(wǎng)絡(luò)中最重要的一部分,卷積的主要目的就對輸入層的圖像信息的更加深入的獲取。通過不同的feature map分別對輸入圖像進(jìn)行卷積實現(xiàn)對其特征的獲取,卷積層的長和寬取決于feature map的長和寬,其深度取決于不同的feature map的個數(shù)
(3)池化層(pooling layer):池化層可以有效地減少矩陣的尺寸(長和寬),從而可以減少最后全連接的參數(shù)的個數(shù),參數(shù)的減少在一定程度上也可以防止過擬合的問題。一般具有兩種池化方法:最大池化和平均池化。
(4)全連接層(full layer):圖像經(jīng)過幾輪的卷積層和池化層的處理,我們可以認(rèn)為圖像的所有信息已經(jīng)被抽象成了信息量更高的特征。我們需要將這些特征用全連接層進(jìn)行處理。
(5)Softmax層:這層的主要作用就是讓輸出的結(jié)果變?yōu)橐环N概率值。假設(shè)原始輸出是y1,y2,…,yn,經(jīng)過Softmax層以后輸出的結(jié)果是一般輸出的維度取決于圖像特征的個數(shù)。
CNN在對于圖像的處理相對于其他的方法具有不可比擬的優(yōu)勢,它有效地避免了對于圖像的前期處理過程(特征提取、特征匹配等),可以直接輸入原始的圖片。圖像處理中,我們需要將圖像看成是一個或者多個的二維向量。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)是采用全連接的方式,即輸入層到隱藏層的神經(jīng)元是全部連接的,這樣會導(dǎo)致一個很嚴(yán)重的問題就是參數(shù)會呈現(xiàn)爆炸式的增長,使得在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時候耗時導(dǎo)致難以訓(xùn)練,CNN在處理這方面的問題的時候采用了局部連接和參數(shù)共享[3]的機(jī)制大大減少了參數(shù)的數(shù)量。該優(yōu)點在網(wǎng)絡(luò)的輸入是多維圖像時表現(xiàn)地更為明顯,使圖像可以直接作為網(wǎng)絡(luò)的輸入,避免了傳統(tǒng)識別算法中復(fù)雜的特征提取和數(shù)據(jù)重建過程。在二維圖像處理上有眾多優(yōu)勢,如網(wǎng)絡(luò)能自行抽取圖像特征包括顏色、紋理、形狀及圖像的幾何結(jié)構(gòu);在處理二維圖像問題上,特別是識別位移、縮放及其他形式扭曲不變性的應(yīng)用上具有良好的魯棒性和運算效率等。
利用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)每幀圖像的運動,這種神經(jīng)網(wǎng)絡(luò)被地表實時信息所監(jiān)督,用一些訓(xùn)練實例來高效的學(xué)習(xí)一些缺乏紋理的的運動估計,這種方法取代了以前的依靠一些在運動場上加一些平滑限制,過去的一些優(yōu)化方法就是采用此種方法[4]。從以前的直接優(yōu)化未知的參數(shù)到現(xiàn)在直接優(yōu)化神經(jīng)網(wǎng)絡(luò)中的權(quán)重,在權(quán)重的優(yōu)化過程中,我們并不需要可以獲取十分精確的圖片信息,只需要增加訓(xùn)練實例的規(guī)模和次數(shù)就可以得到比較理想的權(quán)重參數(shù)。
CNN的神奇的處理效果在大多數(shù)人眼里貌似還是一種“黑盒效應(yīng)”,它為何表現(xiàn)地這么好,如何提高CNN的性能,這些還需要很強的理論知識支持。也許反卷積的使用可以讓我們多少了解一些其中的原理。反卷積在神經(jīng)網(wǎng)絡(luò)中主要的作用是實現(xiàn)各個卷積層的可視化,具體來說就是探索各個網(wǎng)絡(luò)層學(xué)到了什么。反卷積又被稱之為Transposed Convolution,我們可以看出卷積層的前向傳播過程就是反卷積的反向傳播過程,卷積層的反向傳播過程就是反卷積層的前向傳播過程。反卷積主要包括三部分:反池化過程、反激活過程、反卷積過程[5]。
我們的實驗的訓(xùn)練部分是采用KITTI數(shù)據(jù)集來實現(xiàn)的。KITTI數(shù)據(jù)集由德國卡爾斯魯厄理工學(xué)院和豐田美國技術(shù)研究院聯(lián)合創(chuàng)辦,是目前國際上最大的自動駕駛場景下的計算機(jī)視覺算法評測數(shù)據(jù)集。該數(shù)據(jù)集用于評測立體圖像(stereo),光流(optical flow),視覺測距(visual odometry),3D 物體檢測(object detection)和 3D跟蹤(tracking)等計算機(jī)視覺技術(shù)在車載環(huán)境下的性能。KITTI包含市區(qū)、鄉(xiāng)村和高速公路等場景采集的真實圖像數(shù)據(jù),每張圖像中最多達(dá)15輛車和30個行人,還有各種程度的遮擋與截斷。整個數(shù)據(jù)集由389對立體圖像和光流圖,39.2 km視覺測距序列以及超過200k 3D標(biāo)注物體的圖像組成[6],以10Hz的頻率采樣同步??傮w上來看,我們將原始的數(shù)據(jù)集分為‘Road’,‘City’,‘Resident’,‘Campus’,和‘Person’。對于 3D 物體檢測,label可以細(xì)分為car,van,truck,pedestrian,pe?destrian(sitting),cyclist,tram以及misc組成。
圖2 主要結(jié)構(gòu)模型
我們用KITTI數(shù)據(jù)集作為訓(xùn)練數(shù)據(jù)使用。通過訓(xùn)練可以得到如上圖的主框架圖。神經(jīng)網(wǎng)絡(luò)的主框架如上圖所示:我們將一幀圖像作為主要的輸入對象,圖像的大小是384×128×3即圖像具有RGB三種通道。輸出的是圖像的深度信息,我們結(jié)合相機(jī)的內(nèi)參矩陣可以獲得其空間的三維點云。我們的結(jié)構(gòu)一共有8層,卷積層和池化層和反卷積層和反池化層各有4層,每一個。我們的feature map的大小是2×2的而且每一步的的大小是2,所以我們才會看到每一幀圖像經(jīng)過卷積層的時候會變?yōu)樵瓉淼?/4,經(jīng)過反卷積的時候是原來的4倍。在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中為了避免一些問題例如:訓(xùn)練過程太慢或者出現(xiàn)梯度爆炸的情況,采用了批量歸一化(Batch Normalization.BN)來解決這些問題。我們對每一層的輸出均采用批量歸一化處理。之所以采用這種方法歸根結(jié)底就是為了防止“梯度彌散”。訓(xùn)練太慢也是由于“梯度彌散”造成的。運用BN這種小技巧一般還可以加速訓(xùn)練速度,提高模型的訓(xùn)練精度。在訓(xùn)練過程中對于激活函數(shù)的選取需要考慮多方面的因素。在此我們選擇Relu激活函數(shù)。主要基于:深度值都是正值,Relu的變量的取值范圍也是正值符合我們的要求。Relu函數(shù)相對于其他激活函數(shù)具有兩大優(yōu)點:梯度不飽和,因此在反向傳播過程中,減輕了梯度彌散的問題,神經(jīng)網(wǎng)絡(luò)前幾層的參數(shù)也可以很快地更新;計算速度快。正向傳播過程中,Sigmoid和Tanh函數(shù)計算激活值時需要計算指數(shù),而Relu函數(shù)僅需要設(shè)置閾值。如果 x<0,f(x)=0,如果 x>0,f(x)=x。加快了正向傳播的計算速度。在此我們將深度值的峰值設(shè)定在100,為了避免出現(xiàn)過大的梯度甚至梯度爆炸。
采用本文算法的仿真結(jié)果如圖3所示:我們進(jìn)行了簡單的比較。定性地比較了一個運用立體對(圖3中間部分)獲取的深度圖和在沒有相機(jī)運動信息的情況下運用幀序列獲取的深度圖(圖3最右圖)。在兩幀圖像的運動沒有發(fā)生劇烈變化的時候,運用立體對獲取的深度信息和運用幀序列獲取的幀序列獲取的深度圖,兩種深度圖基本一致。對于幀序列獲取的深度圖,在現(xiàn)實的訓(xùn)練中也會出現(xiàn)一些失敗的例子如最后兩行。當(dāng)兩幀圖像的空間位置發(fā)生極小變化的時候,其深度圖的精確度會降低。但是對于立體對的序列這種情況一般很少出現(xiàn),因為在兩幀圖像之間會有一種補償來彌補這種微小變化帶來的損失。對于上述失敗的例子可以通過增加訓(xùn)練數(shù)據(jù)的規(guī)模來避免的,因為一旦數(shù)據(jù)增加就相應(yīng)的增加了帶有相關(guān)相機(jī)運動序列的場景出現(xiàn)的概率。
圖3 深度圖
CNN的一個重要的優(yōu)勢就是對圖像信息的分析和獲取。圖像中包括很多關(guān)于物體位姿的重要信息,物體之間的相對位置,物體在圖像的具體坐標(biāo)等,這些信息我們都可以通過對圖像信息的提取獲得。通過增加數(shù)據(jù)集的數(shù)量,在一定程度上可以獲取更加精確的分析結(jié)果。現(xiàn)在我們可以輕松獲取不同規(guī)模大小的數(shù)據(jù)集,所以我們可以改變訓(xùn)練的規(guī)模。獲取多樣化的結(jié)果,可以加深對運動信息的分析與比較。相對于傳統(tǒng)的參數(shù)的優(yōu)化,運用CNN處理圖像可以降低獲取結(jié)果的時間成本,增加準(zhǔn)確度。