深度學習在自動駕駛感知領域的應用

AI科技大本營發表於2019-03-06

程式設計師轉行學什麼語言?

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

本次直播課程是由深度學習資深研究者-楊陽博士從百度Apollo自動駕駛感知技術出發,講解環境感知中深度學習的實用性與高效性。

 

課程從Apollo 3.5感知技術介紹、自動駕駛中的目標檢測與識別、深度學習在目標檢測中的意義、Apollo中深度學習的應用、百度深度學習框架對目標檢測的實操五個方面著手,全面解讀深度學習在目標檢測中的運用。

 

以下是楊陽博士分享的全部內容,希望給各位開發者帶來更多的幫助。

 

 

640?wx_fmt=png

 

首先,本次課程將以百度Apollo自動駕駛技術為出發點,詳解百度深度學習技術在Apollo自動駕駛目標檢測中的應用。其次,基於百度深度學習框架對目標檢測技術進一步探討,最後理論聯絡實際,通過一個典型案例體驗百度深度學習在環境感知中的實用性與高效性。

 

簡要了解一下自動駕駛

 

首先我們可以從安全駕駛角度來簡單瞭解自動駕駛的重要性。為什麼我們需要自動駕駛?這裡羅列了一些自動駕駛的優勢,除了減少交通事故、節省燃料外,還涉及到獲得更多自主休息的時間。此外,自動駕駛技術還有很多其它優點,例如可以輕輕鬆鬆停車,讓老人開車相對更安全一些。

 

640?wx_fmt=png

 

表中給出了全球對於自動駕駛技術的評級,包括從純粹的人工駕駛L0級到高度的自動駕駛L4級。不過目前各國重點研發的還是有條件的自動駕駛,例如L3級的自動駕駛以及高度的自動駕駛L4級,完全的自動駕駛(L5級)目前還沒有辦法預測。

 

640?wx_fmt=png

其中一些企業推出了有條件的自動駕駛,還有一些停留在部分自動駕駛L2級和輔助自動駕駛L1級的測試階段,暫未投入到商用。

 

不過值得高興的一點,百度今年剛剛推出了L4級的自動駕駛車輛以及相關解決方案,相信未來在L5級的自動駕駛領域,我們國家一定會有所突破,實現L5級自動駕駛指日可待。

 

接下來我們探究自動駕駛車輛的基本組成,以百度Apollo3.5的無人駕駛車輛為例,明確整個自動駕駛車輛包括哪些部分。首先,車輛頂端應配置360度的3D掃描雷達,以及前排陣列攝像頭、後排攝像頭陣列,同時還包含GPS天線、前置雷達等。這些都是用來對周圍環境進行感知的。

 

640?wx_fmt=png

 

感知結果得到實時處理後,就會產生大量資料, 從而彙總到車後端的實時處理系統中,也就是計算和儲存系統,隨後做到汽車在行進過程中對車輛周圍環境的完全感知。如今的Apollo3.5,感測器部分以及計算儲存系統還是相當完善的。從Apollo完整框架分析,我們可以看到上端是雲端服務,下端三層屬於車端服務。

 

全新的Apollo3.5技術框架對其中14個模組進行了升級,主要分佈在硬體系統以及軟體系統中。例如,3.5版本感知演算法加上全新的感測器升級,可以達到360度無死角的全面覆蓋。

 

640?wx_fmt=png

 

雲端服務方面,涉及例如高精度地圖、模擬資料平臺、安全模組等。全新的基於多場景的決策和預測架構,使開發變得更加靈活與友好,所以一些開發者完全可以選擇這種軟體平臺和硬體平臺來進行相應開發,同時我們也將90%模擬驅動開放,大力提升開發者們的效率以及研發安全性。

 

Apollo對於自動駕駛具備至關重要的四個部分,我們也給予相應升級,包括規劃、預測、感知以及定位。

 

640?wx_fmt=png

 

如今Apollo3.5在感知能力上也得到了升級,可以做到通過增加盲區檢測感測器以及雷達等方式,例如用於盲區檢測的感測器套件以及新的128線的鐳射雷達擴充檢測範圍,同時包含3D定位演算法以及目標檢測演算法,表現更強大。

 

640?wx_fmt=png

 

自動駕駛中的目標檢測與識別

 

所謂目標檢測,就是區分影像或者視訊中的目標與其他不感興趣的部分,例如圖中的建築物、樹林、盒子以及瓶子等,其實這些物體同畫面產生了一些明顯區分,那麼如何讓計算機像人類一樣做到明確區分呢?這就涉及目標檢測,可以說讓計算機能夠區分出這些,是目標檢測的第一步。

 

目標檢測的第二步是什麼?是讓計算機識別剛才區分出來的畫面究竟是什麼,從而確定視訊或影像中目標的種類。例如為了實現自動駕駛的目標,最初需要讓計算機認識交通目標,才能讓其成為真正的AI老司機。

 

640?wx_fmt=png

 

如何建立一個高準確率、高召回率的物體識別系統?這實際是無人車感知的一個核心問題,而物體檢測更是重中之重,要求我們對不同感測器設計不同的演算法來準確檢測障礙物。例如Apollo技術框架中為3D設計了CNSEG(音譯)深度學習演算法,還包括為二級影像設計的YOLO3D深度學習演算法等。

 

具體說到物體檢測,我們要求完成單幀障礙物的檢測,並藉助感測器內外引數標定轉換矩陣,將檢測結果統一影射到車身的座標系中,這種物體檢測演算法既快速又準確。

 

640?wx_fmt=png

 

引入深度學習究竟為何般?

 

有些小夥伴可能產生疑問,描述了這麼多種方法,為什麼一定要使用深度學習呢?或許將深度學習與傳統影像處理PK下,就能明瞭其中緣由。

 

業界共知,傳統的目標檢測與識別演算法分為三部分,包含目標特徵提取、目標識別以及目標定位,其中涉及的典型演算法就是基於元件檢測的DPM演算法。

 

實際上DPM演算法就是訓練出物體的梯度模型,然後對實際物體進行套用。但很顯然,人為提取出來模型種類還是有限的,面對現實中紛繁多變的大千世界,即便是後來人為成功提取了更多特徵因素,也很難做到對影像中全部細節進行詳細描述,因此類似DPM演算法。

 

由於傳統目標檢測演算法主要基於人為特徵提取,對於更復雜或者更高階的影像特徵很難進行有效描述,所以限制了目標檢測的識別效果,這一點可以被認定是人為特徵提取導致傳統演算法的效能瓶頸。

 

640?wx_fmt=png

 

同傳統的影像處理方法不同,採用深度學習的方法進行影像處理,最大的區別就是特徵圖不再通過人工特徵提取,而是利用計算機,這樣提取出來的特徵會非常豐富,也很全面。

 

所謂的深度學習就是通過集聯多層的神經網路形成一個很深的層,當層數越多,提取出來的特徵也就越多而且越豐富。所以在目標檢測和識別的過程中,最主要使用的深度學習特徵提取模型就是深度卷積網路,英文簡稱CNN。

 

為什麼CNN影像處理的方式比以前更好呢?究其原因,根本還是在於對影像特徵提取。例如,當我們使用多層進行特徵提取的時候,其實有些層是針對影像的邊緣輪廓來提取的,有些則是針對質地或者紋理來進行的,還有些是針對物體特徵進行操作,總而言之不同的層有不同的分割方式。

 

迴歸到目標檢測這個問題上,卷積神經網路的每一層如果能夠準確提取出所需特徵,最後也就容易判斷許多。因此決定CNN的目標檢測和識別的關鍵就在於對每一層如何設計。

 

這可能就是八仙過海各顯神通的時刻了,不過不得不提及的是,一個著名的卷積神經網路AlexNet,這個網路由多倫多大學的Hinton教授團隊於2012年提出,一經提出立馬轟動了計算機的視覺領域,對其他相關行業後期也產生了深遠的影響。

 

AlexNet在整個演算法處理的步驟,其實與之前提到的一般CNN的處理方式沒有本質區別,而且在國際上每年都會舉辦影像檢測演算法的比賽,AlexNet就在某屆影像檢測比賽中獲得了冠軍。那一年AlexNet橫空出世,把當年的top5錯誤率硬生生降到了17%以下。

 

640?wx_fmt=png

 

既然深度學習能夠在目標檢測中大顯身手,那麼針對當前目標檢測的方法又有哪些?簡單將當前的方法進行分類,其實可以歸納為三種演算法方案:

 

