本次直播課程是由深度學習資深研究者-楊陽博士從百度Apollo自動駕駛感知技術出發(fā),講解環(huán)境感知中深度學習的實用性與高效性。
課程從Apollo 3.5感知技術介紹、自動駕駛中的目標檢測與識別、深度學習在目標檢測中的意義、Apollo中深度學習的應用、百度深度學習框架對目標檢測的實操五個方面著手,全面解讀深度學習在目標檢測中的運用。
以下是楊陽博士分享的全部內容,希望給各位開發(fā)者帶來更多的幫助。
首先,本次課程將以百度Apollo自動駕駛技術為出發(fā)點,詳解百度深度學習技術在Apollo自動駕駛目標檢測中的應用。其次,基于百度深度學習框架對目標檢測技術進一步探討,最后理論聯(lián)系實際,通過一個典型案例體驗百度深度學習在環(huán)境感知中的實用性與高效性。
簡要了解一下自動駕駛
首先我們可以從安全駕駛角度來簡單了解自動駕駛的重要性。為什么我們需要自動駕駛?這里羅列了一些自動駕駛的優(yōu)勢,除了減少交通事故、節(jié)省燃料外,還涉及到獲得更多自主休息的時間。此外,自動駕駛技術還有很多其它優(yōu)點,例如可以輕輕松松停車,讓老人開車相對更安全一些。
表中給出了全球對于自動駕駛技術的評級,包括從純粹的人工駕駛L0級到高度的自動駕駛L4級。不過目前各國重點研發(fā)的還是有條件的自動駕駛,例如L3級的自動駕駛以及高度的自動駕駛L4級,完全的自動駕駛(L5級)目前還沒有辦法預測。
其中一些企業(yè)推出了有條件的自動駕駛,還有一些停留在部分自動駕駛L2級和輔助自動駕駛L1級的測試階段,暫未投入到商用。
不過值得高興的一點,百度今年剛剛推出了L4級的自動駕駛車輛以及相關解決方案,相信未來在L5級的自動駕駛領域,我們國家一定會有所突破,實現(xiàn)L5級自動駕駛指日可待。
接下來我們探究自動駕駛車輛的基本組成,以百度Apollo3.5的無人駕駛車輛為例,明確整個自動駕駛車輛包括哪些部分。首先,車輛頂端應配置360度的3D掃描雷達,以及前排陣列攝像頭、后排攝像頭陣列,同時還包含GPS天線、前置雷達等。這些都是用來對周圍環(huán)境進行感知的。
感知結果得到實時處理后,就會產生大量數(shù)據(jù),從而匯總到車后端的實時處理系統(tǒng)中,也就是計算和存儲系統(tǒng),隨后做到汽車在行進過程中對車輛周圍環(huán)境的完全感知。如今的Apollo3.5,傳感器部分以及計算存儲系統(tǒng)還是相當完善的。從Apollo完整框架分析,我們可以看到上端是云端服務,下端三層屬于車端服務。
全新的Apollo3.5技術框架對其中14個模塊進行了升級,主要分布在硬件系統(tǒng)以及軟件系統(tǒng)中。例如,3.5版本感知算法加上全新的傳感器升級,可以達到360度無死角的全面覆蓋。
云端服務方面,涉及例如高精度地圖、仿真數(shù)據(jù)平臺、安全模塊等。全新的基于多場景的決策和預測架構,使開發(fā)變得更加靈活與友好,所以一些開發(fā)者完全可以選擇這種軟件平臺和硬件平臺來進行相應開發(fā),同時我們也將90%仿真驅動開放,大力提升開發(fā)者們的效率以及研發(fā)安全性。
Apollo對于自動駕駛具備至關重要的四個部分,我們也給予相應升級,包括規(guī)劃、預測、感知以及定位。
如今Apollo3.5在感知能力上也得到了升級,可以做到通過增加盲區(qū)檢測傳感器以及雷達等方式,例如用于盲區(qū)檢測的傳感器套件以及新的128線的激光雷達拓展檢測范圍,同時包含3D定位算法以及目標檢測算法,表現(xiàn)更強大。
自動駕駛中的目標檢測與識別
所謂目標檢測,就是區(qū)分圖像或者視頻中的目標與其他不感興趣的部分,例如圖中的建筑物、樹林、盒子以及瓶子等,其實這些物體同畫面產生了一些明顯區(qū)分,那么如何讓計算機像人類一樣做到明確區(qū)分呢?這就涉及目標檢測,可以說讓計算機能夠區(qū)分出這些,是目標檢測的第一步。
目標檢測的第二步是什么?是讓計算機識別剛才區(qū)分出來的畫面究竟是什么,從而確定視頻或圖像中目標的種類。例如為了實現(xiàn)自動駕駛的目標,最初需要讓計算機認識交通目標,才能讓其成為真正的AI老司機。
如何建立一個高準確率、高召回率的物體識別系統(tǒng)?這實際是無人車感知的一個核心問題,而物體檢測更是重中之重,要求我們對不同傳感器設計不同的算法來準確檢測障礙物。例如Apollo技術框架中為3D設計了CNSEG(音譯)深度學習算法,還包括為二級圖像設計的YOLO3D深度學習算法等。
具體說到物體檢測,我們要求完成單幀障礙物的檢測,并借助傳感器內外參數(shù)標定轉換矩陣,將檢測結果統(tǒng)一影射到車身的座標系中,這種物體檢測算法既快速又準確。
引入深度學習究竟為何般?
有些小伙伴可能產生疑問,描述了這么多種方法,為什么一定要使用深度學習呢?或許將深度學習與傳統(tǒng)圖像處理PK下,就能明了其中緣由。
業(yè)界共知,傳統(tǒng)的目標檢測與識別算法分為三部分,包含目標特征提取、目標識別以及目標定位,其中涉及的典型算法就是基于組件檢測的DPM算法。
實際上DPM算法就是訓練出物體的梯度模型,然后對實際物體進行套用。但很顯然,人為提取出來模型種類還是有限的,面對現(xiàn)實中紛繁多變的大千世界,即便是后來人為成功提取了更多特征因素,也很難做到對圖像中全部細節(jié)進行詳細描述,因此類似DPM算法。
由于傳統(tǒng)目標檢測算法主要基于人為特征提取,對于更復雜或者更高階的圖像特征很難進行有效描述,所以限制了目標檢測的識別效果,這一點可以被認定是人為特征提取導致傳統(tǒng)算法的性能瓶頸。
同傳統(tǒng)的圖像處理方法不同,采用深度學習的方法進行圖像處理,最大的區(qū)別就是特征圖不再通過人工特征提取,而是利用計算機,這樣提取出來的特征會非常豐富,也很全面。
所謂的深度學習就是通過集聯(lián)多層的神經(jīng)網(wǎng)絡形成一個很深的層,當層數(shù)越多,提取出來的特征也就越多而且越豐富。所以在目標檢測和識別的過程中,最主要使用的深度學習特征提取模型就是深度卷積網(wǎng)絡,英文簡稱CNN。
為什么CNN圖像處理的方式比以前更好呢?究其原因,根本還是在于對圖像特征提取。例如,當我們使用多層進行特征提取的時候,其實有些層是針對圖像的邊緣輪廓來提取的,有些則是針對質地或者紋理來進行的,還有些是針對物體特征進行操作,總而言之不同的層有不同的分割方式。
回歸到目標檢測這個問題上,卷積神經(jīng)網(wǎng)絡的每一層如果能夠準確提取出所需特征,最后也就容易判斷許多。因此決定CNN的目標檢測和識別的關鍵就在于對每一層如何設計。
這可能就是八仙過海各顯神通的時刻了,不過不得不提及的是,一個著名的卷積神經(jīng)網(wǎng)絡AlexNet,這個網(wǎng)絡由多倫多大學的Hinton教授團隊于2012年提出,一經(jīng)提出立馬轟動了計算機的視覺領域,對其他相關行業(yè)后期也產生了深遠的影響。
AlexNet在整個算法處理的步驟,其實與之前提到的一般CNN的處理方式?jīng)]有本質區(qū)別,而且在國際上每年都會舉辦圖像檢測算法的比賽,AlexNet就在某屆圖像檢測比賽中獲得了冠軍。那一年AlexNet橫空出世,把當年的top5錯誤率硬生生降到了17%以下。
既然深度學習能夠在目標檢測中大顯身手,那么針對當前目標檢測的方法又有哪些?簡單將當前的方法進行分類,其實可以歸納為三種算法方案:
第一種是對于候選區(qū)域的目標檢測算法,典型的網(wǎng)絡是R-CNN和FasterR-CNN;第二個方案則是基于回歸的目標檢測算法,典型實現(xiàn)是YOLO和SSD,最后一種是基于增強學習的目標檢測算法,典型表現(xiàn)為深度Q學習網(wǎng)絡,但這幾種算法其實各有各的優(yōu)缺點。
由于今天的話題是目標檢測,自然就會想到在多種算法門派中如何進行選擇的問題,以及在自動駕駛領域中適合其研發(fā)的算法以及框架是什么。
深度學習框架呼之欲出
關于深度學習框架的選擇,大家可以嘗試用百度PaddlePaddle。就目前而言,市面上深度學習框架很多,包括Tensorflow、Caffe、PyTorch、MXNet等在內,而PaddlePaddle是眾多深度學習框架中唯一一款國內自主研發(fā)的。
它支持分布式計算,即多GPU多臺機器并行計算,同時還支持FPGA,與其他一些僅支持GPU的框架不同,支持FPGA是PaddlePaddle的一個亮點。
有了解稱,F(xiàn)PGA特有的流水線結構降低了數(shù)據(jù)同內存的反復交互,從而大大降低了運行功耗,這對于深度學習進行大規(guī)模的推斷有諸多好處。如果能將這一特性擴展到自動駕駛領域,對于未來降低汽車的發(fā)熱問題顯然有很大幫助。而PaddlePaddle中的PaddleMobile框架以及API的方式支持移動端設備,這樣就可以利用手機來完成想要的功能。
算法方案如何高效選擇?
先前提到的三種方案,首先來看候選區(qū)域目標檢測算法。這類算法的典型案例是FasterR-CNN。工作的基本步驟可歸納為首先提取圖像中的候選區(qū)域,隨后針對這些候選區(qū)域進行分類判斷,當然由于這些候選區(qū)域是通過算法搜索出來的,所以并不一定準確,因此還需要對選出的區(qū)域做位置回歸,隨之進行目標定位,最后輸出一個定位結果。總體來說,首先要先選擇、再判斷,最后剔除不想要的。
類似于找工作,選擇這種方法進行圖像目標檢測是可以做到精準定位以及識別,所以精度較高,不過由于需要反復進行候選區(qū)域的選擇,所以算法的效率被限制。
值得注意的一點,F(xiàn)asterR-CNN引入了一種稱為區(qū)域生成網(wǎng)絡RPN(音譯)的概念,用來進行算法加速??梢钥吹?,RPN實際上是在分類和特征圖,也就是卷積層出來之后的特征圖之間,這樣就解決了端到端的問題。
同時,我們可以利用GPU來進行網(wǎng)絡加速,從而提升檢測的速率,這也是為什么FasterR-CNN和R-CNN相比多了一個Faster的原因。此外,候選區(qū)域檢測這類算法在VOC2007數(shù)據(jù)集上,也可以達到檢測精度為73.2%的準確率。講到候選區(qū)域目標檢測算法,實際上前面候選區(qū)域的目標檢測算法主要是利用對于候選區(qū)域進行目標提取。
接下來介紹的第二個算法就是剛才提到的回歸目標檢測算法,它的特點是SingleShot,也就是只需觀測一次圖片就能進行目標的檢測以及識別,因此算法的效率非常高。
在此羅列了一個稱之為SSD的典型回歸目標檢測算法,這個算法分為四個步驟:第一步通過深度神經(jīng)網(wǎng)絡提取整個圖片的特征;第二步對于不同尺度的深度特征圖設計不同大小的特征抓取盒;第三步通過提取出這些抓去盒中的特征進行目標識別,最后,在識別出的這些結果中運用非極大值抑制選擇最佳的目標識別結果。
所以其實SSD算法核心思想與第一種算法類型類似,都是從深度神經(jīng)網(wǎng)絡的不同層提取特征,分別利用這些特征進行回歸預測。當然基于回歸的目標檢測算法是不能同候選區(qū)域目標檢測算法那樣特別精確的,尤其是對畫面中一些小目標,同樣給出SSD算法在VOC2007數(shù)據(jù)集上準確度的數(shù)值,為68%。
雖然比候選區(qū)域目標檢測算法低那么一丟丟,但是基本上性能沒有太大損失,此外,由于它是SingleShot,算法的效率也是相當高的。
之前說到的兩種類型算法,對于圖中目標的邊框、尺寸都是固定的,也就是說檢測算法中目標邊框雖然數(shù)目特別多,但一旦邊框確定就無法改變,因此并不能適應場景變化。所以為了檢測出不同目標、不同場景,就需要準備出多種區(qū)域選擇框。然而大千世界紛繁多變,檢測目標在畫面中的大小更是差別巨大,如果能夠根據(jù)不同的情況在目標候選區(qū)域進行邊框調整,就可以做到適應各種各樣的環(huán)境了。
回到第三種算法的介紹,也就是增強學習算法,可以說場景適應性算是比較強的。增強學習算法目標檢測可被看成不斷動態(tài)調整候選區(qū)域邊框的過程,這種算法的典型代表是Q學習算法。
首先,通過圖像進行特征提取,可以通過一個CNN網(wǎng)絡來完成,第二,主動搜索,目的是根據(jù)不同的目標和場景調整搜索的步長,并且結合歷史動作反饋的信息,憑借深度Q學習網(wǎng)絡來預測下一步的動作,也就是通過算法中設定一定的獎勵機制來判斷這個特征提取邊框的大小變化以及上下左右移動是否有效。當網(wǎng)絡中預測下一步動作完成后,再開始進行識別并最后輸出結果。因此,這類算法的核心思想可以看成是由原來不可以改變大小的、靜態(tài)的特征抓取框,變成了現(xiàn)在可變的動態(tài)抓取框,但這類算法目前在VOC2007數(shù)據(jù)集上準確度的數(shù)值是46.1%,比較低。
原因主要是在進行邊框調整過程中很容易造成特征抓取框和標定的區(qū)域差距比較大,這樣會嚴重影響模型的訓練效果,從而造成性能的下降;此外由于要進行主動搜索和多次邊框的調整,所以算法的計算也比較耗時。不過這種算法唯一的好處是相對靈活,俗稱百搭。
最后總結下,可以看到,從速度上回歸目標檢測算法是最快的,原因在于只需看一次圖片就能夠“一見鐘情”;而從精度角度而言,后續(xù)區(qū)域目標檢測算法已經(jīng)可以達到很高的精度水平了,然而回歸目標檢測算法的能力也能夠做到和候選區(qū)域算法比較接近的程度。
以上我們介紹的都是典型的基本算法,最后從框架支持的角度來看,開發(fā)者很容易搭建候選區(qū)域檢測算法和回歸目標檢測算法框架來實現(xiàn)。由于增強學習這種算法的動態(tài)變化比較大,直接用框架來實現(xiàn)目前是有一定難度的,但如果大家對深度學習框架有所了解,其實目前已經(jīng)有可支持深度Q網(wǎng)絡的模型。
三種算法介紹完畢之后,究竟哪種算法最適合人們熟知的自動駕駛場景呢?當然是回歸目標檢測算法。雖然在理論上候選區(qū)域目標檢測算法能夠做到精確度特別高,但由于需要反復觀測畫面,所以大大降低了檢測速度,特別是在自動駕駛領域中,需要進行高速反應來完成目標識別,在這個層面并不適合。
百度Apollo中深度學習的應用
第一點,關于車道線的檢測。目前百度Apollo采用了稱為分離車道線網(wǎng)絡的結構,圖像通過一個D9和一個空間卷積神經(jīng)網(wǎng)絡S-CNN完成對于道路上車道線的檢測和識別,整個網(wǎng)絡的核心是下面展示的S-CNN,網(wǎng)絡中用來增強對于行車時車道的檢測能力。S-CNN首先將特征圖的行和列分別看成多個層級的形式。
同時采用順序卷積,非線性激活函數(shù)以及求和操作形成一個深度神經(jīng)網(wǎng)絡,好處是將原來CNN隱藏層之間空間關系關聯(lián)起來,從而更好處理畫面中連續(xù)相關的目標,這個算法特別對于行車時車道的目標檢測任務,精度很高,準確率高達96.53%。
可以看出,傳統(tǒng)情況下都是在實際檢測過程中有一些干擾,使得在檢測過程中原來需要正確檢測出的像素點和其他的像素點發(fā)生了關聯(lián),受到的周圍環(huán)境干擾比較大。
不過S-CNN就不一樣了,這是深度挖掘了前后線條間的相關性,避免這種情況出現(xiàn),所以可以清晰的看到圖上檢測出來的電線桿和車道線都是比較粗和連續(xù)的。
針對百度Apollo和當前版本的百度Apollo對于車道線檢測效果的對比,很直觀看到,采用剛才提出的算法以后,對于自動駕駛的視覺系統(tǒng)而言,性能提升非常明顯。原來路邊車道線模糊或者根本看不到車道線的地方現(xiàn)在通過引入新的分離的車道線檢測技術以后,可以看出Apollo在行使過程中可以準確檢測出車道線了。
在Apollo2.5和3.0中,基于YOLO設計了一些單物攝像頭下的物體檢測神經(jīng)網(wǎng)絡,稱為Multi-Task YOLO 3D。因為它的最終輸出是單目攝像頭3D障礙物檢測的信息,最后會輸出多于2D圖像檢測的全部信息,所以可以看到與普通的CNN網(wǎng)絡檢測出來的效果并不一樣,這是立體的檢測結果,也就是說檢測出來的那個框結果是立體的。
不同之處在于首先就是3D框輸出,其次它也會輸出相對障礙物所檢測出來的一些偏轉角,此外現(xiàn)在的Apollo3.5還包含物體的分割信息,具有物體分割的功能,包括車道線的信息,用來提供給定位模塊等。
在Apollo檢測的事例中可以看到,算法其實對于路邊的行人判斷還是比較準確的,可以在一堆繁忙的公路上清晰看到最終要檢測出來的某個行人。此外,Apollo單目攝像頭下的障礙物檢測速度是比較快的,特別是對繁忙路段和高速場景都是比較適配,檢測速度達到了30赫茲,也就是說每秒鐘可以檢測30張圖像。
除此之外,Apollo還有一些相關功能,例如典型目標的檢測,包含了基于經(jīng)典計算機視覺障礙的物體識別和基于深度學習的障礙物識別?;诮?jīng)典計算機視覺的障礙物識別的計算復雜度比較低,單核CPU可以達到實現(xiàn),同時因為復雜度比較低,訓練也比較快。此外,深度學習主要依賴GPU,當速度比較快,而且訓練數(shù)據(jù)足夠多的時候,可以得到最好的準確度。
百度深度學習框架對目標檢測的實操
為了方便開發(fā)者們的理解,我們以百度PaddlePaddle為例為大家介紹實際目標檢測中的可喜效果。
首先提出PaddlePaddle官方倉庫里的MobileNet+SSD的檢測效果,這個模型可以從官方倉庫上下載,整個模型也非常適合移動端場景,算法的流程和前面介紹的比較類似。
最初采用G網(wǎng)絡MobileNet來抽取特征,隨后利用前面介紹的SDD中的堆疊卷積盒來進行特征識別,不同位置檢測不同大小、不同形狀的目標,最后再利用非極大值抑制篩選出最合適的識別結果,整個模型最重要的是對候選框信息的獲取,包括框的位置、目標類別、置信概率三個信息在內。
具體如何獲取這些框的相關信息呢?實際上PaddlePaddle已經(jīng)提供了封裝好的API,使用時直接調用即可。我們調用這個函數(shù),就是Multi_box_head,從MobileNet最后一層進行連接,用來生成SSD中的特征抓取盒,其中包含所謂的四個返回值,分別是候選框邊界的精細回歸、框內出現(xiàn)物體的置信度、候選框原始位置、候選框原始位置方差。實際上就是候選框的位置以及關于這些位置相對偏移的量。
如果把這些值進行輸出可視化,首先給出的是出現(xiàn)物體的置信度,通常用框進行識別的過程中,一般認為框里只近似保留一種,最后只會出現(xiàn)一類判斷結果。第一個值如果是最大的,就被認為屬于背景類,也就是說第一個張量,它的這個框的目標就是背景。接著把所有背景選出來之后,再把這些背景去掉,剩下來的自然而然就是畫面中要識別出來的目標。
接下來利用Detection_output這一層,加入一個可視化的邊框的操作,可以看到,藍色的表示人,紅色的表示摩托車,最后利用非極大值抑制的操作,把這些框當中多余的框全部去掉,只保留最貼近檢測效果的框,也就是最后想要的結果。可以看到,經(jīng)過非極大值抑制后,同類的折疊框一般只保留概率較高的、重疊較小的,這就完成了最終的目標檢測。
-
自動駕駛
+關注
關注
784文章
13838瀏覽量
166537 -
Apollo
+關注
關注
5文章
342瀏覽量
18471 -
深度學習
+關注
關注
73文章
5504瀏覽量
121229
原文標題:深度學習在自動駕駛感知領域的應用
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論