在仔細(xì)閱讀了所有到目前已公開的比賽top-20解決方案后县爬,以較為粗的視野,探討一下如何解決自動駕駛中的運動預(yù)測問題妓肢。
大概在幾個月前捌省,lyft在kaggle平臺上組織了一個比賽[1]:Lyft Motion Prediction for Autonomous Vehicles,旨在用算法預(yù)測自動駕駛汽車周圍的交通參與者的運動軌跡碉钠。
比賽剛啟動時我還躍躍欲試纲缓,把數(shù)據(jù)下載了準(zhǔn)備訓(xùn)練一波,無奈卻被后續(xù)無比忙碌的工作和學(xué)習(xí)給耽擱了喊废。在比賽結(jié)束后祝高,心有不甘的我仔細(xì)閱讀了截至目前已經(jīng)公開的top-20解決方案,以較為粗的視野污筷,和大家共同探討一下如何解決自動駕駛中的運動預(yù)測問題工闺。
01 問題定義和數(shù)據(jù)集
自動駕駛中的運動預(yù)測或軌跡預(yù)測,在這里我們定義為:
給定
交通參與者(例如行人瓣蛀、騎車人陆蟆、車輛)在過去一段時間的路徑/軌跡
道路信息(例如道路結(jié)構(gòu)、交通燈信息)
相關(guān)交通參與者過去一段時間對路徑/軌跡等
對
未來一段時間的(一段或多段可能)路徑/軌跡
或運動意圖
或占用格柵圖
進行預(yù)測惋增。
上面這段文字便定義了問題的輸入(“給定”部分)和輸出(“對”部分)叠殷,基于問題的定義,現(xiàn)存的研究有諸多方法诈皿,傳統(tǒng)的方法如:
1. 基于運動學(xué)和動力學(xué)的預(yù)測(如卡爾曼濾波)林束,缺點在于沒有考慮到環(huán)境中其他交通參與者對被預(yù)測目標(biāo)運動的影響;
2. 考慮了環(huán)境因素的方法稽亏,如社會力模型壶冒、逆強化學(xué)習(xí)等。
基于deep learning的方法可以大致分為:
1. 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)方法截歉,由于軌跡具有明顯的時序信息胖腾,通過RNN對時間維度建模;
2. 卷積神經(jīng)網(wǎng)絡(luò)(CNN)方法,將軌跡和環(huán)境信息編碼成圖的形式(例如多通道的鳥瞰圖)胸嘁,用CNN方法進行建模瓶摆。在比賽中的baseline和大多數(shù)參賽者的方法均基于此;
3. 其他性宏,例如圖神經(jīng)網(wǎng)絡(luò)群井、RNN+CNN的結(jié)合等;
在Deep Learning-based Vehicle Behaviour Prediction for Autonomous Driving Applications: a Review?[2]一文中毫胜,對基于深度學(xué)習(xí)對軌跡預(yù)測方法進行了下圖的分類(藍色按輸入類型分书斜,綠色按輸出類型分,灰色按預(yù)測方法分):
在數(shù)據(jù)上酵使,自動駕駛場景中的主流開源數(shù)據(jù)集對比如下荐吉,其中能用于軌跡預(yù)測的數(shù)據(jù)包括nuScenes、ApolloScape Trajectory口渔、Argoverse Forecasting和Ours(指的是本次比賽中使用的lyft新開源的數(shù)據(jù)集):
lyft數(shù)據(jù)集的數(shù)據(jù)采集車如下圖左所示样屠,其中感知部分包括3個Lidar(一個車頂64線10Hz,兩個前保險杠40線)和7個Camera(下圖右缺脉,都在車頂)痪欲、5個Radar(4個位于頂部,一個位于前保險杠)攻礼。
由20輛配備了同等傳感器的數(shù)據(jù)采集車业踢,從2019年10月到2020年3月,采集到到數(shù)據(jù)包括:
1. 17萬個場景礁扮,每個場景25秒知举,通過感知傳感器捕捉自車狀態(tài)、自車周圍的交通參與者(騎車人太伊、行人雇锡、車輛)狀態(tài)和交通燈狀態(tài);
2. 高精度語義地圖僚焦,包括(詳見下表):車道邊界遮糖、車道連接性、行駛方向叠赐、道路類型、道路材料屡江、道路限速芭概、車道限制、人行橫道惩嘉、交通燈罢洲、交通標(biāo)志、限制區(qū)域、減速帶惹苗;
3. 高分辨率的衛(wèi)星圖片殿较,覆蓋74平方公里區(qū)域,由181個GeoTIFF切片構(gòu)成桩蓉,每個切片大小10560 x 10560 像素(640 x 640 米)淋纲。可用于輔助預(yù)測院究。
數(shù)據(jù)集的數(shù)據(jù)整體統(tǒng)計情況見下表:
02 贏得比賽的技巧
由于kaggle比賽有其顯著的局限性(例如參賽者往往不具備從事運動預(yù)測研究的背景洽瞬、比賽時間也就短短2-3個月),導(dǎo)致一般而言业汰,小概率事件在kaggle比賽中能產(chǎn)生出SOTA的新方法伙窃。大概率事件是,對一些論文中已有SOTA方法的運用样漆,并針對賽題添加針對性的trick为障。
在這個賽道上,lyft官方公開了一個baseline方法 [4] (屬于第一部分中介紹的基于CNN的方法)放祟,大致可以分為下面兩個步驟:
1. 將軌跡和環(huán)境信息編碼成多通道的鳥瞰圖鳍怨,根據(jù)編碼信息的不同,可以有下圖中的幾種形式:語義圖(右上)舞竿、衛(wèi)星圖(右下)京景、語義衛(wèi)星圖(左下);
2. 將編碼后的圖(224 x 224大小执桌,以目標(biāo)車輛為中心)作為CNN的輸入數(shù)據(jù)鄙皇,基網(wǎng)絡(luò)為ResNet-50,模型預(yù)測值為未來5秒內(nèi)的一連串位置點仰挣。
由于這個官方baseline并不弱伴逸,并且為參賽選手提供了便利,因此大多數(shù)參賽者都是基于此進行了修改膘壶。從賽道上top解決方案[5]來看错蝴,有一些重要的修改技巧摘選如下(都是圖像比賽的基本操作,但根據(jù)問題領(lǐng)域的不同有所調(diào)整):
1. 對樣本的篩選:對訓(xùn)練樣本進行篩選颓芭,使其與評測樣本保持一致顷锰。例如在這個賽題中,評測樣本基本在未來十幀都有數(shù)據(jù)亡问,因此在訓(xùn)練樣本篩選時也只保留有未來十幀數(shù)據(jù)的樣本官紫;
2. 對數(shù)據(jù)的編碼:
a) 歷史幀的數(shù)目:第一名方案中history_num_frames=30,即構(gòu)建了66通道的“圖像”輸入,包括30通道自車運動歷史軌跡束世、30通道他車運動歷史軌跡酝陈、3通道語義地圖、3通道衛(wèi)星地圖毁涉;
b) 其他可以實驗的參數(shù):例如“圖像”的整體大小沉帮、“圖像”每個像素點代表的物理范圍;
3. 數(shù)據(jù)增強:
a) 圖像級增強:如 cutout薪丁、模糊遇西、下采樣;
b) 柵格級增強:如?隨機丟棄他車數(shù)據(jù)严嗜;
4. 對訓(xùn)練過程的加速:lyft官方提供的上述數(shù)據(jù)柵格編碼過程復(fù)雜粱檀,一次訓(xùn)練中的大部分時間都耗費在CPU上的數(shù)據(jù)處理中。因此可以優(yōu)化編碼部分代碼漫玄,解決CPU運算瓶頸茄蚯,提升多GPU訓(xùn)練效率,有助于在比賽中快速實驗睦优;
5. 單模型的選擇和訓(xùn)練:第一名方案:EfficientNetB3模型渗常,先用低分辨率圖像預(yù)訓(xùn)練4個epoch,而后從第5個epoch開始汗盘,在原圖上用余弦退火和階梯下降學(xué)習(xí)率的方式進行訓(xùn)練皱碘;
6. 多模型的融合:
a) 第一名方案:用不同的數(shù)據(jù)編碼參數(shù)訓(xùn)練得到5個模型,用stacking方法進行融合隐孽;
b) 第四名方案:用GMM方法將多模型的多條軌跡采樣并擬合成最終的三條軌跡癌椿;
03 總結(jié)
在看了已公開的部分top20解決方案后,稍微有一些失望的是:由于數(shù)據(jù)量太大菱阵,大部分參賽者的方法都沒能得到充分的訓(xùn)練踢俄,因此往往在baseline模型上稍微調(diào)調(diào)參數(shù)、訓(xùn)練足夠久晴及、訓(xùn)練出來多個模型都办,便能夠獲得好的名次;
雖然用于參賽的方法和實際工程方法之間虑稼,或者和學(xué)術(shù)創(chuàng)新方法之間的差別還是很大琳钉,但對我個人而言也有一些啟發(fā):
1. 設(shè)計高效的、表征強的數(shù)據(jù)編碼方式極為重要蛛倦, 在比賽中證明了“先對軌跡和環(huán)境數(shù)據(jù)在鳥瞰圖上渲染歌懒,后用CNN進行學(xué)習(xí)”的方法是有效的,但也暴露出編碼過程有信息損耗(eg.每個像素的物理范圍)胰蝠、編碼效率低的問題;
2. 使用VectorNet方法[6] (CVPR 2020),提出了更高效的編碼方式和模型茸塞,在比賽中以極少的計算資源便取得了第十名的成績躲庄。
言而總之,如下圖所示钾虐,對于自動駕駛而言噪窘,感知得到交通參與者和環(huán)境的探測結(jié)果、基于感知結(jié)果對環(huán)境中交通參與者的行為預(yù)測效扫、根據(jù)預(yù)測結(jié)果進行軌跡和路徑規(guī)劃倔监,這三個環(huán)節(jié)將持續(xù)地被深度學(xué)習(xí)的方法重構(gòu)。過往幾年我們看的比較多的是感知部分菌仁,未來相信在軌跡預(yù)測和規(guī)劃上也會見到相同的趨勢浩习。
參考資料:
[1]?https://www.kaggle.com/c/lyft-motion-prediction-autonomous-vehicles/overview/description
[2]?https://arxiv.org/abs/1912.11676
[3]?https://arxiv.org/abs/2006.14480
[4]?https://github.com/lyft/l5kit
[5]?https://www.kaggle.com/c/lyft-motion-prediction-autonomous-vehicles/discussion/201470
[6]?https://arxiv.org/abs/2005.04259
- END -
新朋友們可以看看我過往的相關(guān)文章
?
【相關(guān)推薦閱讀】