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重複使用這些feature。但是agent-centric辦法需要轉到agent座標系,導致其必須重新encode場景。為了解決這個問題,我們使用了query-centric的方法:場景元素在它們自己的時空座標系內進行特徵提取,和全局座標系無關(ego在哪裡無關了)。 (高精地圖可以用因為地圖元素有長久的id,非高精地圖應該就不好用了,地圖元素的得在前後幀tracking住)
這使得我們可以把之前處理好的encoding結果重複使用,對於agent來說直接用這些cache的feature,這樣就能節省latency了。 其次,為了更好地用這些場景encode結果進行多mode長時間預測,我們使用了anchor-free的query來一步步(在上一個位置的地方)提取場景的feature,這樣每一次的decode都是非常短的一步。這個做法可以使得對於場景的特徵提取重心放在agent未來在的某個位置,而不是為了考慮未來多個時刻的位置,去提取遠處的feature。這樣得到的高品質anchor會在下一個refine的module進行精細調整。這樣結合了anchor-free和anchor-based的做法充分利用了兩個辦法的優點,實現多mode長時間的預測。
這個做法是第一個探討了軌跡預測的連續性來實現高速inference的辦法。同時decoder部分也兼顧了多mode和長時間預測的任務。同時prediction模組還可以從高精地圖獲得M個polygon,每個polygon都有多個點以及語意資訊(crosswalk,lane等類型)。
預測模組使用T個時刻的上述的agent state和地圖信息,要給出K個總共T'長度預測軌跡,同時還有其機率分佈。
#第一步自然是場景的encode。目前流行的factorized attention(時間和空間維度分別做attention)是這麼做的,具體來說一共有三步:
這個做法和之前的先在時間維度壓縮feature到當下時刻,再agent和agent,agent和地圖間交互的做法比起來,是對於過去每個時刻去做交互,因此可以獲取更多信息,比如agent和map間在每個時刻的交互演變。
但缺點是三次方的複雜度隨著場景變得複雜,元素變多,會變得很大。我們的目標就是既用好這個factorized attention,同時不讓時間複雜度這麼容易爆炸。
一個很容易想到的辦法是利用上一幀的結果,因為在時間維度上其實有T-1幀是完全重複的。但因為我們需要把這些feature旋轉平移到agent目前幀的位置和朝向,因此沒辦法就這樣使用上一幀運算得到的結果。
為了解決座標系的問題,採用了query-centric辦法,來學習場景元素的特徵,而不依賴它們的全局座標。這個做法對每個場景元素建立了局部的時空座標系,在這個座標系內提取特徵,即使ego到別處,這個局部提取出來的特徵也是不變的。這個局部時空座標係自然也有一個原點位置和方向,這位置資訊作為key,提取出來的特徵作為value,以便於之後的attention操作。整個做法分為下面幾步:
對於agent i在t時刻的feature來說,選擇這個時刻的位置和朝向作為參考系。對於map元素來說,則採用這個元素的起始點作為參考系。這樣的參考系選擇方法可以在ego移動後提取的feature保持不變。
對於每個元素內的別的向量特徵,都在上述參考系裡取得極座標表示表達。然後將它們轉成傅立葉特徵來獲取高頻訊號。 concat上語意特徵後再MLP取得特徵。對於map元素,為了確保內部點的順序不相關性,先做attention後pooling的操作。最後得到agent特徵為[A, T, D], map特徵為[M, D]. D是特徵維度,保持一致才可以方便attention的矩陣相乘。這樣提取出來的特徵可以使得ego在任何地方都能使用。
傅立葉embedding: 製造常態分佈的embedding,對應各種頻率的權重,乘輸入和2Π, 最後取cos和sin作為feature。直覺理解的話應該是把輸入當作一個訊號,把訊號解碼成多個基本訊號(多個頻率的訊號)。這樣可以更好的抓取高頻訊號,高頻訊號對於結果的精細程度很重要,一般的做法容易失去精細的高頻訊號。值得注意的是對於noisy資料不建議使用,因為會誤抓錯誤的高頻訊號。 (感覺有點像overfit,不能太general但又不能精準過頭)
#附近的定義為agent周圍50m範圍內。一共會進行次。
值得注意的是,透過上述方法得到的feature具備了時空不變性,即不管ego在什麼時刻到什麼地方,上述feature都是不變的,因為都沒有針對當前的位置資訊進行平移旋轉。由於相較於上一幀只是多了新的一幀數據,並不需要計算之前的時刻的feature,所以總的計算複雜度除以了T。
整個網路結構
DETR結構
Mode2Mode則是在K個mode間進行self attention,企圖實現mode間的diverse,不要都聚在一起。分類loss和回歸loss。
分類loss是指預測機率的loss,這個地方要注意的是需要打斷梯度回傳,不可以讓機率的引起的梯度傳到對於座標的預測(即在假設每個mode預測位置為合理的前提下)。 label則是最接近gt的為1,別的都是0。
回歸loss有兩個,一個是一階段的proposal的loss,一個是二階段的refine的loss。採用贏者全拿的辦法,也就是只計算最接近gt的mode的loss,兩個階段的迴歸loss都要算算出來。為了訓練的穩定性,這裡在兩個階段中也打斷了梯度回傳,使得proposal學習就專門學習proposal,refine就只學refine。
Argoverse2基本各項SOTA(* 表示使用了ensemble技巧)
#b-minFDE相較於minFDE的差異在於額外乘上了與其機率相關的係數. 即目標希望FDE最小的那條軌跡的機率越高越好。
關於ensemble技巧,感覺是有點作弊的:可以參考BANet裡的介紹,以下簡單介紹一下。
生成軌蹟的最後一步同時連做好多遍結構一樣的submodel(decoder),會給出多組預測,例如有7個submodel,每個有6條預測,一共42條。然後用kmeans來進行聚類(以最後一個座標點為聚類標準),目標是6組,每組7條,然後每組裡面進行加權平均獲得新軌跡。
加權方法如下,為當前軌跡和gt的b-minFDE,c為當前軌蹟的機率,在每組裡面進行權重計算,然後對軌跡座標加權求和獲得一條新軌跡。 (感覺多少有些tricky,因為c其實是這個軌跡在submodel輸出裡的機率,拿來在聚類裡算有點不太符合預期)
並且這麼操作後新軌蹟的機率也很難精準計算,不能用上述方法,否則總機率和就不一定是1了。似乎也只能等權重地算聚類裡的機率了。
Argoverse1也是遙遙領先
關於場景encode的研究:如果復用了先前的場景encode結果,infer的時間可以大幅減少。 agent與場景資訊的factorized attention互動次數變多,預測效果也會變好,只是latency也漲的很兇,需要權衡。
各種操作的研究:證明了refine的重要性,以及factorized attention在各種互動中的重要性,缺一不可。
以上是軌跡預測系列 | HiVT之進化版QCNet到底講了啥?的詳細內容。更多資訊請關注PHP中文網其他相關文章!