1. 程式人生 > 其它 >Learning to Sample

Learning to Sample

Abstract

處理大型的點雲是一項很有挑戰性的任務,因此,我們將點雲取樣到一個合適的size去更方便的處理。

  • 目前流行的取樣方法是FPS,但是FPS對於下游任務是不可知的,如在反向傳播啥的,他們之間是沒有互動的。
  • 我們證明了通過dl去學習如何取樣是更好的,因此提出了一個深度網路來簡化三維點雲。其被稱為S-NET
  • 該方法可以解決第一點,也就是針對特定任務進行優化。

Introduction

  • FPS等這些方法考慮了點雲的結構,選取一組彼此相距最遠的點。
  • 這些取樣方法和文獻中其他方法一樣,都是根據非學習的預定規則進行操作的。
  • S-NET學習生成更小的點雲,該點雲取樣可以為下游任務進行鍼對性優化。

簡化之後的點雲必須平衡兩個相互衝突的方面:

  • 希望它保持和原始形狀的相似性,
  • 希望他可以優化到後續任務。
    我們通過訓練網路生成一組滿足兩個目標的點來解決這個問題:取樣損失和任務損失。
  • 取樣損失驅動生成的點的形狀接近輸入點雲。
  • 任務損失確保點對任務有優化。

FPS的一個優點是他取樣得到的集合是原始點的子集,但是S-NET生成的簡化點雲並不能保證是輸入點雲的子集。

  • 這個方法可以被視為是一種特徵選擇機制,每個點都是基礎形狀的一個特徵,此處試圖找出對任務貢獻最大的點。
  • 它也可以被解釋為是視覺注意力的一種形式,將後續的任務網路集中在重要的點上。

貢獻:

  • 針對特定任務資料驅動取樣方法
  • 一種遞進的抽樣方法,根據點與任務的相關性進行排序

相關工作

點雲的取樣和簡化

相關的方法,都是在優化各種抽樣目標,然而他們沒有考慮到所執行的任務的目標。

Method

問題描述:給定一個點集\(P=\{p_i\in\mathbb{R}^3,i=1,\dots,n\}\),取樣大小為\(k\leq n\)和一個任務網路\(T\),找出\(k\)個點的子集\(S^*\),使任務網路的目標函式\(f\)最小化。

\[S^*=argmin_S f(T(S)),S\subset P,|S|=k\leq n\tag{1} \]

\(\color{red}{這個問題帶來了一個挑戰就是取樣看起來類似於池化,但是取樣是無法反向傳播的,但是池化可以,因此可以計算池化的梯度。}\)

然而離散取樣就像arg-pooling,傳播的值不能增量的更新。因此抽樣操作不可以直接進行訓練。因此,我們將生成的點和原始點雲進行匹配,得到輸入點的子集,即取樣點。如下圖

S-NET的輸入是\(n\)個三維座標的集合,代表一個三維形狀。S-NET的輸出是\(k\)個生成的點。S-NET後面是一個任務網路。輸入\(n\)個點對任務網路進行預訓練,在點雲上執行給定的任務。S-NET在訓練和測試的過程中保持固定,這確保了取樣是針對任務進行優化的,而不是針對任意抽樣進行優化的任務。


在訓練階段,生成的點被送到任務網路當中,這些點通過最小化任務損失來優化手頭的任務。並且使用第二個損失項,鼓勵生成的每個點靠近輸入點的位置,並迫使生成的點在輸入點雲的分佈中擴散。


在推理階段的時候,將生成的點和輸入點雲進行匹配以獲得其子集。這些取樣點就是我們的最終輸出取樣點,這些點通過網路並對其效能進行評估。

此處提供了兩個取樣版本:S-NETProgressiveNet。在第一個版本中,我們根據樣本大小訓練不同的取樣網路。在第二個版本中,它可以產生任何大小的 小於輸入樣本的取樣樣本。

S-NET