第一種是對於候選區域的目標檢測演算法,典型的網路是R-CNN和FasterR-CNN;第二個方案則是基於迴歸的目標檢測演算法,典型實現是YOLO和SSD,最後一種是基於增強學習的目標檢測演算法,典型表現為深度Q學習網路,但這幾種演算法其實各有各的優缺點。

 

640?wx_fmt=png

 

 

由於今天的話題是目標檢測,自然就會想到在多種演算法門派中如何進行選擇的問題,以及在自動駕駛領域中適合其研發的演算法以及框架是什麼。

 

深度學習框架呼之欲出

 

關於深度學習框架的選擇,大家可以嘗試用百度PaddlePaddle。就目前而言,市面上深度學習框架很多,包括Tensorflow、Caffe、PyTorch、MXNet等在內,而PaddlePaddle是眾多深度學習框架中唯一一款國內自主研發的。

 

它支援分散式計算,即多GPU多臺機器平行計算,同時還支援FPGA,與其他一些僅支援GPU的框架不同,支援FPGA是PaddlePaddle的一個亮點。

 

640?wx_fmt=png

 

有了解稱,FPGA特有的流水線結構降低了資料同記憶體的反覆互動,從而大大降低了執行功耗,這對於深度學習進行大規模的推斷有諸多好處。如果能將這一特性擴充套件到自動駕駛領域,對於未來降低汽車的發熱問題顯然有很大幫助。而PaddlePaddle中的PaddleMobile框架以及API的方式支援移動端裝置,這樣就可以利用手機來完成想要的功能。

 

演算法方案如何高效選擇?

 

先前提到的三種方案,首先來看候選區域目標檢測演算法。這類演算法的典型案例是FasterR-CNN。工作的基本步驟可歸納為首先提取影像中的候選區域,隨後針對這些候選區域進行分類判斷,當然由於這些候選區域是通過演算法搜尋出來的,所以並不一定準確,因此還需要對選出的區域做位置迴歸,隨之進行目標定位,最後輸出一個定位結果。總體來說,首先要先選擇、再判斷,最後剔除不想要的。

 

類似於找工作,選擇這種方法進行影像目標檢測是可以做到精準定位以及識別,所以精度較高,不過由於需要反覆進行候選區域的選擇,所以演算法的效率被限制。

 

640?wx_fmt=png

 

值得注意的一點,FasterR-CNN引入了一種稱為區域生成網路RPN(音譯)的概念,用來進行演算法加速。可以看到,RPN實際上是在分類和特徵圖,也就是卷積層出來之後的特徵圖之間,這樣就解決了端到端的問題。

 

同時,我們可以利用GPU來進行網路加速,從而提升檢測的速率,這也是為什麼FasterR-CNN和R-CNN相比多了一個Faster的原因。此外,候選區域檢測這類演算法在VOC2007資料集上,也可以達到檢測精度為73.2%的準確率。講到候選區域目標檢測演算法,實際上前面候選區域的目標檢測演算法主要是利用對於候選區域進行目標提取。

 

接下來介紹的第二個演算法就是剛才提到的迴歸目標檢測演算法,它的特點是SingleShot,也就是隻需觀測一次圖片就能進行目標的檢測以及識別,因此演算法的效率非常高。

 

在此羅列了一個稱之為SSD的典型迴歸目標檢測演算法,這個演算法分為四個步驟:第一步通過深度神經網路提取整個圖片的特徵;第二步對於不同尺度的深度特徵圖設計不同大小的特徵抓取盒;第三步通過提取出這些抓去盒中的特徵進行目標識別,最後,在識別出的這些結果中運用非極大值抑制選擇最佳的目標識別結果。

 

640?wx_fmt=png

 

所以其實SSD演算法核心思想與第一種演算法型別類似,都是從深度神經網路的不同層提取特徵,分別利用這些特徵進行迴歸預測。當然基於迴歸的目標檢測演算法是不能同候選區域目標檢測演算法那樣特別精確的,尤其是對畫面中一些小目標,同樣給出SSD演算法在VOC2007資料集上準確度的數值,為68%。

 

雖然比候選區域目標檢測演算法低那麼一丟丟,但是基本上效能沒有太大損失,此外,由於它是SingleShot,演算法的效率也是相當高的。

 

