自動(dòng)駕駛與軌跡預(yù)測(cè)看這一篇就夠了!
本文經(jīng)自動(dòng)駕駛之心公眾號(hào)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。
軌跡預(yù)測(cè)在自動(dòng)駕駛中承擔(dān)著重要的角色,自動(dòng)駕駛軌跡預(yù)測(cè)是指通過(guò)分析車輛行駛過(guò)程中的各種數(shù)據(jù),預(yù)測(cè)車輛未來(lái)的行駛軌跡。作為自動(dòng)駕駛的核心模塊,軌跡預(yù)測(cè)的質(zhì)量對(duì)于下游的規(guī)劃控制至關(guān)重要。軌跡預(yù)測(cè)任務(wù)技術(shù)棧豐富,需要熟悉自動(dòng)駕駛動(dòng)/靜態(tài)感知、高精地圖、車道線、神經(jīng)網(wǎng)絡(luò)架構(gòu)(CNN&GNN&Transformer)技能等,入門難度很大!很多粉絲期望能夠盡快上手軌跡預(yù)測(cè),少踩坑,今天就為大家盤點(diǎn)下軌跡預(yù)測(cè)常見的一些問(wèn)題和入門學(xué)習(xí)方法!
入門相關(guān)知識(shí)
1.預(yù)習(xí)的論文有沒(méi)有切入順序?
A:先看survey,problem formulation, deep learning-based methods里的sequential network,graph neural network和Evaluation。
2.行為預(yù)測(cè)是軌跡預(yù)測(cè)嗎
A:是耦合的,但不一樣。行為一般指目標(biāo)車未來(lái)會(huì)采取什么動(dòng)作,變道停車超車加速左右轉(zhuǎn)直行等等。軌跡的話就是具體的具有時(shí)間信息的未來(lái)可能的位置點(diǎn)
3.請(qǐng)問(wèn)Argoverse數(shù)據(jù)集里提到的數(shù)據(jù)組成中,labels and targets指的是什么呢?labels是指要預(yù)測(cè)時(shí)間段內(nèi)的ground truth嗎
A:我猜這里想說(shuō)的是右邊表格里的OBJECT_TYPE那一列。AV代表自動(dòng)駕駛車自己,然后數(shù)據(jù)集往往會(huì)給每個(gè)場(chǎng)景指定一個(gè)或多個(gè)待預(yù)測(cè)的障礙物,一般會(huì)叫這些待預(yù)測(cè)的目標(biāo)為target或者focal agent。某些數(shù)據(jù)集還會(huì)給出每個(gè)障礙物的語(yǔ)義標(biāo)簽,比如是車輛、行人還是自行車等。
Q2:車輛和行人的數(shù)據(jù)形式是一樣的嗎?我的意思是說(shuō),比如一個(gè)點(diǎn)云點(diǎn)代表行人,幾十個(gè)點(diǎn)代表車輛?
A:這種軌跡數(shù)據(jù)集里面其實(shí)給的都是物體中心點(diǎn)的xyz坐標(biāo),行人和車輛都是
Q3:argo1和argo2的數(shù)據(jù)集都是只指定了一個(gè)被預(yù)測(cè)的障礙物吧?那在做multi-agent prediction的時(shí)候 這兩個(gè)數(shù)據(jù)集是怎么用的
A:argo1是只指定了一個(gè),argo2其實(shí)指定了多個(gè),最多可能有二十來(lái)個(gè)的樣子。但是只指定一個(gè)并不妨礙你自己的模型預(yù)測(cè)多個(gè)障礙物。
4.路徑規(guī)劃一般考慮低速和靜態(tài)障礙物 軌跡預(yù)測(cè)結(jié)合的作用是??關(guān)鍵snapshot?
A:”預(yù)測(cè)“自車軌跡當(dāng)成自車規(guī)劃軌跡,可以參考uniad
5.軌跡預(yù)測(cè)對(duì)于車輛動(dòng)力學(xué)模型的要求高嗎?就是需要數(shù)學(xué)和汽車?yán)碚摰葋?lái)建立一個(gè)精準(zhǔn)的車輛動(dòng)力學(xué)模型么?
A:nn網(wǎng)絡(luò)基本不需要哈,rule based的需要懂一些
6. 模模糊糊的新手小白,應(yīng)該從哪里在著手拓寬一下知識(shí)面(還不會(huì)代碼撰寫)
A:先看綜述,把思維導(dǎo)圖整理出來(lái),例如《Machine Learning for Autonomous Vehicle's Trajectory Prediction: A comprehensive survey, Challenges, and Future Research Directions》這篇綜述去看看英文原文
7.預(yù)測(cè)和決策啥關(guān)系捏,為啥我覺(jué)得好像預(yù)測(cè)沒(méi)那么重要?
A1(stu): 默認(rèn)預(yù)測(cè)屬于感知吧,或者決策中隱含預(yù)測(cè),反正沒(méi)有預(yù)測(cè)不行。
A2(stu): 決策該規(guī)控做,有行為規(guī)劃,高級(jí)一點(diǎn)的就是做交互和博弈,有的公司會(huì)有單獨(dú)的交互博弈組
8.目前頭部公司,一般預(yù)測(cè)是屬于感知大模塊還是規(guī)控大模塊?
A:預(yù)測(cè)是出他車軌跡,規(guī)控是出自車軌跡,這倆軌跡還互相影響,所以預(yù)測(cè)一般放規(guī)控。
Q: 一些公開的資料,比如小鵬的感知xnet會(huì)同時(shí)出預(yù)測(cè)軌跡,這時(shí)候又感覺(jué)預(yù)測(cè)的工作是放在感知大模塊下,還是說(shuō)兩個(gè)模塊都有自己的預(yù)測(cè)模塊,目標(biāo)不一樣?
A:是會(huì)相互影響,所以有的地方預(yù)測(cè)和決策就是一個(gè)組。比如自車規(guī)劃的軌跡意圖去擠別的車,他車一般情況是會(huì)讓道的。所以有些工作會(huì)把自車的規(guī)劃當(dāng)成他車模型輸入的一部分??梢詤⒖枷翸2I(M2I: From Factored Marginal Trajectory Prediction to Interactive Prediction). 這篇思路差不多,可以了解 PiP: Planning-informed Trajectory Prediction for Autonomous Driving
9.argoverse的這種車道中線地圖,在路口里面沒(méi)有車道線的地方是怎么得到的呀?
A: 人工標(biāo)注的
10.用軌跡預(yù)測(cè)寫論文的話,哪篇論文的代碼可以做baseline?
A: hivt可以做baseline,蠻多人用的
11.現(xiàn)在軌跡預(yù)測(cè)基本都依賴地圖,如果換一個(gè)新的地圖環(huán)境,原模型是否就不適用了,要重新訓(xùn)練嗎?
A: 有一定的泛化能力,不需要重新訓(xùn)練效果也還行
12.對(duì)多模態(tài)輸出而言,選擇最佳軌跡的時(shí)候是根據(jù)概率值最大的選嗎
A(stu): 選擇結(jié)果最好的
Q2:結(jié)果最好是根據(jù)什么來(lái)判定呢?是根據(jù)概率值大小還是根據(jù)和gt的距離
A: 實(shí)際在沒(méi)有g(shù)round truth的情況下,你要取“最好”的軌跡,那只能選擇相信預(yù)測(cè)概率值最大的那條軌跡了
Q3: 那有g(shù)t的情況下,選擇最好軌跡的時(shí)候,根據(jù)和gt之間的end point或者average都可以是嗎
A: 嗯嗯,看指標(biāo)咋定義
軌跡預(yù)測(cè)基礎(chǔ)模塊
1.Argoverse數(shù)據(jù)集里HD-Map怎么用,能結(jié)合motion forecast作為輸入,構(gòu)建駕駛場(chǎng)景圖嗎,異構(gòu)圖又怎么理解?
A:這個(gè)課程里都有講的,可以參照第二章,后續(xù)的第四章也會(huì)講. 異構(gòu)圖和同構(gòu)圖的區(qū)別:同構(gòu)圖中,node的種類只有一種,一個(gè)node和另一個(gè)node的連接關(guān)系只有一種,例如在社交網(wǎng)絡(luò)中,可以想象node只有‘人’這一個(gè)種類,edge只有‘認(rèn)識(shí)’這一種連接。而人和人要么認(rèn)識(shí),要么不認(rèn)識(shí)。但是也可能細(xì)分有人,點(diǎn)贊,推文。則人和人可能通過(guò)認(rèn)識(shí)連接,人和推文可能通過(guò)點(diǎn)贊連接,人和人也可能通過(guò)點(diǎn)贊同一篇推文連接(meta path)。這里節(jié)點(diǎn)、節(jié)點(diǎn)之間關(guān)系的多樣性表達(dá)就需要引入異構(gòu)圖了。異構(gòu)圖中,有很多種node。node之間也有很多種連接關(guān)系(edge),這些連接關(guān)系的組合則種類更多(meta-path), 而這些node之間的關(guān)系有輕重之分,不同連接關(guān)系也有輕重之分。
2.A-A交互考慮的是哪些車輛與被預(yù)測(cè)車輛的交互呢?
A:可以選擇一定半徑范圍內(nèi)的車,也可以考慮K近鄰的車,你甚至可以自己提出更高級(jí)的啟發(fā)式鄰居篩選策略,甚至有可能可以讓模型自己學(xué)出來(lái)兩個(gè)車是否是鄰居
Q2:還是考慮一定范圍內(nèi)的吧,那半徑大小有什么選取的原則嗎?另外,選取的這些車輛是在哪個(gè)時(shí)間步下的呢
A:半徑的選擇很難有標(biāo)準(zhǔn)答案,這本質(zhì)上就是在問(wèn)模型做預(yù)測(cè)的時(shí)候到底需要多遠(yuǎn)程的信息,有點(diǎn)像在選擇卷積核的大小對(duì)于第二個(gè)問(wèn)題,我個(gè)人的準(zhǔn)則是,想要建模哪個(gè)時(shí)刻下物體之間的交互,就根據(jù)哪個(gè)時(shí)刻下的物體相對(duì)位置來(lái)選取鄰居
Q3:這樣的話對(duì)于歷史時(shí)域都要建模嗎?不同時(shí)間步下在一定范圍內(nèi)的周邊車輛也會(huì)變化吧,還是說(shuō)只考慮在當(dāng)前時(shí)刻的周邊車輛信息
A:都行啊,看你模型怎么設(shè)計(jì)
3.老師uniad端到端模型中預(yù)測(cè)部分存在什么缺陷啊?
A:只看它motion former的操作比較常規(guī),你在很多論文里都會(huì)看到類似的SA和CA?,F(xiàn)在sota的模型很多都比較重,比如decoder會(huì)有循環(huán)的refine
A2:做的是marginal prediction不是joint prediction;2. prediction和planning是分開來(lái)做的,沒(méi)有顯式考慮ego和周圍agent的交互博弈;3.用的是scene-centric representation,沒(méi)有考慮對(duì)稱性,效果必拉
Q2:啥是marginal prediction啊
A:具體可以參考scene transformer
Q3:關(guān)于第三點(diǎn),scene centric沒(méi)有考慮對(duì)稱性,怎么理解呢
A:建議看HiVT, QCNet, MTR++.當(dāng)然對(duì)于端到端模型來(lái)說(shuō)對(duì)稱性的設(shè)計(jì)也不好做就是了
A2:可以理解成輸入的是scene的數(shù)據(jù),但在網(wǎng)絡(luò)里會(huì)建模成以每個(gè)目標(biāo)為中心視角去看它周邊的scene,這樣你就在forward里得到了每個(gè)目標(biāo)以它自己為中心的編碼,后續(xù)可以再考慮這些編碼間的交互
4. 什么是以agent為中心?
A:每個(gè)agent有自己的local region,local region是以這個(gè)agent為中心
5.軌跡預(yù)測(cè)里yaw和heading是混用的嗎
A:可以理解為車頭朝向
6.argoverse地圖中的has_traffic_control這個(gè)屬性具體代表什么意思?
A:其實(shí)我也不知道我理解的對(duì)不對(duì),我猜是指某個(gè)lane是否被紅綠燈/stop sign/限速標(biāo)志等所影響
7. 請(qǐng)問(wèn)Laplace loss和huber loss 對(duì)于軌跡預(yù)測(cè)而言所存在的優(yōu)劣勢(shì)在哪里呢?如果我只預(yù)測(cè)一條車道線的話
A:兩個(gè)都試一下,哪個(gè)效果好哪個(gè)就有優(yōu)勢(shì)。Laplace loss要效果好還是有些細(xì)節(jié)要注意的
Q2:是指參數(shù)要調(diào)的好嗎
A:Laplace loss相比L1 loss其實(shí)就是多預(yù)測(cè)了一個(gè)scale參數(shù)
Q3:對(duì)的 但似乎這個(gè)我不知道有啥用 如果只預(yù)測(cè)一個(gè)軌跡的話。感覺(jué)像是多余的。我把它理解為不確定性 不知道是否正確
A:如果你從零推導(dǎo)過(guò)最小二乘法就會(huì)知道,MSE其實(shí)是假設(shè)了方差為常數(shù)的高斯分布的NLL。同理,L1 loss也是假設(shè)了方差為常數(shù)的Laplace分布的NLL。所以說(shuō)LaplaceNLL也可以理解為方差非定值的L1 loss。這個(gè)方差是模型自己預(yù)測(cè)出來(lái)的。為了使loss更低,模型會(huì)給那些擬合得不太好的樣本一個(gè)比較大的方差,而給擬合得好的樣本比較小的方差
Q4:那是不是可以理解為對(duì)于非常隨機(jī)的數(shù)據(jù)集【軌跡數(shù)據(jù)存在缺幀 抖動(dòng)】 就不太適合Laplace 因?yàn)槟P托枰M合這個(gè)方差?需要數(shù)據(jù)集質(zhì)量比較高
A:這個(gè)說(shuō)法我覺(jué)得不一定成立。從效果上來(lái)看,會(huì)鼓勵(lì)模型優(yōu)先學(xué)習(xí)比較容易擬合的樣本,再去學(xué)習(xí)難學(xué)習(xí)的樣本
Q5:還想請(qǐng)問(wèn)下這句話(Laplace loss要效果好還是有些細(xì)節(jié)要注意的)如何理解 A:主要是預(yù)測(cè)scale那里。在模型上,預(yù)測(cè)location的分支和預(yù)測(cè)scale的分支要盡量解耦,不要讓他們相互干擾。預(yù)測(cè)scale的分支要保證輸出結(jié)果>0,一般人會(huì)用exp作為激活函數(shù)保證非負(fù),但是我發(fā)現(xiàn)用ELU +1會(huì)更好。然后其實(shí)scale的下界最好不要是0,最好讓scale>0.01或者>0.1啥的。以上都是個(gè)人看法。其實(shí)我開源的代碼(周梓康大佬的github開源代碼)里都有這些細(xì)節(jié),不過(guò)可能大家不一定注意到。
給出鏈接:https://github.com/ZikangZhou/QCNet
https://github.com/ZikangZhou/HiVT
8. 有拿VAE做軌跡預(yù)測(cè)的嗎,給個(gè)鏈接!
https://github.com/L1aoXingyu/pytorch-beginner/tree/master/08-AutoEncoder
9. 請(qǐng)問(wèn)大伙一個(gè)問(wèn)題,就是Polyline到底是啥?另外說(shuō)polyline由向量Vector組成,這些Vector是相當(dāng)于節(jié)點(diǎn)嗎?
A:Polyline就是折線,折線就是一段一段的,每一段都可以看成是一段向量
Q2:請(qǐng)問(wèn)這個(gè)折線段和圖神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)之間的邊有關(guān)系嗎?或者說(shuō)Polyline這個(gè)折現(xiàn)向量相當(dāng)于是圖神經(jīng)網(wǎng)絡(luò)當(dāng)中的節(jié)點(diǎn)還是邊呀?
A:一根折線可以理解為一個(gè)節(jié)點(diǎn)。軌跡預(yù)測(cè)里面沒(méi)有明確定義的邊,邊如何定義取決于你怎么理解這個(gè)問(wèn)題。
Q3: VectorNet里面有很多個(gè)子圖,每個(gè)子圖下面有很多個(gè)Polyline,把Polyline當(dāng)做向量的話,就相當(dāng)于把Polyline這個(gè)節(jié)點(diǎn)變成了向量,相當(dāng)于將節(jié)點(diǎn)進(jìn)行特征向量化對(duì)嗎?然后Polyline里面有多個(gè)Vector向量,就是相當(dāng)于是構(gòu)成這個(gè)節(jié)點(diǎn)的特征矩陣么?
A: 一個(gè)地圖里有很多條polyline;一個(gè)Polyline就是一個(gè)子圖;一個(gè)polyline由很多段比較短的向量組成,每一段向量都是子圖上的一個(gè)節(jié)點(diǎn)
10. 有的論文,像multipath++對(duì)于地圖兩個(gè)點(diǎn)就作為一個(gè)單元,有的像vectornet是一條線作為一個(gè)單元,這兩種有什么區(qū)別嗎?
A: 節(jié)點(diǎn)的粒度不同,要說(shuō)效果的話那得看具體實(shí)現(xiàn);速度的話,顯然粒度越粗效率越高
Q2:從效果角度看,什么時(shí)候選用哪種有沒(méi)有什么原則?
A: 沒(méi)有原則,都可以嘗試
11.有什么可以判斷score的平滑性嗎? 如果一定要做的話
A: 這個(gè)需要你輸入是流動(dòng)的輸入比如0-19和1-20幀然后比較兩幀之間的對(duì)應(yīng)軌跡的score的差的平方,統(tǒng)計(jì)下就可以了
Q2: Thomas老師有哪些指標(biāo)推薦呢,我目前用一階導(dǎo)數(shù)和二階導(dǎo)數(shù)。但好像不是很明顯,絕大多數(shù)一階導(dǎo)和二階導(dǎo)都集中在0附近。
A: 我感覺(jué)連續(xù)幀的對(duì)應(yīng)軌跡的score的差值平方就可以了呀,比如你有連續(xù)n個(gè)輸入,求和再除以n。但是scene是實(shí)時(shí)變化的,發(fā)生交互或者從非路口到路口的時(shí)候score就應(yīng)該是突變的
12.hivt里的軌跡沒(méi)有進(jìn)行縮放嗎,就比如×0.01+10這種。分布盡可能在0附近。我看有的方法就就用了,有的方法就沒(méi)有。取舍該如何界定?
A:就是把數(shù)據(jù)標(biāo)準(zhǔn)化歸一化唄??赡苡悬c(diǎn)用 但應(yīng)該不多
13.HiVT里地圖的類別屬性經(jīng)過(guò)embedding之后為什么和數(shù)值屬性是相加的,而不是concat?
A:相加和concat區(qū)別不大,而對(duì)于類別embedding和數(shù)值embedding融合來(lái)說(shuō),實(shí)際上完全等價(jià)
Q2: 完全等價(jià)應(yīng)該怎么理解?
A: 兩者Concat之后再過(guò)一層線性層,實(shí)際上等價(jià)于把數(shù)值embedding過(guò)一層線性層以及把類別embedding過(guò)一層線性層后,兩者再相加起來(lái).把類別embedding過(guò)一層線性層其實(shí)沒(méi)啥意義,理論上這一層線性層可以跟nn.Embeddding里面的參數(shù)融合起來(lái)
14.作為用戶可能更關(guān)心的是,HiVT如果要實(shí)際部署的話,最小的硬件要求是多少?
A:我不知道,但根據(jù)我了解到的信息,不知道是NV還是哪家車廠是拿HiVT來(lái)預(yù)測(cè)行人的,所以實(shí)際部署肯定是可行的
15. 基于occupancy network的預(yù)測(cè)有什么特別嗎?有沒(méi)有論文推薦?
A:目前基于occupancy的未來(lái)預(yù)測(cè)的方案里面最有前途的應(yīng)該是這個(gè):https://arxiv.org/abs/2308.01471
16.考慮規(guī)劃軌跡的預(yù)測(cè)有什么論文推薦嗎?就是預(yù)測(cè)其他障礙物的時(shí)候,考慮自車的規(guī)劃軌跡?
A:這個(gè)可能公開的數(shù)據(jù)集比較困難,一般不會(huì)提供自車的規(guī)劃軌跡。上古時(shí)期有一篇叫做PiP的,港科Haoran Song。我感覺(jué)那種做conditional prediction的文章都可以算是你想要的,比如M2I
17.有沒(méi)有適合預(yù)測(cè)算法進(jìn)行性能測(cè)試的仿真項(xiàng)目可以學(xué)習(xí)參考的呢
A(stu):這個(gè)論文有討論:Choose Your Simulator Wisely A Review on Open-source Simulators for Autonomous Driving
18.請(qǐng)問(wèn)如何估計(jì)GPU顯存需要多大,如果使用Argoverse數(shù)據(jù)集的話,怎么算
A:和怎么用有關(guān)系,之前跑hivt我1070都可以,現(xiàn)在一般電腦應(yīng)該都可以
原文鏈接:https://mp.weixin.qq.com/s/EEkr8g4w0s2zhS_jmczUiA