目标检测 | Point Cloud RoI Pooling
-
目標檢測 | Point Cloud RoI Pooling
- Point Cloud RoI Pooling 概述
- Pooling
- RoI Pooling
- Point Cloud RoI Pooling
- Point Cloud RoI Pooling 實現細節
目標檢測 | Point Cloud RoI Pooling
Point Cloud RoI Pooling 概述
Points Cloud RoI Pooling(點云RoI池化)是3d點云目標檢測中一個相對重要的機制,RoI Pooling Layer是two-stage detector(二階段檢測網絡)中最為核心的模塊之一,使其與one-stage detector(一階段檢測網絡)區別。據調研,其最早出自于Shaoshuai Shi等人的文章PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud,在文章中被稱為Point cloud region pooling(點云區域池化)。
Point Cloud RoI Pooling機制顧名思義,是為了處理點云而在RoI Pooling基礎上進行改進得到的,與RoI Pooling的目的和原理基本一致。
Pooling
首先,我們先從深度學習中,最基礎且最熟悉不過的Pooling說起。Pooling最早是使用在LeNet,其用于減少特征圖的尺寸并提取最顯著的特征,從而降低模型復雜性并減少計算量,有助于防止過擬合,相對于是一個對特征subsampling的過程。
一般常用的有Max Pooling和Average Pooling,在某些做global descriptor的網絡中還會使用Global Pooling
- Max Pooling(最大池化):對每個池化窗口內的特征取最大值作為該區域的代表特征。
- Average Pooling(平均池化):對每個池化窗口內的特征取平均值作為該區域的代表特征。
- Global Pooling(全局池化):將整個特征圖進行池化,通常是全局平均池化或全局最大池化,將整個特征圖降為一個單一的值或向量。
就以Max Pooling為例,其實現是通過滑動固定大小的\(N\times N\)窗口(圖中是\(2\times 2\))在特征圖上移動,對每個窗口內的特征進行匯總或提取,產生一個新的特征圖。這個過程可以減小特征圖的尺寸,保留最重要的特征信息,并減少參數數量和計算量。
此外如果是Average Pooling,還可以看作是卷積核為\(N\times N\)的全\(1\)矩陣,\(\text{stride}=N\)的卷積操作。
RoI Pooling
RoI Pooling最早出現Ross Girshick等人的文章Fast R-CNN。這篇文章提出了一種稱為Fast R-CNN的目標檢測方法,其中RoI Pooling被用于從卷積特征圖中提取固定大小的特征表示,以用于后續的分類和邊界框回歸任務。
RoI Pooling機制的引入,使得網絡可以將不同尺寸的RoI映射到固定大小的特征圖上,這樣就可以通過一個固定維度的全連接層處理所有的RoI了。
我們首先回顧一下two-stage detector的結構,如下圖所示,其一共可以被分為三個部分:
-
Backbone Network (骨干網絡)
Backbone Network負責從原始輸入圖像中提取特征。通常是一系列的卷積層、池化層和其他操作的堆疊,用于捕獲圖像的低級到高級特征。
其輸出一般為比原始圖像要小且通道數更高的\(B\times C^\prime\times W^\prime\times H^\prime\)矩陣
-
Region Proposal Network(RPN,區域建議網絡)
RPN 是用于提出RoI(Region of Interest,感興趣區域)的神經網絡組件。它在骨干網絡的基礎上,通過滑動窗口或錨框技術,生成可能包含物體的RoI。
其輸出一般為\(B\times N \times 4\)的矩陣,每一個RoI由\((x,y,w,h)\)的四維向量所表示,\((x,y)\)表示該RoI的中心點坐標,\((w,h)\)表示該RoI的長與寬,共有\(N\)個。
-
Classification Head(分類頭)與Regression Head(回歸頭)
Classification Head用于對候選框內的目標物體進行分類,而Regression Head用于對候選框進行細化。Classification Head和Regression Head一般都是由固定大小的全連接層組成,通過RoI提取特征之后輸入其中得到最終的目標檢測結果。
如果我們關注RPN與Classification Head之間的連接,我們就會發現一個問題:得到的每一張RoI區域形狀不一(長與寬不是固定的),那么其中包含的feature也將不是固定維度的,無法輸入固定大小的Classification Head進行處理。
為此,我們需要通過一種機制將所有不同的\(W^\prime\times H^\prime\)的特征圖處理為固定長度為\(M\)的特征,這就是RoI Pooling機制在發揮的作用了。
RoI Pooling任意的大小為\(C\times W^\prime \times H^\prime\)的RoI特征映射為固定大小為\(M=C\times W^{\prime\prime} \times H^{\prime\prime}\)的RoI特征,其中RoI Pooling可以被分為三步。
- 對齊RoI區域
- 劃分RoI區域
- 池化RoI區域
下圖簡單地描述了RoI Max-pooling中的三個步驟
此外,還有一種稱為RoI Align的機制是在RoI Pooling的基礎上通過爽線性插值進行池化,因為與本隨筆主題關系不大就不在此贅述了。
Point Cloud RoI Pooling
Point Cloud RoI Pooling顧名思義,是點云3d目標檢測版本的RoI Pooling,據調研,最早見于Shaoshuai Shi等人的文章PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud,在文章中被稱為Point cloud region pooling(點云區域池化)。
點云的RoI Pooling相比于RGB圖像的RoI Pooling發生了如下的改變:
- RoI和目標框由2d變為3d,這就意味著其參數由四維的\((x,y,w,h)\)上升為七維的\((x,y,z,l,w,h,\theta)\),其中\(\theta\)是目標框的yaw(偏航角)。雖然是3d目標檢測,但是一般來說很少會有超過兩個*度的任務,所以使用一個七個參數就足以表示了。
- RGB圖像是有序的點陣圖,可以直接通過坐標查詢,而點云的結構化程度低,無法直接通過坐標查詢。其中點云是通過大小為\(B\times N\times(3+C)\)的矩陣進行表示,\(N\)是點云數量,\(3+C\)表示每個點云的特征(\(x,y,z\)坐標以及提取特征)。
同樣的,給定采樣數量\(S^\prime\),Point Cloud RoI Pooling也可以被劃分為以下幾個步驟:
- pts assign,計算出每個點所屬的RoI區域,輸出大小為\(B\times M \times N\)的布爾矩陣pts assign,如果第\(B\)個batch中第\(M\)個點處于第\(N\)個RoI,那么\([B][M][N]=\textbf{true}\),反之\([B][M][N]=\textbf{false}\)。
- pts pool,通過第一步得到的布爾矩陣pts assign,計算出每個RoI區域中所擁有的點,并通過隨機采樣的方式將點的數量由\(S\)對齊為固定大小的\(S^\prime\),輸出大小為\(B\times M \times S^\prime\)的index矩陣pts pool,其中每個元素都是點在點云中的index。
- feature forward,,將從第二步得到的大小為\(B\times M \times S^\prime\)的index矩陣pts pool映射成大小為\(B\times M \times S^\prime \times (3+C)\)的pooled feature(池化特征)
最后我們所得到固定大小為\(B\times M \times S^\prime \times (3+C)\)的池化特征,輸入到分類頭中,其輸入大小為\(I=S^\prime \times (3+C)\),這樣就完成了Point cloud pooling的操作。
Point Cloud RoI Pooling 實現細節
(未完待續)
總結
以上是生活随笔為你收集整理的目标检测 | Point Cloud RoI Pooling的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java通过SSH连接路由器,输入命令并
- 下一篇: 面试官:单例Bean一定不安全吗?实际工