之前說到的兩種型別演算法,對於圖中目標的邊框、尺寸都是固定的,也就是說檢測演算法中目標邊框雖然數目特別多,但一旦邊框確定就無法改變,因此並不能適應場景變化。所以為了檢測出不同目標、不同場景,就需要準備出多種區域選擇框。然而大千世界紛繁多變,檢測目標在畫面中的大小更是差別巨大,如果能夠根據不同的情況在目標候選區域進行邊框調整,就可以做到適應各種各樣的環境了。

 

回到第三種演算法的介紹,也就是增強學習演算法,可以說場景適應性算是比較強的。增強學習演算法目標檢測可被看成不斷動態調整候選區域邊框的過程,這種演算法的典型代表是Q學習演算法。

 

640?wx_fmt=png

 

首先,通過影像進行特徵提取,可以通過一個CNN網路來完成,第二,主動搜尋,目的是根據不同的目標和場景調整搜尋的步長,並且結合歷史動作反饋的資訊,憑藉深度Q學習網路來預測下一步的動作,也就是通過演算法中設定一定的獎勵機制來判斷這個特徵提取邊框的大小變化以及上下左右移動是否有效。當網路中預測下一步動作完成後,再開始進行識別並最後輸出結果。因此,這類演算法的核心思想可以看成是由原來不可以改變大小的、靜態的特徵抓取框,變成了現在可變的動態抓取框,但這類演算法目前在VOC2007資料集上準確度的數值是46.1%,比較低。

 

原因主要是在進行邊框調整過程中很容易造成特徵抓取框和標定的區域差距比較大,這樣會嚴重影響模型的訓練效果,從而造成效能的下降;此外由於要進行主動搜尋和多次邊框的調整,所以演算法的計算也比較耗時。不過這種演算法唯一的好處是相對靈活,俗稱百搭。

 

最後總結下,可以看到,從速度上回歸目標檢測演算法是最快的,原因在於只需看一次圖片就能夠“一見鍾情”;而從精度角度而言,後續區域目標檢測演算法已經可以達到很高的精度水平了,然而回歸目標檢測演算法的能力也能夠做到和候選區域演算法比較接近的程度。

 

以上我們介紹的都是典型的基本演算法,最後從框架支援的角度來看,開發者很容易搭建候選區域檢測演算法和迴歸目標檢測演算法框架來實現。由於增強學習這種演算法的動態變化比較大,直接用框架來實現目前是有一定難度的,但如果大家對深度學習框架有所瞭解,其實目前已經有可支援深度Q網路的模型。

 

640?wx_fmt=png

 

三種演算法介紹完畢之後,究竟哪種演算法最適合人們熟知的自動駕駛場景呢?當然是迴歸目標檢測演算法。雖然在理論上候選區域目標檢測演算法能夠做到精確度特別高,但由於需要反覆觀測畫面,所以大大降低了檢測速度,特別是在自動駕駛領域中,需要進行高速反應來完成目標識別,在這個層面並不適合。

 

百度Apollo中深度學習的應用

 

第一點,關於車道線的檢測。目前百度Apollo採用了稱為分離車道線網路的結構,影像通過一個D9和一個空間卷積神經網路S-CNN完成對於道路上車道線的檢測和識別,整個網路的核心是下面展示的S-CNN,網路中用來增強對於行車時車道的檢測能力。S-CNN首先將特徵圖的行和列分別看成多個層級的形式。

 

同時採用順序卷積,非線性啟用函式以及求和操作形成一個深度神經網路,好處是將原來CNN隱藏層之間空間關係關聯起來,從而更好處理畫面中連續相關的目標,這個演算法特別對於行車時車道的目標檢測任務,精度很高,準確率高達96.53%。

 

640?wx_fmt=png

 

 

可以看出,傳統情況下都是在實際檢測過程中有一些干擾,使得在檢測過程中原來需要正確檢測出的畫素點和其他的畫素點發生了關聯,受到的周圍環境干擾比較大。

 

不過S-CNN就不一樣了,這是深度挖掘了前後線條間的相關性,避免這種情況出現,所以可以清晰的看到圖上檢測出來的電線杆和車道線都是比較粗和連續的。

 

針對百度Apollo和當前版本的百度Apollo對於車道線檢測效果的對比,很直觀看到,採用剛才提出的演算法以後,對於自動駕駛的視覺系統而言,效能提升非常明顯。原來路邊車道線模糊或者根本看不到車道線的地方現在通過引入新的分離的車道線檢測技術以後,可以看出Apollo在行使過程中可以準確檢測出車道線了。

 

