首頁>科技>

基於lidar的目標檢測方法可以分成3個部分:lidar representation,network backbone,detection head,如下圖所示。

根據lidar不同的特徵表達方式,可以將目標檢測方法分成以下4種:基於BEV(bird’s eye view)的目標檢測方法,基於camera view的目標檢測方法,基於point-wise feature的目標檢測方法,基於融合特徵的目標檢測方法。如下圖所示。

圖1 基於lidar目標檢測方法分類

基於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.5msUpsampling的channel數從256減少到128,減輕detection head,網路耗時減少3.9msTensor 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目標檢測方案中應用較廣。

基於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的表達模式,極大的增加了遠處點雲的上下文資訊,也是一種極好的提高點雲特徵表達能力的方式。

基於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 poolingRoIAwareAvgPool:使用的是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的目標檢測方法還處於研究階段,效率無法保證,精度還未在真實自動駕駛車上測試,但由於該方法直接從點雲提取特徵,極大的保留了點雲的原始資訊,比較有潛力得到更好的效果。

基於融合特徵的目標檢測方法

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資料集結果

總結與展望

透過對整個檢測流程的分析,將目標檢測流程分成如下3個部分,如圖2所示。並針對不同的目標檢測方法,從這3個部分進行了詳細的分析。

lidar representation:鐳射雷達點雲的特徵表達,包括bev圖、camera/range view圖、point-wise feature、融合特徵。network backbone:用於特徵提取的主體結構,可以為resnet,vgg等,也包括增強特徵的方式,如fpndetection 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的目標檢測方法可以在不同任務間依然能保持精度優勢,那麼其落地的可能性又會增大很多。

總之,我們需要從耗時、不同任務間精度平衡來評估演算法的落地難易程度,但是對於有潛力的演算法,我們更需要持續的投入,以期待解決未來更復雜的實際問題。

28
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 有利網線上溝通會,並沒能解決問題,出借人該怎麼辦?