wujianming-110117

激光雷达目标检测

激光雷达,是以发射激光束探测目标的位置、速度等特征量的雷达系统。其工作原理是向目标发射探测信号(激光束),然后将接收到的从目标反射回来的信号(目标回波)与发射信号进行比较,作适当处理后,就可获得目标的有关信息,如目标距离、方位、高度、速度、姿态、甚至形状等参数,从而对飞机、导弹等目标进行探测、跟踪和识别。它由激光发射机、光学接收机、转台和信息处理系统等组成,激光器将电脉冲变成光脉冲发射出去,光接收机再把从目标反射回来的光脉冲还原成电脉冲,送到显示器。

定义

编辑

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

 

分类:

技术点:

相关文章: