您當前的位置:首頁 > 寵物

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

作者:由 3D視覺開發者社群 發表于 寵物時間:2022-04-24

希望這篇關於深度學習點雲分割的綜述,能給你提供一些思路:

【綜述】PointNet、PointNet++、 F-PointNet基於深度學習的3D點雲分類和分割

作者:黎國溥,3D視覺開發者社群簽約作者,CSDN部落格專家,華為雲-雲享專家

首發:公眾號【3D視覺開發者社群】

前言

PointNet是由斯坦福大學的Charles R。 Qi等人在《PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation》一文中提出的模型,它可以直接對點雲進行處理的,對輸入點雲中的每一個點,學習其對應的空間編碼,之後再利用所有點的特徵得到一個全域性的點雲特徵。Pointnet提取的全域性特徵能夠很好地完成分類任務,但區域性特徵提取能力較差,這使得它很難對複雜場景進行分析。

PointNet++是Charles R。 Qi團隊在PointNet論文基礎上改進版本,其核心是提出了多層次特徵提取結構,有效提取區域性特徵提取,和全域性特徵。

F-PointNet將PointNet的應用拓展到了3D目標檢測上,可以使用PointNet或PointNet++進行點雲處理。它在進行點雲處理之前,先使用影象資訊得到一些先驗搜尋範圍,這樣既能提高效率,又能增加準確率。

一、PointNet

PointNet: Deep Learning on Point Sets for 3D Classificationand Segmentation

論文地址:

https://

arxiv。org/abs/1612。0059

3

開原始碼-原論文實現:

https://

github。com/charlesq34/p

ointnet

開原始碼-Pytorch實現:

https://

github。com/fxia22/point

net。pytorch

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

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的框架結構:

畢業方向想做深度學習點雲分割,看了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 上的分類結果:

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

ShapeNet部分資料集上的分割結果:

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

不足:缺乏在不同尺度上提取區域性資訊的能力

二、PointNet++

PointNet++: Deep Hierarchical Feature Learning on Point Setsin a Metric Space

論文地址:

https://

arxiv。org/abs/1706。0241

3

開原始碼地址:

https://

github。com/charlesq34/p

ointnet2

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

Pointnet提取的全域性特徵能夠很好地完成分類任務,由於模型基本上都是單點取樣,程式碼底層用的是2Dconv,只有maxpooling整合了整體特徵,所以區域性特徵提取能力較差,這使得它很難對複雜場景進行分析。

PointNet++的核心是提出了多層次特徵提取結構,有效提取區域性特徵和全域性特徵。

2.1 思路流程

先在輸入點集中選擇一些點作為中心點,然後圍繞每個中心點選擇周圍的點組成一個區域,之後每個區域作為PointNet的一個輸入樣本,得到一組特徵,這個特徵就是這個區域的特徵。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

之後中心點不變,擴大區域,把上一步得到的那些特徵作為輸入送入PointNet,以此類推,這個過程就是不斷的提取區域性特徵,然後擴大區域性範圍,最後得到一組全域性的特徵,然後進行分類。

2.2 整體網路結構

PointNet++ 在不同尺度提取區域性特徵,透過多層網路結構得到深層特徵。PointNet++按照任務也分為 classification (分類網路)和 segmentation (分割網路)兩種,輸入和輸出分別與PointNet中的兩個網路一致。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

PointNet++會先對點雲進行取樣(sampling)和劃分區域(grouping),在各個小區域內用基礎的PointNet網路進行特徵提取(MSG、MRG),不斷迭代。

對於分類問題,直接用PointNet提取全域性特徵,採用全連線得到每個類別評分。對於分割問題,將高維的點反距離插值得到與低維相同的點數,再特徵融合,再使用PointNet提取特徵 。比較PointNet++兩個任務網路的區別:在得到最高層的 feature 之後,分類網路使用了一個小型的 PointNet + FCN 網路提取得到最後的分類 score;分割網路透過“跳躍連線” 操作不斷與底層 “低層特徵圖”資訊融合,最終得到逐點分分類語義分割結果。(“跳躍連線”對應上圖的 skip link connection;低層特徵圖 具有解析度較大,保留較豐富的資訊,雖然整體語義資訊較弱。)

2.3 網路結構元件

1)取樣層(sampling)

鐳射雷達單幀的資料點可以多達100k個,如果對每一個點都提取區域性特徵,計算量是非常巨大的。因此,作者提出了先對資料點進行取樣。作者使用的取樣演算法是最遠點取樣(farthest point sampling, FPS),相對於隨機取樣,這種取樣演算法能夠更好地覆蓋整個取樣空間。

2)組合層(grouping)

