天天看點

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

作者簡介: 

吳雙,原百度研究院矽谷人工智能實驗室進階研究員,百度美國研發中心進階架構師。美國南加州大學實體博士,加州大學洛杉矶分校博士後,研究方向包括計算機和生物視覺,網際網路廣告算法,網際網路文本和視訊的推薦系統,語音識别和自然語言處理,曾在NIPS等國際會議中發表文章。 

劉少山,PerceptIn聯合創始人。加州大學歐文分校計算機博士,研究方向包括智能感覺計算、系統軟體、體系結構與異構計算。現在PerceptIn主要專注于SLAM技術及其在智能硬體上的實作與優化。曾在百度美國研發中心負責百度無人車系統架構與産品化。

2. 光學雷達在無人駕駛技術中的應用

無人駕駛汽車的成功涉及高精地圖、實時定位以及障礙物檢測等多項技術,而這些技術都離不開光學雷達(LiDAR)。本文将深入解析光學雷達是如何被廣泛應用到無人車的各項技術中。文章首先介紹光學雷達的工作原理,包括如何通過雷射掃描出點雲;然後詳細解釋光學雷達在無人駕駛技術中的應用,包括地圖繪制、定位以及障礙物檢測;最後讨論光學雷達技術目前面臨的挑戰,包括外部環境幹擾、資料量大、成本高等問題。

在實際應用中,LiDAR也面臨着許多挑戰,包括技術(空氣中懸浮物)、計算性能以及價格挑戰。要想把無人車系統産品化,我們必須解決這些問題。

3. GPS及慣性傳感器在無人駕駛中的應用

本文是無人駕駛技術系列的第五篇,着重于GPS以及慣性傳感器在無人駕駛中的應用。GPS是目前行車定位不可或缺的技術,但是由于GPS的誤差、多路徑以及更新頻率低等問題,我們不能隻依賴于GPS進行定位。慣性傳感器(IMU)是可以檢測加速度與旋轉運動的傳感器。基礎的慣性傳感器包括加速度計與角速度計。慣性傳感器擁有很高的更新頻率,可以跟GPS形成互補。而使用傳感器融合技術,我們可以融合GPS與慣性傳感器資料,各取所長,以達到較好的定位效果。

4. 基于計算機視覺的無人駕駛感覺系統

本章節裡,作者首先介紹了KITTI的資料集,用來作為基于計算機視覺的無人駕駛感覺方案的算法驗證。之後又介紹了無人駕駛感覺方面的三個研究内容:光流(Optical Flow)和立體視覺、物體的檢測和跟蹤以及視覺裡程計算法。

Optical Flow和立體視覺

在今年6月于美國拉斯維加斯召開的CVRP大會上,多倫多大學的Raquel Urtasun教授和她的學生改進了深度學習中的Siamese網絡,用一個内積層代替了拼接層,把處理一對圖檔的時間從一分鐘左右降低到一秒以内。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

                                                                             Siamese結構的深度神經網絡

如圖所示,這個Siamese結構的深度神經網絡分左右兩部分,各為一個多層的卷積神經網絡(CNN),兩個CNN共享網絡權重。Optical Flow的偏移矢量估計問題轉化為一個分類問題,輸入是兩個9x9的圖檔塊,輸出是128或者256個可能的偏移矢量

y

。通過從已知偏移矢量的圖檔對中抽取的圖檔塊輸入到左右兩個CNN,然後最小化交叉熵(cross-entropy):

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

我們可以用監督學習的方法訓練整個神經網絡。

  • i

    是像素的名額。
  • y_i

    是像素

    i

    可能的偏移矢量。
  • p_gt

    是一個平滑過的目标分布,用來給一兩個像素的預估誤差回報一個非0的機率,

    gt

    表示ground truth。
  • p_i (y_i,w)

    是神經網絡輸出的給定

    w

    y_i

    的機率。

在KITTI的Stereo2012資料集上,這樣一個算法可以在0.34秒完成計算,并達到相當出色的精度,偏移估計誤差在3-4像素左右,對大于3像素的偏移估計誤差在8.61像素,都好于其他速度慢很多的算法。

在得到每個像素

y_i

上的分布後,我們還需要加入空間上的平滑限制,這篇文章試驗了三種方法:

  • 最簡單直接的5x5視窗平均。
  • 加入了相鄰像素一緻性的半全局塊比對(Semi Global Block Matching,SGBM)。
  • 超像素+3維斜面。

