導讀
自動駕駛中的激光雷達點云如何做特征表達,將基于Lidar的目標檢測方法分成了4類,即:基于BEV的目標檢測方法,基于camera/range view的目標檢測方法,基于point-wise feature的目標檢測方法,基于融合特征的目標檢測方法。本文對這4類方法講解并總結,希望能幫助大家在實際使用中做出快速選擇。基于lidar的目標檢測方法可以分成3個部分:lidar representation,network backbone,detection head,如下圖所示。
根據lidar不同的特征表達方式,可以將目標檢測方法分成以下4種:基于BEV(bird’s eye view)的目標檢測方法,基于camera view的目標檢測方法,基于point-wise feature的目標檢測方法,基于融合特征的目標檢測方法。如下圖所示。
圖1 基于lidar目標檢測方法分類
1、基于BEV的目標檢測方法
基于bev的目標檢測方法顧名思義是使用bev作為點云特征的表達,其檢測流程如下圖所示,包括3個部分:bev generator,network backbone, detection head。下面詳細介紹一下這3個部分如何在基于bev的目標檢測方法中發揮作用。
1. bev generator BEV圖由激光雷達點云在XY坐標平面離散化后投影得到,其中需要人為規定離散化時的分辨率,即點云空間多大的長方體范圍(Δl*Δw*Δh)對應離散化后的圖像的一個像素點(或一組特征向量),如點云20cm*20cm*Δh的長方體空間,對應離散化后的圖像的一個像素點。 在bev generator中,需要根據Δl*Δw*Δh來生成最后L*W*H大小的bev特征圖,該特征圖是network backbone特征提取網絡的輸入,因此該特征圖的大小對整個網絡的效率影響很大,如pointpillar通過對voxelnet中bev generator的優化,整個網絡效率提高了7ms。
2. network backbone 網絡結構的設計需要兼顧性能和效果,一般都是在現有比較大且性能比較好的網絡結構基礎上進行修改。以voxelnet和pointpillar為例,pointpillar以voxelnet為原型,不改變原流程的基礎上,對voxelnet設計做了以下一些修改,使網絡效率提高了10多倍,具體如下: 簡化bev中的網絡結構voxelnet使用stacked vfe layer,在代碼中使用了2個vfe layer,如下圖所示。
pointpillars簡化了voxel表達形式,變成pillar,提高了數據生成效率,并且只使用了一個vfe layer,減少了2ms,如下圖所示。
簡化主網絡結構
不使用3D卷積
輸入特征圖的channel數從128減少為64,網絡耗時減少2.5ms
網絡主結構所有層channel數減半,網絡耗時減少4.5ms
Upsampling的channel數從256減少到128,減輕detection head,網絡耗時減少3.9ms
Tensor RT加速,提速45.5%
Pointpillar[2]在保證網絡性能提升的前提下,逐步提高網絡效率,從不同角度優化網絡流程,最后使網絡效率提高10倍有余。 3.detection head detection head包括兩個任務,即:目標分類與目標定位,由于bev將點云用圖像的形式呈現,同時保留了障礙物在三維世界的空間關系,因此基于bev的目標檢測方法可以和圖像目標檢測方法類比:目標分類任務與圖像目標檢測方法中目標分類任務沒有差別;而目標定位任務可以直接回歸目標的真實信息,但與圖像目標檢測方法中目標定位任務不同,該任務需要給出旋轉框。與圖像目標檢測方法相同,基于bev的目標檢測方法的detection head也分成anchor base的方法和anchor free的方法。 anchor base方法以voxelnet為例,需要人為設定anchor的大小,由于bev可以直接回歸真實的目標大小,因此anchor也可以根據真實目標大小設定,如:以下單位為米,l、w、h分別表示anchor的長、寬、高,對于車來說anchor大小可以設定為la = 3.9,wa = 1.6,ha = 1.56,對于人la = 0.8,wa = 0.6,ha = 1.73,對于騎行者la =1.76,wa = 0.6,ha = 1.73,且對于每種anchor,設置了θa=0°和90°兩種角度。由于目標有各種角度,因此為了得到更準確的角度回歸,anchor的角度設置可以在[0°,180°)進行等間隔采樣,獲得更多不同角度的anchor,提高回歸精度。回歸誤差的計算如下圖所示。
anchor free方法典型代表是pixor,對于bbox的回歸,如下圖所示,對于正樣本的紅點p(x,y),需要回歸如下信息:{cos(θ), sin(θ), dx, dy, w, l},其中θ為障礙物偏角,dx、dy分別為p點相對障礙物中心點的偏移,w、l是障礙物大小的表達。沒有anchor,對目標的回歸是不是簡單了很多。
以上為基于bev的目標檢測方法的簡單介紹,該方法在目前的自動駕駛的3D目標檢測方案中應用較廣。
2、基于camera/range view的目標檢測方法
基于cameraview的目標檢測方法顧名思義是使用camera view作為點云特征的表達,檢測流程如下圖所示,下面詳細介紹一下這3個部分如何在基于camera view的目標檢測方法中發揮作用。
1. camera view generator
camera view圖是將每圈激光線拉成直線再按行累積而成,因此也稱為range view,其中投影圖的高為激光線數,寬為lidar掃描一圈的點數,如: 64線激光雷達,水平角分辨率為0.2°,生成的camera view的圖大小為64*1800。camera view相對bev圖小很多,因此基于camera view的方法效率都較高。camera view效果如下圖。
2. network backbone
網絡結構的設計要依據任務需求,基于camera view的目標檢測方法,多是以分割任務為主,因此網絡結構大都是encode+decode結構,如下圖1所示。因此有關提高分割效果的網絡 設計思想都可以在此使用,如圖2中使用不同大小的dilation rate的卷積獲得不同感受野的特征表達,如圖3使用global attention增加上下文信息。更多分割增強模塊,在后面會專門寫一篇文章介紹。
圖1 ecode+decode
圖2 不同dilate rate卷積
圖3 global attention
3. detection head
基于camera view的目標檢測方法有兩種輸出方式表達,一種是純分割區域,另一種是分割與檢測框。 純分割區域表達純分割的輸出是基于camera view的模型最直接、最好的一種輸出。在原始3D點云中,尤其是遠處的點,點與點之間的距離都較遠,如bev投影圖,造成點特征提取時很難融入上下文信息。而camera view投影圖將點云中的點聚攏,每個點都可以很方便的獲得更大范圍的上下文信息,這種投影方式更適合分割任務。如在SqueezeSeg和PointSeg兩篇文章中,都直接將分割作為最終任務目標,但是為了得到更好的聯通區域,需要增加較多的后處理。如在SqueezeSeg,在模型輸出后又增加了crf提高分割效果。在PointSeg中,使用RANSAC將異常點剔除,如下圖,第一行為模型輸入,第二行為模型直接的預測輸出,第三行為將模型輸出的camera view圖反投影得到的點云圖,第四行為經過ransac后再反投影得到的點云圖,對比第三行和第四行對應的圖可以看出,ransac有效的抑制很多離目標較遠的點。
分割與檢測表達分割任務對于基于camera view的模型相對簡單,但是檢測框的回歸并不容易。camera view投影圖增加了點云中點的上下文信息,但也將原本在3D空間分離的目標拉近,引入了遮擋與目標尺度變化,然而點云投影圖又不像真實的圖像那樣有很豐富的紋理信息,造成了camera view圖像很難做實例分割與目標框回歸,因此,檢測框的回歸需要增加一些額外操作來實現。
在lasernet中,對于目標框中的點(x,y)需要回歸6個信息,如上圖所示,Box Parameters為6,包括:該點相對中心點的偏移(dx,dy), 相對旋轉角度 (ωx,ωy) = (cosω,sinω),以及框大小 (l,w),從而可以通過下述公式計算得到真正的目標框中心點bc以及旋轉角φ,其中θ為該點在點云中的方位角,Rθ為以θ為旋轉角的旋轉矩陣。
另外,由于對每個點的預測存在噪聲,而后又在bev投影圖中使用mean shift聚類方法得到更準確的目標框。 4. 小結 由于3D點云在做camera view投影的時候丟失了原來的3D結構信息,引入了圖像中的尺度變化和遮擋兩個問題,因此少有方法直接在這種模式下作3D目標檢測,一般需要在網絡輸出基礎上做比較多的后處理。但是camera view的表達模式,極大的增加了遠處點云的上下文信息,也是一種極好的提高點云特征表達能力的方式。
3、基于point-wise feature的目標檢測方法
我們從如下圖所示的3個部分(lidar representation,network backbone,detection head),來介紹一下point-wise方法。其中lidar represention部分是直接使用點云做輸入,即n*4的點集,不做單獨介紹,下面重點介紹一下其他兩個部分。
1. network backbone 提取點特征一般有兩種方式:基于pointnet/pointnet++的點特征、voxel特征。如圖1:在STD中,組合了兩種方式。如圖2,在PointRcnn中,僅使用了pointnet++提取點特征
圖1 STD特征提取方式
圖2 PointRcnn中特征提取方式
在使用pointnet++[11]提取特征時,包含兩個重要模塊,即set abstraction(即,SA)和feature propagation(即,FP),如下圖3所示其中SA是特征encoder過程,通過點云篩選與特征提取逐步減少點云點數,提高特征表達能力與感受,FP是特征decoder過程,通過點云上采樣,獲得稠密的點云表達,并級聯SA過程的特征,提高最終的點云特征表達能力。
圖3 pointnet++特征表達
在3DSSD中,為了提高模型效率,去掉了耗時比較嚴重的FP模塊,由于SA過程只篩選了一部分點做特征表達,對目標檢測的召回影響很大,尤其對點云比較稀疏的遠處的目標,影響更大,因此3DSSD在D-FPS的基礎上,提出了F-FPS,即通過點的語義信息來做點的篩選,保留更多的正樣本的點,保證最終的目標召回率。
2. detection head detection head除了完成目標分類與目標定位的任務,在two-stage detector中,還需要實現roi pooling,為第二階段提供實例級別的特征,點云的特征表達還是有些差別的。 對于目標定位的任務,同樣有anchor-base方法和anchor-free方法。在STD中,為應對有旋轉角的box回歸,提出了球形anchor,由于anchor沒有角度的變化,直接將anchor數量減少50%,提高了計算效率。其他方法大都是anchor-free的方法,關于anchor-free的方法,推薦讀一下kaiming大神的voteNet,比較好理解。
關于roi pooling,一般是針對單個目標,再次提取更豐富、更具表達能力的特征,因此在不同論文中,根據實例提取特征方式的不同,提出了不同的roi pooling方法,如在STD中,提出了PointsPool,在Part aware and aggregation中,提出了Roi aware Point Cloud Pooling,在pv-rcnn中提出了Roi grid Pooling。下面分別介紹一下。 PointsPool如下圖4所示,分成三個步驟
圖4 PointsPool
特征提取:在proposal中隨機篩選N個點,1)獲得第一階段的點特征;2)獲得N個點的坐標,并用如下圖5所示的canonical transformation得到與原坐標系無關的坐標特征。兩種特征聯合在一起,作為proposal中點的特征表達
Voxel表達:將不同大小的proposal,通過voxel統一化到相同大小:dl = 6,dw = 6,dh = 6
使用VFE layer提取最終特征
圖5 canonical transformation
Roi aware Point Cloud Pooling整體流程如下圖6所示,與STD中的pooling方法類似,首先將proposal分割成固定大小的voxel,如14×14×14,然后再提取voxel特征表達:
RoIAwareMaxPool:使用的是第一階段輸出的point-wise semantic part feature,在voxel中計算max pooling
RoIAwareAvgPool:使用的是proposal中經過canonical transformation點坐標特征和segmentation score,在voxel中計算avg pooling
最后將兩組特征聯合作為proposal的pooling特征。
圖6 Roi aware Point Cloud Pooling
Roi grid pooling與上面兩種pooling方法不同的是,并沒有將proposal通過voxel得到固定大小的特征圖,而是根據pv-rcnn中提出的key point信息,將proposal用6*6*6=216個grid points表達,grid points是從proposal中的key points均勻采樣獲得,且RoI-grid point features提取過程和key point feature提取過程是相似的。簡單來說就是以grid point為中心,r為半徑的區域內提取不同尺度、不同感受野的特征,最后在使用2層的MLP網絡獲得最終的特征表達,如圖7所示。
圖7 Roi grid point feature extraction
3.小結與展望
目前基于point-wise feature的目標檢測方法還處于研究階段,效率無法保證,精度還未在真實自動駕駛車上測試,但由于該方法直接從點云提取特征,極大的保留了點云的原始信息,比較有潛力得到更好的效果。
4、基于融合特征的目標檢測方法
Waymo在2020年初的文章“End-to-End Multi-View Fusionfor 3D Object Detection in LiDAR Point Clouds”使用了融合特征的方式,得到了不錯的結果。下面詳細介紹一下。
圖1 目標檢測流程
我們從如圖1所示的3個部分(lidar representation,network backbone,detection head),來介紹一下融合特征的目標檢測方法。文中主要和pointpillar做了對比,為了證明融合特征的有效性,在network backbone和detection head兩部分的設計上保持了與pointpillars的一致性,這里不做單獨介紹,下面重點介紹lidar representation,即如何獲得融合特征。 1. lidar representation
圖2 multi-view feature fusion的流程
圖3 dynamic voxelization計算流程
如圖2所示為multi-view feature fusion的流程,融合了3部分特征:bev feature(如圖中綠色部分)、camera/range view feature(如圖中黃色部分)、point-wise feature(如圖中藍色部分)。具體流程如下:
對于原始點云,使用一個全連接層,獲得point-wise feature。
在point-wise feature的基礎上,提取bev feature。提出了使用動態voxel(dynamic voxelization,DV)的方式獲得bev圖,計算過程如圖3所示,相對傳統的voxel(Hard voxelization,HV),有3個好處,1)DV保留了voxel中的所有點,HV使用隨機采樣的方法選取固定的點數,有可能會丟失重要信息,如圖3中v1的計算;2)HV中每個voxel中選擇固定的點數,且對整個點云選擇固定的voxel數量,因此會隨機丟棄點甚至整個voxel,這種方式可能導致不穩定的檢測結果,如圖3中v2在HV中被丟棄;3)HV對于點數少于固定值的voxel使用0填充,這樣會造成額外的計算,如圖3中v2~v4。最后對于點云的每一個點,使用公式(1)獲得點與voxel的投影關系,其中pi表示點云坐標,vj表示voxel,FV表示點到voxel的投影關系。
對于camera view,同樣可以使用公式(1)計算得到,而camera view的投影計算
bev圖和camera view圖經過一個cnn后,獲得相應的bev feature與camera view feature,再使用公式(2)(其中,FP表示voxel feature到點云的投影關系,是FV的逆)逆投影獲得不同view的點特征的表達,最后與point-wise feature融合得到最終的點特征表達。
(1)
(2) 2. 結果與小結
在實驗中,作者為了證明融合特征較強的表達能力,network backbone與detection head使用了與pointpillar相同的參數,并在waymo公開的數據庫與kitti上做了實驗。僅分析一下waymo公開數據庫的結果,如圖4中的table1和table 2。從結果可以看出,使用DV替換HV,使整體結果提高2個多點,再增加point-wise feature后,車輛檢測結果再提高3個多點,行人檢測結果再提高4個點,說明voxel中的每個點對voxel特征表達都重要,不能隨機丟棄,更不能隨機丟棄整個voxel,更精細的特征對小尺度的目標表達有幫助。耗時方面,由于mvf使用了與兩種方法相同的網絡配置,而又增加了新的特征表達,整體耗時高了20多ms,如果再對網絡做一些優化,這種融合的方法對結果的提升意義很大。
圖4 waymo數據集結果
5、總結與展望
通過對整個檢測流程的分析,將目標檢測流程分成如下3個部分,如圖2所示。并針對不同的目標檢測方法,從這3個部分進行了詳細的分析。
lidar representation:激光雷達點云的特征表達,包括bev圖、camera/range view圖、point-wise feature、融合特征。
network backbone:用于特征提取的主體結構,可以為resnet,vgg等,也包括增強特征的方式,如fpn
detection head:檢測網絡輸出,包括目標的類別、位置、大小和姿態,以及速度預測等,對于two-stage detector來說,roi pooling也是很重要的一個環節。
圖2 目標檢測流程
其實,在實際應用中,無論對于哪一種基于lidar的目標檢測方法來說,我們評價其好壞,需要看精度與耗時之間的平衡。根據不同算法在kitti的bird’s eye view任務下公布的結果,將部分基于lidar的目標檢測方法的moderate精度和latency總結如表1,并根據方法所屬的不同類別畫出分布圖,如圖3所示,橫坐標表示算法耗時,單位ms,縱坐標表示算法在車輛檢測任務中moderate精度,其中藍點表示基于point-wise feature的目標檢測方法,橙點表示基于BEV的目標檢測方法,灰點表示基于camera view的目標檢測方法。 表1 不同算法檢測效果
圖3 不同算法效果分布圖
從圖3,我們可以看出基于point-wise feature的目標檢測方法精度最高,而且耗時有逐步減小的趨勢,但是整體耗時依舊比其他兩種方法高,其中耗時最低的是基于camera-view的目標檢測方法,即LaserNet,僅有12ms,但是精度相對較最低;基于bev的目標檢測方法在精度與耗時之間做了比較好的平衡,因此,在實際自動駕駛應用中,基于bev的目標檢測方法應用最多。 之前在介紹基于point-wise feature的目標檢測方法中說過,該方法潛力較大,其實從圖3中也可以看出。如果從效率上可以優化一下,在實際應用的可能性也會變大。這個圖僅是不同方法在車輛檢測子任務上的效果,其實,相同的方法在自行車和人的檢測任務中精度排名差別很大,如PV-RCNN在車輛檢測中排名第2,在行人和自行車檢測任務中分別滑到第6和第4;STD在車輛檢測中排名第5,在行人和自行車檢測任務中分別滑到第20和第13,如果基于point-wise feature的目標檢測方法可以在不同任務間依然能保持精度優勢,那么其落地的可能性又會增大很多。總之,我們需要從耗時、不同任務間精度平衡來評估算法的落地難易程度,但是對于有潛力的算法,我們更需要持續的投入,以期待解決未來更復雜的實際問題。本文來源:計算機視覺之路,作者:山澗一壺酒
審核編輯:郭婷
-
激光雷達
+關注
關注
967文章
3940瀏覽量
189602 -
自動駕駛
+關注
關注
783文章
13685瀏覽量
166150
原文標題:一文覽盡LiDAR點云目標檢測方法
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論