pointnet 系列論文總結


本文旨在對之前看的 pointnet 系列點雲目標檢測論文進行總結,包括 pointnet, pointnet++, frustum-pointnet, voxelnet, votenet。雖然 voxelnet 不屬於 pointnet 系列,但其中特徵提取的模塊跟 pointnet 還是很類似的,這裏也就一併介紹了。下面就按照論文的時間順序依次進行總結。

pointnet

本文主要的創新點在於仔細研究了點雲的結構特點,提出了一種面向原始點雲的端到端網絡。這裏總結的點雲結構特點主要有兩個:

  1. 點的順序無關性
  2. 點雲的剛體變換不變性

這裏的順序無關性是指每個點存放在數組中的位置是任意的,因爲最終將其映射到三維空間中起作用的是點的 xyz 維度,最終得到的點雲是一樣的,跟其在數組中的下標是沒有關係的。而在傳統的處理圖像的 CNN 中,像素的下標是很重要的,因爲那裏主要就是通過下標得到相鄰像素的,而不是通過像素在圖像中的 uv 位置。

剛體變換不變性比較容易理解了,我們對點雲進行旋轉平移,其內部的結構是不變的。

實現剛體變換不變性,我們可以先將點雲減去質心,然後訓練一個 spatial transformer network 得到一個歸一化旋轉矩陣,將其施加在點雲上就可以了。而要想實現順序無關性,我們只要能找到一個與輸入數據順序無關的對稱函數就行了,文章裏用的是 maxpool。

網絡的主體結構如下所示:

在這裏插入圖片描述

可以看到網絡結構還是比較簡單的,特徵提取主要就是依靠兩組 mlp,總共 5 層,其中會訓練兩個 T-Net 進行旋轉歸一化,然後直接 max-pool 得到 global feature,繼續兩層 mlp 然後全連接分類。分割網絡也比較簡單,就是將 global feature 連接到每個點上,然後再來兩組 mlp 進行 pointwise 的分類。

文章還有一系列的訓練和數據增強技巧,這裏就先不寫了。其中在訓練 T-Net 的時候還增加了旋轉矩陣是正交矩陣的正則項約束。

pointnet++

pointnet++ 主要是解決了 pointnet 沒有考慮點雲局部結構的問題,這可能導致網絡在識別一個細粒度的 pattern 時泛化能力不夠,另一方面 pointnet 在訓練時會對點雲進行均勻採樣,着同樣會對細粒度的 parttern 有消極的影響。作者提出的解決方法就是增加一個採樣分組網絡,將點雲聚類成 K 個點雲簇,也就是說通過點與點之間的空間距離對點雲的局部特徵進行歸類,然後對每個點雲簇使用 pointnet 進行特徵提取,這樣我們就得到了點雲在局部的特徵了。並且通過組合多層這樣的採樣/分組/pointnet(set abstraction)網絡,set abstraction 的感知野也越來越大,這對提取局部特徵是有幫助的。

文中點簇的 centroid 的選取是通過 farthest point sampling 算法選取的。

最終的網絡結構如圖所示:

在這裏插入圖片描述

可以看到在分類網絡上,相當於是將 pointnet 前期的兩組 mlp 特徵提取用 hierarchical point set feature learning (兩組 set abstraction)網絡替換掉了;在分割網絡上,是將 centroid 的特徵分別連接到對應點簇中點雲的特徵後面,文章說是插值,其實跟之前 pointnet 的做法是類似的。

具體的 centroid 選取和 grouping 操作也有一些不同的效果,作者也做了很多實驗,這裏就不一一介紹了。其中 multi-scale grouping 是作者最終使用的 grouping 方法,具體操作就是對點簇設置不同的 dropout ratio,然後按照這個 dropout ratio 對點簇中的點進行隨機採樣,這樣就得到了該 dropout ratio 對應的尺度的特徵,然後將多個尺度的特徵 concatenate 作爲該 centroid 的 multi-scale feature。

同時文章也提到了非歐尺度空間的點雲分類問題,這在識別行人和動物的時候比較有用,因爲這些物體並不是剛性的,做法就是增加一些傳統方法獲取的非歐特徵(intrinsic feature)。

voxelnet

這篇文章是蘋果公司的員工發表的,用的方法是 pointnet 作者 diss 的 volumetric CNN 方法,這裏也將其介紹一下是因爲它的特徵提取模塊跟 pointnet 思想比較類似,同時裏面一些針對自動駕駛的訓練技巧和數據增強技巧也值得一學。還有一點是 pointnet 和 pointnet++ 都是在 1k 左右的點雲規模上進行訓練的,而 lidar 點雲一般都在 20k ~ 100k 之間,因此本文也解決了大規模 3D 點雲特徵學習和檢測任務的問題。其網絡結構如圖所示:

在這裏插入圖片描述

先來介紹下它的 feature learning network,可以看到它首先是將點雲按照 voxel 進行分組,隨機採樣,然後對每個組內的點雲(沒有歸一化到局部,而是將歸一化座標增強到點的特徵中)使用 VFE layer 增加每個點雲的特徵維度,重複多次這個步驟,最後進行一次全連接和 maxpool 得到每個 voxel 的特徵。之後就是針對這些 voxel 進行 3D 的 CNN 和 RPN 得到類別和 box了。

在這裏插入圖片描述
VFE 的結構如上圖所示,可以看到跟 pointnet 還是很類似的,就是全連接-maxpool-concatenate,也是比較精簡的。

文中的 loss function 也是比較新穎的,通過 box 對角線長度對 center loss 進行了歸一化。具體的網絡細節、訓練技巧和數據增強技巧這裏就先不介紹了。

frustum-pointnet

這篇文章思路就比較簡單了,只要做過攝像頭和激光雷達數據融合的人都很容易能夠理解。這篇文章也是作者與 Nuro 公司的員工合作發表的,因此是面向自動駕駛的,最後也是用的 kitti 數據集。同時也利用了很多自動駕駛中的先驗信息,例如只關心物體的 yaw 軸朝向。

首先大致的 pipeline 和網絡結構如下圖所示:

在這裏插入圖片描述
在這裏插入圖片描述

  1. 利用成熟的圖像目標檢測將物體檢測出來
  2. 通過相機的投影模型將該 2D bounding box 對應的視錐框出來,框出來的目的就是將對該視錐內部的點雲進行二分類,找到屬於該物體的點雲
  3. 計算 3D box。這裏在計算 3D box 時提到了一個 amodal 的概念比較有意思,就是說人僅通過感知物體的一部分就是能感知出物體的整體。這對激光點雲的 3D box 計算是很有幫助的,因爲不管是這裏的視錐劃分還是激光雷達的固有特性,一個被掃描的物體註定只有一部分表面能呈現在點雲中,如果只根據這些點雲劃分 box 很可能是不對的。例如,只有車頭被雷達掃描到的 box 可能只包含了車頭,但我們應該通過 amodal 的方法將 box 延長一部分,即使延長的這一部分中可能沒有該物體的點雲。

所以這篇文章的網絡有兩個,一個用來分割,一個用來回歸 bounding box。下面分別簡單介紹下 pipleline 中的各個模塊。

frustum proposal

這沒什麼好介紹的,就是圖像目標檢測,然後將視錐中的點雲提取出來,提取出來之後會進行旋轉歸一化,如下圖 b 所示:

在這裏插入圖片描述

3D instance segmentation

這裏提到爲什麼直接在深度圖上用 2D CNN 迴歸物體位置不可取,因爲前景遮擋和背景 clutter 問題,所以這裏還是用的 3D segmentation。分割也是用的 pointnet,在分割時利用了上階段的物體類別信息,就是 concatenate 一個 one-hot class vector。然後將分割的點雲進行座標歸一化,如上圖 c 所示,文中提到,實驗發現上節的旋轉歸一化和本節的座標歸一化是很重要的

amodal 3D box estimation

在這裏插入圖片描述
這裏先通過 T-Net 迴歸了 amodal box center,如圖 4.c 所示,然後再通過一個 amodal 3D box estimation pointnet 來回歸 box,如圖 5 所示。這裏在迴歸 box 時還是利用了物體物理模型的先驗信息,也就是 pre-define NS 個 size 模板和 NH 個朝向模板。並且對物體按照高度、寬度、長度劃分成 NS 類,對朝向劃分 NH 類。最終網絡的輸出維度爲 3 + 4 * NS + 2 * NH。文中還提到了訓練這些 multi-task loss 的技巧,就是增加了一個 corner loss 正則項,將原本獨立的 center、長寬高和朝向 loss 聯繫起來,方法就是構造 NS * NH 個 anchor boxes,然後根據迴歸的 center 將這些 anchor box 的 corner 旋轉平移到 center 對應的 box 上,度量這 8 個 corner 與 ground truth 的 corner 的距離,如下圖所示:

在這裏插入圖片描述
其中 δij\delta_{ij} 表示 ij 的 size/heading 爲 ground truth 時爲 1,否則爲 0;min 函數防止 box flipped 導致的錯誤 loss。

votenet

這篇文章還是思考的點雲物體檢測所存在的問題,問題跟 frustum pointnet 裏提到的 amodal box 問題比較類似,不過這裏不是通過劃分多個模板然後將 box 分類到不同的模板中,而是利用霍夫投票這個老方法來解決這裏的新問題。不過爲了將這個老方法整合到端到端的網絡中,作者也對其進行了重新設計。

首先還是看下網絡的結構:

在這裏插入圖片描述

  1. 使用 pointnet 選取一些 seed 並學習其局部特徵,類似 set abstraction layer,每個 seed 產生一個 vote;
  2. 使用 deep network 產生 votes;
  3. 對 votes 進行聚類、box proposal 和分類;
  4. 最後進行一個 3D NMS 得到 box 輸出。

文章也介紹了爲什麼要用霍夫投票:1. 投票比較適合稀疏集合,而點雲正是空間稀疏的;2. 投票是自底向上的,局部的信息通過投票聚合成關於物體的全局信息,而神經網絡雖然從一個更大的感知野聚合信息,但點雲在物體的 amodal center 附近是很少的,直接進行 context aggregation 的話是不好的。

具體的投票網絡這裏就不仔細介紹了。

reference

  1. Qi C R, Su H, Mo K, et al. Pointnet: Deep learning on point sets for 3d classification and segmentation[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 652-660.
  2. Qi C R, Yi L, Su H, et al. Pointnet++: Deep hierarchical feature learning on point sets in a metric space[C]//Advances in neural information processing systems. 2017: 5099-5108.
  3. Qi C R, Liu W, Wu C, et al. Frustum pointnets for 3d object detection from rgb-d data[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 918-927.
  4. Qi C R, Litany O, He K, et al. Deep Hough Voting for 3D Object Detection in Point Clouds[J]. arXiv preprint arXiv:1904.09664, 2019.
  5. Zhou Y, Tuzel O. Voxelnet: End-to-end learning for point cloud based 3d object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 4490-4499.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章