版本 | 更新时间 | 更新内容 | 作者 | |
---|---|---|---|---|
1 | V 1.0 | 2020 | 完成大体内容 | W.P. Xiao |
2 |
目录
文章目录
SA-SSD
1 简介
这文章标题为 《Structure Aware Single-stage 3D Object Detection from Point Cloud》,收录于CVPR 2020。这是一篇由香港理工大学和阿里巴巴达摩院合作的工作。这篇文章作者提出一个One stage的方法,但又兼具two-stage方法的精细回归特性,作者在backbone的基础上添加了一个辅助网络,使得backbone具有structure aware的能力,使得定位更加准确。另外作者也对预测框和classification confidences之间不匹配的问题,也设计了一个新的解决办法。
2 文章的贡献
- 从点云中提取的下行采样卷积特征不可避免地会丢失对精确定位至关重要的结构细节。作者提出了一种基于结构感知的单阶段三维目标探测器,该探测器采用可拆卸的辅助网络来学习结构信息,在不增加额外开销的情况下具有更好的定位性能。
- 目前单阶段的检测器在预测的边界框和相应的分类置信度之间存在不一致。作者开发了一种有效的特征图warping方法,以减少预测边界框和相应的分类置信度之间的不一致,以极小的代价提高检测精度。
- 传统的体素化预处理方法相对来说比较耗时。作者为了简化体素化过程,直接将点的坐标量化成张量指标,我们直接将每个点表示为输入张量的一个非零分量(个人认为的小创新点)
3 网络框架
这篇文章的网络框架比较简单清晰,它由三个子网络构成,一个是从点云中提取多级特征的主干网络,一个是预测三维边界框的后端检测网络和一个利用点监督的辅助网络。
具体流程如下:
- Pre-processing
- 先将point cloud按指定的size转化为体素representation(同SECOND)
- Backbone network
- 使用Sparse 3D Conv进行三次下采样(同SECOND)
- Detection network
- 对最后一层的feature map(4D)进行reshape,具体为将feature map(4D)在z轴上拼接使其转化为feature map(3D)。这样就可以用2D Conv进行卷积,也方便使用现有的2D Detection head(类似SSD),得到Bbox.、cls.预测分支
- Auxiliary network
- 首先将backbone network中每一层的voxel-wise feature转换成point-wise feature,根据当前阶段的量化step,获得现实世界的coordinates
- 执行Two task
- 前景点的分割任务,使学到的features能对object的边缘敏感
- 中心点预测任务,使学到的features能够感知对象内点的关系
- 训练时,Focal loss用与前景点分割的分类任务、Smooth- l 1 l_1 l1 用与中心点残差预测的回归任务
4 网络细节
4.1 从voxel feature怎么转为point feature,与之前的文章STD有什么差别?
首先,backbone中的每一层voxel feature都需要转化为point feature。其次一层中的每个voxel都可以通过量化步骤将其转化为真实世界的坐标系(点云坐标系)的坐标。而作者将voxel feature转化为point feature是通过Pointnet++中提出的feature propagation layer来实现的,但又不完全一样。文中 p i p_i pi为原始点云的坐标, p j p_j pj为待插入的voxel坐标。作者的做法是将非零的voxel feature作为待插入的特征向量,以原始点云坐标 p i p_i pi为圆点画一个半径为r的球,将包围在内的 p j p_j pj通过反距离权重算法计算原坐标点的新特征。Pointnet++中的做法是取距离最近的前三个特征计算其反距离权重。
4.2 每一层feature map进行tensor to points转换之后,如何拼接在一起,最后得到point-wise feature?
原文提到作者通过cross-stage link将不同stage的feature进行concatenate。正如前面所分析的,每个层的voxel feature都会通过feature propagation layer转化为原始点云中每个点的feature,因此concatenate只是将其简单的同纬度特征向量拼接而已。
4.3 辅助网络是如何工作的,为什么推断的过程可以卸去?
根据原文,辅助网络只是用来learn structure-aware features,通过设计loss函数使其在训练过程学习到的特征具有结构意识。而在推断的过程中并没有去使用辅助网络产生的结果来计算。
4.4 分类分数和回归框如何更好的对齐?
按照RoI Pooling的方法,从分类的feature map到原图之间的回归框映射,涉及到两处量化损失,为此Mask-RCNN作者提出RoI Align来消除量化损失,在R-FCN中作者又提出对位置敏感的候选区域池化Position Sensitive ROI Pooling(PSROI Pooling),本文作者在Position Sensitive ROI Pooling的基础上做了变形,使其速度提升了十倍,而精度几乎没有损失。
4.5 PSWarp相对于PSRoIAlign改进了什么?
PSWarp相对于PSRoIAlign最大的改进是PSwarp速度相比于PSAlign提高了十倍,原文中作者提到,PSWarp的效率更高,是因为它减少了使用NMS从密集的特性图生成roi的需求。具体而言,网络是一次性的将M个预测的回归框转化为采样点坐标,这样就不用去枚举每一个预测的回归框,然后计算采样点再继续双线性插值计算特征(这里我是猜测的,原文中只有一句话描述为什么快,具体情况可能还需要看代码)。
4.6 作者在前景点预测的基础上加上中心点预测。这种做法和Part A 2 A^2 A2 Net有什么相同点和不同点?
相同的是两者都是通过增加Object内相对位置的约束来提升网络对内部结构的感知能力。不同的是,SA-SSD是通过辅助网络的方式来增加中心点的预测,Part A 2 A^2 A2 Net更为直接,它为每个proposal内点云都预测一个对象内的相对位置。两种方式都强调了,网络能感知点在对象内相对位置的重要性。
5 总结与思考
-
最近voxel-based和point-based结合的方法出来好几个,比如PV-RCNN、STD相比,SA-SSD与它们之间有什么区别呢?
PV-RCNN利用Voxel-based方法高效、位置预测比较准确的特点,先用类似SECOND的流程生成Proposal,这个作为整个网络的RPN网络。利用Point-based方法感受野灵活、更能反应点的上下文信息的特点,作者直接将不同尺寸的voxel feature转换为point feature(避免重复计算),并且利用point-based方法特有的Set-abstraction模块将特征进行聚合,扩大每个点的感受野。最终这些特点用来refine proposal。51965160723
STD是在第一阶段,使用的是point-based的办法获得初始proposal,在第二阶段做特征pooling的时候,结合了point-based和voxel-based的方法,其实也就是将两种方法的特征进行了拼接。作者在第二阶段结合volex-based的方法是因为其效率更快,而且精度也不差。
SA-SSD它首先是个单阶段的网络框架,它的主干网络和SECOND类似,检测网络针对与分类置信度与位置精度不匹配问题做了改进。仅仅靠检测网络的改进并不能带来非常显著的改进,因为voxel-based的方法在不断卷积的过程中不可避免地会丢失对精确定位至关重要的结构细节,为此作者结合poin-based方法具有灵活感受野的特点,设计了一个辅助网络,通过增加两个点级的任务(分割和中心点预测)让学习来的特征能更好的感知位置信息。这个做法很巧妙,辅助网络只在训练的过程中发挥效果,在推断的过程中并不会增加额外的计算负担,又达到了类似两阶段方法的效果。