tft每日頭條

 > 科技

 > 3D目标檢測深度學習方法數據預處理綜述

3D目标檢測深度學習方法數據預處理綜述

科技 更新时间:2024-07-18 05:21:49

作者:蔣天園

Date:2020-05-26

來源:3D目标檢測深度學習方法數據預處理綜述

前言

這一篇的内容主要要講一點在深度學習的3D目标檢測網絡中,我們都采用了哪些數據預處理的方法,主要講兩個方面的知識,第一個是representation,第二個數據預處理内容是數據增廣。

作為本篇博文的引言,我們先給一種博主制作的比較重要的3D檢測方法圖鑒,如下,就筆者的個人理解,今年的CVPR出現了很多的one-stage的方法,同時出現了很多融合的方法,這裡的融合有信息融合,有representation融合,同時根據近兩年的發展來看,voxel-based的方法占據了主導地位,這是得益于卷積結構優越性(point-based方法采用pointnet 結構,是MLP搭建的),但是今年的oral文章3D-SSD是一篇在point-based方法上很有建樹的文章,所以在3D檢測中了解主要的representation代表方法也是很重要的。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)1

1.representation

做3D視覺的,尤其是基于點雲做3D視覺任務的同學們都比較清楚的知道,點雲因為其具有稀疏性和無規則性使得在二維上非常成熟的CNN結構不能直接的運用在點雲中。我們先了解一下點雲的這兩個特性,如下圖所示,下圖中的(i)表示二維圖像的排列方式,(ii),(ii),(iv)表示的是點雲的數據,可以看出點雲的排列稀疏性,對比(ii)和(iii)可以得知雖然點雲數據的排列順序假使是一樣的,但是其對應的幾何結構不同,而(iii)和(iv)則可以看出盡管幾何結構表示同一個,但是排列順序卻是可以不一樣的。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)2

知道了上述的兩個點雲數據的兩種特性,所以設計一種合适的點雲表達形式是比尋找到一個高效的深度學習框架更加重要的内容,就3D檢測方面而言,到CVPR20,至少有三種比較重要和值得探究的representation方式,分表示pointrepresentation,voxel representation和graph representation。

1.1 point representation

如題,就是采用最原始的點作為深度學習網絡的輸入,不采用任何的預處理工作,這類工作都是在pointnet 的基礎上進行的。

這裡首選插入一點采用point-based方法的基礎backbone,如下所示,左圖表示的是pointnet的特征提取結構,也就是point-based的基礎模塊,右圖就是point-based方法的基礎架構,由point-encoder層和point-decoder層組成,encoder層主要逐漸下采樣采點特取語義信息,decoder過程是将encoder過程得到的特征信息傳遞給沒有被采樣到的點。使得全局的點都具有encoder的特征信息。最後再通過每個點作為anchor提出候選框。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)3

最早的工作是CVPR18上的F-pointnet,該文章的作者也是pointnet/pointnet 的作者,具體做法如下可知,首先通過二維的檢測框架得到二維目标檢測結果,然後将二維檢測結果通過視錐投影到三維,再采用三維破pointnet 延伸結構檢測為三維目标框。算是三階段的基于point輸入的目标檢測方法

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)4

随後的CVPR19的比較經典的Point_based方法是point-rcnn,該工作不僅僅采用point作為representation,同時和上訴的F-pointnet比較沒有采用二維信息,僅僅采用點雲作為網絡輸入。如下圖所示,該工作是一個兩階段的檢測方法,第一階段根據語義分割信息對每一個點都提出一個候選框,随後再采用多特征融合進一步優化proposals。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)5

除了CVPR會議,在IROS和ICRA機器人相關的會議上也有很多這方面的研究,其中有一篇在F-pointnet上做出更細緻的優化的文章F-ConvNet也是很優秀的工作,有興趣的同學可以去了解下;這裡直接介紹今年CVPR20上的基于Pointrepresentation的文章 3D-SSD,如下圖所示,平平無奇的一階段encoder過程,也就是把pointnet 的decoder部分給去除掉(這樣做的目的是減少網絡前饋時間,在KITTI上達到35FPS),本文的最主要的貢獻點在于将Pointnet 的采樣方法由歐式空間度量改為特征空間度量和歐式空間度量相結合的方法,同樣的也采用了anchor-free的設計方法,使得顯存占用更少。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)6

point representation方法小總結

就筆者個人對這方面的理解,該類方法的優點是作為最原始的點雲數據,保留了最細緻的幾何結構信息,網絡的輸入信息損失幾乎是所有representation方法中最小的。但是缺點也很明顯,第一點,MLP的感知能力不如CNN,因此主流的effective的方法都是voxel-based的,第二點,pointnet 結構的采樣是很耗時的,所以在實時性上也不及voxel-based的方法。所以今年的CVPR oral文章3D-SSD為了實時性,丢掉了FP層,同時設計了新的SA模塊。