這些平滑方法一起,能把偏移估計的誤差再降低大約50%,這樣一個比較準确的2維偏移矢量場就得到了。基于它,我們就能夠得到如圖8所示場景3維深度/距離估計。這樣的資訊對無人駕駛非常重要。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

                                                                                               深度資訊圖

物體的識别與追蹤

從像素層面的顔色、偏移和距離資訊到物體層面的空間位置和運動軌迹,是無人車視覺感覺系統的重要功能。無人車的感覺系統需要實時識别和追蹤多個運動目标(Multi-ObjectTracking,MOT),例如車輛和行人。物體識别是計算機視覺的核心問題之一,最近幾年由于深度學習的革命性發展,計算機視覺領域大量使用CNN,物體識别的準确率和速度得到了很大提升,但總的來說物體識别算法的輸出一般是有噪音的:物體的識别有可能不穩定,物體可能被遮擋,可能有短暫誤識别等。自然地,MOT問題中流行的Tracking-by-detection方法就要解決這樣一個難點:如何基于有噪音的識别結果獲得魯棒的物體運動軌迹。在ICCV 2015會議上,斯坦福大學的研究者發表了基于馬爾可夫決策過程(MDP)的MOT算法來解決這個問題,下面我們就詳細介紹這個工作。

運動目标的追蹤用一個MDP來模組化(圖9):

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

                                                                                   圖9 DMM狀态圖

  • 運動目标的狀态:

    s∈S=S_active∪S_tracked∪S_lost∪S_inactive

    ,這幾個子空間各自包含無窮多個目标狀态。被識别到的目标首先進入

    active

    狀态,如果是誤識别,目标進入

    inactive

    狀态,否則進入

    tracked

    狀态。處于

    tracked

    狀态的目标可能進入

    lost

    狀态,處于

    lost

    狀态的目标可能傳回

    tracked

    狀态,或者保持

    lost

    狀态,或者在足夠長時間之後進入

    inactive

    狀态。
  • 作用

    a∈A

    ,所有作用都是确定性的。
  • 狀态變化函數

    T:S×A→S

    定義了在狀态

    s

    和作用

    a

    下目标狀态變為

    s'

  • 獎勵函數

    R:S×A→R

    定義了作用

    a

    之後到達狀态

    s

    的即時獎勵,這個函數是從訓練資料中學習的。
  • 規則

    π:S→A

    決定了在狀态

    s

    采用的作用

    a

如圖10,這個MDP的狀态空間變化如下:

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

                                                                             圖10 狀态轉換執行個體

  • active

    狀态下,物體識别算法提出的物體候選通過一個線下訓練的支援向量機(SVM),判斷下一步的作用是

    a_1

    還是

    a_2

    ,這個SVM的輸入是候選物體的特征向量,空間位置大小等,它決定了在

    S_active

    中的MDP規則

    π_active

  • tracked

    狀态下,一個基于tracking-learning-detection追蹤算法的物體線上外觀模型被用來決定目标物體是否保持在

    tracker

    狀态還是進入

    lost

    狀态。這個外觀模型(appearance model)使用目前幀中目标物體所在的矩形(bounding box)作為模闆(template),所有在

    tracked

    狀态下收集的物體外觀模闆在

    lost

    狀态下被用來判斷目标物體是否回到

    tracked

    狀态。另外在

    tracked

    狀态下,物體的追蹤使用上述外觀模型模闆,矩形範圍内的Optical Flow和物體識别算法提供的候選物體和目标物體的重合比例來決定是否保持在

    tracked

    狀态,如果是,那麼目标物體的外觀模闆自動更新。
  • lost

    狀态下,如果一個物體保持

    lost

    狀态超過一個門檻值幀數,就進入

    inactive

    狀态;物體是否傳回

    tracked

    狀态由一個基于目标物體和候選物體相似性特征向量的分類器決定,對應了

    S_lost

    中的

    π_lost

這個基于MDP的算法在KITTI資料集的物體追蹤評估中達到了業界領先水準。

視覺裡程計算法

基于視覺的定位算法有兩大分類:一種是基于拓撲與地标的算法,另一種是基于幾何的視覺裡程計算法。基于拓撲與地标的算法把所有的地标組成一個拓撲圖,然後當無人車監測到某個地标時,便可以大緻推斷出自己所在的位置。基于拓撲與地标的算法相對于基于幾何的方法容易,但是要求預先建立精準的拓撲圖,比如将每個路口的标志物做成地标。基于幾何的視覺裡程計算法計算比較複雜,但是不需要預先建立精準的拓撲圖,這種算法可以在定位的同時擴充地圖。以下着重介紹視覺裡程計算法。

