【TensorFlow】01 TensorFlow簡介與Python基礎
1176
2025-03-31
前言
PointNet是直接對點云進行處理的,它對輸入點云中的每一個點,學習其對應的空間編碼,之后再利用所有點的特征得到一個全局的點云特征。Pointnet提取的全局特征能夠很好地完成分類任務,但局部特征提取能力較差,這使得它很難對復雜場景進行分析。
PointNet++核心是提出了多層次特征提取結構,有效提取局部特征提取,和全局特征。
一、PointNet
PointNet是直接對點云進行處理的,它對輸入點云中的每一個點,學習其對應的空間編碼,之后再利用所有點的特征得到一個全局的點云特征。
論文地址:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
開源代碼-原論文實現:https://github.com/charlesq34/pointnet
開源代碼-Pytorch實現:https://github.com/fxia22/pointnet.pytorch
1.1 PointNet思路流程
1)輸入為一幀的全部點云數據的集合,表示為一個nx3的2d tensor,其中n代表點云數量,3對應xyz坐標。
2)輸入數據先通過和一個T-Net學習到的轉換矩陣相乘來對齊,保證了模型的對特定空間轉換的不變性。
3)通過多次mlp對各點云數據進行特征提取后,再用一個T-Net對特征進行對齊。
4)在特征的各個維度上執行maxpooling操作來得到最終的全局特征。
5)對分類任務,將全局特征通過mlp來預測最后的分類分數;對分割任務,將全局特征和之前學習到的各點云的局部特征進行串聯,再通過mlp得到每個數據點的分類結果。
1.2 PointNet網絡結構
它提取的“全局特征”能夠很好地完成分類任務。下面看一下PointNet的框架結構:
下面解釋一個網絡中各個部件的作用。
1)transform:
第一次,T-Net 3x3 ,對輸入點云進行對齊:位姿改變,使改變后的位姿更適合分類/分割。
第二次,T-Net 64x64?,對64維特征進行對齊。
2)mlp:多層感知機,用于提取點云的特征,這里使用共享權重的卷積。
3)max pooling:匯總所有點云的信息,進行最大池化,得到點云的全局信息。
4)分割部分:局部和全局信息組合結構(concate,語義分割)
5)分類loss:交叉熵,分割loss:分類+分割+L2(transform,原圖的正交變換)
1.3?T-Net網絡結構
將輸入的點云數據作為nx3x1單通道圖像,接三次卷積和一次池化后,再reshape為1024個節點,然后接兩層全連接,網絡除最后一層外都使用了ReLU激活函數和批標準化。
1.4 模型效果
ModelNet40 上的分類結果:
ShapeNet部分數據集上的分割結果:
不足:缺乏在不同尺度上提取局部信息的能力
二、PointNet++
Pointnet提取的全局特征能夠很好地完成分類任務,由于模型基本上都是單點采樣,代碼底層用的是2Dconv,只有maxpooling整合了整體特征,所以局部特征提取能力較差,這使得它很難對復雜場景進行分析。
PointNet++核心是提出了多層次特征提取結構,有效提取局部特征提取,和全局特征。
論文地址:PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
開源代碼地址:GitHub - charlesq34/pointnet2: PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
2.1 思路流程
先在輸入點集中選擇一些點作為中心點,然后圍繞每個中心點選擇周圍的點組成一個區域,之后每個區域作為PointNet的一個輸入樣本,得到一組特征,這個特征就是這個區域的特征。
之后中心點不變,擴大區域,把上一步得到的那些特征作為輸入送入PointNet,以此類推,這個過程就是不斷的提取局部特征,然后擴大局部范圍,最后得到一組全局的特征,然后進行分類。
2.2 整體網絡結構
PointNet++ 在不同尺度提取局部特征,通過多層網絡結構得到深層特征。PointNet++按照任務也分為 classification (分類網絡)和 segmentation (分割網絡)兩種,輸入和輸出分別與PointNet中的兩個網絡一致。
PointNet++會先對點云進行采樣(sampling)和劃分區域(grouping),在各個小區域內用基礎的PointNet網絡進行特征提取(MSG、MRG),不斷迭代。
對于分類問題,直接用PointNet提取全局特征,采用全連接得到每個類別評分。對于分割問題,將高維的點反距離插值得到與低維相同的點數,再特征融合,再使用PointNet提取特征 。
比較PointNet++兩個任務網絡的區別:
在得到最高層的 feature 之后,分類網絡使用了一個小型的 PointNet + FCN 網絡提取得到最后的分類 score;
分割網絡通過“跳躍連接” 操作不斷與底層 “低層特征圖”信息融合,最終得到逐點分分類語義分割結果。(“跳躍連接”對應上圖的 skip link connection;低層特征圖 具有分辨率較大,保留較豐富的信息,雖然整體語義信息較弱。)
2.3?網絡結構組件
1)采樣層(sampling)
2)組合層(grouping)
為了提取一個點的局部特征,首先需要定義這個點的“局部”是什么。一個圖片像素點的局部是其周圍一定曼哈頓距離下的像素點,通常由卷積層的卷積核大小確定。同理,點云數據中的一個點的局部由其周圍給定半徑劃出的球形空間內的其他點構成。組合層的作用就是找出通過采樣層后的每一個點的所有構成其局部的點,以方便后續對每個局部提取特征。
3)特征提取層(feature learning)
因為PointNet給出了一個基于點云數據的特征提取網絡,因此可以用PointNet對組合層給出的各個局部進行特征提取來得到局部特征。值得注意的是,雖然組合層給出的各個局部可能由不同數量的點構成,但是通過PointNet后都能得到維度一致的特征(由上述K值決定)。
2.4 不均勻點云組合grouping方法:
1)多尺度組合MSG:對于選取的一個中心點設置多個半徑進行成組,并將經過PointNet對每個區域抽取后的特征進行拼接(concat)來當做該中心點的特征,這種做法會產生很多特征重疊,結果會可以保留和突出(邊際疊加)更多局部關鍵的特征,但是這種方式不同范圍內計算的權值卻很難共享,計算量會變大很多。
2)多分辨率組合MRG:MRG避免了大量的計算,但仍然保留了根據點的分布特性自適應地聚合信息的能力。對不同特征層上(分辨率)提取的特征再進行concat,以b圖為例,最后的concat包含左右兩個部分特征,分別來自底層和高層的特征抽取,對于low level點云成組后經過一個pointnet和high level的進行concat,思想是特征的抽取中的跳層連接。
當局部點云區域較稀疏時,上層提取到的特征可靠性可能比底層更差,因此考慮對底層特征提升權重。當然,點云密度較高時能夠提取到的特征也會更多。這種方法優化了直接在稀疏點云上進行特征抽取產生的問題,且相對于MSG的效率也較高。
選擇哪一種:
當局部區域的密度低時,第一矢量可能不如第二矢量可靠,因為計算第一矢量的子區域包含更稀疏的點并且更多地受到采樣不足的影響。在這種情況下,第二個矢量應該加權更高。
另一方面,當局部區域的密度高時,第一矢量提供更精細細節的信息,因為它具有以較低水平遞歸地表達較高分辨率檢查的能力。
2.5 模型效果
分類對比:
分割對比:
小結
復雜場景點云一般采用PointNet++進行處理,而簡單場景點云則采用PointNet。
如果只從點云分類和分割兩個任務角度分析,分類任務只需要max pooling操作之后的特征信息就可完成,而分割任務則需要更加詳細的local context信息。
參考文獻
[1]?PointNet++ 論文及代碼解讀 - 知乎
[2]?3D點云 | 基于深度學習處理點云數據入門經典:PointNet、PointNet++ - 云+社區 - 騰訊云
[3]?https://arxiv.org/pdf/1612.00593.pdf
[4]?https://arxiv.org/pdf/1706.02413.pdf
【百變AI秀】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/296704
本文只供大家參考和學習,謝謝。
AI 深度學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。