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