【全文翻譯】PointRNN: Point Recurrent Neural Network for Moving Point Cloud Processing

在這裏我給出我在pytorch框架下實現的計算CD和EMD的cuda加速代碼,本人正在求學,需要在github頁面刷刷經驗,覺得代碼有用的同學麻煩再github給個星星吧!
https://blog.csdn.net/taifengzikai/article/details/106994972
https://github.com/FengZicai/shape-measure
後續我會把我實現的pytorch版本的pointlstm完整工程放到github上。
實驗的翻譯也會補上,
謝謝大家了!


摘要

在本文中,介紹了用於移動點雲處理的點遞歸神經網絡(PointRNN)。在每個時間步長,PointRNN都將點座標P∈Rn×3和點特徵X∈Rn×d作爲輸入(n和d分別表示點數和特徵通道數)。 PointRNN的狀態由點座標P和點狀態S∈Rn×dl(dI表示狀態通道的數量)組成。同樣,PointRNN的輸出由P和新的點特徵Y∈Rn×dll(dII表示新特徵通道的數量)組成。由於點雲是無序的,因此無法直接操作兩個時間步的點特徵和狀態。因此,採用基於點的時空局部相關來根據點座標聚合點特徵和狀態。還提出了PointRNN的兩種變體,即點門控循環單元(PointGRU)和點長短期記憶(PointLSTM)。將PointRNN,PointGRU和PointLSTM應用於移動點雲預測,該移動點雲預測旨在根據給定的點的歷史運動來預測點在集合中的未來軌跡。實驗結果表明,PointRNN,PointGRU和PointL-STM能夠在合成數據集和真實數據集上產生正確的預測,證明了它們對點雲序列建模的能力。
論文鏈接:https://arxiv.org/pdf/1910.08287.pdf
代碼鏈接:https://github.com/hehefan/PointRNN

主要貢獻:

大多數現有的工作都集中在靜態點雲分析上,例如分類,分割和檢測[22、23、15、20]。很少有作品研究動態點雲。智能系統不僅需要了解周圍的靜態場景,還需要了解環境中的動態變化的能力。在本文中,提出了點遞歸神經網絡(PointRNN)及其兩個用於移動點雲處理的變體。
在常規設置中,點雲是3D空間中的一組點。通常,點雲由點的三個座標P∈Rn×3及其特徵X∈Rn×d(如果提供了特徵)表示,其中n和d分別表示點數和特徵通道。點雲不規則格式的數據結構大大增加了挑戰,使得圖像和視頻上的深度神經網絡的許多現有成就無法直接處理點雲。
循環神經網絡(RNN)及其變體,例如長短期記憶(LSTM)[10]和門控循環單元(GRU)[5],非常適合處理時間序列數據。通常,(原始)RNN在時間步t處查看向量xt,將其內部狀態(內存)st-1更新爲st,然後輸出新的向量yt。 RNN的行爲可以表示如下:
在這裏插入圖片描述
其中θ表示RNN的參數。由於移動點雲是一種時間序列,因此可以利用RNN對其進行處理。
然而,傳統的RNN在處理點雲序列上有兩個嚴重的限制。一方面,RNN從一維向量中學習,其中輸入,狀態和輸出高度緊湊。向量很難代表整個點雲。儘管P和X可以展平爲一維向量,但是這種操作嚴重破壞了數據結構,並增加了神經網絡理解點雲的難度。而且,該操作不獨立於點排列。如果使用全局特徵表示點雲,則局部結構將丟失。爲了克服這個問題,PointRNN直接將(P,X)作爲輸入。類似地,RNN中的一維狀態s和輸出y擴展到PointRNN中的二維S∈Rn×dl和Y∈Rn×dll,其中每行對應一個點。此外,由於S和Y取決於點座標,因此P被添加到PointRNN的狀態和輸出中。 PointRNN的行爲可以表述爲:
在這裏插入圖片描述
在圖1中說明了RNN和PointRNN單元。
在這裏插入圖片描述
圖1. RNN和PointRNN之間的比較。 在時間步t,RNN將向量xt作爲輸入,將其狀態st-1更新爲st,並輸出向量yt。 PointRNN將點座標P t和點特徵Xt用作輸入,將其狀態(P t-1,St-1)更新爲(P t,St),並輸出P t和新的點特徵Y t。

另一方面,RNN基於連接操作將先前狀態st-1和當前輸入xt進行彙總(圖2(a))。但是,由於點雲是無序的,因此無法將串聯直接應用於點雲。爲了解決這個問題,根據點座標採用時空局部相關來聚合Xt和St-1(圖2(b))。具體來說,對於P t中的每個點,PointRNN首先在P t-1中搜索其鄰居。其次,對於每個鄰居,將查詢點的特徵,鄰居的狀態以及從鄰居到查詢點的位移連接起來,然後由共享的全連接(FC)層進行處理。最後,通過合併將處理後的串聯簡化爲單個表示。

