一 核心思路

在开始本博客的阅读时,需先对PVRCNN进行大体的了解,也可参考我的另一篇博客

【3D 目标检测】PVRCNN详解(个人阅读心得并总结其他人的结论得出的文章)_qq_36380978的博客-CSDN博客

这篇文章是在PVRCNN的基础上进行改进的。主要是为了提升效率,降低运算成本。主要的创新点在于提出了sectorized proposal-centric key point sampling strategy和VectorPool。第一个创新是为代替在PVRCNN上的Keypoints Sampling阶段,提取出更精准的keypoints并降低计算量;第二个创新点是为了更好的在Voxel Set Abstraction阶段和ROI-grid Pooling 阶段提取特征(在特征量非常多的数据集中表现非常优异。)。具体的算法流程如下图所示,需参照PVRCNN流程。

二 核心步骤

2.1 Sectorized proposal-centric key point sampling

如上图所示,该步骤是用来代替PVRCNN中的key points sampling的,在文章中,作者指出FPS的key points 采样策略采样出的key points大部分都是background的点,且无法进行GPU加速运算。

由于上述的两点问题,作者开始思考是否采用其他代替算法进行采样。由此提出sectorized proposal-centric key point sampling strategy。

该算法需要用到RPN层提出的3D proposal。一般的,用P表示原始点云集合,CD分别表示3D proposal的centers(也就是x,y,z)和sizes(也就是l,w,h)。首先作者用下述的公式,将需要采样的点减少到P’的大小:

这里的公式的意思就是以RPN提出的3D proposal的center为中心,(l,h,w)中的最大值加上为半径圈出的球的范围;其中dxi,dyi,dzi表示size,表示一个超参数。通过这一步。作者就将需要采样的点的数量从P减少为P’

之后,作者为了加速关键点采样进程,采用分区的做法,具体算法见以下公式:

 这个算法能将P' 数量的待采样点分配到s个扇区中(),arctan(pyi,pxi)  在数学中的值域为,在本文中的值域为(-π,π],且这里表示是在XoY平面上进行分区处理的。于是对于需要采样的key points数量n,按照比例被分配到了各个扇区,对于第k个扇区分配到的需要采样的点的数量为

 于是作者提出的SPC key points 采样算法将需要采样的点从P减少到(因为使用了GPU并行加速,所以一次只需要。)。总体流程见下图所示:

 然后作者讨论了关于每个扇区如何进行key points采样,如下图所示,通过对比,在经过SPC的算法后,FPS算法需要处理的采样点数量已经精炼,且速率极大提高,于是作者提出在经过SPC后再经过FPS对每一个扇区进行采样是合适的(也就是最终还是回到了FPS算法中,所以SPC只是为了过滤待采样点的,FPS是给每一个扇区找出key points点的。)

 2.2 Local vector repression for structure-preserved local feature learning from point clouds

 作者提出的VectorPool使用在红框中的位置,分别是VSA和RoI-grid-pooling。在论文中,作者首先讨论了为什么PointNet++中的SA层需要耗费很多时间和算力才能获取特征,之后作者提出VectorPool算法,为了提取出更好的特征以及减少运算的时间。

假设输入的原始点云(体素也可以这么假设,只是坐标变成了indices)为: (输入原始点云的数量为M);key points点为:(key points采样的点数量为N。)。现在我们需要采样这N个点的point-wise features,且特征维度为

首先,作者为了减少参数大小,于是作者决定减少输入点云P的特征维度,将特征减少到,具体公式为:

其中,这里公式看着可能有点复杂,其实就是将的小块特征进行相加的操作,可见下图所示: 

 通过上述的操作,能够有效的减少运算所需的资源。之后作者将key point点() 通过下述公式选择附近的原始点云并分配到相应到Voxel中(这个Voxel不是backbone中的voxel,而是将key point点附近的原始点云(或者backbone中的voxel等)。):

其中表示将key point点附近的原始点云中的点进行相对位置坐标转换; 是以为中心的相邻三维空间的边长;分别是沿着X, Y, Z轴的体素indices。

然后将每个voxel内点的相对坐标和相应特征通过下述公式生成该局部voxel的特征:

 其中表示该局部特征的voxel  内点的个数()。通过以上步骤,得到体素的相对坐标和局部特征

由于不同局部体素的点分布不同,不同位置的特征可能代表非常不同的局部特征。因此,我们提出使用单独的weight权重来编码不同的局部体素特征,以捕获位置敏感特征:

 其中, ; 在本文中默认为concatenation operation;

 最后,将根据相应的位置进行concatenate操作:

 其中,也就是表示该的特征。上述过程的图解见下图:

在具体实施过程中,在VSA中,首先是在原始点云中进行VoxelPool,然后是在3D的backbone的4×和8×上提取key points的相对特征;其次是在RoI-grid pooling,对key points采用VoxelPool操作。

三 总结

本文是对PVRCNN进行加速的改进,确实在KITTI上有着非常好的效果。具体实验数据如下:

 参考文献:

[1] Shi S ,  Jiang L ,  Deng J , et al. PV-RCNN++: Point-Voxel Feature Set Abstraction With Local Vector Representation for 3D Object Detection[J].  2021.

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