PAI3D: Painting Adaptive Instance-Prior for 3D Object Detection论文讲解
- 1. 引言
- 2. PAI3D框架
- 2.1 Instance Painter
- 2.2 Adaptive Projection Refiner
- 2.3 Fine-granular Detection Head
- 3. 实验结果
- 3.1 消融实验
1. 引言
3D目标检测对于自动驾驶来说是一个非常重要的模块,主车通过检测得到的结果去进行后续的避障决策和路径规划。常用的传感器包括雷达,相机以及毫米波等,目前来说,单雷达传感器的感知能力已经能达到业界比较领先的水平,在多个大型的自动驾驶数据集上均能达到非常好的检测效果。但是因为雷达本身数据的稀疏属性,导致他在一些场景下表现得不太好,比如对于远处的物体,雷达能打到物体上的点非常少,或者是一些体型较小的物体,能被扫到的点也比较少,这就是检测任务带来的一定的难度,而单目视觉检测在这一方面有独特的优势,所以近些年来,大家都在研究雷达和相机两种互补的数据类型的融合检测。两种模态的数据融合面临比较大的挑战有两方面,一个是传感器数据的对齐,另外一个是模型的算力问题;为了解决这两个难题,目前已有的方法采用预测图像的类别标签,然后和点云做融合来进行检测,比如point painting,fusion painting,但是对于3D检测任务来说,他还是更关注实例之间的区别和信息,而这些方法忽略了从图像上获取实例级别的信息,也导致在后续的检测任务中很难明确的获取的物体之间的区别去指导学习任务,尤其在同类别之间的检测。基于此,我们提出了一种实例painting的检测方法,在nusense的测试集上做实验,mAP和NDS两个指标上均能超过当时已有的sota方法,并且有较高的性能,能够快速轻松的部署到实际车端上,该方法简单有效。不管在学术领域还是在工业领域都有着较大的意义。
2. PAI3D框架
Pai3D包含3个模块:
一个是instance painter,主要是从图像中预测每个实例的标签和instance mask,然后点云通过传感器之间的标定信息由3d投影到2d图像上,得到每个point对应的instance 信息。
但是有时候由于传感器之间的标定误差以及雷达和相机之间信息的不同步会造成投影有较大的偏差,为了纠正这个偏差,我们设计了一个Adaptive Projection Refiner 模块去做这个事情,保证我们最后能输出较为准确的painting信息,去做后面的检测任务。
在实际的检测任务中,不同的类别之间的尺寸差异较大,比如说一个行人和一个大卡车,如果只是从单一的feature map和detection head去做检测,效果会不那么理想,所以我们提出了一种基于多feature map的Fine- granular Detection Head 去解决这个问题
2.1 Instance Painter
接下来为大家介绍一下instance painter这个模块,这个模块主要是为了得到点云在2D图像上的instance mask信息和他的semantic 标签,以作为下一个模块的输入。
首先使用一个实例分割器对图像做实力分割,得到每个像素的实例信息,包括他的语义信息和mask信息,然后根据传感器之间的标定关系将3D点云图像投影到对应的2Drgb图像上,得到点云对应的像素的实例信息,就比如说这个点落在了一辆cyclist上,那么这个点的语义信息就是cyclist,因为做的是实例分割,所以每个实例之间是有区分的,所以最后我们得到的点云的paintig信息就是这样的,这几个点被paintig上cyclist的信息,这几个点被painting上的是第一辆车的信息,然后剩余这几个点被paintig上的是第二车的信息。
但是在这个过程中也会遇到一些问题,比如说图像的重叠问题,那么一个点云就会有两个实例信息,这个时候我们会选取confidence score比较高的那个instance作为最后的结果。
大家应该发现了,在投影paiting的过程中,会有一些建筑物上的点云被投影到实例上,打上车的标签,这是由于标定信息的不准确以及传感器之间不同步所造成的,这会给我们后期的任务造成一定的影响,我们下一个模块将会来解决这个问题
2.2 Adaptive Projection Refiner
除了标定误差和传感器之间的不同步的影响因素,3D空间到2D空间的投影路径,也会导致3D中锥形的空间所有物体全部投影到2D的某一部分平面上,造成投影误差,就比如说这个误投影到建筑物上的点,因为我们后期需要用到这个实例的center信息,如果以这种方式去算这个物体的center,就会得到一个错误的结果,就是这个红色的点,而正确的物体的中心点应该在物体的内部,即下面这个黄色的点,为了解决这个问题,我们使用一种Salient Cluster Detection 的方法去做一个聚类,得到不同的cluster,然后怎么去选择正确的cluster呢,我们知道雷达的成像原理是,激光射出去后遇到的第一个障碍物即往回反射,而同一个物体不可能在空间上出现分裂,基于这一个先验知识,我们选择离雷达最近的那个cluster作为正确的物体,而远处的就抛弃掉,然后基于这个正确的cluster去做center的计算。最终得到的数据类型就是,前四维还是点云的原始信息,后面几维是物体类别的one hot编码,最后3维是物体的center信息,xyz。然后作为模型的输入。为了给这几维信息中,对最终检测结果有较大贡献的几个channel给予较高的权重,我们用了一个attention模块去做这么个事情,然后就是常规的3D检测模块,点云的voxelization,point pillar和voxel的encoder,2D或者3D的backbone。
2.3 Fine-granular Detection Head
常规的检测方法是使用单一的feature map,然后所有的类别使用同一个deteciton head去做检测,但是我们所检测的物体之间的尺寸差异较大,从大卡车到行人,他们之间的特征提取很难做到统一化提取,所以我们使用一种基于多feature map的不同粒度检测head去解决这个问题,具体的做法就是当backbone接fpn出来后,我们在尺寸较大的feature map上去接检测物体尺寸较小的物体,因为这一层的feature map能保留更多细节信息,对小物体的检测较为友好,然后在中间这一层的feature map再接一个检测头去检测一些中型物体,比如汽车或者小型卡车,在最后一层feature map去检测较大的物体,因为他的感受野比较大,能够看到更多的信息,比较有理由大尺寸物体的检测。
3. 实验结果
我们可以看下实验结果,我们实验的数据集是自动驾驶领域权威的数据集,nusencese,它的数据集包含多达700个不同场景的数据,共计40w帧数据。左边这个表格是我们和目前比较前沿方法的对比,可以看到我们在这些方法中,无论是mAP和nds指标,都是最高的;右边是nusense世界级别的榜单,然后我们这个方法是在不使用额外数据的多模态方法中是当时排名第一的。
3.1 消融实验
这是我们对不同的feature所做的消融实验,我们的basecode是counterpoint,第一行是他们论文的结果,第二行是我们复现的结果,会比他们公布的高接近两个点,我们后续的实验都是基于这个baseline去做的比较,FDH是我们多粒度检测头的那个feature,可以看到这个feature能够长0.5个点,IP是前面所讲到的instance painter,这个大模块整体涨点11.5个点,我们对他做了拆分,分别去验证semantic lable以及instance center所带来的收益,可以看到sementic label能涨9.6个点,instence center能涨1.9个点,效果还是比较可观的,APR是做了矫正投影所带来偏差的那个feature,有实验结果能看出,涨点0.4个点。FPA是一个数据增强的方法,false positive augmentention,就是我们在训练的过程中会随机粘贴那些false positive(识别错误,较难识别的证样本)的样本,以增强模型对这些较难识别的正样本的学习能力,然后这个feature能涨大概0.2个点。最终再不使用tta的方法时,我们的模型能够达到64.7.