軌跡預測系列 | HiVT之進化版QCNet到底講了啥?
本文經(jīng)自動駕駛之心公眾號授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
HiVT的進化版(不先看HiVT也能直接讀這篇),性能和效率上大幅提升。
文章也很容易閱讀。
【軌跡預測系列】【筆記】HiVT: Hierarchical Vector Transformer for Multi-Agent Motion Prediction - 知乎 (zhihu.com)
原文鏈接:
https://openaccess.thecvf.com/content/CVPR2023/papers/Zhou_Query-Centric_Trajectory_Prediction_CVPR_2023_paper.pdf
Abstract
Agent為中心的進行預測的model存在一個問題,當窗口移動時需要多次重復normalize到agent中心,再進行重復encoding的過程,對于onboard使用是不劃算的。因此對于場景的encoding我們采用了query-centric的框架,可以重復使用已經(jīng)計算過的結(jié)果,不依賴于全局的時空坐標系。同時,因為對于不同agent共享了場景特征,使得agent的軌跡decoding過程可以更加并行處理。
即使對于場景進行了復雜的encoding,目前的decoding辦法對于多mode的信息抓取還是比較難,特別是對于長時間的預測。為了解決這個問題,我們首先使用anchor-free的query來生成軌跡proposal(走一步看一步的提取特征辦法),這樣model能能更好利用不同時刻位置的場景特征。然后是調(diào)整模塊,利用上一步得到的proposal來進行軌跡的調(diào)優(yōu)(動態(tài)的anchor-based)。通過這些高質(zhì)量的anchor,我們的query-based decoder可以更好的處理多mode的特征。
打榜成功。這個設計也實現(xiàn)了場景特征encoding和并行多agent的decoding的pipeline。
Introduction
目前的軌跡預測paper有這么幾個問題:
- 對于多種異構(gòu)的場景信息額度處理效率低下。無人駕駛?cè)蝿绽?,?shù)據(jù)以一幀一幀的流給到model,包含矢量化的高精地圖和周圍agent的歷史軌跡。最近的factorized attention方法(時空分開分別進行attentin)將這些信息的處理提升到新高度。但這需要對于每個場景元素做attention,如果場景非常復雜,cost還是很大的。
- 隨著預測的時間增長,預測的不確定性也在爆炸式增長。比如在路口的車可能直行或轉(zhuǎn)彎。為了避免錯過潛在的可能性,模型需要獲取多mode的分布,而不是僅僅只預測出現(xiàn)頻率最高的mode。但是gt只有一個,沒法對多個可能性進行比較好的學習。有些paper提出了多個手捏的anchor來監(jiān)督的做法,這個效果就完全取決于anchor的質(zhì)量高低了。當anchor無法準確cover gt時,這個做法就很糟糕了。也有別的做法直接預測多mode,忽視了mode塌縮和訓練不穩(wěn)定的問題。
為了解決上述問題,我們提出了QCNet。
首先,我們想要在利用好強大的factorized attention的同時,提高onboard的inference速度。過去的agent-centric encoding辦法顯然不行。當下一幀數(shù)據(jù)到來,窗口就會移動,但還是和上一幀有很大部分重疊的,所以我們有機會重復使用這些feature。但是agent-centric辦法需要轉(zhuǎn)到agent坐標系,導致其必須要重新encode場景。為了解決這個問題,我們使用了query-centric的辦法:場景元素在它們自己的時空坐標系內(nèi)進行特征提取,和全局坐標系無關(guān)(ego在哪無關(guān)了)。(高精地圖可以用因為地圖元素有長久的id,非高精地圖應該就不好用了,地圖元素的得在前后幀tracking?。?/p>
這使得我們可以把之前處理好的encoding結(jié)果進行重復使用,對于agent來說直接用這些cache的feature,這樣就能節(jié)省latency了。
其次,為了更好地用這些場景encode結(jié)果進行多mode長時間預測,我們使用了anchor-free的query來一步步(在上一個位置的地方)提取場景的feature,這樣每一次的decode都是非常短的一步。這個做法可以使得對于場景的特征提取重心放在agent未來在的某一個位置,而不是為了考慮未來多個時刻的位置,去提取遠處的feature。這樣得到的高質(zhì)量anchor會在下一個refine的module進行精細調(diào)整。這樣結(jié)合了anchor-free和anchor-based的做法充分利用了兩個辦法的優(yōu)點,實現(xiàn)多mode長時間的預測。
這個做法是第一個探索了軌跡預測的連續(xù)性來實現(xiàn)高速inference的辦法。同時decoder部分也兼顧了多mode和長時間預測的任務。
Approach
Input and Output
同時prediction模塊還可以從高精地圖獲得M個polygon,每一個polygon都有多個點以及語義信息(crosswalk,lane等類型)。
預測模塊使用T個時刻的上述的agent state和地圖信息,要給出K個總共T'長度預測軌跡,同時還有其概率分布。
Query-Centric Scene Context Encoding
第一步自然是場景的encode。目前流行的factorized attention(時間和空間維度分別做attention)是這么做的,具體來說一共有三步:
- 時間維度attention,時間復雜度O(A),每個agent自己的時間維度矩陣乘法
- agent和map的cross attention,時間復雜度O(ATM),在每個時刻,agent和地圖元素的矩陣乘法
- agent和agent間的attention,時間復雜度O(T), 在每個時刻,agent和agent矩陣乘法
這個做法和之前的先在時間維度壓縮feature到當前時刻,再agent和agent,agent和地圖間交互的做法比起來,是對于過去每個時刻去做交互,因此可以獲取更多信息,比如agent和map間在每個時刻的交互演變。
但是缺點是三次方的復雜度隨著場景變復雜,元素變多,會變得很大。我們的目標就是既用好這個factorized attention,同時不讓時間復雜度這么容易爆炸。
一個很容易想到的辦法是利用上一幀的結(jié)果,因為在時間維度上其實有T-1幀是完全重復的。但因為我們需要把這些feature旋轉(zhuǎn)平移到agent當前幀的的位置和朝向,因此沒法就這么使用上一幀運算得到的結(jié)果。
為了解決坐標系的問題,采用了query-centric辦法,來學習場景元素的特征,而不依賴它們的全局坐標。這個做法對每個場景元素建立了局部的時空坐標系,在這個坐標系內(nèi)提取特征,即使ego到別處,這個局部提取出來的特征也是不變的。這個局部時空坐標系自然也有一個原點位置和方向,這位置信息作為key,提取出來的特征作為value,便于之后的attention操作。整個做法分為下面幾步:
Local Spacetime Coordinate System
對于agent i在t時刻的feature來說,選擇這個時刻的位置和朝向作為參考系。對于map元素來說,則采用這個元素的起始點作為參考系。這樣的參考系選擇方法可以在ego移動后提取的feature保持不變。
Scene Element Embedding
對于每個元素內(nèi)的別的向量特征,都在上述參考系里獲取極坐標表示表達。然后將它們轉(zhuǎn)成傅里葉特征來獲取高頻信號。concat上語義特征后再MLP獲取特征。對于map元素,為了保證內(nèi)部點的順序不相關(guān)性,先做attention后pooling的操作。最后獲得agent特征為[A, T, D], map特征為[M, D]. D是特征維度,保持一致才可以方便attention的矩陣相乘。這樣提取出來的特征可以使得ego處于任何地方都能使用。
傅里葉embedding: 制造正態(tài)分布的embedding,對應各種頻率的權(quán)重,乘輸入和2Π, 最后取cos和sin作為feature。直觀理解的話應該是把輸入當作一個信號,把信號解碼成多個基本信號(多個頻率的信號)。這樣可以更好的抓取高頻信號,高頻信號對于結(jié)果的精細程度很重要,一般的做法容易丟精細的高頻信號。值得注意的是對于noisy數(shù)據(jù)不建議使用,因為會誤抓錯誤的高頻信號。(感覺有點像overfit,不能太general但又不能精準過頭)
Relative Spatial-Temporal Positional Embedding
Self-Attention for Map Encoding
Factorized Attention for Agent Encoding
附近的定義為agent周圍50m范圍內(nèi)。一共會進行次。
值得注意的是,通過以上方法得到的feature具備了時空不變性,即不管ego在什么時刻到什么地方,上述feature都是不變的,因為都沒有針對當前的位置信息進行平移旋轉(zhuǎn)。由于相比于上一幀只是多了新的一幀數(shù)據(jù),并不需要計算之前的時刻的feature,所以總的計算復雜度除以了T。
Query-Based Trajectory Decoding
類似于DETR的anchor-free query去某些key value里做attention的辦法會導致訓練不穩(wěn)定,模態(tài)塌縮的問題,同時長時間預測也不靠譜,因為不確定度會在靠后時間爆炸。因此此模型采用了先來一次粗的anchor-free query辦法,再對這個輸出進行refine的anchor-base辦法。
整個網(wǎng)絡結(jié)構(gòu)
Mode2Scene and Mode2Mode Attention
Mode2Scene的兩步都采用了DETR結(jié)構(gòu):query為K個軌跡mode(粗的proposal步是直接隨機生成的,refine步是由proposal步得到的feature作為輸入),然后在場景feature(agent歷史,map,周圍agent)上做多次cross attention。
DETR結(jié)構(gòu)
Mode2Mode則是在K個mode間進行self attention,企圖實現(xiàn)mode間的diverse,不要都聚在一起。
Reference Frames of Mode Queries
為了并行預測多個agent的軌跡,場景的encoding是被多個agent分享的。因為場景feature都是相對于自身的feature,所以要使用的話還是得轉(zhuǎn)到agent的視角下。對于mode的query,會附加上agent的位置和朝向信息。和之前encode相對位置類似的操作,也會對場景元素和agent的相對位置的信息進行embedding作為key和value。(直觀上說就是agent每個mode在附近信息使用上的一個加權(quán)注意力)
Anchor-Free Trajectory Proposal
第一次是anchor free的辦法,采用可以學習的query來制造相對低質(zhì)量的軌跡proposal,一共會產(chǎn)生K個proposal。由于會用cross attention的方式從場景信息里提取特征,因此可以高效產(chǎn)生比較少而有效的anchor供第二次refine使用。self attention則使得各proposal總體會更diverse。
Anchor-Based Trajectory Refinement
anchor free的辦法雖然比較簡單,但也存在訓練不穩(wěn)定的問題,有可能mode塌縮。同時,隨機生成的mode還需要能在全場景里對于不同agent都有不錯的表現(xiàn),這比較難,很容易生成出不符合運動學的或者不符合交通的軌跡proposal。因此我們想到可以再來一次anchor-based修正。在proposal的基礎上預測了一個offset(加到原proposal獲得修正后軌跡),并預測了每個新軌跡的概率。
這個模塊同樣使用了DETR的形式,每個mode的query都是用上一步的proposal來提取,具體是用了一個小的GRU來embed每個anchor(一步步往前走),使用到最后一個時刻的feature作為query。這些基于anchor的query可以提供一定的空間信息,使得attention時更容易捕捉有用的信息。
Training Objectives
和HiVT一樣(參考HiVT的分析),采用Laplace分布。直白的講就是把每個mode下每個時刻建模為一個laplace分布(參考一般的高斯分布,由mean和var,代表這個點的位置和其不確定性)。并且認為時刻之間是獨立的(直接連乘)。Π代表了對應mode的概率。
Loss的話由3部分組成
主要分為兩部分:分類loss和回歸loss。
分類loss是指預測概率的loss,這個地方要注意的是需要打斷梯度回傳,不可以讓概率的引起的梯度傳到對于坐標的預測(即在假設每個mode預測位置為合理的前提下)。label則是最接近gt的為1,別的都是0。
回歸loss有兩個,一個是一階段的proposal的loss,一個是二階段的refine的loss。采用贏者通吃的辦法,即只計算最接近gt的mode的loss,兩個階段的回歸loss都要算。為了訓練的穩(wěn)定性,此處在兩個階段中也打斷了梯度回傳,使得proposal學習就專門學習proposal,refine就只學refine。
Experiments
Argoverse2基本各項SOTA(* 表示使用了ensemble技巧)
b-minFDE相比minFDE的區(qū)別在于額外乘上了和其概率相關(guān)的系數(shù). 即目標希望FDE最小的那條軌跡的概率越高越好。
關(guān)于ensemble技巧,感覺是有點作弊的:可以參考BANet里的介紹,下面簡單介紹一下。
生成軌跡的最后一步同時連做好多遍結(jié)構(gòu)一樣的submodel(decoder),會給出多組預測,比如有7個submodel,每個有6條預測,一共42條。然后用kmeans來進行聚類(以最后一個坐標點為聚類標準),目標是6組,每組7條,然后每組里面進行加權(quán)平均獲得新軌跡。
加權(quán)方法如下,為當前軌跡和gt的b-minFDE,c為當前軌跡的概率,在每組里面進行權(quán)重計算,然后對軌跡坐標加權(quán)求和獲得一條新軌跡。(感覺多少有些tricky,因為c其實是這個軌跡在submodel輸出里的概率,拿來在聚類里算有點不太符合預期)
并且這么操作后新軌跡的概率也很難精準計算,不能用上述方法,否則總概率和就不一定是1了。似乎也只能等權(quán)重地算聚類里的概率了。
Argoverse1也是遙遙領(lǐng)先
關(guān)于場景encode的研究:如果復用了之前的場景encode結(jié)果,infer的時間可以大幅減少。agent和場景信息的factorized attention交互次數(shù)變多,預測效果也會變好,只是latency也漲的很兇,需要權(quán)衡。
各種操作的研究:證明了refine的重要性,以及factorized attention在各種交互中的重要性,缺一不可。