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