3D物体检测(二)


title: 3D物体检测(二)
date: 2020-02-22 17:09:40
categories:

  • 3D物体检测
    tags:
  • 3D物体检测
  • 点云

总结一下在bilibili上看到的基于点云场景的三维物体检测算法及应用,是香港中文大学博士生所作报告有兴趣的也可以去看看这个视频。
这一部分主要总结一下报告主要的三个论文:PointRCNN、Part-A^2、PV-RCNN
想看更多相关博客,欢迎浏览我的个人博客,里面也有我的联系方式。

PointRCNN

PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud

具体思想

用基于anchor-free的方法,在分类出的前景点上生成3D推荐框。用two-stage的方法进行回归和优化。在框中心点回归上用了两步替代直接回归,首先回归是处于哪一个bin(即哪一格)。再在这个bin里面回归中心点。

核心部分

3D物体检测(二)_第1张图片

整体结构如图所示,下面把整个步骤分解一下:

  • encoder部分,输入点云用pointNet++进行编码,生成逐点的特征向量。
  • 对特征向量进行前景点和背景点的分类。因为正负样本不均匀,使用了focal loss。
  • 对前景点生成3D推荐框(x; y; z; h; w; l; θ), (x; y; z)代表中心点,(h; w; l) 代表物体的size,θ代表方向。
  • 一阶段框回归。如下图所示,用了基于bin的方式分两步进行回归。在X和Z方向划分grid,用分类的方式来确定中心的bin,然后在确定的中心bin中再进行回归中心点。(x,z,θ)这三个参数用两步回归。y参数直接回归,因为y方向差异性较小容易回归。
    3D物体检测(二)_第2张图片
  • 提取local点的特征,将其与之前的语义特征连接起来,进行再一次更精确的回归和分类。第二阶段的回归除了也使用基于bin的方式之外,还需要对不同方向和位置的框进行对齐,减少旋转对结果带来的影响。论文中还考虑对深度信息进行补偿,因为较远的物体点云会比较近的物体来得少。

Part-A^2

Part-A2 Net: 3D Part-Aware and Aggregation Neural Network for Object Detection from Point Cloud

具体思想

点云和2D图像有一点不同,点云中的点在给定标记框的前提下在物体中的位置是已知的,而图像中是不能判定的。所以针对这个优势和先验,设计了part-Aware和part-Aggregation两个结构,取得更好的效果。

核心部分

网络结构

3D物体检测(二)_第3张图片

整个网络也是two-stage的。如图所示左侧为part-Aware部分,也即第一阶段,右侧是part-Aggregation,也即精确回归的第二阶段。
点云encoder部分用的类似unet结构,方法用的将点云网格化,用sparse convolution更为高效处理像点云这种比较稀疏的数据类型。

part-Aware

在标记框确定的前提下,物体中的点在框中的位置就是已知的了。所以说这个先验的标签是易得的。第一部分语义分割的同时,预测物体中的点在框中的位置,计算公式如下图所示:
3D物体检测(二)_第4张图片

中心点为(0.5,0.5,0.5),第一个公式是将标记框对齐、摆正。前一部分是移除平移,第二部分是旋转矩阵对齐。第二部分就是将标签投影[0,1]这一个区间中。损失函数用binary cross entropy loss:

20200223180317.png

part-Aggregation

这个方法是为了解决如下图的情况所导致的歧义:
3D物体检测(二)_第5张图片

上图中的三个框如果用roi-pool进行计算,那么结果都是一样的。这个情况给网络带来了负面影响,为了解决这个情况,其实也是给点云定义相对位置,设置一系列的小网格,对每一个小网格进行特征提取,空位置的设为0,这样就把位置信息编码到特征中去了。再进行进一步的精确回归。

PV-RCNN

PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection

具体思想

将voxel-based和PointNet-based方法进行结合。结合voxel方法卷积的高效和提取特征的有效性,又结合利用原始点云的精确的位置信息和pointNet++感受野(也即半径大小)设置的灵活性。
主要是通过two-stage的方法来实现,这两个部分分别可以用Voxel-to-keypoint和Keypoint-to-grid来概括其主要思想。

核心部分

网络结构

3D物体检测(二)_第6张图片

如图所示,整个框架有以下几个步骤:

  • 将原始点云用3D sparse convolution生成网格化的特征。
  • 将下采样八倍的特征图投影到BEV(将Z轴特征堆叠到一起,生成俯视图)。生成3D推荐框,每一个像素每一类生成两个推荐框,分别是0度和90度。和前面两种方法不一样,这篇论文使用的是anchor-base的方法,但是具有更高的recall值。
  • 用FPS(最远点采样),采样到分布均与的KeyPoint。
  • 用类似pointNet++,set abstraction的方式,将Keypoint半径大小以内的voxel特征进行聚合,得到具有精确位置信息,不规则的点云特征。
  • Predicted Keypoint Weighting模块,每一个关键点的权重是不一样的,主要是在于作者认为前景点的权重要大于背景点的权重影响。
  • Keypoint-to-grid,一样通过set abstraction方式进行聚合成规则的网格信息,红色点为网格点不是真实点云中的点,黄色为Keypoint,生成特征之后进行refine推荐框。

Voxel-to-keypoint

首先通过FPS采样到具有精确位置信息的KeyPoints,定义感受野半径,分别在3D sparse convolution 提取特征的multi layer中具有周围的voxel特征,具体方式是落下感受野半径下voxel,随机采样 T k T_k Tk个,然后用多层感知机对每个voxel提取特征后取Max。如图所示:

20200224121649.png

将多个layer的特征连接起来,包括原始点云的特征和BEV经过双线性插值之后的特征。形成最终的KeyPoints特征。
再经过Keypoint Weighting module对每一个点的权重进行估计,如图所示:
3D物体检测(二)_第7张图片
也即前景点的predict和特征相乘,这样前景点的权重就会大于背景点。

Keypoint-to-grid

3D物体检测(二)_第8张图片

如图所示,红点代表网格点,淡黄表示KeyPoint,深黄表示原始点。用网格点为中心,设置可变半径去聚合附近的KeyPoint的特征,将KeyPoint的特征规则化,重新变为Voxel类型的特征。这样做有两个好处:1. 提取Voxel特征时可以采集到框以外,物体边界的信息,对推荐框refine有好处。2. 大大减少了0值特征,减少了特征空间的稀疏性。
这个地方提取特征的方法与Voxel-to-keypoint上图的公式一样,都是经过随机采样再用MLP进行特征提取,最后取Max。值得注意的是,这两个地方都用了多个不同大小的半径,保证多个感受野的特征能更有效的提取特征。

你可能感兴趣的:(深度学习,计算机视觉,机器学习,人工智能,python)