為了提取一個點的區域性特徵,首先需要定義這個點的“區域性”是什麼。一個圖片畫素點的區域性是其周圍一定曼哈頓距離下的畫素點,通常由卷積層的卷積核大小確定。同理,點雲資料中的一個點的區域性由其周圍給定半徑劃出的球形空間內的其他點構成。組合層的作用就是找出透過取樣層後的每一個點的所有構成其區域性的點,以方便後續對每個區域性提取特徵。

3)特徵提取層(feature learning)

因為PointNet給出了一個基於點雲資料的特徵提取網路,因此可以用PointNet對組合層給出的各個區域性進行特徵提取來得到區域性特徵。值得注意的是,雖然組合層給出的各個區域性可能由不同數量的點構成,但是透過PointNet後都能得到維度一致的特徵(由上述K值決定)。

2.4 不均勻點雲組合grouping方法

不同於圖片資料分佈在規則的畫素網格上且有均勻的資料密度,點雲資料在空間中的分佈是不規則且不均勻的。當點雲不均勻時,每個子區域中如果在分割槽的時候使用相同的球半徑,會導致部分稀疏區域取樣點過小。作者提出多尺度成組 (MSG)和多解析度成組 (MRG)兩種解決辦法

1)多尺度組合MSG:對於選取的一箇中心點設定多個半徑進行成組,並將經過PointNet對每個區域抽取後的特徵進行拼接(concat)來當做該中心點的特徵,這種做法會產生很多特徵重疊,結果會可以保留和突出(邊際疊加)更多區域性關鍵的特徵,但是這種方式不同範圍內計算的權值卻很難共享,計算量會變大很多。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

2)多解析度組合MRG:MRG避免了大量的計算,但仍然保留了根據點的分佈特性自適應地聚合資訊的能力。對不同特徵層上(解析度)提取的特徵再進行concat,以b圖為例,最後的concat包含左右兩個部分特徵,分別來自底層和高層的特徵抽取,對於low level點雲成組後經過一個pointnet和high level的進行concat,思想是特徵的抽取中的跳層連線。

當局部點雲區域較稀疏時,上層提取到的特徵可靠性可能比底層更差,因此考慮對底層特徵提升權重。當然,點雲密度較高時能夠提取到的特徵也會更多。這種方法優化了直接在稀疏點雲上進行特徵抽取產生的問題,且相對於MSG的效率也較高。

選擇哪一種:當局部區域的密度低時,第一向量可能不如第二向量可靠,因為計算第一向量的子區域包含更稀疏的點並且更多地受到取樣不足的影響。在這種情況下,第二個向量應該加權更高。

另一方面,當局部區域的密度高時,第一向量提供更精細細節的資訊,因為它具有以較低水平遞迴地表達較高解析度檢查的能力。

2.5 模型效果

分類對比:

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

分割對比:

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

小結

複雜場景點雲一般採用PointNet++進行處理,而簡單場景點雲則採用PointNet。如果只從點雲分類和分割兩個任務角度分析,分類任務只需要max pooling操作之後的特徵資訊就可完成,而分割任務則需要更加詳細的local context資訊。

三、F-PointNet

FrustumPointNets for 3D Object Detection from RGB-D Data

論文地址:

https://

arxiv。org/pdf/1711。0848

8。pdf

開原始碼:

https://

github。com/charlesq34/f

rustum-pointnets

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

F-PointNet 也是直接處理點雲資料的方案,但這種方式面臨著挑戰,比如:如何有效地在三維空間中定位目標的可能位置,即如何產生 3D 候選框,假如全域性搜尋將會耗費大量算力與時間。

F-PointNet是在進行點雲處理之前,先使用影象資訊得到一些先驗搜尋範圍,這樣既能提高效率,又能增加準確率。

3.1 基本思路

首先使用在 RGB 影象上執行的 2D 檢測器,其中每個2D邊界框定義一個3D錐體區域。然後基於這些視錐區域中的 3D 點雲,我們使用 PointNet/PointNet++ 網路實現了 3D例項分割和非模態 3D 邊界框估計。總結一下思路,如下:

1。 基於影象2D目標檢測。

2。 基於影象生成錐體區域。

3。 在錐體內,使用 PointNet/PointNet++ 網路進行點雲實例分割。

它是在進行點雲處理之前,先使用影象資訊得到一些先驗搜尋範圍,這樣既能提高效率,又能增加準確率。先看看下面這張圖:

在這張圖裡,左上角的意思是先把影象和點雲資訊標定好(這個屬於感測器的外參標定,在感知之前進行;獲取兩個感測器之間旋轉矩陣和平移向量,就可以得到相互的位置關係)。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

左下角是用目標檢測演算法檢測出物體的邊界框(BoundingBox),有了邊界框之後,以相機為原點,沿邊界框方向延伸過去就會形成一個錐體(上圖的右半部分),該論文題目裡frustum這個詞就是錐體的意思。

然後用點雲對該物體進行識別的時候,只需要在這個錐體內識別就行了,大大減小了搜尋範圍。