本文的主要貢獻是:
PointRNN提供了點雲序列處理的基本組件。由於它可能會遇到與RNN相同的爆炸和消失梯度問題,因此通過將PointRNN與GRU和LSTM相結合,爲PointRNN提出了兩種變體,即點門控循環單元(PointGRU)和點長短期記憶(PointLSTM),分別。將PointRNN,PointGRU和PointLSTM應用於移動點雲預測。給定點雲的歷史運動,此任務的目標是預測其點的未來軌跡。預測未來點雲的移動方式可以幫助機器人和自動駕駛汽車計劃其行動並做出決策。而且,移動點雲預測具有先天優勢,即不需要人工註釋的監督。基於PointRNN,PointGRU和PointLSTM,建立了序列到序列(seq2seq)[28]模型來預測移動點雲。在合成的運動MNIST點雲數據集和兩個大型自動駕駛數據集,即Argoverse [3]和nuScenes [2]上的實驗結果表明,PointRNN,PointGRU和PointLSTM產生正確的預測,證實了它們處理運動點雲的能力。

在這裏插入圖片描述
圖2. a)RNN通過連接操作,然後是全連接(FC)層,聚合輸入xt∈Rd和狀態st-1∈Rdl。 b)PointRNN通過時空局部相關性根據點座標將Xt∈Rn×d和St-1∈Rn×dl聚合。 首先,對於P t∈Rn×3中的每個點,PointRNN搜索P t-1中的k個鄰居。 其次,對於每個鄰居,將Xt中查詢點的特徵,St-1中的鄰居狀態以及從鄰居到查詢點的位移連接在一起。 第三,由FC層處理k個級聯表示。 最後,合併用於合併k個表示。

算法框架:

一、PointRNN
在本節中,首先回顧標準(普通)RNN,然後詳細描述的PointRNN。RNN是一類深層神經網絡,它使用其狀態來處理輸入序列。這使其具有時間動態行爲。 RNN依靠串聯操作彙總過去和當前,在本文中稱爲rnn函數,
在這裏插入圖片描述
其中▪表示矩陣乘法,而[▪,▪]表示串聯。W∈Rdl×(d + dl)和b∈Rdl是要學習的RNN的參數。可以通過深度神經網絡中的全連接(FC)層來實現此操作(如圖2(a)所示)。通常,RNN使用其狀態st作爲輸出,即yt = st。
傳統的RNN從一維向量中學習,從而將其應用於過程點雲序列。爲了保持空間結構,建議直接將座標Pt∈Rn×3和特徵Xt∈Rn×d作爲輸入。類似地,RNN中的狀態st和輸出yt擴展到PointRNN中的St∈Rn×dl和Yt∈Rn×dll。等式(2)中表示了第t步PointNNN點狀態的更新。
在這裏插入圖片描述
其中W∈Rdl×(d + dl + 3),b∈Rdl和N(▪)是鄰域查詢。將此基於點的時空局部相關稱爲point-rnn。與RNN類似,默認情況下,PointRNN使用St作爲輸出,即Y t = St.
point-rnn函數的目標是根據點座標彙總過去和當前(如圖2(b)所示)。給定(Pt,Xt)和(Pt-1,St-1),point-rnn根據Pt和Pt-1合併Xt和St-1。具體地,對於Pt中的每個點,以第i個點Pit爲例,point-rnn首先在Pt-1中找到其鄰居。鄰居可能共享有關查詢點Pit的相同幾何形狀和運動信息。其次,對於每個鄰居,以鄰居P jt-1爲例,將查詢點的特徵Xit,鄰居的狀態Sj t-1,以及從鄰居到查詢點的位移Pit - Pjt-1進行級聯,隨後由共享FC層進行處理。第三,將處理後的串聯合併爲單個表示。point-rnn的輸出,即St,包含Pt中每個點的過去和當前信息。
採用兩種方法進行鄰域查詢。第一個直接爲查詢點(kNN)找到k個最近的鄰居。 第二個方法是,首先找到距查詢點半徑範圍內的所有點,然後從這些點採樣k個鄰居(球形查詢[23])。 由於點雲是一組無序點,因此同一行上兩個時間步的點狀態或特徵可能對應於不同點。如果沒有點座標,則獨立的St或Y t毫無意義。因此,將點座標P t添加到PointRNN的狀態和輸出中。
PointRNN提供了一個原型,該原型使用RNN來處理點雲序列。 PointRNN中的每個組件都是必需的。 但是,可以設計出更有效的時空-局部相關方法來代替point-rnn,這在以後可以進一步研究。
二、PointGRU和PointLSTM
因爲PointRNN繼承了RNN,所以它可能會遇到與RNN相同的爆炸和消失梯度問題。因此,提出了兩種變體,分別將PointRNN與GRU和LSTM結合起來以克服這些問題。將GRU中的級聯運算替換爲時空局部相關運算,即point-rnn,形成PointGRU單元。第t步中PointGRU的更新公式如下:
在這裏插入圖片描述
其中Zt是更新門,Rt是復位門。 σ(▪)表示sigmoid函數,⊙表示Hadamard乘積。與PointRNN相似,PointGRU的輸入爲(P t,Xt),狀態爲(P t,St),默認情況下,輸出爲(P t,St)。注意,除了point-rnn函數之外,GRU和PointGRU之間的另一個區別是,PointGRU還有一個附加步驟Sˆt-1。此步驟的目標是根據當前輸入點P t加權和置換St-1。只有在此步驟之後,才能在先前狀態Sˆt-1和當前復位門Rt之間執行Hadamard積。
類似地,LSTM中的串聯操作被替換爲point-rnn函數,從而形成PointLSTM單元。第t步對PointLSTM的更新的公式如下:
在這裏插入圖片描述

