论文笔记:PointSIFT
生活随笔
收集整理的這篇文章主要介紹了
论文笔记:PointSIFT
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
原文:PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation
PointSIFT
1、四個問題
- 3D點云感知通常包含了三大任務:3D物體分類,3D目標檢測,以及3D語義分割。
- 在三個大任務中,3D點云的語義分割相對更具挑戰(zhàn)性,也是這篇論文所要解決的問題。
- 參考SIFT特征子,作者設(shè)計了一個PointSIFT模塊,用來對三維點云在不同方向上的信息進行編碼,并且也具有尺度不變性。
- 首先,8個重要方向的信息通過一個方向編碼單元(orientation-encoding unit)來提取。
- 然后,通過堆疊多個尺度下的方向編碼單元(orientation-encoding unit),以獲得尺度不變性。
- 目前點云分割領(lǐng)域state-of-the-art的方法。
- 在ScanNet數(shù)據(jù)集上的測試準確率達到86%,而此前的PointNet則為73.9%、PointNet++為84.5%。
- 在S3DIS數(shù)據(jù)集上,對大多數(shù)類的點云分割效果都取得了最好的效果。
- 作者公開了代碼,下次試試看再說。
- 雖然文中說是參考SIFT設(shè)計了PointSIFT,但更多的還是依靠PointNet++的結(jié)構(gòu)設(shè)計,只是仿照SIFT增加了尺度不變性,與此同時也會讓計算量增加。盡管精度提高了很多,但是效率和速度還是硬傷。
- 采樣不均衡性,隨機選取中心點無法保證一定能將領(lǐng)域覆蓋所有的點,如下圖所示。由于點云的無序性和稀疏性,很大程度上會限制網(wǎng)絡(luò)的效果。
2、論文概述
2.1、介紹
- SIFT是最成功的特征描述子之一,主要是因為它考慮了圖像表示(shape representation)的兩個基本特征:方向編碼(orientation-encoding)和尺度感知(scale-awareness)。
- 尺度感知(scale-awareness)意思是,SIFT能自動選擇目標圖像最合適提取特征的尺寸。
- 方向編碼(orientation-encoding)意味著,能夠感知不同方向下的圖案信息。
- PointSIFT模塊就是基于上面兩個性質(zhì)設(shè)計的。下面是基本思路:
- 與SIFT不同的是,PointSIFT不是人工設(shè)計(handcrafted)的,而是一個神經(jīng)網(wǎng)絡(luò)模塊,在訓練過程中自動優(yōu)化。
- PointSIFT的基本模塊是方向編碼單元(orientation-encoding unit),在8個方向上提取特征。
- 通過堆疊多個方向編碼單元(orientation-encoding unit,簡寫為OE),在不同層上的OE單元可以感知到不同尺度的信息,即具有了尺度感知(scale-awareness)的能力。
- 最后通過shortcut連接,將這些OE單元連接到一起,再讓神經(jīng)網(wǎng)絡(luò)自行選擇(訓練后)合適的尺度。
2.2、PointSIFT模塊
2.2.1、基本模塊概述
- 輸入為n×dn \times dn×d,即點云;輸出也為n×dn \times dn×d,是提取到的特征。
- PointSIFT模塊采用了多個不同的方向編碼卷積層堆疊而成,不同層都表示了不同的尺度,最后的一層將前面所有方向編碼卷積層的輸出通過shortcuts連在一起,再從中提取出最終的尺度不變的特征信息。
2.2.2、方向編碼卷積(orientation-encoding convolution)
- 給定點p0p_0p0?,其對應的特征為f0f_0f0?。以p0p_0p0?為中心點的3D空間中,可以根據(jù)8個方向分為8個子空間(octant)。從其中分別尋找p0p_0p0?的k個最近鄰點,如果在某個子空間(octant)內(nèi),搜索半徑rrr內(nèi)沒有找到點,就將這個子空間的特征認為等于f0f_0f0?。如圖a所示。
- 為了使卷積操作能感知方向上的信息,分別在X、Y、Z軸上進行三階段的卷積。
- 對搜索到的k近鄰點的特征編碼,M∈R2×2×2×dM \in R^{2 \times 2 \times 2 \times d}M∈R2×2×2×d,前三個維度分別表示點在8個子空間上的編碼。比如,(1,1,1,)(1, 1, 1, )(1,1,1,)表示top-front-right的octant。
- 如圖c所示,卷積操作如下:
- Ax,Ay,AzA_x, A_y, A_zAx?,Ay?,Az?為待優(yōu)化的卷積權(quán)值;Convx(Convy,Convz)Conv_x(Conv_y, Conv_z)Convx?(Convy?,Convz?)分別表示在X(Y,Z)X(Y, Z)X(Y,Z)軸上的卷積操作;g(?)g(\cdot)g(?)表示ReLU(BatchNorm(?))ReLU(BatchNorm( \cdot ))ReLU(BatchNorm(?))。
- 在三次卷積后,每個點都被轉(zhuǎn)換為了一個ddd維向量,這個向量就代表著點p0p_0p0?附近k領(lǐng)域內(nèi)的形狀信息。
- 注意,經(jīng)過方向編碼(orientation-encoding)后再利用卷積提取特征,現(xiàn)在的輸出點集的ddd維表示的已經(jīng)不是原始的坐標等等的信息了,實質(zhì)上已經(jīng)轉(zhuǎn)換為了另一個分布了,即從這個領(lǐng)域內(nèi)所有點的信息中提取的特征點。雖然PointSIFT的輸入輸出都是N×dN \times dN×d。
2.2.3、討論一個特殊情況
- 像PointNet++,搜索最近鄰點時使用的是球形搜索算法(ball query searching)。
- 一方面,在方向編碼卷積(orientation-encoding convolution)中,只需要在每個方向上搜索一個更小的領(lǐng)域,效率比球形搜索算法更高。
- 另一方面,如上圖所示,K近鄰的k如果較小,很容易集中在一個很小的范圍。實際上,這不利于表示中心點所在區(qū)域的整體特征,換句話說,只能提取到紅點那塊區(qū)域的信息。使用方向編碼卷積一定程度上,可以避免這個問題,可以至少兼顧8個方向的特征信息。當然方向越多越好,但與此同時計算復雜度也會增加。
2.2.4、尺度感知結(jié)構(gòu)(scale-aware architecture)
- 尺度感知這部分感覺更好理解,類別于CNN的感受野隨著卷積層的深入逐漸擴大。
- 對于某一個方向編碼卷積單元來說,會對8個方向領(lǐng)域內(nèi)的點進行特征提取,可以將其感受野認為是8個方向下的k領(lǐng)域,每個領(lǐng)域?qū)粋€特征點。隨著堆疊,每層的每個點又會對應上一層8個方向領(lǐng)域的特征點。。。
- 依此類推,可以算出,理想情況下(每次卷積時每個方向上都有點),堆疊iii次,感受野為8i8^i8i個點。
- 不難理解,每層都有不同的感受野,自然可以像SIFT那樣提取不同尺度的信息了。
- 最后將這些層都通過shortcut拼接在一起,接上pointwise卷積(1×11 \times 11×1卷積),讓網(wǎng)絡(luò)隨著訓練自行選擇合適的尺度即可。
2.2.5、網(wǎng)絡(luò)整體結(jié)構(gòu)
- 網(wǎng)絡(luò)分為了兩部分:編碼器和解碼器。
- 輸入為n=8192n=8192n=8192個點的點云,如果只考慮3D點的X、Y、Z坐標,那么d=3d=3d=3;如果另外加入了RGB信息,那么d=6d=6d=6。
- 參考PointNet++的設(shè)計,第一層先將輸入點云的維度轉(zhuǎn)換為64維。
- 同樣參考自PointNet++,SA(set abstraction)和FP(feature propagation)都嵌入在網(wǎng)絡(luò)中,主要任務分別是降采樣和上采樣。
- 最后將解碼器的輸出接到全連接層,用于預測各個類的概率。
2.3、實驗結(jié)果
- 比較懶,直接貼結(jié)果圖了。
總結(jié)
以上是生活随笔為你收集整理的论文笔记:PointSIFT的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记:Triplet Network
- 下一篇: 论文笔记:YOLO