1. 程式人生 > >卷積神經網路(CNN)在無人駕駛中的應用

卷積神經網路(CNN)在無人駕駛中的應用

無人駕駛的感知部分作為計算機視覺的領域範圍,也不可避免地成為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技術及其在智慧硬體上的實現與優化。