視覺裡程計算法主要分為單目以及雙目兩種,純單目的算法的問題是無法推算出觀察到的物體的大小,是以使用者必須假設或者推算出一個初步的大小,或者通過與其它傳感器(如陀螺儀)的結合去進行準确的定位。雙目的視覺裡程計算法通過左右圖三角剖分(Triangulation)計算出特征點的深度,然後從深度資訊中推算出物體的大小。圖11展示了雙目視覺裡程計算法的具體計算流程:

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

                                                                            圖11 雙目視覺裡程計算法的計算流程

  1. 雙目錄影機抓取左右兩圖。
  2. 雙目圖像經過Triangulation産生目前幀的視差圖(Disparity Map)。
  3. 提取目前幀與之前幀的特征點,如果之前幀的特征點已經提取好了,那麼我們可以直接使用之前幀的特征點。特征點提取可以使用Harris Corner Detector。
  4. 對比目前幀與之前幀的特征點,找出幀與幀之間的特征點對應關系。具體可以使用随機抽樣一緻(RANdom Sample Consensus,RANSAC)算法。
  5. 根據幀與幀之間的特征點對應關系,推算出兩幀之間車輛的運動。這個推算是最小化兩幀之間的重投影誤差(Reprojection Error)實作的。
  6. 根據推算出的兩幀之間車輛的運動,以及之前的車輛位置,計算出最新的車輛位置。

通過以上的視覺裡程計算法,無人車可以實時推算出自己的位置,進行自主導航。但是純視覺定位計算的一個很大問題是算法本身對光線相當敏感。在不同的光線條件下,同樣的場景不能被識别。特别在光線較弱時,圖像會有很多噪點,極大地影響了特征點的品質。在反光的路面,這種算法也很容易失效。這也是影響視覺裡程計算法在無人駕駛場景普及的一個主要原因。一個可能的解決方法,是在光線條件不好的情況下,更加依賴根據車輪以及雷達傳回的資訊進行定位。

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

無人駕駛雙目3D感覺

在無人車感覺中,對周圍環境的3D模組化是重中之重。雷射雷達能提供高精度的3D點雲,但密集的3D資訊就需要攝像頭的幫助了。人類用兩隻眼睛獲得立體的視覺感受,同樣的道理能讓雙目攝像頭提供3D資訊。假設兩個攝像頭間距為B,空間中一點P到兩個攝像頭所成圖像上的偏移(disparity)為d,攝像頭的焦距為f,那麼我們可以計算P點到攝像頭的距離為:

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

是以為了感覺3D環境得到z,需要通過雙目攝像頭的兩張圖像I_l和I_r得到d,通常的做法都是基于局部的圖檔比對:

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

由于單個像素的值可能不穩定,是以需要利用周圍的像素和平滑性假設d(x,y)≈d(x+α,y+β)(假設α和β都較小),是以求解d變成了一個最小化問題:

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

這和optical flow任務想要解決的是非常類似的問題,不過是(Il,Ir)變成了(It ,It+1),是以下面将要介紹的算法,兩者都适用。

MC-CNN

現在來看看Matching-Cost CNN算法,這個算法使用了一個CNN來計算上式的右側matchingcost,MC-CNN的網絡結構見圖1。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖1 MC-CNN的網絡結構

這個網絡的輸入是兩個圖檔的一小塊,輸出是這兩塊不比對的機率,相當于一個cost函數,當兩者比對時為0,不比對時最大可能為1。通過對一個給定的圖檔位置搜尋可能的d取值,找到最小的CNN輸出,就得到了這一點局部的偏移估算。MC-CNN算法接下來做了如下後期處理:

  • Cross-based cost aggregation:基本思想是對鄰近的像素值相似的點的偏移求平均,提高估計的穩定性和精度。
  • Semi-global matching:基本思想是鄰近的點的平移應該相似,加入平滑限制并求偏移的最優值。
  • 插值和圖檔邊界修正:提高精度,填補空白。

最終算法效果如下:

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖2 MC-CNN的算法效果

MC-CNN雖然使用了CNN,但僅限于計算比對程度,後期的平滑限制和優化都是必不可少的,那有沒有可能使用CNN一步到位呢?FlowNet就是這樣做的。

FlowNet

為了實作端到端的模型結構,需要用CNN實作特征提取,比對打分和全局優化等功能。FlowNet采取了encoder-decoder架構,把一個CNN分成了收縮和擴張兩個部分。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖3 encoder-decoder的架構

