基于三维立方体损失的点云目标检测算法
2021-07-16葛旭阳黄尚锋蔡国榕
葛旭阳,黄尚锋,蔡国榕
(1.集美大学理学院,福建 厦门 361021;2.集美大学计算机工程学院,福建 厦门 361021)
0 引言
三维目标检测在自动驾驶[1]、机器人[2]等领域有着广泛的应用。通过估计空间目标的3D位置,自主驾驶的车辆或机器人可以更准确地预判和规划自己的行为和路径,避免碰撞和违规。目前,三维目标检测按照数据类型可分为三类:单目图像、多视图图像、点云目标检测。基于单视图的方法,如GS3D[3]使用单目摄像头完成三维目标检测;基于多视图的方法,如Chen等[4]从不同视图的图像中得到的视差来获得深度图完成三维目标检测;基于点云的方法,如PointRCNN[5]、VoteNet[6]从点云获取目标信息完成三维目标检测。
目前基于点云的目标检测方法,想获得更好的检测性能有三种方法:一是用更好的主干网;二是设计更好的策略提取更好的特征;三是用并集上的交集(Intersection over Union,IoU)计算的度量损失来替代传统的边界框回归损失,如l1范数、l2范数等。边界框回归是2D/3D视觉任务中一个最基础的模块,不论是实例分割、目标跟踪,还是目标检测,都依赖于对边界框进行回归,以获得准确的定位效果。因此,选择更好的边界框回归损失,有利于提高目标检测网络的性能。
IoU又被称为Jaccard索引,常用来表示两个任意形状目标的相似性,在目标检测的边界框回归中起到重要的作用。在anchor-based[7]的方法中,IoU不仅可以用来确定正样本和负样本,还可以用来评价输出框和真实框的距离,或者说预测框的准确性。IoU还有一个好的特性,就是尺度不变性。由于这个良好的属性,所以在语义分割[8]、目标检测[9]和跟踪[10]等任务中的性能测量均采用IoU作为测量指标。
ln范数类型损失的一个较好的局部最优解可能并非IoU的局部最优解;而且与IoU不同的是,ln范数不具有尺度不变性,相同重叠程度的边界框的损失值不一定相同。另外,一些边界框的表示方法,由于没有对不同类型的表示参数进行正则处理,当表示参数变多时,或在问题中添加更多维度时,复杂性会增加。为了缓解上述问题,目前最先进的对象检测器引入了锚盒(anchor box)[11]的概念,他们还定义了一个非线性的表示[12-13]来补偿尺度的变化。即使进行了这些手工更改,优化回归损失和最大化IoU值之间仍然存在差距。
Rezatofighi等[14]探索了轴对齐矩形之间的IoU,此时IoU有解析解,并且可反向传播,意味着,IoU可以直接用作目标函数进行优化。而优化IoU目标函数与优化某个损失函数之间,显然选择优化IoU目标函数,可以提高IoU指标的强相关。但是这其中也存在问题:如果两个框不相交,那么就无法衡量两个框的距离;同时IoU的值为0,其梯度也将为0,当计算梯度的时候就无法使用优化器进行传播。针对这些问题,提出了泛化版的IoU,称为GIoU。GIoU的优点有:a)沿袭IoU能将被比较的目标形状属性编码进区域属性;b)维持IoU的尺度不变性;c)在目标有重叠情况下与IoU强相关。
本文在此基础上,设计了一个适用于三维目标检测边界框回归的度量方法(3D_CGIoU),将3D_CGIoU的值纳入三维目标检测边界框回归的损失中,并将该方法融入到目前主流的三维目标检测网络中,如PointRCNN、VoteNet和VoxelNet[15]等,评估其对检测性能的影响。
1 3D_CGIoU算法
三维目标检测中,边界框回归的目标是尽可能准确地获取预测框。目前绝大部分的目标检测都会用IoU对候选预测框进行筛选,多数的目标检测通过ln范数来作为度量标准,这将会存在两个预测框ln范数的绝对值相同,而和真实框的重叠方式却不相同的情况。另外,ln范数对物体的尺度变化很敏感,而IoU和GIoU具有尺度不变性可以更好地度量预测框的精准度。受到GIoU的启发,本文设计了一个适用于三维目标检测边界框回归的度量和损失(3D_CGIoU)的计算方法。
1.1 GIoU的原理
IoU是用来比较任意形状(体积)之间的相似性,但是当预测框与真实框完全不重合时,损失函数梯度为0。另外,预测框与真实框可以以不同的方式重叠,得到相同的IoU值,即IoU不能反映两个框之间如何发生重叠。
针对以上存在的问题,Rezatofighi等[14]设计了适用于二维目标检测的GIoU。首先,计算预测框和真实框的最小闭包区域面积(同时包含了预测框和真实框的最小长方形的面积),再计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用IoU(其值记为I1)减去这个比重得到GIoU(其值记为I2)。
IoU和GIoU的计算方式如下:
I1=S紫色/(S紫色+S绿色+S蓝色),
(1)
I2=I1-S黄色/(S紫色+S蓝色+S绿色+S黄色)。
(2)
公式(1)和公式(2)中的S指代各颜色区域面积,各颜色区域如图1所示。
1.2 3D_CGIoU的原理
借鉴GIoU的方法,本文设计了一个适用于三维目标检测边界框的度量方法,该方法在鸟瞰图上以最小凸多边形为外接图形进行计算,称为3D_CGIoU,其值记为I3,则
I3=|A∩B|/|A∪B|-|C/(A∪B)|/|C|。
(3)
其中:A代表真实框Bg的体积;B代表预测框Bp的体积;C表示封闭盒Bc的体积。
为了更好地理解在3D_CGIoU中最小的封闭盒Bc的形状与计算,给出了更直观展示的图2。
图3中预测框Bp的中心点、长、宽、高、倾角分别是A0(xp,yp,zp)、lp、Wp、Hp、θp;真实框Bg的中心点、长、宽、高、倾角分别是B0(xg,yg,zg)、lg、Wg、Hg、θg。根据这些参数可以得到Bp和Bg顶点的坐标为:Ai(xpi,ypi,hp),Bi(xgi,ygi,hg)。当i=1,2,3,4时,hp=zp+Hp/2,hg=zg+Hg/2;当i=5,6,7,8时,hp=zp-Hp/2,hg=zg-Hg/2。
由于框的底部均平行于水平面,因此只要从鸟瞰图中找出两个框的相交截面部分并求出面积S0,就可得到两个框相交部分的体积V0:V0=S0H,其中H=min(maxhp,maxhg)-max(minhp,minhg)。
为了计算相交部分的面积S0,首先,判断每个顶点是否在另一个矩形内部(不包含边缘)。如果没有顶点在另一个矩形内部,则无相交部分存在;如果有,则保存并进行下一步,计算2个矩形各边的交点(不包含8个顶点)并保存。接着,将保存的所有点连起来组成一个凸多边形,这个凸多边形就是相交的部分。将第一个保存的点,与其他与其不相邻的点依次连接后,凸多边形被分割成多个三角形。每个点坐标都可以计算得到,显然三角形的每一条边长也可求得,根据海伦公式算出每个三角形面积并求和,最终得到S0(见图4)。
通过鸟瞰图外接框形状(见图5)确定算法,得到鸟瞰图中2个矩形的外接面积最小的凸多边形,如图4b所示多边形A1B2B3A3A4,求其面积S1的方法同S0。将这个凸多边形作为横截面所形成的棱柱并当作预测框和真实框的外接框,计算出其体积V1:V1=S1H1,其中H1=max(maxhp,maxhg)-min(minhp,minhg)。
将GIoU从二维目标检测迁移到三维目标检测中,并对鸟瞰图的外接框进行优化,得到3D_CGIoU的值I3:
I3=V0/(Vp+Vg-V0)-(V1-(Vp+Vg-V0))/V1。
(4)
其中:Vp为预测框Bp的体积;Vg为真实框Bg的体积。
1.3 鸟瞰图外接框的算法原理及流程
首先,要确定预测框和真实框的鸟瞰图外接框的形状及大小。
第一步:确定鸟瞰图中最左下角的点(坐标排序:x最小,如果x相同则取y更小的),记为P0。这一步需要扫描一遍所有的点,时间复杂度为O(n),n为点的总数量。在该算法中,n为8,因此时间复杂度为O(1)。
第二步:将所有的点按照相对于第一步中得到的点P0的极角大小进行排序。当极角相同时,距离P0比较近的排在前面。如图5a所示,排序结果为P1,P2,P3,P4,P5。
第三步:用一个栈(数组)来保存当前的凸多边形的顶点,先将P0和P1依次加入到栈中。按顺序扫描每一个点,用叉积判断当前点和栈顶头两个点形成的拐向。若顺时针就弹出栈顶元素,接着继续判断;否则压入新点Pi。
然后,栈中的点则为外接最小凸多边形的所有顶点,按照其顺序连接起来即可,如图5b所示。
鸟瞰图外接框的算法流程如下:
输入 鸟瞰图的8个顶点坐标,如图3中A1A2A3A4B1B2B3B4
输出 鸟瞰图中所有点的外接凸多边形的顶点
步骤 1)P0← The bottom left point //最左下角的点
2)P1,P2,…,P7//其他点与最左下角点之间的极角逆时针进行排序
3)letSbe an empty stack //用来存放最终得到外接凸多边形的顶点
4)PUSH(P0,S) // 将前三个点作为初始点,并压入栈
5)PUSH(P1,S)
6)PUSH(P2,S)
7)fori= 3 to 7
8)while the angle formed by points NEXT-TO-TOP(S),TOP(S),andPimakes a nonleft turn
9)POP(S)
10)PUSH(Pi,S)
11)returnS
1.4 3D_CGIoU作为损失的算法流程
3D_CGIoU作为边界框回归损失算法流程如下:
输入 预测框p={xp,yp,zp,lp,Wp,Hp,θp},预测框对应的真实框g={xg,yg,zg,lg,Wg,Hg,θg}
输出L3D_CGIoU
步骤 1)SA=lp×Wp//预测框Bp俯视图A1A2A3A4的面积
2)SB=lg×Wg//真实框Bg俯视图B1B2B3B4的面积
3)S0//预测框Bp和真实框Bg俯视图相交的面积
4)S1//预测框Bp和真实框Bg俯视图外接最小凸多边形的面积
5)H//预测框Bp和真实框Bg交集的高度
6)H1//预测框Bp和真实框Bg并集的高度
7)Vp=SA×Hp//预测框Bp的体积
8)Vg=SB×Hg//真实框Bg的体积
9)V1=S1×H1//预测框Bp和真实框Bg最小封闭盒的体积
10)IfS0≤0:
V0= 0;
Else:
IfH≤0:
V0= 0;
Else:
V0=S0×H;
11)I3=V0/V-(V1-V)/V1,whereV=Vp+Vg-V0
12)L3D_CGIoU=1-I3
2 实验与分析
2.1实验设置
本算法在Linux系统下,使用Pytorch编程,分别在不同数据集和主干网上进行实验。通过PointRCNN、VoxelNet[15]、PointPillars[16]在KITTI基准数据集[17]上的表现,以及VoteNet在ScanNet数据集[18]上的表现,对本文提出的方法进行了评估。KITTI数据集包含7481个训练样本和7518个测试样本。由于测试数据集的真实性是不公开的,因此将训练数据集分为训练集(3712)和验证集(3769)[19]。ScanNet数据集一共有1513个采集场景数据(每个场景中点云数量都不一样,如果用端到端的网络框架,需要对原始点云进行采样,使每一个场景的点云数量都相同),21个类别的对象,其中1201个场景用于训练,312个场景用于验证。
实验所采用的每种方法中,都使用原作者提供的默认参数和每个基准上的迭代次数,并严格遵循其训练协议。实验结果中每个方法的检测精度,是网络通过训练后,在验证集上展现的精度。
2.2 实验结果与分析
通过多种方法在KITTI数据集上的表现,评估3D_CGIoU算法融入主干网后对检测性能的影响,结果如表1所示。本实验对场景中的汽车进行检测,IoU阈值为0.7,评估指标为平均精度。所有的检测结果都使用官方的KITTI评估检测指标进行测量,这些指标包括:鸟瞰图、3D、2D和平均方向相似度。二维检测是在图像平面上进行的。KITTI数据集被划分为容易的、中等的和困难的三种难度,而官方的KITTI排行榜则根据中等的性能进行排序。
相比于二维目标检测,三维目标检测更具挑战性,因为它对三维包围盒在空间中的定位精度要求更高。从表1可以看出,将3D_CGIoU算法纳入到边界框回归损失后的主干网对车辆的检测性能明显都要优于原始主干网。所采用的方法在各个难度上的检测性能均有提升,VoxelNet提升了1.89%,VoxelNet提升了1.79%,PointRCNN提升了1.03%。
表1 在KITTI验证集的汽车类上进行目标检测的性能对比
表2为VoteNet在ScanNet数据集上各类目标的平均检测精度,其中baseline为原始的VoteNet检测结果,ours为将L3D_CGIoU纳入预测框回归损失后的VoteNet检测结果。如表2所示,ours的平均精度和平均召回率都要优于baseline。在VoteNet主干网中融入3D_CGIoU算法优化边界框的回归损失,其检测性能在各类别目标上都有提升,所有类别的平均精度提升了近1.5个百分点。其中,“柜子”和“冰箱”的检测性能提升差距过大。这两者形状都比较规则,也都是相对较大的物体,且GIoU有尺度不变性,因此排除由于大小或形状而导致的精度差异,推测是由于basiline在训练过程中由于网络初始化的随机性等问题,导致对“柜子”的表现低于应有的水准。但在本文算法中,“柜子”的检测性能表现较好,而“冰箱”可能与“柜子”的情况恰恰相反,最终使得“柜子”和“冰箱”的精度提升幅度差距过大。
表2 VoteNet在ScanNet数据集上的平均检测精度
图6是PointRCNN和PointRCNN+3D_CGIoU在KITTI上的检测结果,可视化其中的三个场景,左侧为原始的PointRCNN检测结果可视化,右侧为将L3D_CGIoU纳入预测框回归损失后的PointRCNN+3D_CGIoU检测结果可视化。实物图下方是对应的点云图。实物图中蓝色的是预测框,红色是真实框,绿色是label;点云图中红色的是预测框,绿色是真实框。实物图中并不是所有的红色框都作为ground truth(GT),只有有label的框才会在训练中作GT。
点云图的左右对比显示,3D_CGIoU算法纳入边界框回归损失后,预测框与真实框重合度有一定的提升,即得到的预测框的准确率更高。场景一中,在实物图中可以很明显地看出道路的远处有2辆车,但没有标签;在点云图中,PointRCNN只检测出了1辆车,而PointRCNN+3D_CGIoU将2辆车都检测了出来。这进一步说明了3D_CGIoU的有效性和优越性。
3 结论
本文设计了3D_CGIoU作为新的三维点云目标检测的评估指标,对预测框与真实框进行相似性比较。3D_CGIoU继承了IoU的优秀特性且完善了其缺点(非重叠情况),因此,在基于IoU作为评估指标的一些三维计算机视觉任务中, 相比于IoU,3D_CGIoU是更好的选择。将3D_CGIoU计算损失的方法融入目前主流的三维目标检测算法中,如PointRCNN、VoxelNet、PointPillars,在KITTI数据集和ScanNet数据集上其检测性能均得到有效提升,平均精度提高了近2个百分点。实验结果表明,在三维边界框回归的应用中,可以通过3D_CGIoU方法优化回归损失,从而提高检测的精确度。