1. 2 voxel representation

1.2.1 Voxelization 步驟

在3D目标檢測中,對整個場景的point2voxel的過程可以簡單描述為如下:1.設置Voxelization參數(每個voxel可以存放點的個數(max_points_number),voxel長寬高的大小(whl))2.對依次每一個點,根據其對應的坐标(x,y,z)得到該點在voxel的索引。3.根據索引判斷該voxel種是否已經存在max_points_number個點,如果存在,則将該點直接丢棄,如果不滿足,則将該點加入到該voxel中。4. 計算voxel特征采用voxelnet的圖表示為如下:

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)7

1.2.2 Voxelization 參數

上文中的體素化過程涉及到兩個重要的内容,一個是體素參數,另外一個是voxel特征根據該voxel中的特征如何求取。

Voxelization對參數的要求比較高,就發展曆史來說,VoxelNet(CVPR18)是第一篇采用voxel-representation作為點雲輸入的網絡結構,該文章中max_points_number設置的為35,voxel大小設置為0.5;采用的voxel特征提取方式為增加一個pointnet對每個voxel中的35個點特征提取得到相應的voxel特征(如下圖中的featurelearning network所示的内容),但是該參數很明顯是會丢失比較多的幾何結構信息,但是以這樣的參數劃分在當時還受到VoxelNet網絡後續的3D卷積的顯存占用的影響(3D卷積很占顯存,因此網絡預處理的參數受到影響)。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)8

18年的SECOND提出的3D稀疏卷積大大減少了3D卷積的内存占用,(我們知道,3D卷積本身會對空間中每一個voxel都進行卷積,但是3D稀疏卷積隻保留了空間中非空的voxel,采用map映射的方式得到卷積後的voxel空間索引);因此參數的設置自由了很多,就目前在KITTI和Nuscence上的sota的内容而言,我們一般采用的參數和特征提取方為:

max−points−number=5,(w,l)=(0.05,0.05),h=0.1

采用的voxel特征直接為mean特征,即對每一個voxel中的所有點的坐标求均值即可。

1.2.3 related paper

這裡隻介紹一些在voxelrepresentation上做文章的研究内容,而不是采用voxel作為網絡輸入的研究工作,因此voxel-based的研究方法比較多,後續筆者會出一篇在這方面的研究綜述,所以這裡推薦的幾篇文章都是在voxel-representation上的做出研究的工作。

voxel-based的先驅的兩篇文章voxelnet和second的主要貢獻分别是第一個提出采用voxel作為網絡輸入的方法和引入稀疏卷積替代3D卷積。這裡補充一點voxel-based方法的backbone,目前幾乎所有的voxel-based方法都采用如下的encoder的backone作為特征提取器。下圖左圖表示的是點的voxel表示,經過Voxelization化後,經過逐步下采樣的encoder過程降為二維 feature map,最後再根據二維的feature的每一個像素點作為anchor point提出候選框。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)9

在voxel-representation上做文章的研究工作,如下圖,這是一篇發表在sensors2020上的

文章Voxel-FPN:multi-scale voxel feature aggregation in 3D object detection frompoint clouds,該研究工作的主要内容是通過不同scale的體素劃分,最後将其整合成到RPN網絡結構中的FPN網絡中,需要注意的是,這裡的scale的大小要和最初劃分的scale對應起來。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)10

同樣采用該思想的還有今年的CVPR20的文章HVNet,如下圖所示,也是對場景中點雲采用multi-scale的體素劃分,最後也會形成一個FPN的結構,但是不同的細節和實現之處還是有很多的,HVNet采用了多線程同時并行處理每一個scale的體素劃分,同時對于voxel的特征提取和Voxel-FPN也是不一樣的。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)11

在voxel劃分上做研究的工作還有如下的waymo組的MVF工作,可以看到,之前的研究工作如果對于一個voxel中點數沒有占據max_points_number實際上也會采用全0占據空間,而這一篇文章的一點創新則是修改成可自适應的儲存點,不必強行每個voxel的空間占用一樣大,可以節省不少内存占用。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)12

1.2.4 voxelrepresentation方法小結

voxel-representation的方法的優點即是性能好又高效,不僅僅在精度上有着point-based的方法目前無法比拟的精度,在速度上也是很可觀的,尤其是在稀疏卷積和3D流型卷積引入到3D目标檢測後,發展更為迅速。但是缺點則是該類方法對參數比較敏感,預處理劃分voxel的時候需要設置合适的參數,當然從信息論的方面理解,體素劃分必然帶來信息的丢失,尤其是局部細節信息的丢失,因此今年CVPR20上至少有三篇文章(SA-SSD,pointpainting,HVnet)在細節幾何結構上做了一定的研究工作。