在收縮部分FlowNet提出了兩種可能的模型結構:

  • FlowNetSimple:把兩幅圖檔疊起來輸入到一個“線性”的CNN中,輸出是每個像素的偏移量。這個模型的弱點是計算量大,而且無法考慮全局的優化手段,因為每個像素的輸出是獨立的。
  • FlowNetCorr:先對兩幅圖檔分别進行特征的提取,然後通過一個相關層把兩個分支合并起來并繼續下面的卷積層運算。這個相關層的計算和卷積層類似,隻是沒有了學習到的特征權重,而是由兩個分支得到的隐層輸出相乘求和。
【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖4 FlowNetSimple與FlowNetCorr

FlowNet網絡收縮部分不僅減少了CNN的計算量,同時起到了在圖像平面上聚合資訊的作用,這也導緻分辨率下降。于是在FlowNet網絡擴張部分使用 “up convolution”來提高分辨率,注意這裡不僅使用了上一層的低分辨率輸出,還使用了網絡收縮部分相同尺度的隐層輸出,如圖5所示。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖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個左右的物體可能區域。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖6 Region Proposal Network

知乎的馬塔同學做了一張圖,很容易了解了

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

Fast R-CNN

在候選區域分類階段,我們使用的是基于全連接配接的神經網絡,如圖7的右側部分:

而左側的特征提取部分可以重用RPN中的CNN計算結果,大大節約了計算時間,能達到5-17幀每秒的速度。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖7 Fast R-CNN

當然書中對 Fast R-CNN隻是簡單提了一下,如果想詳細了解,可以參閱知乎的文章:https://zhuanlan.zhihu.com/p/31426458

MS-CNN

雖然Faster R-CNN算法大名鼎鼎,但在物體尺度變化很大的場景,比如無人駕駛,它還有提升的空間,Multi-scale CNN(MS-CNN)正是針對這個問題的嘗試。CNN的層級結構由于pooling層的存在自然形成了和不同尺度的一個對應關系。那為什麼不把對物體的檢測放到CNN的不同層裡去呢?這正是MS-CNN的想法。

在選擇物體候選區域階段,MS-CNN使用了圖8的網絡結構,我們看到如果把CNN網絡裡的卷積層看成一個大樹的“主幹”,那麼在conv3、conv4和conv5這三個卷積層之後,這個網絡都長出了“分支”,每個“分支”都連接配接了一個檢測層,負責一定的尺度範圍,這樣多個“分支”一起,就能覆寫比較寬的物體尺度範圍,達到我們的目的。

在候選區域識别階段,我們讓上一階段多個檢測層的輸出特征圖分别輸入到一個子網絡裡,這裡有幾個值得注意的細節:

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖8 MS-CNN

  • 第一層是“Deconvolution”,目的是為了提高特征圖的分辨率,保證物體檢測的準确率,特别是對尺度偏小的物體。
  • Deconvolution之後,在抽取物體特征時(綠色框),同時還抽取了物體周邊的資訊(藍色的框),這些“上下文”資訊對識别準确率的提高有明顯幫助。

總的來說,MS-CNN和Faster R-CNN相比,優勢是識别的準确度有很大提高,尤其在物體尺度變化的情況下,比如KITTI資料集裡面的行人和自行車。但是Faster R-CNN還是有速度的優勢。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖9 MS-CNN

SSD

雖然Faster R-CNN的速度比之前的R-CNN已有很大提高,但還達不到實時的要求。Single Shot Detector(SSD)就是一個能夠實時運作,有更佳準确度的算法,最近人氣很高。SSD沿用了滑動視窗的思想,通過離散化物體的位置,大小和長寬比,使用CNN高效計算了各種可能的物體情況,進而達到了高速檢測物體的目的。

【讀書筆記】第一本無人駕駛技術書 筆記彙總 1

圖10 Single Shot Detector

如圖10所示,SSD使用了VGG-16網絡來做底層的圖檔特征提取,通過取消生成候選區域,縮放圖檔縮放和特征圖采樣的步驟,一步到位判斷物體位置和分類,得到了高速的物體檢測算法。

在VGG網絡的基礎上,SSD加入了逐漸變小的卷積層,這些不同尺度的卷積層分别使用3x3大小的卷積核進行物體位置偏移和分類的判斷,使SSD能夠檢測到不同大小的物體。

詳細的SSD介紹,請看知乎文章:https://zhuanlan.zhihu.com/p/33544892

當然,現在最火的目标檢測的算法是YOLOv3,基本上已經一統江湖了,知乎我是小将的一篇文章講的蠻仔細的,可以參考:https://zhuanlan.zhihu.com/p/32525231

繼續閱讀