其中,It是輸入門,F t是忘記門,Ot是輸出門,Ct是單元狀態,Ht是隱藏狀態。 PointLSTM的輸入爲(P t,Xt),狀態爲(P t,Ht,Ct),默認情況下,輸出爲(Pt,Ht)。 像從GRU到PointGRU一樣,與LSTM相比,PointL- STM還有一個附加步驟Cˆ t-1,它根據當前輸入點P t加權和置換Ct-1。
三、移動點雲預測框架
運動點雲提供了場景中的大量幾何信息以及運動中的深刻動態變化。瞭解場景並想象3D空間中的運動是機器人和自動駕駛汽車平臺的基本能力。毫無疑問,能夠預測雲中點未來軌跡的智能系統將具有這些能力。在本文中,作者將PointRNN,PointGRU和PointLSTM應用於移動點雲預測。由於此任務不需要外部人工註釋的監督,因此可以無監督的方式訓練模型。
基於seq2seq框架設計了一個基本模型和一個高級模型。基本模型(如圖3(a)所示)由兩部分組成,即,一部分用於編碼給定點雲序列,另一部分用於預測。具體而言,編碼PointRNN,PointGRU或PointLSTM單元會逐個監視輸入點雲。觀察最後一個輸入P t後,其狀態將用於初始化預測PointRNN,PointGRU或PointLSTM單元的狀態。然後,預測單元將P t作爲輸入並開始進行預測。預測模型不是直接生成預測的點座標,而是預測當前步驟和下一步之間將發生的位移ΔPt,可以看作3D場景流[17,9]。
可以堆疊多個PointRNN,PointGRU或PointLSTM單元,以構建用於分層預測的多層結構。但是,由於所有點都在每一層中進行處理,因此此結構的主要問題是計算量大,尤其是對於高分辨率點集。爲了緩解這個問題,提出了一個高級模型(如圖3(b)所示)。該模型借鑑了PointNet ++ [23]的兩個組件,即1)下采樣點及其特徵的採樣操作和分組操作,以及2)用於將與中間點相關聯的表示上採樣到原始點的特徵傳播層。通過這種向下採樣結構,高級模型可以利用分層學習的優勢,同時減少每層中要處理的點。
在這裏插入圖片描述
圖3.移動點雲預測的架構。 a)基本模型(具有一個PointRNN層)。 PointRNN將給定的點雲序列編碼爲狀態(P t,St),然後將其用於初始化預測PointRNN的狀態。 可以沿輸出方向堆疊多個PointRNN層。 通過P t +ΔPt達到預測P~t + 1。 b)預測高級模型的一部分(具有三個PointRNN層)。 採樣(S)和分組(G)分別用於對點和組要素進行下采樣。 PointRNN彙總過去和當前,並輸出特徵以進行預測。 特徵傳播(FP)層用於將特徵從子採樣點傳播到原始點。 全連接(FC)層使特徵迴歸到預測位移∆P t。

四、訓練
有兩種訓練循環神經網絡的策略。第一個方法是在預測過程中使用ground truths作爲輸入,這稱爲teacher-forcing訓練。第二種方法使用網絡生成的預測作爲輸入(圖3(a)),稱爲free- running訓練。當使用teacher-forcing訓練時,發現模型很快陷入了局部最優狀態,其中對於所有輸入而言,∆P t趨於爲0。因此,採用free- running的培訓策略。
由於點雲是無序的,因此point-to-point損失函數無法直接應用於計算預測值與ground truths之間的差。損失函數應不變於輸入點的順序。在本文中,採用倒角距離(CD)和搬土距離(EMD)。點集P和P I之間的CD定義如下:
在這裏插入圖片描述
基本上,此損失函數是最近鄰距離度量標準,可以雙向測量兩組誤差。 P中的每個點都映射到P I中的最近點,反之亦然。 從P到P I的EMD定義如下:
在這裏插入圖片描述
其中φ:P-> P I是雙射。 EMD計算兩個點雲之間的點對點映射。 總損失如下
在這裏插入圖片描述
其中超參數α,β≥0。

在這裏我給出我在pytorch框架下實現的計算CD和EMD的cuda加速代碼,本人正在求學,需要在github頁面刷刷經驗,覺得代碼有用的同學麻煩再github給個星星吧!
https://blog.csdn.net/taifengzikai/article/details/106994972
https://github.com/FengZicai/shape-measure

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章