1.3 graph represention

這是一個比較新的representation,在3D檢測中,今年CVPR20第一次出現了以graph作為representation的網絡結構,如下圖所示,graphrepresentation的核心問題也在于構建一個graph網絡,即下圖中的圖左所示的内容。這也是很多在語義分割中遇到的問題,在目前的建圖中大多是采用的knn的方法構建圖結構,後續再送入到圖卷積進行特種提取,最後根據pointrpn-head提出proposals。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)13

就該類方法而言,目前的研究還不是很多,因為GCN非常耗時,可以理解為時pointnet 特征提取網絡的升級版,不僅僅提取點之間的信息,同時根據‘點-邊’信息提取到更加局部細節的信息,但是優點也可以理解到,3D shape實際上在增加邊信息後,會更加容易感知(對比mesh結構可知),但是采用何種方式構建合适的graph都還是很需要研究的内容。

1.4 point-voxel fusion

既然我們知道point-based的方法具有保持了幾何structure的能力,同時voxel-based的方法具有高效的感知能力,那麼最新的研究就在考慮如何做這方面的fusion工作,PV-RCNN(CVPR20)采用的将voxel特征經過multi-scale的形式賦予到point上,最後再refine階段将點的局部信息融合到pointnet中。SA-SSD采用voxel2point添加附加任務使得voxelbackbone具有structure aware能力。實際上根據representation fusion的經驗,應該還是大有可做的。

2 Augmentation

實際上3D目标檢測的數據增廣方式和二維目标檢測的方式大多相同,我們總結為如下一些比較常見的數據增廣方式,根據動态圖很容易的看到的出來數據增廣的方式,這裡筆者着重介紹一下groundtruth augmentor的方法,這應該是根據3D點雲的稀疏空間特性所特有的數據增廣方式。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)14

ground truth augmentor

就KITTIobject 3D的數據而言,每一幀的object數量從無到二十多個不等,ground truth augmentor的想法則是先從所有訓練集中根據類别把groundtruth建立成一個data base,然後在訓練的時候将data base中的gt按照類别丢一定數量的gt到當前訓練的幀中,這裡筆者給出一般在KITTI上數據增廣的數量如下。即表示一般會選擇在場景中丢進去15個car,丢進10個Pedestrians和Cyclists。SAMPLE_GROUPS: ['Car:15','Pedestrian:10', 'Cyclist:10']因為該數據增廣的工作在3D目标檢測中比較重要,後續還延伸到一些涉及到該方面的研究工作,筆者做一點簡單介紹.

這一篇文章(Class-balanced Grouping and Sampling for Point Cloud 3D Object Detection)的後續研究工作做成了一個detectionzoo,在github上叫det3D,但是該文章的初始問題是想解決在nuscene數據中的數據不平衡問題,根據作者的采樣得到如下圖表,這裡也就是目标檢測的longtail問題,數據不平衡問題

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)15

這裡作者采用的gt數據增廣方式采樣如下個數的gt來平衡數據集本身存在的long tail問題,并最終在nuscence上取得了榜一的成績。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)16

筆者再介紹一篇今年CVPR20上涉及到gt augmentation的工作(oral)(What You See is What You Get:Exploiting Visibility for 3D Object Detection),,如下圖,在本文gt數據增廣後,俯視圖下由(a)變成了(b),但是作者指出這裡出現的問題在于有的增廣的物體出現在牆後,這在Lidar掃描過程中是不符合規律的,因此作者采取的增廣策略是把對應的牆體去掉,如(d)圖所示的内容。這就比較符合lidar掃描的特性,即遇到object就會反彈。

3D目标檢測深度學習方法數據預處理綜述(3D目标檢測深度學習方法數據預處理綜述)17

3 筆者的思考

實際上數據預處理在深度學習中也是比較重要的内容,就representation來說,voxel的方法高效但存在信息丢失,point-basde的方法感知能力不及cnn但輸入為最原始的結構,Graph構建了更容易感知的結構,但也要承擔GCN網絡過長的前饋時間;就augmentation來說,gtaugmentation盡管在漲點上成了衆人皆知的trick,但是要能很好的用起來該方法還是有一些值得研究的trick在裡面,就比如上述提到的兩篇文章。最後寫一個flag,後續盡快寫一個voxel-based方法研究的發展概述,主要也是筆者的理解。

推薦文獻

[1]VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection

[2]Frustum PointNets for 3D Object Detection from RGB-D Data

[3]PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud’

[4]3DSSD: Point-based 3D Single Stage Object Detector

[5]Point-GNN: Graph Neural Network for 3D Object Detection in a Point Cloud

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved