目的
- 點和鄰近點的測地線距離估計。得到這樣的估計後,我們求一個點的鄰域時,就可以忽略那些歐氏距離很近,但測地線距離很遠的點,從而減小誤差。
大概過程
測地距離估計
- 得到Ground Truth:對每個點求出以爲半徑的鄰域,對鄰域內的每個點求測地距離。
- Encoder-Decoder部分:特徵提取。基於PointNet++,得到每個採樣點的特徵;再通過插值+FC,得到每個點的維特徵。
- 按不同的半徑,得到不同的鄰域,分別採樣個點,因此每個點的鄰域特徵爲,將此鄰域特徵輸入FC,得到新的鄰域特徵,維度爲。和原維特徵broadcast後concatenate,得到維特徵。
- 將特徵輸入到FC,得到的張量,和Ground Truth求L1誤差,進行反向傳播。
PUF:GeoNet融合上採樣(PU-Net)
- 確定好採樣點的鄰域後,除了直接輸入每個點的座標,也輸入它們和採樣點之間的測地距離。注意到這裏的測地距離並不是已經求出得到的,而是GeoNet這個網絡結構,因此我們在訓練PU-Net的過程中,也同時在訓練GeoNet,而非分開成兩個階段。
- 因此損失函數由兩部分組成,GeoNet的L1測地距離損失,和原來PU-Net的損失。
POF:GeoNet融合法向估計與表面網格生成(PointNet++)
- 由GeoNet得到測地距離,選擇鄰域。和PUF相比,直接去掉了歐氏距離近而測地距離遠的點。(但我不知道在end-to-end訓練過程中怎麼做到這一點)
- 將GeoNet最後倒數第二個FC層的參數,作爲點的特徵輸入到PointNet++中。
- 將融合後的特徵用PointNet++的方式估計法向。
- 損失函數由GeoNet的L1測地距離損失,和原來PointNet++的L1法向估計損失兩部分組成。
- 由法向進行泊松重建,得到表面網格。
疑問
- GeoNet融合網絡似乎都是end-to-end的,爲何不先訓完GeoNet,再將結果給到PU-Net或者PointNet++?另外,在GeoNet未算出來的時候,如何依賴測地距離得到鄰域?
- PUF和POF在圖示上都有兩個分支,但從文本描述上它們應該融合在一起?
相關的思考
- 這篇paper非常直觀非常有用。平時得到鄰域時,確實會有測地距離很大的情況,帶來很大的誤差。如果它被避免(即使是部分避免),也會取得很大的進步。它應該可以和很多點雲的方法做融合。
- 期待這篇paper的代碼開源。
參考文獻
He, Tong, et al. “GeoNet: Deep Geodesic Networks for Point Cloud Analysis.” arXiv preprint arXiv:1901.00680 (2019).