【论文阅读】【三维目标检测】Structure Aware Single-stage 3D Object Detection from Point Cloud

香港理工大学和阿里巴巴达摩院出品,之前听说阿里的团队检测KITTI排第一,可能就是这篇文章吧。

如果对2D Object Detection有一定了解,其实本文读起来还是比较容易理解的。我认为本文体现了:3D Object Detection的发展趋势遵循2D Object Detection发展趋势。其实要比较好的理解本文,我认为要对比理解R-FCN,PV-RCNN,PV-CNN这三篇论文。与这三篇论文的对比我放在了我的思考中,如果各位读者想要了解本文背后的趋势,可以重点关注一下我的思考。

SASSD

motivation

本论文认为voxel的方法还是太过于粗糙,尤其是随着resolution的下降,很多前景点的信息都被融到了附近的背景点中,所以想要把信息更精细化。具体可以参考论文中的图3。
在这里插入图片描述

Framework

在这里插入图片描述
上图就很好的展现了该网络的结构。首先使用作为SECOND作为backbone,其实也就是使用3D Sparse Convolution,然后加入一个分类头和回归头。在所谓的Detection network中,提出了PS Warp,这个在下面具体讲。

Auxiliary Network

平行于SECOND,加入了Auxiliary network,这个就是用来精细化信息的分支。SECOND每一层的feature map中的feature被认为是grid的中心的feature,然后通过插值的方式得到原始点云中每个点对应的feature。通过不同resolution的feature map,原始点云中获取不同scale的feature,然后concatenate这些不同scale的feature,得到point-wise的feature。最后使用point-wise的feature取预测每个point的mask和对应object的center。

PS Warp

这个其实与R-FCN中的RoI pool非常像。如果了解过R-FCN,这个理解起来就比较容易。这里我用我的话解释一下,这个过程可以用下述这种图解释:

在这里插入图片描述
首先要明确,feature map中的每个grid会预测一个box。
1)首先Classification branch不再是判断每个grid“是否是物体”的二分类,而是判断每个grid是否属于Object的某个部分,把Object分为K个部分,用K层score分别表示每个grid是否属于第K个部分,以下我们叫做 C K C^K CK。也就是说, C K ( i ) C^K\left(i\right) CK(i) C K C^K CK中第k层第i个的score表示,第i个grid对应的位置是属于某个Object的第k部分的score。
2)Regression branch预测了box之后,将box分为K个部分,记录每个部分的中心点的位置也就是 S K S^K SK。也就是说, S k ( i ) S^k\left(i\right) Sk(i):第i个grid预测的box的第k个部分的具体位置。
3)那么对于第i个grid预测的box我们有了K个部分分别对应的位置,那么就需要分别计算其分数。取 S k ( i ) S^k\left(i\right) Sk(i),然后在 C k C^k Ck中插值,得到第i个grid预测的box的第k个部分的分数。这样,对所有的grid预测的box的所有K个部分取score,就会得到一个K个channel的score map。然后对channel取平均得到最后是否是box的channel。

Experiment

试验效果好,KITTI排行榜第三。

Ablation study分别验证了Auxiliary Network中center和segmentation任务对object detection的促进作用,验证了PSwarp的作用。

思考

这里说一下我的感受。

Point和Voxel的结合之作

作为point和voxel的结合之作,与PV-CNN和PV-RCNN有着相似之处,

PV-CNN:我在另外一篇博客中讲过PV-CNN,其中我的思考从voxel based和point based角度阐述了这两个分支的作用,是与与这篇文章的motivation很类似。但从细节来看,PV-CNN的以point为主的操作我认为更能提取细节信息。本文中的插值,是不是很像PV-CNN?具体操作的区别,可以说是本文的下采样依赖voxel的down sampling,而PV-CNN则是依赖在点云中做FPS,这一点我认为PV-CNN也更好。

PV-RCNN:我在另外一篇博客讲过PV-RCNN,PV-RCNN则是从点云中选取一些representative point,然后将不同scale的voxel的特征“插值”到representative point上。那区别在本文使用真的插值,而PV-RCNN使用pointnet++中的SA层,但其实也是加入可学习权重的插值。那么另外一点相似,则在于本文中的PSwarp与PV-RCNN的two stage,这个放在下一个思考中讲。

PSwarp将one stage和two stage的方法联系起来

PSwarp是与R-FCN中的warp或者叫做pooling思路上差不多。而R-FCN则是模糊2D Object Detection中one stage和two stage方法的操作,那么PSwarp其实也是这种作用。将判断是否是object细化为判断是否是object的一部分,然后把所有score通过取均值aggregate起来。这个其实就是简化版的PV-RCNN的第二阶段嘛!

本文的的亮点其实也非常明显,也就对应着我的两个思考:
1)point和voxel相结合
2)模糊one stage和two stage的界限,而且效果还很优秀

读者们觉得本文有用的话,请随手点个赞!!!

猜你喜欢

转载自blog.csdn.net/wqwqqwqw1231/article/details/105475779