3.2 模型框架

模型結構如下:(可以點選圖片放大檢視)

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

網路共分為三部分,第一部分是使用影象進行目標檢測並生成錐體區域,第二部分是在錐體內的點雲實例分割,第三部分是點雲物體邊界框的迴歸。

3.3 基於影象生成錐體區域

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

由於檢測到的目標不一定在影象的正中心,所以生成的錐體的軸心就不一定和相機的座標軸重合,如下圖中(a)所示。為了使網路具有更好的旋轉不變性,我們需要做一次旋轉,使相機的Z軸和錐體的軸心重合。如下圖中(b)所示。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

3.4 在錐體內進行點雲實例分割

例項分割使用PointNet。一個錐體內只提取一個物體,因為這個錐體是影象中的邊界框產生的,一個邊界框內也只有一個完整物體。

在生成錐體的時候提到了旋轉不變性,此處完成分割這一步之後,還需要考慮平移不變性,因為點雲分割之後,分割的物體的原點和相機的原點必不重合,而我們處理的物件是點雲,所以應該把原點平移到物體中去,如下圖中(c)所示。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

3.5 生成精確邊界框

生成精確邊界框的網路結構:

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

從這個結構裡可以看出,在生成邊界框之前,需要經過一個T-Net,這個東西的作用是生成一個平移量,之所以要做這一步,是因為在上一步得到的物體中心並不完全準確,所以為了更精確地估計邊界框,在此處對物體的質心做進一步的調整,如下圖中(d)所示。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

下面就是邊界框迴歸了,對一個邊界框來講,一共有七個引數,包括:

中心點:

c_{x},c_{y},c_{z}

長寬高:

l、w、h

角度:

\theta

最後總的殘差就是以上目標檢測、T-Net和邊界框殘差之和,可以據此構建損失函式。

C_{pred}=C_{mask}+\triangle C_{t-net}+\triangle C_{box-net}

3.6 PointNet關鍵點

3.6.1 F-PointNet使用2D RGB影象

F-PointNet使用2D RGB影象原因是:

1。當時基於純3D點雲資料的3D目標檢測對小目標檢測效果不佳。所以F-PointNet先基於2D RGB做2D的目標檢測來定位目標,再基於2d目標檢測結果用其對應的點雲資料視錐進行bbox迴歸的方法來實現3D目標檢測。

2。使用純3D的點雲資料,計算量也會特別大,效率也是這個方法的優點之一。

使用成熟的2D CNN目標檢測器(Mask RCNN)生成2D檢測框,並輸出one-hot 分類向量(即基於2D RGB影象的分類)。

3.6.2 錐體框生成

2D檢測框結合深度資訊,找到最近和最遠的包含檢測框的平面來定義3D視錐區域frustum proposal。然後在該frustum proposal裡收集所有的3D點來組成視錐點雲(frustum point cloud)。

3.7實驗結果

與其他模型對比:

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

模型效果:

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

3.8 優點

(1)捨棄了global fusion,提高了檢測效率;並且透過2D detector和3D Instance Segmentation PointNet對3D proposal實現了逐維(2D-3D)的精準定位,大大縮短了對點雲的搜尋時間。下圖是透過3d instance segmentation將搜尋範圍從9m~55m縮減到12m~16m。

畢業方向想做深度學習點雲分割,看了pointnet和pointnet++,以這兩個網路做改進可以嗎?

(2)相比於在BEV(Bird‘s Eye view)中進行3D detection,F-PointNet直接處理raw point cloud,沒有任何維度的資訊損失,使用PointNet能夠學習更全面的空間幾何資訊,特別是在小物體的檢測上有很好的表現。下圖是來自Hao Su 2018年初的課程,現在的KITTI榜有細微的變動。

(3)利用成熟的2D detector對proposal進行分類(one-hot class vector,打標籤),起到了一定的指導作用,能夠大大降低PointNet對三維空間物體的學習難度。

3.9 模型程式碼

開原始碼:GitHub - charlesq34/frustum-pointnets: Frustum PointNets for 3D Object Detection from RGB-D Data

作者程式碼的執行環境:

系統:Ubuntu 14。04 或 Ubuntu 16。04

深度框架:TensorFlow1。2(GPU 版本)或 TensorFlow1。4(GPU 版本)

其他依賴庫:cv2、mayavi等。

3D視覺開發者社群是由奧比中光給所有開發者打造的分享與交流平臺,旨在將3D視覺技術開放給開發者。平臺為開發者提供3D視覺領域免費課程、奧比中光獨家資源與專業技術支援。

點選加入3D視覺開發者社群,和開發者們一起討論分享吧~

或可微信關注官方公眾號

3D視覺開發者社群

,獲取更多幹貨知識哦

標簽: PointNet  點雲  3D  特徵  分割