無人駕駛的感知部分作為計(jì)算機(jī)視覺的領(lǐng)域范圍,也不可避免地成為CNN發(fā)揮作用的舞臺。本文是無人駕駛技術(shù)系列的第八篇,深入介紹CNN(卷積神經(jīng)網(wǎng)絡(luò))在無人駕駛3D感知與物體檢測中的應(yīng)用。
CNN簡介
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種適合使用在連續(xù)值輸入信號上的深度神經(jīng)網(wǎng)絡(luò),比如聲音、圖像和視頻。它的歷史可以回溯到1968年,Hubel和Wiesel在動物視覺皮層細(xì)胞中發(fā)現(xiàn)的對輸入圖案的方向選擇性和平移不變性,這個(gè)工作為他們贏得了諾貝爾獎。時(shí)間推進(jìn)到上世紀(jì)80年代,隨著神經(jīng)網(wǎng)絡(luò)研究的深入,研究人員發(fā)現(xiàn)對圖片輸入做卷積操作和生物視覺中的神經(jīng)元接受局部receptive field內(nèi)的輸入有相似性,那么在神經(jīng)網(wǎng)絡(luò)中加上卷積操作也就成了自然的事情。當(dāng)前的CNN相比通常的深度神經(jīng)網(wǎng)絡(luò)(DNN),特點(diǎn)主要包括:
一個(gè)高層的神經(jīng)元只接受某些低層神經(jīng)元的輸入,這些低層神經(jīng)元處于二維空間中的一個(gè)鄰域,通常是一個(gè)矩形。這個(gè)特點(diǎn)受到生物神經(jīng)網(wǎng)絡(luò)中receptive field的概念啟發(fā)。
同一層中不同神經(jīng)元的輸入權(quán)重共享,這個(gè)特點(diǎn)可以認(rèn)為是利用了視覺輸入中的平移不變性,不光大幅度減少了CNN模型的參數(shù)數(shù)量,還加快了訓(xùn)練速度。
?
由于CNN在神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)上針對視覺輸入本身特點(diǎn)做的特定設(shè)計(jì),所以它是計(jì)算機(jī)視覺領(lǐng)域使用深度神經(jīng)網(wǎng)絡(luò)的不二選擇。在2012年,CNN一舉打破了ImageNet這個(gè)圖像識別競賽的世界紀(jì)錄之后,計(jì)算機(jī)視覺領(lǐng)域發(fā)生了天翻地覆的變化,各種視覺任務(wù)都放棄了傳統(tǒng)方法,啟用了CNN來構(gòu)建新的模型。無人駕駛的感知部分作為計(jì)算機(jī)視覺的領(lǐng)域范圍,也不可避免地成為CNN發(fā)揮作用的舞臺。
無人駕駛雙目3D感知
在無人車感知中,對周圍環(huán)境的3D建模是重中之重。激光雷達(dá)能提供高精度的3D點(diǎn)云,但密集的3D信息就需要攝像頭的幫助了。人類用兩只眼睛獲得立體的視覺感受,同樣的道理能讓雙目攝像頭提供3D信息。假設(shè)兩個(gè)攝像頭間距為B,空間中一點(diǎn)P到兩個(gè)攝像頭所成圖像上的偏移(disparity)為d,攝像頭的焦距為f,那么我們可以計(jì)算P點(diǎn)到攝像頭的距離為:
所以為了感知3D環(huán)境得到z,需要通過雙目攝像頭的兩張圖像I_l和I_r得到d,通常的做法都是基于局部的圖片匹配:
由于單個(gè)像素的值可能不穩(wěn)定,所以需要利用周圍的像素和平滑性假設(shè)d(x,y)≈d(x+α,y+β)(假設(shè)α和β都較?。?,所以求解d變成了一個(gè)最小化問題:
這和optical flow任務(wù)想要解決的是非常類似的問題,不過是(Il,Ir)變成了(It ,It+1),所以下面將要介紹的算法,兩者都適用。
MC-CNN
現(xiàn)在來看看Matching-Cost CNN算法,這個(gè)算法使用了一個(gè)CNN來計(jì)算上式的右側(cè)matchingcost,MC-CNN的網(wǎng)絡(luò)結(jié)構(gòu)見圖1。
圖1 MC-CNN的網(wǎng)絡(luò)結(jié)構(gòu)
這個(gè)網(wǎng)絡(luò)的輸入是兩個(gè)圖片的一小塊,輸出是這兩塊不匹配的概率,相當(dāng)于一個(gè)cost函數(shù),當(dāng)兩者匹配時(shí)為0,不匹配時(shí)最大可能為1。通過對一個(gè)給定的圖片位置搜索可能的d取值,找到最小的CNN輸出,就得到了這一點(diǎn)局部的偏移估算。MC-CNN算法接下來做了如下后期處理:
Cross-based cost aggregation:基本思想是對鄰近的像素值相似的點(diǎn)的偏移求平均,提高估計(jì)的穩(wěn)定性和精度。
Semi-global matching:基本思想是鄰近的點(diǎn)的平移應(yīng)該相似,加入平滑約束并求偏移的最優(yōu)值。
插值和圖片邊界修正:提高精度,填補(bǔ)空白。
最終算法效果如下:
圖2 MC-CNN的算法效果
MC-CNN雖然使用了CNN,但僅限于計(jì)算匹配程度,后期的平滑約束和優(yōu)化都是必不可少的,那有沒有可能使用CNN一步到位呢?FlowNet就是這樣做的。
FlowNet
為了實(shí)現(xiàn)端到端的模型結(jié)構(gòu),需要用CNN實(shí)現(xiàn)特征提取,匹配打分和全局優(yōu)化等功能。FlowNet采取了encoder-decoder框架,把一個(gè)CNN分成了收縮和擴(kuò)張兩個(gè)部分。
圖3 encoder-decoder的框架
在收縮部分FlowNet提出了兩種可能的模型結(jié)構(gòu):
FlowNetSimple:把兩幅圖片疊起來輸入到一個(gè)“線性”的CNN中,輸出是每個(gè)像素的偏移量。這個(gè)模型的弱點(diǎn)是計(jì)算量大,而且無法考慮全局的優(yōu)化手段,因?yàn)槊總€(gè)像素的輸出是獨(dú)立的。
FlowNetCorr:先對兩幅圖片分別進(jìn)行特征的提取,然后通過一個(gè)相關(guān)層把兩個(gè)分支合并起來并繼續(xù)下面的卷積層運(yùn)算。這個(gè)相關(guān)層的計(jì)算和卷積層類似,只是沒有了學(xué)習(xí)到的特征權(quán)重,而是由兩個(gè)分支得到的隱層輸出相乘求和。
圖4 FlowNetSimple與FlowNetCorr
FlowNet網(wǎng)絡(luò)收縮部分不僅減少了CNN的計(jì)算量,同時(shí)起到了在圖像平面上聚合信息的作用,這也導(dǎo)致分辨率下降。于是在FlowNet網(wǎng)絡(luò)擴(kuò)張部分使用 “up convolution”來提高分辨率,注意這里不僅使用了上一層的低分辨率輸出,還使用了網(wǎng)絡(luò)收縮部分相同尺度的隱層輸出,如圖5所示。
圖5 FlowNet網(wǎng)絡(luò)擴(kuò)張
FlowNet算法在常見的公開數(shù)據(jù)集上都獲得了不錯的效果,值得一提的是它的速度很快。
無人駕駛物體檢測
物體檢測技術(shù)是無人駕駛感知必不可少的部分。自從2012年CNN在圖片分類問題上的突破,物體檢測自然是CNN應(yīng)用的下一個(gè)目標(biāo),CNN的物體檢測算法層出不窮,我們挑選比較有代表性的幾個(gè)算法做介紹。
Faster R-CNN
CNN在物體識別領(lǐng)域大行其道之前,通常做法類似于DPM(Deformable Parts Model)這樣的解決方案:在圖像上抽取局部特征的組合作為模板,比如基于圖像的空間梯度的HOG特征;為了能夠處理形變,遮擋等變化,我們建立一個(gè)“彈性”的結(jié)構(gòu),把這些“剛性”的部分組合起來;最后加上一個(gè)分類器判斷物體是否出現(xiàn)。這樣的算法一般復(fù)雜度較高,需要大量經(jīng)驗(yàn),而且改進(jìn)和優(yōu)化難度較大。CNN的到來改變了一切。
R-CNN系列算法是一個(gè)兩段式的算法,它把物體識別這個(gè)問題分為:
物體可能所在區(qū)域的選擇:輸入一張圖片,由于物體在其中的位置大小有太多可能性,我們需要一個(gè)高效的方法找出它們,這里的重點(diǎn)是在區(qū)域個(gè)數(shù)的一定上限下,盡可能找到所有的物體,關(guān)鍵指標(biāo)是召回率。
候選區(qū)域的識別:給定了圖片中的一塊矩形區(qū)域,識別其中的物體并修正區(qū)域大小和長寬比,輸出物體類別和更“緊”的矩形框。這里重點(diǎn)在識別的精度。
在了解算法的大致架構(gòu)后,來看看算法的具體實(shí)現(xiàn),這里主要描述R-CNN這一系列算法的最新版:Faster R-CNN,它對應(yīng)上面兩步分為RPN(Region Proposal Network)和Fast R-CNN,接下來分別介紹。
RPN
我們稱物體可能所在區(qū)域?yàn)楹蜻x,RPN(Region Proposal Network)的功能是最高效地產(chǎn)生一個(gè)候選列表。如圖6,RPN選擇以CNN為基礎(chǔ),圖片通過多個(gè)(比如4)卷積層進(jìn)行特征提取,在最后一個(gè)卷積層輸出的特征圖上使用一個(gè)3x3的滾動窗口連接到一個(gè)256或者512維的全連接隱層,最后再分支到兩個(gè)全連接層,一個(gè)輸出物體類別,一個(gè)輸出物體的位置大小。為了能夠使用不同的物體大小和長寬比,在每一個(gè)位置上考慮三個(gè)尺度(128x128, 256x256, 512x512)和三個(gè)長寬比(1:1, 1:2, 2:1)一共9種組合。這樣一個(gè)1000x600的圖片上考慮了(1000/16) × (600/16) × 9 ≈ 20,000種位置、大小和長寬比的組合,由于使用CNN計(jì)算,這一步耗時(shí)不多。最后根據(jù)空間重疊程度去掉冗余的候選區(qū)域,一張圖片大約獲得2000個(gè)左右的物體可能區(qū)域。
圖6 Region Proposal Network
Fast R-CNN
在候選區(qū)域分類階段,我們使用的是基于全連接的神經(jīng)網(wǎng)絡(luò),如圖7的右側(cè)部分:
而左側(cè)的特征提取部分可以重用RPN中的CNN計(jì)算結(jié)果,大大節(jié)約了計(jì)算時(shí)間,能達(dá)到5-17幀每秒的速度。
圖7 Fast R-CNN
MS-CNN
雖然Faster R-CNN算法大名鼎鼎,但在物體尺度變化很大的場景,比如無人駕駛,它還有提升的空間,Multi-scale CNN(MS-CNN)正是針對這個(gè)問題的嘗試。CNN的層級結(jié)構(gòu)由于pooling層的存在自然形成了和不同尺度的一個(gè)對應(yīng)關(guān)系。那為什么不把對物體的檢測放到CNN的不同層里去呢?這正是MS-CNN的想法。
在選擇物體候選區(qū)域階段,MS-CNN使用了圖8的網(wǎng)絡(luò)結(jié)構(gòu),我們看到如果把CNN網(wǎng)絡(luò)里的卷積層看成一個(gè)大樹的“主干”,那么在conv3、conv4和conv5這三個(gè)卷積層之后,這個(gè)網(wǎng)絡(luò)都長出了“分支”,每個(gè)“分支”都連接了一個(gè)檢測層,負(fù)責(zé)一定的尺度范圍,這樣多個(gè)“分支”一起,就能覆蓋比較寬的物體尺度范圍,達(dá)到我們的目的。
在候選區(qū)域識別階段,我們讓上一階段多個(gè)檢測層的輸出特征圖分別輸入到一個(gè)子網(wǎng)絡(luò)里,這里有幾個(gè)值得注意的細(xì)節(jié):
圖8 MS-CNN
第一層是“Deconvolution”,目的是為了提高特征圖的分辨率,保證物體檢測的準(zhǔn)確率,特別是對尺度偏小的物體。
Deconvolution之后,在抽取物體特征時(shí)(綠色框),同時(shí)還抽取了物體周邊的信息(藍(lán)色的框),這些“上下文”信息對識別準(zhǔn)確率的提高有明顯幫助。
總的來說,MS-CNN和Faster R-CNN相比,優(yōu)勢是識別的準(zhǔn)確度有很大提高,尤其在物體尺度變化的情況下,比如KITTI數(shù)據(jù)集里面的行人和自行車。但是Faster R-CNN還是有速度的優(yōu)勢。
圖9 MS-CNN
SSD
雖然Faster R-CNN的速度比之前的R-CNN已有很大提高,但還達(dá)不到實(shí)時(shí)的要求。Single Shot Detector(SSD)就是一個(gè)能夠?qū)崟r(shí)運(yùn)行,有更佳準(zhǔn)確度的算法,最近人氣很高。SSD沿用了滑動窗口的思想,通過離散化物體的位置,大小和長寬比,使用CNN高效計(jì)算了各種可能的物體情況,從而達(dá)到了高速檢測物體的目的。
圖10 Single Shot Detector
如圖10所示,SSD使用了VGG-16網(wǎng)絡(luò)來做底層的圖片特征提取,通過取消生成候選區(qū)域,縮放圖片縮放和特征圖采樣的步驟,一步到位判斷物體位置和分類,得到了高速的物體檢測算法。
在VGG網(wǎng)絡(luò)的基礎(chǔ)上,SSD加入了逐步變小的卷積層,這些不同尺度的卷積層分別使用3x3大小的卷積核進(jìn)行物體位置偏移和分類的判斷,使SSD能夠檢測到不同大小的物體。
結(jié)論
無人駕駛的感知部分作為計(jì)算機(jī)視覺的領(lǐng)域范圍,也不可避免地成為CNN發(fā)揮作用的舞臺。CNN在無人駕駛中的應(yīng)用主要包括3D感知與物體檢測。在3D感知中使用到的網(wǎng)絡(luò)包括MC-CNN與FlowNet, 在物體檢測中使用到的網(wǎng)絡(luò)包括Faster R-CNN、 MSCNN與 SSD。本文詳細(xì)介紹了各種網(wǎng)絡(luò)的優(yōu)缺點(diǎn),希望對各位在選擇網(wǎng)絡(luò)時(shí)有幫助。
作者簡介:
吳雙,原百度研究院硅谷人工智能實(shí)驗(yàn)室資深研究科學(xué)家,美國研發(fā)中心高級架構(gòu)師。研究方向包括計(jì)算機(jī)和生物視覺,互聯(lián)網(wǎng)廣告算法和語音識別,曾在NIPS等國際會議中發(fā)表文章。
王江,百度研究院硅谷深度學(xué)習(xí)實(shí)驗(yàn)室資深研究科學(xué)家。曾在微軟和Google研究院實(shí)習(xí),他的工作在Google和百度的圖像檢索系統(tǒng)、人臉識別系統(tǒng)和大規(guī)模深度學(xué)習(xí)中均得到了廣泛的應(yīng)用。
劉少山,PerceptIn聯(lián)合創(chuàng)始人。加州大學(xué)歐文分校計(jì)算機(jī)博士,研究方向智能感知計(jì)算、系統(tǒng)軟件、體系結(jié)構(gòu)與異構(gòu)計(jì)算?,F(xiàn)在PerceptIn主要專注于SLAM技術(shù)及其在智能硬件上的實(shí)現(xiàn)與優(yōu)化。
評論
查看更多