640?wx_fmt=png

 

 

在Apollo2.5和3.0中,基於YOLO設計了一些單物攝像頭下的物體檢測神經網路,稱為Multi-Task YOLO 3D。因為它的最終輸出是單目攝像頭3D障礙物檢測的資訊,最後會輸出多於2D影像檢測的全部資訊,所以可以看到與普通的CNN網路檢測出來的效果並不一樣,這是立體的檢測結果,也就是說檢測出來的那個框結果是立體的。

 

640?wx_fmt=png

 

 

不同之處在於首先就是3D框輸出,其次它也會輸出相對障礙物所檢測出來的一些偏轉角,此外現在的Apollo3.5還包含物體的分割資訊,具有物體分割的功能,包括車道線的資訊,用來提供給定位模組等。

 

在Apollo檢測的事例中可以看到,演算法其實對於路邊的行人判斷還是比較準確的,可以在一堆繁忙的公路上清晰看到最終要檢測出來的某個行人。此外,Apollo單目攝像頭下的障礙物檢測速度是比較快的,特別是對繁忙路段和高速場景都是比較適配,檢測速度達到了30赫茲,也就是說每秒鐘可以檢測30張影像。

 

除此之外,Apollo還有一些相關功能,例如典型目標的檢測,包含了基於經典計算機視覺障礙的物體識別和基於深度學習的障礙物識別。基於經典計算機視覺的障礙物識別的計算複雜度比較低,單核CPU可以達到實現,同時因為複雜度比較低,訓練也比較快。此外,深度學習主要依賴GPU,當速度比較快,而且訓練資料足夠多的時候,可以得到最好的準確度。

 

百度深度學習框架對目標檢測的實操

 

為了方便開發者們的理解,我們以百度PaddlePaddle為例為大家介紹實際目標檢測中的可喜效果。

 

首先提出PaddlePaddle官方倉庫裡的MobileNet+SSD的檢測效果,這個模型可以從官方倉庫上下載,整個模型也非常適合移動端場景,演算法的流程和前面介紹的比較類似。

 

最初採用G網路MobileNet來抽取特徵,隨後利用前面介紹的SDD中的堆疊卷積盒來進行特徵識別,不同位置檢測不同大小、不同形狀的目標,最後再利用非極大值抑制篩選出最合適的識別結果,整個模型最重要的是對候選框資訊的獲取,包括框的位置、目標類別、置信概率三個資訊在內。

 

640?wx_fmt=png

 

 

具體如何獲取這些框的相關資訊呢?實際上PaddlePaddle已經提供了封裝好的API,使用時直接呼叫即可。我們呼叫這個函式,就是Multi_box_head,從MobileNet最後一層進行連線,用來生成SSD中的特徵抓取盒,其中包含所謂的四個返回值,分別是候選框邊界的精細迴歸、框內出現物體的置信度、候選框原始位置、候選框原始位置方差。實際上就是候選框的位置以及關於這些位置相對偏移的量。

 

如果把這些值進行輸出視覺化,首先給出的是出現物體的置信度,通常用框進行識別的過程中,一般認為框裡只近似保留一種,最後只會出現一類判斷結果。第一個值如果是最大的,就被認為屬於背景類,也就是說第一個張量,它的這個框的目標就是背景。接著把所有背景選出來之後,再把這些背景去掉,剩下來的自然而然就是畫面中要識別出來的目標。

 

640?wx_fmt=png

 

 

接下來利用Detection_output這一層,加入一個視覺化的邊框的操作,可以看到,藍色的表示人,紅色的表示摩托車,最後利用非極大值抑制的操作,把這些框當中多餘的框全部去掉,只保留最貼近檢測效果的框,也就是最後想要的結果。可以看到,經過非極大值抑制後,同類的摺疊框一般只保留概率較高的、重疊較小的,這就完成了最終的目標檢測。

 

640?wx_fmt=png

 

 

以上就是本次直播的分享內容,更多關於Apollo的技術乾貨,可以繼續關注開發者社群每月的課程分享。本次課程直播分享的PPT資料,可以關注Apollo開發者社群(Apollo_Developers)回覆“0228課程直播”獲取,同時也可以在GitHub上提出技術問題與我們互動,十分感謝大家。

相關文章