小議車輛環(huán)境視覺基礎(chǔ)前視感知
前言
無論是AD/ADAS還是智能網(wǎng)聯(lián)車,前視感知都是其最基礎(chǔ)和重要的能力之一。自動(dòng)駕駛(AD)是前幾年的熱門話題。今天雖然稍微降溫下來一些,但仍是大家關(guān)注的重點(diǎn)之一,畢竟它是人類長(zhǎng)久以來的夢(mèng)想之一。眾所周知,美國汽車工程師學(xué)會(huì)(SAE)將自動(dòng)駕駛分為L(zhǎng)0~L5共六個(gè)級(jí)別。其中L3及以上允許由系統(tǒng)在限定或不限定條件下完成所有的駕駛操作;而L2及以下還是需要由人類駕駛員一直保持駕駛狀態(tài),因此大多還屬于高級(jí)駕駛輔助系統(tǒng)(ADAS),如車道偏離預(yù)警(LDW),前碰撞預(yù)警(FCW),自適應(yīng)巡航(ACC),緊急自動(dòng)剎車(AEB),車道保持輔助(LKA),交通標(biāo)志識(shí)別(TSR),自動(dòng)泊車(AP)等。和大多數(shù)智能機(jī)器人一樣,自動(dòng)駕駛的處理流程可分為三個(gè)階段:感知、決策、執(zhí)行。因此一旦感知出了問題,那后面基本就涼了。類似地,ADAS或AR導(dǎo)航也強(qiáng)依賴于對(duì)環(huán)境的感知。沒有準(zhǔn)確且實(shí)時(shí)的感知能力,上層做的再炫酷也容易成為雞肋。ADAS和AD間的界線并沒那么清晰,前者可看作到后者的過渡產(chǎn)品,因此很多技術(shù)是通用的。前視感知是個(gè)非常大的話題,因此本文主要聚焦在一些最為基礎(chǔ)和通用的前視感知能力上。
2.業(yè)界
本節(jié)我們從工業(yè)界和學(xué)術(shù)界兩個(gè)方面簡(jiǎn)要聊下業(yè)界的相關(guān)情況。它們各有優(yōu)缺點(diǎn),學(xué)術(shù)界涌現(xiàn)出更前沿更先進(jìn)的方法,且指標(biāo)明確,易于定量比較,但方法往往專注于單點(diǎn),且對(duì)實(shí)際產(chǎn)品中的各種約束(如計(jì)算資源)考慮不多;而工業(yè)界直接面對(duì)產(chǎn)品,更多地考慮實(shí)用性和整體性。但采用的指標(biāo)、數(shù)據(jù)不透明,難以衡量和比較。只有全方面的了解,通過產(chǎn)學(xué)研的加速融合,才能打造更加完善、更好用戶體驗(yàn)的產(chǎn)品。
ADAS有著幾十年的發(fā)展歷史。國內(nèi)外都有一大批優(yōu)秀的廠商。這幾年,隨著國家駕駛安全政策的推動(dòng)和自動(dòng)駕駛技術(shù)受到熱捧,該領(lǐng)域出現(xiàn)了快速的增長(zhǎng)。從老牌勁旅Bosch、Continental、Aptiv,Mobileye等,到一批相對(duì)年輕但很有競(jìng)爭(zhēng)力的公司如Maxieye、Minieye、魔視、極目、縱目、Nauto等,這是一個(gè)既成熟,又充滿機(jī)遇的市場(chǎng)。根據(jù)中投顧問的《2017-2021年中國汽車高級(jí)駕駛輔助系統(tǒng)(ADAS)市場(chǎng)深度調(diào)研及投資前景預(yù)測(cè)報(bào)告》,ADAS年復(fù)合增長(zhǎng)率將達(dá)35%,2020年中國市場(chǎng)可實(shí)現(xiàn)近800億市場(chǎng)空間。近幾年,車載AR導(dǎo)航將傳統(tǒng)的ADAS功能與導(dǎo)航功能、AR技術(shù)及HUD進(jìn)行了融合,帶來了更直觀和人性化的用戶體驗(yàn),成為了市場(chǎng)的熱點(diǎn)。在實(shí)現(xiàn)方式上,各家在傳感器配置上也各有不同,有攝像頭、毫米波雷達(dá)、激光雷達(dá)等。其中,基于攝像頭的視覺方案由于其成本可控、算法成熟等優(yōu)點(diǎn),使用最為廣泛。其中的主要代表如Mobileye和Tesla Autopilot都是主要基于視覺的方案。
圖1 Tesla Autopilot(來自https://www.youtube.com/watch?v=24dRkHdpEPo)
圖2 Mobileye(來自https://www.mobileye.com/our-technology/)
雖然ADAS細(xì)分功能眾多,但很多功能功能(LDW,F(xiàn)CW,LKA,ACC等)都依賴于對(duì)前方環(huán)境中幾個(gè)基本對(duì)象的檢測(cè)和識(shí)別,即車道線、物體(包括車輛、行人、障礙物、交通燈、交通標(biāo)識(shí)等)、可行駛區(qū)域,因此本文也會(huì)主要聚集在這幾類對(duì)象的檢測(cè)識(shí)別上。在準(zhǔn)確率上,各家的產(chǎn)品往往很難量化及橫向比較,盡管大家的宣傳中常會(huì)出現(xiàn)“準(zhǔn)確率>XX%”或者“誤報(bào)率/漏報(bào)率<X%”這樣的提法。但事實(shí)上由于指標(biāo)定義和數(shù)據(jù)集的差異,很難做到“apples to apples”的對(duì)比。有些比較實(shí)在的會(huì)采用相對(duì)指標(biāo),比如與行業(yè)標(biāo)桿(如Mobileye)在同樣的數(shù)據(jù)集上做橫向?qū)Ρ取_@樣會(huì)更有說服力。但因?yàn)樗脭?shù)據(jù)集未公開,別人也很難嚴(yán)格橫向比較。在性能上,由于ADAS對(duì)檢測(cè)的實(shí)時(shí)性要求非常高,所以很多至少會(huì)做到15 FPS以上。隨著深度學(xué)習(xí)的興起,越來越多的ADAS廠商也將基于傳統(tǒng)CV的方案逐漸過渡為基于深度學(xué)習(xí)的方案。深度神經(jīng)網(wǎng)絡(luò)(DNN)的推理需要很大的計(jì)算量,而ADAS不像高級(jí)自動(dòng)駕駛平臺(tái)配備強(qiáng)大的計(jì)算平臺(tái),因此業(yè)界的趨勢(shì)之一是利用專用硬件(如FPGA或ASIC芯片)來進(jìn)行加速。
在學(xué)術(shù)界,自動(dòng)駕駛一直是經(jīng)久不衰的熱點(diǎn)之一。這些方法上的創(chuàng)新很多同樣也可以用于ADAS和AR導(dǎo)航中。我們知道,2012年以來深度學(xué)習(xí)的快速發(fā)展使其成為機(jī)器學(xué)習(xí)中的絕對(duì)主流?;谏疃葘W(xué)習(xí)的方法同樣也給自動(dòng)駕駛帶來了巨大變革?;趥鹘y(tǒng)CV算法的方法在泛化能力上容易遇到瓶頸。經(jīng)常是在一段路段調(diào)優(yōu)跑溜后,換一段路又需要大量調(diào)參。當(dāng)然,基于深度學(xué)習(xí)的方法也無法完全避免這個(gè)問題,但可以說是大大緩解了。學(xué)術(shù)界的優(yōu)點(diǎn)就是較為透明公開、且容易對(duì)比。新的方法就是需要在與其它方法比較中才能證明其優(yōu)異,因此歷史上通過競(jìng)賽的方式來推動(dòng)發(fā)展的例子不在少數(shù)。2004年開始,由DARPA主辦的幾場(chǎng)無人車挑戰(zhàn)賽開啟了無人車的新時(shí)代。在深度學(xué)習(xí)時(shí)代,各種針對(duì)路面環(huán)境檢測(cè)識(shí)別的榜單就如同ImageNet一樣,催生出一大批新穎的方法。其中針對(duì)車道線、物體和可行駛區(qū)域的比較典型的有:
KITTI:2013年由德國卡爾斯魯厄理工學(xué)院和豐田美國技術(shù)研究院聯(lián)合創(chuàng)辦,是一套非常全面的算法評(píng)測(cè)數(shù)據(jù)集。其中覆蓋了2D、3D物體檢測(cè),物體跟蹤,語義分割、深度估計(jì)等多種任務(wù)。但其數(shù)據(jù)集數(shù)量在現(xiàn)在看起來不算多,如物體檢測(cè)數(shù)據(jù)集訓(xùn)練集和測(cè)試集總共1W5張左右,車道檢測(cè)就比較尷尬了,只有幾百張。
CVPR 2017 TuSimple Competitions:2017年圖森未來主持的挑戰(zhàn)賽,分車道線檢測(cè)和速度估計(jì)兩個(gè)任務(wù)。其中車道線檢測(cè)數(shù)據(jù)集包含了幾千張主要是高速上的數(shù)據(jù)。雖然量不多,但因?yàn)楹臀矬w檢測(cè)這類通用任務(wù)相比,針對(duì)車道線檢測(cè)的競(jìng)賽很少,所以它至今在很多車道線檢測(cè)的論文上還會(huì)被當(dāng)成量化比較的重要參考。
CVPR 2018 WAD:由Berkeley DeepDrive主持,包含三項(xiàng)賽事:道路物體檢測(cè),可行駛區(qū)域分割和語義分割的域適應(yīng)。它基于BDD100K數(shù)據(jù)集。這是一個(gè)在數(shù)量和多樣性上都非常不錯(cuò)的用于自動(dòng)駕駛的數(shù)據(jù)集。其中用于物體檢測(cè)和可行駛區(qū)域分割的數(shù)據(jù)集共有10W張左右,其中訓(xùn)練集和驗(yàn)證集有約8W張。
Cityscapes:針對(duì)道路環(huán)境的經(jīng)典語義分割數(shù)據(jù)集,同時(shí)也提供了語義分割、實(shí)例分割和全景分割任務(wù)的榜單。數(shù)據(jù)集采自50個(gè)城市,包含了5K張精細(xì)標(biāo)注圖片和2W張較粗糙標(biāo)注圖片。考慮到語義標(biāo)注的成本相對(duì)大,這個(gè)數(shù)量已經(jīng)算比較大了。
其它的榜單還有很多,無法一一列舉。雖然由于大多榜單只關(guān)注準(zhǔn)確率導(dǎo)致其模型很難直接落到產(chǎn)品中,但其中確實(shí)也出現(xiàn)了非常多精巧的方法與創(chuàng)新的想法,為產(chǎn)品落地提供了有價(jià)值的參考。關(guān)于具體的方法我們留到后面專門章節(jié)進(jìn)行討論。
還有一些介于工業(yè)界與學(xué)術(shù)界之間的工作,它們將學(xué)術(shù)界的成果向產(chǎn)品逐漸轉(zhuǎn)化,提供了參考實(shí)現(xiàn)。比較典型的有開源自動(dòng)駕駛項(xiàng)目Apollo和Autoware。因?yàn)樗鼈冎饕嫦驘o人駕駛,所以會(huì)除了攝像頭之外,還會(huì)考慮激光雷達(dá)、毫米波雷達(dá)、高精地圖等信息。由于本文的scope,這里只關(guān)注基于攝像頭的對(duì)基礎(chǔ)對(duì)象的檢測(cè)。Apollo 2.5中采用的是一個(gè)多任務(wù)網(wǎng)絡(luò)檢測(cè)車道線與物體(之前讀代碼的一些筆記:自動(dòng)駕駛平臺(tái)Apollo 2.5閱讀手記:perception模塊之camera detector),對(duì)于車道線模型會(huì)輸出像素級(jí)的分割結(jié)果,然后通過后處理得到車道線實(shí)例及結(jié)構(gòu)化信息(相關(guān)代碼閱讀筆記:自動(dòng)駕駛平臺(tái)Apollo 3.0閱讀手記:perception模塊之lane post processing);物體檢測(cè)是基于Yolo設(shè)計(jì)的Yolo 3D,除了輸出傳統(tǒng)的2D邊界框,還會(huì)輸出3D物體尺寸及偏轉(zhuǎn)角。版本3.0(官方介紹:perception_apollo_3.0)中加入了whole lane line特性,提供更加長(zhǎng)距的車道線檢測(cè)。它由一個(gè)單獨(dú)的網(wǎng)絡(luò)實(shí)現(xiàn)。3.5中將物體與車道線檢測(cè)網(wǎng)絡(luò)徹底分離,車道線模型稱為denseline。最新的5.0(官方介紹:perception_apollo_5.0)中又引入DarkSCNN模型,它基于Yolo中的backbone Darknet,并引入了Spatial CNN(后面再介紹),同時(shí)該網(wǎng)絡(luò)中還加入了對(duì)滅點(diǎn)的檢測(cè)。Autoware中車道線用的是傳統(tǒng)CV的方法,物體檢測(cè)基于攝像頭部分使用的是SSD和YOLO等基于深度學(xué)習(xí)的方法(官方介紹:Overview)。
3.方法
我們知道,深度學(xué)習(xí)有三大基石:數(shù)據(jù)、算法和算力。對(duì)于基礎(chǔ)前視感知場(chǎng)景,我們也從這三個(gè)維度來聊一下。在此之前,我們先列下本文關(guān)注的單目基礎(chǔ)感知主要流程:
圖3 基礎(chǔ)前視感知簡(jiǎn)要流程
從圖片流輸入,大致經(jīng)歷預(yù)處理、檢測(cè)模型推理和后處理三個(gè)階段:
預(yù)處理:這一階段主要是做必要的數(shù)據(jù)處理,為后面的檢測(cè)準(zhǔn)確好數(shù)據(jù)。如一些攝像頭進(jìn)來的視頻流是YUV格式,而深度神經(jīng)網(wǎng)絡(luò)模型輸入多是RGB格式,需要進(jìn)行轉(zhuǎn)換。此外,很多模型會(huì)要求輸入數(shù)據(jù)作歸一化。另外,為了減少計(jì)算量,一般還會(huì)對(duì)輸入的圖像進(jìn)行縮放和ROI的提取。
檢測(cè)模型推理:這一階段主要是做深度神經(jīng)網(wǎng)絡(luò)的推理。對(duì)于要同時(shí)完成多個(gè)任務(wù)的場(chǎng)景,我們一般會(huì)使用多任務(wù)網(wǎng)絡(luò)。即每個(gè)任務(wù)對(duì)應(yīng)一個(gè)網(wǎng)絡(luò)分支輸出,它們共享用于特征提取的backbone(按經(jīng)驗(yàn)很多時(shí)候backbone會(huì)占大部分的計(jì)算量)。近年學(xué)術(shù)界也出現(xiàn)一些對(duì)不同類型任務(wù)比較通用的backbone結(jié)構(gòu)。
后處理:這一階段是將前面推理得到的結(jié)果進(jìn)行進(jìn)一步的處理,以傳到后面的決策或展示模塊。常見的對(duì)于車道線需要濾除噪點(diǎn),聚類,曲線擬合,濾波(如Kalman filter)等;對(duì)物體檢測(cè)常見的有非極大值抑制(NMS)和跟蹤等;對(duì)可行駛區(qū)域,需要將分割結(jié)果轉(zhuǎn)為多邊形并確定其位置類別。
注意這里只畫了簡(jiǎn)化的部分流程。實(shí)際場(chǎng)景中,可能還需要考慮非常多其它元素,比如:
相機(jī)標(biāo)定(Camera calibration):我們?cè)趯W(xué)車考“S彎”或者“單邊橋”等項(xiàng)目時(shí),教練往往會(huì)告訴我們一些小技巧,如通過雨刮器的位置來估計(jì)輪胎的位置。這種技巧其實(shí)比較脆弱,因?yàn)樽蔚恼{(diào)整,人的高矮都會(huì)影響其精確度。那在ADAS/AD場(chǎng)景中如何告訴機(jī)器以高精度做這件事呢,就是通過相機(jī)校準(zhǔn)。這本質(zhì)是做圖像坐標(biāo)和世界坐標(biāo)之間的轉(zhuǎn)換。另外,有了校準(zhǔn)參數(shù),我們還可以用它做逆透視映射(IPM),消除透視帶來的影響,方便車道線檢測(cè)及物體跟蹤等模塊。
光流(Optical flow):每一幀都檢測(cè)會(huì)帶來很大的計(jì)算開銷。有時(shí)我們會(huì)通過光流算法來計(jì)算圖像中像素點(diǎn)的瞬時(shí)速度,從而估計(jì)已檢測(cè)對(duì)象在當(dāng)前幀的位置。這樣一方面能有效減少計(jì)算量,另一方面還能用于物體的跟蹤。
滅點(diǎn)(Vanishing point):我們知道,由于透視關(guān)系,平行的線(如車道線)在遠(yuǎn)處會(huì)交到一點(diǎn),稱為消失點(diǎn)或滅點(diǎn)。這個(gè)點(diǎn)對(duì)于車道檢測(cè)或最后的可視化都有幫助。在直線的情況下,我們可以通過車道線的交點(diǎn)來估計(jì)滅點(diǎn),但如果車道線是不太規(guī)則的曲線,就比較麻煩,需要通過更復(fù)雜的方法進(jìn)行估計(jì)。
測(cè)距:不少ADAS功能中都需要確定前方物體的距離。常用毫米波和超聲波雷達(dá)做距離檢測(cè)。而在純視覺方案中,雙目方案是根據(jù)視差來估計(jì)距離,原理就像人的兩只眼睛一樣。而對(duì)于單目方案就比較tricky一些,需要檢測(cè)物體后根據(jù)物體下邊界結(jié)合相機(jī)標(biāo)定計(jì)算距離?,F(xiàn)在雖然有基于單張圖像的深度估計(jì)方法,但那個(gè)本質(zhì)上是靠的訓(xùn)練所獲得的先驗(yàn),用作ADAS里的FCW啥的感覺還是精度不太夠。
3D姿態(tài)估計(jì)(3D pose estimation):高級(jí)點(diǎn)的前視感知對(duì)物體檢測(cè)除了邊界框,還會(huì)估計(jì)其姿態(tài)。這對(duì)動(dòng)態(tài)障礙物的行為預(yù)測(cè)非常有幫助。
細(xì)粒度識(shí)別(Fine-grained recognition):對(duì)于一些識(shí)別的物體,如果它們的類別會(huì)影響到駕駛行為(如交通燈、交通標(biāo)志、車道線等),則我們需要將檢測(cè)結(jié)果中相應(yīng)部分拿出來進(jìn)一步對(duì)其進(jìn)行分類識(shí)別。
決策和展示:所有的檢測(cè)都是為了最后的決策和展示。如何自然地顯示(如通過AR展示的話如何與現(xiàn)實(shí)物體貼合),以及何時(shí)預(yù)警或介入控制都直接影響用戶體驗(yàn)。
另外可能還需要檢測(cè)路面上的指示標(biāo)記,以及對(duì)當(dāng)前場(chǎng)景是否支持作檢測(cè)判斷等等。由于篇幅有限和使內(nèi)容簡(jiǎn)潔,這些本文都暫不涉及。檢測(cè)對(duì)象上本文主要關(guān)注車道線、物體和可行駛區(qū)域。
3.1數(shù)據(jù)
我們知道,深度學(xué)習(xí)的最大優(yōu)勢(shì)之一就是能對(duì)大量數(shù)據(jù)進(jìn)行學(xué)習(xí)。這就意味它的效果很大程度上依賴于訓(xùn)練的數(shù)據(jù)量,而對(duì)于汽車的前視感知更是如此。因?yàn)槠嚨沫h(huán)境是開放的,沒有充分而多樣的數(shù)據(jù),模型便無法有效地泛化,那在各種corner case就可能出岔子。對(duì)于其它場(chǎng)景出岔也就出岔了,對(duì)AD或者ADAS來說那可能就危及生命安全了。數(shù)據(jù)集大體有兩類來源,一類是公開數(shù)據(jù)集;一類是自標(biāo)數(shù)據(jù)集。它們各自有優(yōu)缺點(diǎn)。
得益于自動(dòng)駕駛領(lǐng)域的蓬勃發(fā)展,近年來出現(xiàn)了很多優(yōu)質(zhì)的公開數(shù)據(jù)集。
包含車道線的主要有BDD100K,CULane,TuSimple Lane Challenge和LLAMAS等。
包含物體檢測(cè)的太多了,貌似是個(gè)道路環(huán)境數(shù)據(jù)集就會(huì)有。如BDD100K,KITTI,Udacity Driving Dataset,Waymo Open Datasets等。
包含可行駛區(qū)域的有BDD100K,KITTI等。雖然理論上語義分割的數(shù)據(jù)集(如Cityscapes)就包含了可行駛區(qū)域的標(biāo)注,但比較理想的標(biāo)注還應(yīng)該區(qū)分當(dāng)前車道和相鄰車道。
其它的還有不少數(shù)據(jù)集,網(wǎng)上有很多列表整理,這里就不重復(fù)了。雖然這些數(shù)據(jù)集很豐富,但有時(shí)未必能直接用上。一方面是它們的標(biāo)注之間有很大差異。其中一個(gè)差異點(diǎn)是標(biāo)注格式,這個(gè)其實(shí)還好辦,腳本基本能搞定。比較麻煩的是有時(shí)候標(biāo)注的規(guī)范和內(nèi)容會(huì)有出入。以車道線為例:有些是采用雙線標(biāo)法(如BDD100K),有些是單線標(biāo)法(如CULane,TuSimple Lane Challenge);有些是標(biāo)有限條(如CULane),有些是有多少標(biāo)多少(如BDD100K);有些對(duì)于虛線是像素級(jí)精確標(biāo)注(ApolloScape),有些是會(huì)將它們“腦補(bǔ)”連起來(CULane);有些標(biāo)了車道線類型(BDD100K),有些沒有標(biāo)(CULane)。而對(duì)于車輛和行人來說,不同數(shù)據(jù)集有不同的細(xì)分類。但本著人家標(biāo)注也不容易,能用上一點(diǎn)是一點(diǎn)的精神,可以盡可能地對(duì)它們進(jìn)行轉(zhuǎn)化,使它們一致并滿足特定需求。舉例來說,BDD100K中是雙線標(biāo)注,而其它多數(shù)是單線標(biāo)。為了統(tǒng)一,我們可以通過算法自動(dòng)找到匹配的線并進(jìn)行合并。自動(dòng)合并效果如下:
圖4 BDD100K數(shù)據(jù)集車道線標(biāo)注自動(dòng)轉(zhuǎn)換
公開的數(shù)據(jù)集雖然方便且量大,但往往沒法完全滿足需求。比如由于地域差異、攝像頭差異等會(huì)導(dǎo)致domain shift問題,另外有些針對(duì)性的case沒法覆蓋。公開數(shù)據(jù)集另一個(gè)問題是license。很多的公開數(shù)據(jù)集只能作研究用途,如果要商業(yè)用途是禁止或者需要專門再購買license的。因此,實(shí)際中往往還是需要請(qǐng)外包或自己標(biāo)數(shù)據(jù)。
另外,為了獲得更大量更多樣的數(shù)據(jù),業(yè)界有一些常用方法和方向,如:
數(shù)據(jù)增強(qiáng)(Data augmentation):最基本也很有效的擴(kuò)充數(shù)據(jù)集手段之一,在車輛環(huán)境中尤為重要。由于道路環(huán)境數(shù)據(jù)集需要多樣化,因此我們需要通過數(shù)據(jù)增強(qiáng)來模擬不同的光照、天氣、視角等變化。
自動(dòng)標(biāo)注/輔助標(biāo)注:雖然移動(dòng)端上由于算力有限,我們只能犧牲準(zhǔn)確率布署輕量級(jí)的網(wǎng)絡(luò),但我們可以訓(xùn)練重量級(jí)的精度較高的網(wǎng)絡(luò)模型用于對(duì)數(shù)據(jù)進(jìn)行自動(dòng)標(biāo)注。以下是一個(gè)重量級(jí)網(wǎng)絡(luò)(不是SOTA的)在BDD100K上訓(xùn)練后的檢測(cè)效果。雖然不是十全十美,但在有些小目標(biāo)上可能比老眼昏花的我還要標(biāo)得湊合。就算無法完全替代人肉標(biāo)注也可以作為輔助有效減少人工。
圖5 某重量級(jí)網(wǎng)絡(luò)在BDD100K數(shù)據(jù)集上檢測(cè)效果(左:檢測(cè)結(jié)果;右:Ground truth)
仿真器:利用仿真器來幫助自動(dòng)駕駛測(cè)試似乎已經(jīng)是一個(gè)普遍性做法了。隨著3D圖形技術(shù)和硬件的飛速發(fā)展,今天仿真器中的渲染效果已相當(dāng)逼真,已經(jīng)不像當(dāng)年賽車游戲里車后冒個(gè)煙還是“馬賽克”效果。因此,仿真器也有望用于產(chǎn)生可用于訓(xùn)練的數(shù)據(jù)。
生成對(duì)抗網(wǎng)絡(luò)(GAN):我們知道,GAN是最近幾年非常火熱的一個(gè)方向。GAN也在一些工作中用于訓(xùn)練數(shù)據(jù)的生成。雖然目前很多時(shí)候是看demo各種牛,但實(shí)際跑的時(shí)候可能就不是很理想。但不可否認(rèn)這是一個(gè)很有前途的方向,不少工作應(yīng)用它來緩解數(shù)據(jù)多樣化需求的問題。
3.2算法
針對(duì)前視感知中的幾類目標(biāo),算法是不同的。另一方面,我們知道深度學(xué)習(xí)的視覺領(lǐng)域研究比較多的任務(wù)是:圖片識(shí)別、物體檢測(cè)、圖像分割(包括語義分割、實(shí)例分割、全景分割)。那么問題來了,如何將對(duì)現(xiàn)有任務(wù)的方法充分應(yīng)用來滿足前視感知的需求?如果實(shí)在不合適如何調(diào)整?
3.2.1車道線
首先是車道線檢測(cè),這可能是幾類檢測(cè)目標(biāo)中最特殊的,所以占的筆墨也會(huì)相對(duì)多些。它的特點(diǎn)是形狀狹長(zhǎng)(可能跨越大半張圖片),并且形態(tài)多變(可能是直線也可能是曲線,還可能交叉等),容易與路面標(biāo)識(shí)混淆,另外還需要區(qū)分實(shí)例?,F(xiàn)有物體檢測(cè)的方法不太適合這種形狀的東西。我們知道,在深度學(xué)習(xí)占領(lǐng)視覺領(lǐng)域前,車道線檢測(cè)多采用傳統(tǒng)CV的方法。Udacity(其聯(lián)合創(chuàng)始人Sebastian Thrun是自動(dòng)駕駛界大神)上有一個(gè)自動(dòng)駕駛課程。其中有作業(yè)就是車道線檢測(cè),因此網(wǎng)上有很多這個(gè)作業(yè)的實(shí)現(xiàn)。其中比較關(guān)鍵的幾步是通過邊緣檢測(cè)算法(如Canny,Sobel算子)得到邊緣,然后通過Hough transform檢測(cè)直線(如果假設(shè)車道線為直線),或者經(jīng)過IPM得到鳥瞰視圖后通過滑窗搜索得到車道線上的像素點(diǎn),最后多項(xiàng)式曲線擬合輸出。這里邊幾乎每一步都有不少參數(shù),而且各步相互影響,如果場(chǎng)景很多樣化的話調(diào)參就可能會(huì)比較酸爽,另一方面它對(duì)于車道線不完整的情況(如因遮擋或磨損)表現(xiàn)不好。因此,這已經(jīng)不是目前的主流,后面業(yè)界逐漸過渡到基于深度學(xué)習(xí)的方法。
2015年,深度學(xué)習(xí)風(fēng)頭正勁,Stanford、Twitter等機(jī)構(gòu)聯(lián)合發(fā)表的論文討論了將CNN應(yīng)用到高速環(huán)境的車道線和車輛檢測(cè)中[1]。它使用當(dāng)時(shí)物體檢測(cè)的方法[2]來檢測(cè)車道線。因?yàn)檐嚨谰€很長(zhǎng)條,因此被分成多個(gè)線段,每個(gè)線段被當(dāng)成物體來檢測(cè)。最后通過DBSCAN進(jìn)行聚類得到車道線實(shí)例。同期另外一條思路是將車道線檢測(cè)當(dāng)作語義分割任務(wù)。當(dāng)時(shí)語義分割領(lǐng)域有了FCN[3]、SegNet[4]和DeepLab[5]等早期經(jīng)典網(wǎng)絡(luò)。結(jié)合一些包含車道線標(biāo)注的語義分割數(shù)據(jù)集便可以進(jìn)行車道線檢測(cè)。如論文[6]試圖將包括車道線在內(nèi)的多種檢測(cè)任務(wù)在分割任務(wù)中一把搞定。然而故事還遠(yuǎn)沒有結(jié)束,這里還存在以下兩個(gè)比較大的挑戰(zhàn),接下去幾年的工作也是主要圍繞這兩點(diǎn)來展開:
繁瑣的后處理:現(xiàn)實(shí)中我們?yōu)榱撕竺娴臎Q策還需要知道哪條是當(dāng)前車所在車道(Ego lane)的左、右車道線和相鄰車道的車道線。另外,因?yàn)檐嚨谰€往往不完整,因此還需要得到車道線的結(jié)構(gòu)化表示(如多項(xiàng)式或樣條曲線)以便做插值。這樣,單就語義分割的結(jié)果還不夠。以往常見的做法是將分割結(jié)果進(jìn)行聚類得到實(shí)例,然后通過一些后處理判斷其是哪條車道。另外,為了得到結(jié)構(gòu)化表示還需要對(duì)這些點(diǎn)進(jìn)行多項(xiàng)式擬合等操作。理想的方法是簡(jiǎn)化或完全去除這些后處理,實(shí)現(xiàn)真正意義上end-to-end的檢測(cè)。
復(fù)雜的環(huán)境:路面環(huán)境復(fù)雜常常導(dǎo)致圖像中的車道線殘缺不全。如天氣因素,其它車輛遮擋,陰影和光照,磨損等等。另外的一個(gè)比較大的干擾來自于地面上的箭頭指示和漢字,僅看局部圖像的話人也難以區(qū)分。因此如果無法有效利用全局上下文信息很難對(duì)它們進(jìn)行排除。對(duì)這些因素做到足夠魯棒是通往實(shí)用產(chǎn)品的必要條件。
來自三星的論文[7]將車左右兩條車道線作為兩個(gè)類別(加上背景共三類),從而直接通過神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí),相當(dāng)于做了實(shí)例分割,從而簡(jiǎn)化了后處理。
2017年TuSimple主辦了車道線檢測(cè)競(jìng)賽,炸出不少好的方法,同時(shí)也成為了車道線檢測(cè)的重要benchmark之一。第一名來自香港中文大學(xué),它也是基于語義分割來做,并針對(duì)車道線這種狹長(zhǎng)的物體提出了Spatial CNN(SCNN)[8]來替代MRF/CRF來對(duì)空間關(guān)系進(jìn)行建模。另一個(gè)比較有意思的點(diǎn)是當(dāng)時(shí)競(jìng)賽提供的數(shù)據(jù)集才幾千張(標(biāo)注圖片約3.6K),因此數(shù)據(jù)可能會(huì)成為主要瓶頸之一,于是他們整了一個(gè)大規(guī)模的車道線的數(shù)據(jù)集CULane。該數(shù)據(jù)集共有13W多張。它比較貼近現(xiàn)實(shí)情況,涵蓋了白天、晚上、擁堵、陰影、光照過亮等9種場(chǎng)景。對(duì)于車道線的實(shí)例區(qū)分問題,SCNN由于限定最多檢測(cè)4條車道線,因此它可以把4條車道線當(dāng)4類物體來檢測(cè)。同時(shí),網(wǎng)絡(luò)還有一個(gè)專門的分支用于預(yù)測(cè)對(duì)應(yīng)的車道線是否存在。這樣便不需要聚類來提取實(shí)例。當(dāng)時(shí)的第二名來自佐治亞理工(Georgia Institute of Technology)等機(jī)構(gòu)。他們提出的方法[9]可以解決只能處理有限車道線的問題。它利用像素對(duì)之間的關(guān)系,通過對(duì)目標(biāo)函數(shù)的巧妙構(gòu)造,讓神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)像素的聚類信息。并且可以拓展到(理論上)無窮實(shí)例的場(chǎng)景。
2017年韓國KAIST和三星提出了VPGNet[10]。它是一個(gè)多任務(wù)網(wǎng)絡(luò),其中一個(gè)分支用于預(yù)測(cè)滅點(diǎn),它可以引導(dǎo)車道線的檢測(cè)。這在一些惡劣的天氣下可以有比較大的幫助。但這需要額外標(biāo)注的數(shù)據(jù)集。論文中提到他們建立了自己的數(shù)據(jù)集但沒有公開。
2018年,魯汶大學(xué)(KU Leuven)的論文提出LaneNet[11],它將車道線檢測(cè)作為一個(gè)實(shí)例分割問題。以前很多方法對(duì)于提取車道線實(shí)例是用聚類,而對(duì)于車道線這種狹長(zhǎng)的物體很難定義一個(gè)好的距離測(cè)度用于聚類。這篇論文的最大特色就是在傳統(tǒng)語義分割分支外還加了一個(gè)pixel embedding分支,用于對(duì)輸入圖像中的每個(gè)點(diǎn)得到其N維的embedding,這個(gè)分支是基于其實(shí)例信息訓(xùn)練的。語義分割輸出的像素結(jié)合pixel embedding信息,作聚類后便可得到車道線的實(shí)例信息,最后通過多項(xiàng)式擬合輸出。魯汶大學(xué)這個(gè)團(tuán)隊(duì)次年在論文[12]中把預(yù)測(cè)曲線與ground truth曲線間的面積作為損失函數(shù),將擬合改造成可微分操作,從而讓神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)擬合曲線的參數(shù)。前面LaneNet這篇論文另一個(gè)比較有特色的點(diǎn)是H-Net。IPM有利于車道線的多項(xiàng)式擬合。因?yàn)榇蠖鄶?shù)彎曲的車道線在鳥瞰視圖下用二次曲線就夠了,但在透視視圖下卻需要更高階曲線才能擬合。而這個(gè)變換的參數(shù)一般需要通過相機(jī)標(biāo)定。但是這個(gè)參數(shù)可能根據(jù)地形、坡道因素不同。因此最好可以根據(jù)輸入動(dòng)態(tài)調(diào)整。H-Net采用通過神經(jīng)網(wǎng)絡(luò)來預(yù)測(cè)的方式。這條思路上類似的工作還有來自2018年GM的3D-LaneNet[13]。該方法以end-to-end方式直接預(yù)測(cè)3D的車道線。網(wǎng)絡(luò)采用dual-pathway結(jié)構(gòu)。一條對(duì)應(yīng)普通透視圖,估計(jì)逆透視變換參數(shù)。該參數(shù)結(jié)合前面的feature map與另一條對(duì)應(yīng)鳥瞰視角的網(wǎng)絡(luò)中feature map結(jié)合,最終輸出3D車道線。不過畢竟帶3D車道線標(biāo)注的數(shù)據(jù)集不好弄,于是他們自己搞了個(gè)高速場(chǎng)景下的合成數(shù)據(jù)集作了實(shí)驗(yàn)。因此該方法在真實(shí)場(chǎng)景下的效果還需要進(jìn)一步驗(yàn)證。
杜克大學(xué)和地平線提出的LaneNet[14](也叫LaneNet,但此LaneNet非彼LaneNet)將車道線檢測(cè)分為兩個(gè)階段-lane edge proposal和lane line localization。前者是一個(gè)語義分割網(wǎng)絡(luò);后者是比較特色的地方,其網(wǎng)絡(luò)基于LSTM,輸出為各條車道線的信息。因此,某種程度上替代了很大部分后處理。
TomTom公司提出的EL-GAN[15]通過GAN的思想來改善語義分割的結(jié)果。單純的語義分割應(yīng)用于車道線所得結(jié)果不會(huì)考慮其平滑或是鄰域一致性等。EL-GAN在GAN的基礎(chǔ)上添加了embedding loss通過discriminator讓語義分割的輸出更接近ground truth。直觀上這樣語義分割的結(jié)果就會(huì)更符合車道線的拓?fù)湫螤钐卣?,從而減化了后處理的工作。
我們知道,對(duì)于視覺任務(wù),有兩個(gè)比較通用的思路是可以幫助提高準(zhǔn)確率的。一個(gè)是注意力(Attention)機(jī)制。今年由香港中文大學(xué)等機(jī)構(gòu)發(fā)表的論文[16]提出了Self Attention Distillation(SAD)方法。它基于注意力蒸餾(Attention distillation)的思想,將之改造為自蒸餾,從而不依賴傳統(tǒng)知識(shí)蒸餾中的teacher model。網(wǎng)絡(luò)中后面的層的feature map(具有更豐富上下文信息)作為監(jiān)督信息幫助前面的層訓(xùn)練。前面的層學(xué)到更好的表征后又會(huì)改善后面的層,構(gòu)成良性循環(huán)。另一個(gè)是用RNN結(jié)合前后幀信息。武漢大學(xué)和中山大學(xué)的論論文[17]結(jié)合了CNN和RNN來使用連續(xù)幀進(jìn)行車道線檢測(cè)。網(wǎng)絡(luò)結(jié)構(gòu)中在由CNN組成的encoder和decoder間放入ConvLSTM用于時(shí)間序列上特征的學(xué)習(xí)。由于結(jié)合了前面幀的信息,在車道線磨損、遮擋等情況下可以做到更加魯棒。
3.2.2道路物體
然后是物體檢測(cè),這塊的算法可以說是相當(dāng)豐富。因?yàn)槲矬w檢測(cè)的應(yīng)用范圍非常廣,因此它幾乎伴隨著計(jì)算機(jī)視覺領(lǐng)域的發(fā)展。相關(guān)的survey很多(如[18],[19]等)。深度學(xué)習(xí)興起后,一大波基于深度神經(jīng)網(wǎng)絡(luò)的物體檢測(cè)算法被提出。SOTA以極快的速度被刷新。從two-stage方法到輕量的one-stage方法,從anchor-based方法到近年很火的anchor-free方法,從手工設(shè)計(jì)到通過自動(dòng)神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索,琳瑯滿目,相關(guān)的總結(jié)與整理也非常多。
對(duì)于道路環(huán)境來說,幾乎和通用物體檢測(cè)算法是通用的。如果要找些區(qū)別的話,可能汽車前視圖像中,由于透視關(guān)系,小物體會(huì)比較多。2018年CVPR WAD比賽其中有一項(xiàng)是道路環(huán)境物體檢測(cè)。第一名方案來自搜狗,根據(jù)網(wǎng)上介紹(給機(jī)器配上“眼睛”,搜狗斬獲CVPR WAD2018挑戰(zhàn)賽冠軍),其方案在Faster R-CNN的基礎(chǔ)上使用了CoupleNet,同時(shí)結(jié)合了rainbow concatenation。第二名方案來自北京大學(xué)和阿里巴巴,提出了CFENet[20]。經(jīng)典的one-stage物體檢測(cè)網(wǎng)絡(luò)SSD在多個(gè)scale下的feature map進(jìn)行預(yù)測(cè),使得檢測(cè)對(duì)物體的scale變化更加魯棒。小目標(biāo)主要是通過淺層的較大feature map來處理,但淺層特征缺乏包含高層語義的信息會(huì)影響檢測(cè)效果。CFENet針對(duì)前視場(chǎng)景中小物體多的特點(diǎn)對(duì)SSD進(jìn)行了改進(jìn),在backbone后接出的淺層上加入CFE和FFB網(wǎng)絡(luò)模塊增強(qiáng)淺層特征檢測(cè)小目標(biāo)的能力。
現(xiàn)實(shí)應(yīng)用中,物體檢測(cè)模型的輸出還需要經(jīng)過多步后續(xù)的處理。其中比較常見和重要的是NMS和跟蹤:
神經(jīng)網(wǎng)絡(luò)模型一般會(huì)輸出非常多的物體框的candidate,其中很多candidate是重疊的,而NMS的主要作用就是消除那些冗余的框。這個(gè)算子很多的推理框架不支持或支持不好,所以一般會(huì)放到模型推理外面作為后處理來做。在學(xué)術(shù)界NMS這幾年也出現(xiàn)了一些可以提高準(zhǔn)確率的變體。
跟蹤是理解物體行為的重要一環(huán)。比如幀1有車A和車B,幀2有兩輛車,我們需要知道這兩輛車哪輛是A,哪輛是B,或都不是。只有找到每個(gè)物體時(shí)間維度上的變化,才能進(jìn)一步做濾波,以及相應(yīng)的分析。比較常見的多物體跟蹤方法是SORT(Simple Online and Realtime Tracking)框架[21],或許它的準(zhǔn)確率不是那么出眾,但綜合性能等因素后還是不錯(cuò)的選擇,尤其是對(duì)于在線場(chǎng)景。結(jié)合通過CNN提取的外觀特征(在DeepSORT[22]中采用)和Kalman filter預(yù)測(cè)的位置定義關(guān)聯(lián)度的metric,將幀間物體的跟蹤作為二分圖匹配問題并通過經(jīng)典的匈牙利算法求解。前后幀物體關(guān)聯(lián)后通過Kalman filter對(duì)狀態(tài)進(jìn)行更新,可以有效消除檢測(cè)中的抖動(dòng)。
3.2.3可行駛區(qū)域
再來說下可行駛區(qū)域。開過車的同志們都知道咱們的很多路沒有那么理想的車道線,甚至在大量非結(jié)構(gòu)化道路上壓根兒就沒有車道線。在這些沒有車道線、或者車道線不清晰的地方,可行駛區(qū)域就可以派上用場(chǎng)。一般在可行駛區(qū)域中我們需要區(qū)分當(dāng)前車道和其它車道,因?yàn)樵撔畔?duì)后面的決策規(guī)劃非常有價(jià)值。
在這個(gè)任務(wù)上早期比較流行的榜單是KITTI的road/lane detection任務(wù)。很多論文都是拿它作benchmark,其榜單上有一些是有源碼的。不過那個(gè)數(shù)據(jù)量比較少,多樣化程度也不夠,要用它訓(xùn)練得泛化能力很強(qiáng)實(shí)在比較勉強(qiáng)。
2018年CVPR WAD比賽中一個(gè)專項(xiàng)是可行駛區(qū)域檢測(cè)。所用的BDD100K數(shù)據(jù)量相比豐富得多。當(dāng)時(shí)的冠軍方案是來自香港中文大學(xué)的IBN-PSANet。它的方案是結(jié)合了IBN-Net[23]和PSANet[24]。前者主要特色是結(jié)合了batch normalization(BN)和instance normalization(IN)。BN幾乎是現(xiàn)代CNN的標(biāo)配。它主要用于解決covariate shift問題,提高訓(xùn)練收斂速度;而IN可以讓學(xué)習(xí)到的特征不太受像顏色、風(fēng)格等外觀變化的影響。而結(jié)合了兩者的IBN可以吸收兩者的優(yōu)點(diǎn)。而PSANet的特色主要是提出了PSA結(jié)構(gòu),它本質(zhì)是一種注意力機(jī)制在視覺上的應(yīng)用。對(duì)于每一個(gè)像素,網(wǎng)絡(luò)學(xué)習(xí)兩個(gè)attention mask,一個(gè)對(duì)應(yīng)它對(duì)其它每個(gè)像素的影響,一個(gè)對(duì)應(yīng)其它每個(gè)像素對(duì)它的影響,從而使得分割可以充分考慮全局上下文信息。
可行駛區(qū)域檢測(cè)中對(duì)于語義分割的輸出比較粗糙,且形式不易于后面模塊處理,因此還需要經(jīng)過一些簡(jiǎn)單的后處理。比如先聚類,再計(jì)算各類簇的凸包,最后通過這些多邊形的位置關(guān)系便可以確定它們是當(dāng)前車道還是其它車道的可行駛區(qū)域。
值得一提的是,可行駛區(qū)域和車道線語義上是非常相關(guān)的,因此可以通過相互的幾何約束來提高準(zhǔn)確率。業(yè)界也有不少這方面的嘗試,越來越多的深度神經(jīng)網(wǎng)絡(luò)將它們進(jìn)行融合。
3.3優(yōu)化
從算法到產(chǎn)品最大的鴻溝之一便是性能優(yōu)化。移動(dòng)端設(shè)備有限的算力正在與多樣化算法的算力需求形成矛盾。這在之前寫的文章《淺談端上智能之計(jì)算優(yōu)化》中進(jìn)行過初步的討論。對(duì)于像ADAS這樣的場(chǎng)景實(shí)時(shí)性尤其重要。我們可以從文中提及的幾個(gè)角度進(jìn)行優(yōu)化。
首先,在網(wǎng)絡(luò)設(shè)計(jì)上我們?cè)赽ackbone上可以選擇這幾年經(jīng)典的輕量級(jí)網(wǎng)絡(luò)(如MobileNet系[25],[26],ShuffleNet系[27],[28],EfficientNet[29]等)。這些網(wǎng)絡(luò)一般在計(jì)算量上比重量級(jí)網(wǎng)絡(luò)有數(shù)量級(jí)上的減少,同時(shí)又可以保持準(zhǔn)確率不損失太多。另一方面,對(duì)于多個(gè)檢測(cè)任務(wù),由于輸入相同,我們一般會(huì)使用多分支的網(wǎng)絡(luò)結(jié)構(gòu)。每個(gè)任務(wù)對(duì)應(yīng)一個(gè)分支(head),它們共享同一個(gè)用于特征提取的backbone。按經(jīng)驗(yàn)來說,這個(gè)backbone占的計(jì)算一般會(huì)比較大,因此這樣可以節(jié)省下相當(dāng)可觀的計(jì)算開銷。但是這樣的多任務(wù)多分支網(wǎng)絡(luò)會(huì)給訓(xùn)練帶來困難。最理想的當(dāng)然是有全標(biāo)注的數(shù)據(jù)集,但這樣的數(shù)據(jù)集比較難獲得。對(duì)于這個(gè)問題,我們可以采取兩種方法:一種是如前面提的,靠重量級(jí)高準(zhǔn)確率網(wǎng)絡(luò)自動(dòng)標(biāo)注。如訓(xùn)練高準(zhǔn)確率的物體檢測(cè)模型給已有車道線標(biāo)注的數(shù)據(jù)集進(jìn)行標(biāo)注;另一種就是對(duì)帶特定標(biāo)注的數(shù)據(jù)輸入,訓(xùn)練對(duì)應(yīng)的部分(backbone和相應(yīng)的head)。
對(duì)于給定網(wǎng)絡(luò)結(jié)構(gòu),我們可以通過模型壓縮進(jìn)一步減少計(jì)算量。因?yàn)槠毡檎J(rèn)為推理時(shí)不需要訓(xùn)練時(shí)那樣復(fù)雜的模型和高的精度。模型壓縮有很多種方法,有量化、剪枝、知識(shí)蒸餾、低軼分解等等。常用的方法之一是量化。一般來說,將FP32轉(zhuǎn)為FP16是一種既比較安全收益又比較大的做法,然而在一些低端設(shè)備上我們還需要作更低精度(8位或以下)的量化。這時(shí)就得花更多精力在準(zhǔn)確率損失上了。量化又分為post-training quantization和quantization-aware training。前者使用方便,不需要訓(xùn)練環(huán)境,最多需要少量(幾百張)數(shù)據(jù)集作為量化參數(shù)calibration之用,但缺點(diǎn)是會(huì)對(duì)準(zhǔn)確率損失較大;而后者,需要在訓(xùn)練時(shí)插入特殊的算子用于得到量化所用參數(shù)及模擬量化行為。另一種常用的壓縮方法是網(wǎng)絡(luò)剪枝。根據(jù)網(wǎng)絡(luò)模型的敏感度分析,一些層稍作裁剪可能就會(huì)有大的準(zhǔn)確率損失,而另一些層進(jìn)行裁剪則準(zhǔn)確率損失不大,甚至還會(huì)使準(zhǔn)確率上升。這就給了我們簡(jiǎn)化模型從而減少計(jì)算量的機(jī)會(huì)。低軼分解本質(zhì)上是通過對(duì)矩陣的近似來減少矩陣運(yùn)算的計(jì)算量。知識(shí)蒸餾是一種很有意思的方法,就像現(xiàn)實(shí)中的老師教學(xué)生,通過teacher model來幫助訓(xùn)練student model。
網(wǎng)絡(luò)模型敲定后,就需要考慮性能優(yōu)化。深度的優(yōu)化是離不開硬件的考慮的。對(duì)于一些用于自動(dòng)駕駛的計(jì)算平臺(tái),可能直接就上像Nvidia的PX2這樣的高性能硬件平臺(tái)了。但對(duì)于普通車規(guī)硬件平臺(tái),肯定是扛不住這種成本的。這些常規(guī)車機(jī)平臺(tái)中一些稍高端的會(huì)有幾百GFLOPS的GPU處理能力,或其它DSP,NPU等計(jì)算硬件。這里我們一般會(huì)首選這些硬件做模型推理而非CPU。因?yàn)槿绻麑⑦@些計(jì)算密集型任務(wù)往CPU放,會(huì)和系統(tǒng)中其它任務(wù)頻繁搶占資源導(dǎo)致不穩(wěn)定的體驗(yàn)。而對(duì)于低端一些的平臺(tái)GPU基本只夠渲染,那只能放到CPU上跑,一般會(huì)用上面提到的量化方法將模型轉(zhuǎn)為8位整型,然后將推理綁定到固定的核上以防止影響其它任務(wù)。推理引擎有兩類選擇。對(duì)于一些有成熟推理引擎的硬件平臺(tái),使用廠商的引擎(如Intel有OpenVINO,高通有SNPE)通常是一個(gè)方便快捷的選擇;還有一種方法就是用基于編譯器的推理引擎,典型的如TVM。它以offline的方式將網(wǎng)絡(luò)模型編譯成可執(zhí)行文件并可進(jìn)行自動(dòng)的執(zhí)行參數(shù)優(yōu)化。至于哪個(gè)性能好,通常是case-by-case,需要嘗試。值得注意的是,上面選取的輕量型網(wǎng)絡(luò)一般是memory-bound的,因此優(yōu)化時(shí)需要著力優(yōu)化訪存。
如果平臺(tái)上有多種可以執(zhí)行神經(jīng)網(wǎng)絡(luò)算子的硬件,如CPU、GPU、NPU、DSP,那可以考慮通過異構(gòu)調(diào)度來提高硬件利用率,從而達(dá)到性能的優(yōu)化?,F(xiàn)在業(yè)界已有不少的異構(gòu)計(jì)算框架,如ONNXRuntime,Android NN runtime等。這里面,最關(guān)鍵核心的問題在于調(diào)度。對(duì)于單個(gè)網(wǎng)絡(luò)模型而言,先要對(duì)網(wǎng)絡(luò)進(jìn)行切分,然后分配到最合適的硬件上,然后在每個(gè)硬件上進(jìn)行本地調(diào)度。難點(diǎn)在于這個(gè)調(diào)度是NP-hard的,意味著對(duì)于實(shí)際中大規(guī)模問題,不可能在合理時(shí)間找到最優(yōu)解,而要找到盡可能優(yōu)的近似解是門大學(xué)問。業(yè)界出現(xiàn)了大量的方法,如精確算法、基于啟發(fā)式策略、元啟發(fā)式搜索和機(jī)器學(xué)習(xí)的方法。對(duì)于前視感知任務(wù)中的多分支模型,一個(gè)最簡(jiǎn)單而有效的做法就是將backbone以及各個(gè)head的分支作為子圖進(jìn)行切分和調(diào)度。如果要得到更優(yōu)的調(diào)度,則可以進(jìn)一步嘗試基于搜索和學(xué)習(xí)的方式。
4.小結(jié)
前視感知領(lǐng)域是一個(gè)小打小鬧容易但做好非常難的東西。它需要長(zhǎng)期的沉淀才能構(gòu)建起核心競(jìng)爭(zhēng)力和技術(shù)壁壘。我們看到今天行業(yè)龍頭Mobileye獨(dú)領(lǐng)風(fēng)騷,但少有人看到它在早期的執(zhí)著。Mobileye創(chuàng)立于1999年,但到2007年才開始盈利。類似的還有谷歌的無人駕駛車(差不多10年了),波士頓動(dòng)力的機(jī)器人(貌似27年了),還有許許多多這樣“耐得住寂寞”的公司。即使最后失敗,相信也會(huì)滋養(yǎng)出更大的輝煌。而一旦成功,便能奠定絕對(duì)的市場(chǎng)地位,讓其它競(jìng)爭(zhēng)者難望其項(xiàng)背。
可以看到,學(xué)術(shù)界的成果和產(chǎn)品之間還有不小的鴻溝。當(dāng)然其中的因素有很多,如成本、功耗等等,而其中最關(guān)鍵的因素之一是性能。傳統(tǒng)的方式很多時(shí)候會(huì)算法管算法,整好后拿去優(yōu)化,相互獨(dú)立,最多整幾輪迭代。而今天我們看到,兩者需要越來越多地相互融合,共同演進(jìn)。通過hardware-software co-design才能打造和打磨出更加完美的產(chǎn)品。它需要算法設(shè)計(jì)中便考慮對(duì)于特定平臺(tái)硬件上的友好性。舉例來說,為了更好的部署,網(wǎng)絡(luò)設(shè)計(jì)時(shí)最好就要考慮哪些算子在目標(biāo)平臺(tái)上能被較好地加速;同時(shí)訓(xùn)練時(shí)加入特定的元素以便于后面的模型剪枝和量化。如果等吭哧吭哧訓(xùn)練了幾周,模型都出來了再考慮這些問題就可能會(huì)帶來巨大的成本。近幾年大熱的AutoML中的自動(dòng)神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(NAS)現(xiàn)在也越來越多地朝著hardware/platform-ware的方向發(fā)展。
最后,車輛環(huán)境感知中,數(shù)據(jù)的長(zhǎng)尾問題是擺在AD/ADAS面前最大的問題。車輛環(huán)境是個(gè)開放環(huán)境,路上可能碰到任何無法預(yù)想的東西。2016年蘭德智庫指出自動(dòng)駕駛系統(tǒng)需要進(jìn)行110億英里的測(cè)試才能達(dá)到量產(chǎn)應(yīng)用條件。顯然,這不是幾輛車上路滿大街跑能搞得定的,傳統(tǒng)的測(cè)試手段已捉襟見肘。當(dāng)然,對(duì)于ADAS這類駕駛輔助類功能要求會(huì)低一些,但本質(zhì)上面臨的問題是類似的。傳統(tǒng)的汽車功能安全標(biāo)準(zhǔn)已經(jīng)無法涵蓋這類問題。雖然現(xiàn)在有針對(duì)性的預(yù)期功能安全(SOTIF)標(biāo)準(zhǔn)正在起草,但其可操作性和有效性還有待驗(yàn)證??偟脕碚f,汽車的智能化給測(cè)試驗(yàn)證提出了非常有趣同時(shí)也是前所末有的挑戰(zhàn)。
參考資料
[1]B.Huval et al.,“An Empirical Evaluation of Deep Learning on Highway Driving,”CoRR,vol.abs/1504.01716,2015.
[2]C.Szegedy,A.Toshev,and D.Erhan,“Deep Neural Networks for Object Detection,”in Advances in Neural Information Processing Systems 26,2013,pp.2553–2561.
[3]E.Shelhamer,J.Long,and T.Darrell,“Fully Convolutional Networks for Semantic Segmentation,”CoRR,vol.abs/1605.06211,2016.
[4]V.Badrinarayanan,A.Handa,and R.Cipolla,“SegNet:A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling,”CoRR,vol.abs/1505.07293,2015.
[5]L.-C.Chen,G.Papandreou,I.Kokkinos,K.Murphy,and A.L.Yuille,“DeepLab:Semantic Image Segmentation with Deep Convolutional Nets,Atrous Convolution,and Fully Connected CRFs,”CoRR,vol.abs/1606.00915,2016.
[6]E.Romera,L.M.Bergasa,and R.Arroyo,“Can we unify monocular detectors for autonomous driving by using the pixel-wise semantic segmentation of CNNs?,”CoRR,vol.abs/1607.00971,2016.
[7]J.Kim and C.Park,“End-To-End Ego Lane Estimation Based on Sequential Transfer Learning for Self-Driving Cars,”in 2017 IEEE Conference on Computer Vision and Pattern Recognition Workshops(CVPRW),2017,pp.1194–1202.
[8]X.Pan,J.Shi,P.Luo,X.Wang,and X.Tang,“Spatial As Deep:Spatial CNN for Traffic Scene Understanding,”ArXiv E-Prints,Dec.2017.
[9]Y.-C.Hsu,Z.Xu,Z.Kira,and J.Huang,“Learning to Cluster for Proposal-Free Instance Segmentation,”CoRR,vol.abs/1803.06459,2018.
[10]S.Lee et al.,“VPGNet:Vanishing Point Guided Network for Lane and Road Marking Detection and Recognition,”CoRR,vol.abs/1710.06288,2017.
[11]D.Neven,B.De Brabandere,S.Georgoulis,M.Proesmans,and L.Van Gool,“Towards End-to-End Lane Detection:an Instance Segmentation Approach,”ArXiv E-Prints,Feb.2018.
[12]B.D.Brabandere,W.V.Gansbeke,D.Neven,M.Proesmans,and L.V.Gool,“End-to-end Lane Detection through Differentiable Least-Squares Fitting,”CoRR,vol.abs/1902.00293,2019.
[13]N.Garnett,R.Cohen,T.Pe’er,R.Lahav,and D.Levi,“3D-LaneNet:end-to-end 3D multiple lane detection,”CoRR,vol.abs/1811.10203,2018.
[14]Z.Wang,W.Ren,and Q.Qiu,“LaneNet:Real-Time Lane Detection Networks for Autonomous Driving”CoRR,vol.abs/1807.01726,2018
[15]M.Ghafoorian,C.Nugteren,N.Baka,O.Booij,and M.Hofmann,“EL-GAN:Embedding Loss Driven Generative Adversarial Networks for Lane Detection”,CoRR,vol.abs/1806.05525,2018
[16]Y.Hou,Z.Ma,C.Liu,and C.Change Loy,“Learning Lightweight Lane Detection CNNs by Self Attention Distillation,”ArXiv E-Prints,p.arXiv:1908.00821,Aug.2019.
[17]Q.Zou,H.Jiang,Q.Dai,Y.Yue,L.Chen,and Q.Wang,“Robust Lane Detection from Continuous Driving Scenes Using Deep Neural Networks”,CoRR,vol.abs/1903.02193.2019
[18]Z.Zou,Z.Shi,Y.Guo,and J.Ye,“Object Detection in 20 Years:A Survey,”CoRR,vol.abs/1905.05055,2019.
[19]X.Wu,D.Sahoo,and S.C.H.Hoi,“Recent Advances in Deep Learning for Object Detection,”ArXiv E-Prints,p.arXiv:1908.03673,Aug.2019.
[20]Q.Zhao,T.Sheng,Y.Wang,F.Ni,and L.Cai,“CFENet:An Accurate and Efficient Single-Shot Object Detector for Autonomous Driving,”ArXiv E-Prints,Jun.2018.
[21]A.Bewley,Z.Ge,L.Ott,F.Ramos,and B.Upcroft,“Simple Online and Realtime Tracking,”CoRR,vol.abs/1602.00763,2016.
[22]N.Wojke,A.Bewley,and D.Paulus,“Simple Online and Realtime Tracking with a Deep Association Metric,”CoRR,vol.abs/1703.07402,2017.
[23]X.Pan,P.Luo,J.Shi,and X.Tang,“Two at Once:Enhancing Learning and Generalization Capacities via IBN-Net,”in The European Conference on Computer Vision(ECCV),2018.
[24]H.Zhao et al.,“PSANet:Point-wise Spatial Attention Network for Scene Parsing,”in Computer Vision–ECCV 2018,Cham,2018,pp.270–286.
[25]A.G.Howard et al.,“MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications,”ArXiv E-Prints,Apr.2017.
[26]M.Sandler,A.Howard,M.Zhu,A.Zhmoginov,and L.-C.Chen,“Inverted Residuals and Linear Bottlenecks:Mobile Networks for Classification,Detection and Segmentation,”ArXiv E-Prints,Jan.2018.
[27]X.Zhang,X.Zhou,M.Lin,and J.Sun,“ShuffleNet:An Extremely Efficient Convolutional Neural Network for Mobile Devices,”ArXiv E-Prints,Jul.2017.
[28]N.Ma,X.Zhang,H.-T.Zheng,and J.Sun,“ShuffleNet V2:Practical Guidelines for Efficient CNN Architecture Design,”ArXiv E-Prints,2018.
[29]M.Tan and Q.V.Le,“EfficientNet:Rethinking Model Scaling for Convolutional Neural Networks,”ArXiv E-Prints,p.arXiv:1905.11946
————————————————
版權(quán)聲明:本文為CSDN博主「ariesjzj」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jinzhuojun/article/details/105316083
評(píng)論