激光雷達目標檢測
激光雷達,是以發射激光束探測目標的位置、速度等特征量的雷達系統。其工作原理是向目標發射探測信號(激光束),然后將接收到的從目標反射回來的信號(目標回波)與發射信號進行比較,作適當處理后,就可獲得目標的有關信息,如目標距離、方位、高度、速度、姿態、甚至形狀等參數,從而對飛機、導彈等目標進行探測、跟蹤和識別。它由激光發射機、光學接收機、轉台和信息處理系統等組成,激光器將電脈沖變成光脈沖發射出去,光接收機再把從目標反射回來的光脈沖還原成電脈沖,送到顯示器。
定義
編輯
LiDAR(Light Detection and Ranging),是激光探測及測距系統的簡稱,另外也稱Laser Radar [1] 或LADAR(Laser Detection and Ranging) [2] 。
用激光器作為發射光源,采用光電探測技術手段的主動遙感設備。激光雷達是激光技術與現代光電探測技術結合的先進探測方式。由發射系統、接收系統 、信息處理等部分組成。發射系統是各種形式的激光器,如二氧化碳激光器、摻釹釔鋁石榴石激光器、半導體激光器及波長可調諧的固體激光器以及光學擴束單元等組成;接收系統采用望遠鏡和各種形式的光電探測器,如光電倍增管、半導體光電二極管、雪崩光電二極管、紅外和可見光多元探測器件等組合。激光雷達采用脈沖或連續波2種工作方式,探測方法按照探測的原理不同可以分為米散射、瑞利散射、拉曼散射、布里淵散射、熒光、多普勒等激光雷達。
構成與原理
LIDAR是一種集激光,全球定位系統(GPS)和慣性導航系統(INS)三種技術與一身的系統,用於獲得數據並生成精確的DEM。這三種技術的結合,可以高度准確地定位激光束打在物體上的光斑。它又分為日臻成熟的用於獲得地面數字高程模型(DEM)的地形LIDAR系統和已經成熟應用的用於獲得水下DEM的水文LIDAR系統,這兩種系統的共同特點都是利用激光進行探測和測量,這也正是LIDAR一詞的英文原譯,即:LIght Detection And Ranging - LIDAR。
激光本身具有非常精確的測距能力,其測距精度可達幾個厘米,而LIDAR系統的精確度除了激光本身因素,還取決於激光、GPS及慣性測量單元(IMU)三者同步等內在因素。隨着商用GPS及IMU的發展,通過LIDAR從移動平台上(如在飛機上)獲得高精度的數據已經成為可能並被廣泛應用。
LIDAR系統包括一個單束窄帶激光器和一個接收系統。激光器產生並發射一束光脈沖,打在物體上並反射回來,最終被接收器所接收。接收器准確地測量光脈沖從發射到被反射回的傳播時間。因為光脈沖以光速傳播,所以接收器總會在下一個脈沖發出之前收到前一個被反射回的脈沖。鑒於光速是已知的,傳播時間即可被轉換為對距離的測量。結合激光器的高度,激光掃描角度,從GPS得到的激光器的位置和從INS得到的激光發射方向,就可以准確地計算出每一個地面光斑的坐標X,Y,Z。激光束發射的頻率可以從每秒幾個脈沖到每秒幾萬個脈沖。舉例而言,一個頻率為每秒一萬次脈沖的系統,接收器將會在一分鍾內記錄六十萬個點。一般而言,LIDAR系統的地面光斑間距在2-4m不等。 [3]
激光雷達的工作原理與雷達非常相近,以激光作為信號源,由激光器發射出的脈沖激光,打到地面的樹木、道路、橋梁和建築物上,引起散射,一部分光波會反射到激光雷達的接收器上,根據激光測距原理計算,就得到從激光雷達到目標點的距離,脈沖激光不斷地掃描目標物,就可以得到目標物上全部目標點的數據,用此數據進行成像處理后,就可得到精確的三維立體圖像。
激光雷達最基本的工作原理與無線電雷達沒有區別,即由雷達發射系統發送一個信號,經目標反射后被接收系統收集,通過測量反射光的運行時間而確定目標的距離。至於目標的徑向速度,可以由反射光的多普勒頻移來確定,也可以測量兩個或多個距離,並計算其變化率而求得速度,這是、也是直接探測型雷達的基本工作原理。
基於lidar的目標檢測方法可以分成3個部分:lidar representation,network backbone,detection head,如下圖所示。
根據lidar不同的特征表達方式[1],可以將目標檢測方法分成以下4種:基於BEV(bird’s eye view)的目標檢測方法,基於camera view的目標檢測方法,基於point-wise feature的目標檢測方法,基於融合特征的目標檢測方法。如下圖所示。
基於bev的目標檢測方法顧名思義是使用bev作為點雲特征的表達,其檢測流程如下圖所示,包括3個部分:bev generator,network backbone, detection head。下面詳細介紹一下這3個部分如何在基於bev的目標檢測方法中發揮作用。
1.BEV generator
BEV圖由激光雷達點雲在XY坐標平面離散化后投影得到,其中需要人為規定離散化時的分辨率,即點雲空間多大的長方體范圍(Δl*Δw*Δh)對應離散化后的圖像的一個像素點(或一組特征向量),如點雲20cm*20cm*Δh的長方體空間,對應離散化后的圖像的一個像素點。具體關於bev投影生成策略可以關注文章:自動駕駛中,激光雷達點雲如何做特征表達[1]。 在bev generator中,需要根據Δl*Δw*Δh來生成最后L*W*H大小的bev特征圖,該特征圖是network backbone特征提取網絡的輸入,因此該特征圖的大小對整個網絡的效率影響很大,如pointpillar[2]通過對voxelnet[3]中bev generator的優化,整個網絡效率提高了7ms。
Network backbone
網絡結構的設計需要兼顧性能和效果,一般都是在現有比較大且性能比較好的網絡結構基礎上進行修改,可以參照文章:輕量(高效)目標檢測網絡結構設計[4]。以voxelnet[3]和pointpillar[2]為例,pointpillar[2]以voxelnet[3]為原型,不改變原流程的基礎上,對voxelnet[3]設計做了以下一些修改,使網絡效率提高了10多倍,具體如下:
簡化bev中的網絡結構
voxelnet[3]使用stacked vfe layer,在代碼中使用了2個vfe layer,如下圖所示。
pointpillar[2]簡化了voxel表達形式,變成pillar,提高了數據生成效率,並且只使用了一個vfe layer,減少了2ms,如下圖所示。
簡化主網絡結構
- 不使用3D卷積
- 輸入特征圖的channel數從128減少為64,網絡耗時減少2.5ms
- 網絡主結構所有層channel數減半,網絡耗時減少4.5ms
- Upsampling的channel數從256減少到128,減輕detection head,網絡耗時減少3.9ms
- Tensorrt加速,提速45.5%
Pointpillar[2]在保證網絡性能提升的前提下,逐步提高網絡效率,從不同角度優化網絡流程,最后使網絡效率提高10倍有余。
Detection head
detection head包括兩個任務,即:目標分類與目標定位,由於bev將點雲用圖像的形式呈現,同時保留了障礙物在三維世界的空間關系,因此基於bev的目標檢測方法可以和圖像目標檢測方法類比:目標分類任務與圖像目標檢測方法中目標分類任務沒有差別;而目標定位任務可以直接回歸目標的真實信息,但與圖像目標檢測方法中目標定位任務不同,該任務需要給出旋轉框。與圖像目標檢測方法相同,基於bev的目標檢測方法的detection head也分成anchor base的方法和anchor free的方法。
anchor base方法
以voxelnet[3]為例,需要人為設定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[5],對於bbox的回歸,如下圖所示,對於正樣本的紅點p(x,y),需要回歸如下信息:{cos(θ), sin(θ), dx, dy, w, l},其中θ為障礙物偏角,dx、dy分別為p點相對障礙物中心點的偏移,w、l是障礙物大小的表達。沒有anchor,對目標的回歸是不是簡單了很多。
以上為基於bev的目標檢測方法的簡單介紹,該方法在目前的自動駕駛的3D目標檢測方案中應用較廣。
2.Camera view generator
camera view圖是將每圈激光線拉成直線再按行累積而成,因此也稱為range view,其中投影圖的高為激光線數,寬為lidar掃描一圈的點數,如: 64線激光雷達,水平角分辨率為0.2°,生成的camera view的圖大小為64*1800。camera view相對bev圖小很多,因此基於camera view的方法效率都較高。具體投影圖的生成策略可以關注文章:自動駕駛中,激光雷達點雲如何做特征表達[2]。camera view效果如下圖。
Network backbone
網絡結構的設計要依據任務需求,基於camera view的目標檢測方法,多是以分割任務為主,因此網絡結構大都是encode+decode結構,如下圖1所示。因此有關提高分割效果的網絡 設計思想都可以在此使用,如圖2中使用不同大小的dilation rate的卷積獲得不同感受野的特征表達,如圖3使用global attention增加上下文信息。更多分割增強模塊,在后面會專門寫一篇文章介紹。
圖1 ecode+decode
圖2 不同dilate rate卷積
圖3 global attention
Detection head
基於camera view的目標檢測方法有兩種輸出方式表達,一種是純分割區域,另一種是分割與檢測框。
純分割區域表達
純分割的輸出是基於camera view的模型最直接、最好的一種輸出。在原始3D點雲中,尤其是遠處的點,點與點之間的距離都較遠,如bev投影圖,造成點特征提取時很難融入上下文信息。而camera view投影圖將點雲中的點聚攏,每個點都可以很方便的獲得更大范圍的上下文信息,這種投影方式更適合分割任務。如在SqueezeSeg[3]和PointSeg[4]兩篇文章中,都直接將分割作為最終任務目標,但是為了得到更好的聯通區域,需要增加較多的后處理。如在SqueezeSeg[3],在模型輸出后又增加了crf提高分割效果。在PointSeg[4]中,使用RANSAC將異常點剔除,如下圖,第一行為模型輸入,第二行為模型直接的預測輸出,第三行為將模型輸出的camera view圖反投影得到的點雲圖,第四行為經過ransac后再反投影得到的點雲圖,對比第三行和第四行對應的圖可以看出,ransac有效的抑制很多離目標較遠的點。
分割與檢測表達
分割任務對於基於camera view的模型相對簡單,但是檢測框的回歸並不容易。camera view投影圖增加了點雲中點的上下文信息,但也將原本在3D空間分離的目標拉近,引入了遮擋與目標尺度變化,然而點雲投影圖又不像真實的圖像那樣有很豐富的紋理信息,造成了camera view圖像很難做實例分割與目標框回歸,因此,檢測框的回歸需要增加一些額外操作來實現。
在lasernet[5]中,對於目標框中的點(x,y)需要回歸6個信息,如上圖所示,Box Parameters為6,包括:該點相對中心點的偏移(dx,dy), 相對旋轉角度 (ωx,ωy) = (cosω,sinω),以及框大小 (l,w),從而可以通過下述公式計算得到真正的目標框中心點bc以及旋轉角φ,其中θ為該點在點雲中的方位角,Rθ為以θ為旋轉角的旋轉矩陣。
另外,由於對每個點的預測存在噪聲,而后又在bev投影圖中使用mean shift聚類方法得到更准確的目標框。
總結:
由於3D點雲在做camera view投影的時候丟失了原來的3D結構信息,引入了圖像中的尺度變化和遮擋兩個問題,因此少有方法直接在這種模式下作3D目標檢測,一般需要在網絡輸出基礎上做比較多的后處理。但是camera view的表達模式,極大的增加了遠處點雲的上下文信息,也是一種極好的提高點雲特征表達能力的方式,后續在融合感知方法中會再介紹。
3.Point-wise
基於lidar的目標檢測方法迎來了第3大類方法的介紹,前面已經介紹過基於BEV(bird’s eye view)的目標檢測方法[1],基於camera/rang view的目標檢測方法[2],這兩種方法在自動駕駛的實際運用中都很常見,算是比較主流的方法。這兩種方法研究的也比較早,相對成熟一些。而point-wise目標檢測方法自pointnet[3]之后,才有較多的研究文章用其解決自動駕駛中有關3D目標檢測問題,在此之前,大都用來解決基於室內場景或者單個全掃描目標密集點雲的分割、檢測、場景理解的問題,其中研究有關RGB-D的問題最多。
這里我們將關注點放在如何用point-wise feature來解決自動駕駛的目標檢測問題上。自2017年pointnet[3]之后出現的3D目標檢測相關文章中,50%都出自香港中文大學,其中一部分來自商湯科技自動駕駛相關部門,如PointRcnn[4]、Part aware and aggregation[5]、PV Rcnn[6],另一部分來自騰訊優圖實驗室賈佳亞老師團隊,同樣也是自動駕駛相關業務方向,如IPoD[7]、Fast PointRcnn[8]、STD[9]、3DSSD[10]。這里面除了3DSSD[10]方法為one-stage detector,其他都是two-stage detector,而3DSSD[10]主打高效,從而也可以看出刷榜還得靠two-stage detector。
我們從如下圖所示的3個部分(lidar representation,network backbone,detection head),來介紹一下point-wise方法。其中lidar represention部分是直接使用點雲做輸入,即n*4的點集,不做單獨介紹,下面重點介紹一下其他兩個部分。
Network backbone
提取點特征一般有兩種方式:基於pointnet[3]/pointnet++[11]的點特征、voxel特征。如圖1:在STD[9]中,組合了兩種方式。如圖2,在PointRcnn[4]中,僅使用了pointnet++[11]提取點特征
圖1 STD[9]特征提取方式
圖2 PointRcnn中特征提取方式
在使用pointnet++[11]提取特征時,包含兩個重要模塊,即set abstraction(即,SA)和feature propagation(即,FP),如下圖3所示其中SA是特征encoder過程,通過點雲篩選與特征提取逐步減少點雲點數,提高特征表達能力與感受野,FP是特征decoder過程,通過點雲上采樣,獲得稠密的點雲表達,並級聯SA過程的特征,提高最終的點雲特征表達能力。
圖3 pointnet++特征表達
在3DSSD[10]中,為了提高模型效率,去掉了耗時比較嚴重的FP模塊,由於SA過程只篩選了一部分點做特征表達,對目標檢測的召回影響很大,尤其對點雲比較稀疏的遠處的目標,影響更大,因此3DSSD[10]在D-FPS的基礎上,提出了F-FPS,即通過點的語義信息來做點的篩選,保留更多的正樣本的點,保證最終的目標召回率。
Detection head
detection head除了完成目標分類與目標定位的任務,在two-stage detector中,還需要實現roi pooling,為第二階段提供實例級別的特征,之前寫過一篇圖像中的rpn與roi align實現[12],但是點雲的特征表達還是有些差別的。
對於目標定位的任務,同樣有anchor-base方法和anchor-free方法。在STD[9]中,為應對有旋轉角的box回歸,提出了球形anchor,由於anchor沒有角度的變化,直接將anchor數量減少50%,提高了計算效率。其他方法大都是anchor-free的方法,關於anchor-free的方法,推薦讀一下kaiming大神的voteNet[13],比較好理解。
關於roi pooling,一般是針對單個目標,再次提取更豐富、更具表達能力的特征,因此在不同論文中,根據實例提取特征方式的不同,提出了不同的roi pooling方法,如在STD[9]中,提出了PointsPool,在Part aware and aggregation[5]中,提出了Roi aware Point Cloud Pooling,在pv-rcnn[6]中提出了Roi grid Pooling。下面分別介紹一下。
PointsPool[9]
如下圖4所示,分成三個步驟
圖4 PointsPool[9]
1. 特征提取:在proposal中隨機篩選N個點,1)獲得第一階段的點特征;2)獲得N個點的坐標,並用如下圖5所示的canonical transformation得到與原坐標系無關的坐標特征。兩種特征聯合在一起,作為proposal中點的特征表達
2. Voxel表達:將不同大小的proposal,通過voxel統一化到相同大小:dl = 6,dw = 6,dh = 6
3. 使用VFE layer提取最終特征
圖5 canonical transformation
Roi aware Point Cloud Pooling[5]
整體流程如下圖6所示,與STD[9]中的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[6]
與上面兩種pooling方法不同的是,並沒有將proposal通過voxel得到固定大小的特征圖,而是根據pv-rcnn[6]中提出的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
總結:
目前基於point-wise feature的目標檢測方法還處於研究階段,效率無法保證,精度還未在真實自動駕駛車上測試,但由於該方法直接從點雲提取特征,極大的保留了點雲的原始信息,比較有潛力得到更好的效果。
參考文獻:
1、PointPillars: Fast Encoders for Object Detection from PointClouds
2、VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
3、PIXOR: Real-time 3D Object Detection from Point Clouds
4、Multi-View 3D Object Detection Network for Autonomous Driving
5、YOLO3D: End-to-end real-time 3D Oriented Object Bounding Box Detection from LiDAR Point Cloud6、SqueezeSeg: Convolutional Neural Nets with Recurrent CRF for Real-Time Road-Object Segmentation from 3D LiDAR Point Cloud7、PointSeg: Real-Time Semantic Segmentation Based on 3D LiDAR Point Cloud8、LaserNet: An Efficient Probabilistic 3D Object Detector for Autonomous Driving