【文章阅读】Fast Point R-CNN

Brief

 果然二维检测上的RCNN系列会出现在三维检测上,CVPR19年上有一篇Point RCNN的paper。在上个月(19年8月8日)这篇文章就被放上了arixv上,由港中文的贾佳亚教授实验室完成,下面看看具体是怎么做的。

Abstruct

  • 该方法既采用了voxel表达,又结合了原始点云的形式,是一个two-stage的方法。
  • 第一个阶段采用voxel作为数据的输入,只采用几层轻量级的卷积操作,生成少量的高质量的初始预测。这里的初始坐标会和对应的每个点的卷积后的特征采用注意力机制进行结合。这样可以保留上下文信息和准确的坐标位置。
  • 第二阶段在上述的混合后的特征上做进一步的优化和预测。
  • 该方法在KITTI数据集的3D和BEV都取得了最好的效果。

1. Introduction

  • 近几年一些受用于CNN而发展起来的关于3D检测的paper,包括什么joint3D,multi-view等等,目前采用的数据包括有仅仅只使用lidar或者结合其他数据一起进行检测的方法。
  • 一些challenge

(1)High sparseness使得直接对点云采用CNN是很不合理的。
(2)体素化的方法又会使得复杂程度急剧上升

  • contribution

(1)一个统一架构,快速高效的检测结构
(2)在第一阶段中注意力机制的使用,可以使得每个点的聚合了其位置和上下文信息。
(3)同时运用了voxel和raw data的内容,其中在第一阶段的voxel可以粗提取出位置信息,第二阶段使用raw data更加细节的获得信息。
(4)速度可以达到15FPS

2. Related Work

3D Data Representation

  • view_based
  • voxel_based
  • point_based

3D Object Detection

  • Joint Image-LiDAR Detection

结合除了lidar之外的信息做检测,MV3D,AVOD等方法。F-pointnet,joint3D

  • LiDAR-based Detection

现在做直接的输入特征提取都是这么操作的:先体格划分成很多小格子,然后通过pointnet对每一个格子中的数据进行特征子提取,然后再利用2DCNN进行回归等等。仅仅是写博客的我看过的文章就包括了有Voxelnet,SECOND,pointpillars,pointRCNN,MEGV(这是一篇在nuscence数据集上做的文章)。这里作者还给出了一篇新的paper IPOD,其实采用系列的文章中pointRCNN,IPOD和fast point rcnn都是贾佳亚老师团队的工作。

3. Our Method

network overview:
在这里插入图片描述

两阶段,第一个阶段是体格化,采用VoxelRPN网络产生少量的预测,然后采用注意力机制通过结合坐标信息和提取到的特征信息获得每个预测框的信息.第二阶段是采用RefinerNet进行进一步优化。

3.1Motivation

  • 第一阶段大致的内容就是提取Lidar数据的特征信息,无非也就是投影和体素的方式提取。这里提取一点voxel的问题,记录一下:

However, the discretization process inevitably introduces quantization artifacts with resolution decreasing to the number of bins in the voxel map.
也就是voxel的size大小会决定像素分辨率。

文章还指出了一点,卷积操作和下采样会弱化一下定位的精确位置。最后作者总结了一点,基于点的输入是比较合理的,so do i

  • 作者自己的方法。

3.2. VoxelRPN

VoxelRPN是一个产生3D检测框的回归器,这是一个一阶段的目标检测器。

Input Representation

  • 作者同样先分 ( L , W , H ) (L, W, H) (L,W,H)的点云输入,每个格子的size是 ( v l , v w , v h ) (vl, vw, vh) (vl,vw,vh),也就是一共会有的网格为: ( L / v l , W / v w , V / v h ) (L/vl, W/vw, V /vh) (L/vl,W/vw,V/vh)
  • 每个voxel中的点云数量设置的是6(好少),然后通过 8 − c h a n n e l M L P l a y e r 8-channel MLP layer 8channelMLPlayer对这个voxel进行特征提取,提取之后就得到的紧凑的表达,因此可以利用强大的CNN去后续的工作。

Network Structure

  • 在[40,23]中,Z轴信息会很快的在卷积中消失,所以使得检测只能在BEV上进行。
  • 作者发现,3D卷积在保持3D结构上很具有高效性,因此作者的结构是结合了2D和3D卷积,达到了比PIXOR的速度和更好的精度。
  • backbone network:如下图所示:
    下图表达的形式是 ( k x , k y , k z ) ( c h n ) / ( s x , s y , s z ) . (kx, ky, kz)(chn)/(sx,sy,sz). (kx,ky,kz)(chn)/(sx,sy,sz).
    在这里插入图片描述

如上图所示,(1)第一个block采用的是3D卷积,采用较小数量的filters作用是减小时间压力.
(2)比较重要的一点是,**作者没有采用kernel size 为3,stride 为2的方式来对Z轴信心进行下采样,我们对Z轴的在3D卷积时把kernel size设置成的2但是没有padding的形式。**这样可以更好的保留信息。
这一点我是这样理解的,因为本来Z轴的维度就不大,因此不采用stride的方式去压缩,而是采用的是直接设置一个比较小的kernel size但是却不用padding不全的方式。
(3)和二维检测的多尺度检测不一样的是,3D检测中同类的物体一般都是具有一样的size的,因此我们局的HyperNet结构是更加具有合理性的。
(4)我们对block2,3,4进行上采样得到集合了高级语义特征和底层定位特征的信息。预定义的anchors大小被定义成特定的大小和角度在这个合成的feature map上面。接下来就是直接在这个feature map 上进行对每个anchor的回归和定位。

3.3 RefinerNet

尽管VoxelNet有着不错的性能,但是我们的进一步优化采取的方法是结合原始的点云数据进行更细的回归,采用的是一个pointnet的变种网络,F-pointnet是采用pointnet对3DBbox回归的先驱。

Box Feature

  • 作者采用在Voxel_RPN网络中生成的box里面的所有点来生成Box_feature.和F-pointnet 里面使用的两个独立的网络不同的是我们的输入不仅仅是输入的坐标,也包括了从voxelRPN中提取出的特征

前面通过voxelRPN得到了一张待优化的感受野图像,后面的PointNet则是应用于作用于每一个点提取相应的结合了上下文信息的特征。

  • 进一步工作是首先投影到BEV,接着所有在BEV下Bbox周围的点都会被当做输入。对于在点 p ( x p , y p ) p(x_p,y_p) p(xp,yp) f e a t u r e − m a p ( L F , W F , C F ) feature-map(L_F,W_F,C_F) featuremap(LF,WF,CF),我们定义在p点的定位特征为: ( ⌊ x p L F L ⌋ , ⌊ y p W F W ⌋ ) \left(\left\lfloor\frac{x_{p} L_{F}}{L}\right\rfloor,\left\lfloor\frac{y_{p} W_{F}}{W}\right\rfloor\right) (LxpLF,WypWF),这样就得到了每一个点的定位信息。
  • 在给定proposals的情况下,通过旋转和平移对proposals周围0.3米内的点坐标进行裁剪和规范化。如图3所示,我们定义输入的点的维度为128维。
    在这里插入图片描述
    补充几个要素点,如何把二维的voxelnet提取到的特征和3D点云特征结合的:

(1)特征有:

1 Convolutional feature maps from VoxelRPN capture local geometric structure
2.PointNet is applied to map each point

(2)对于RPN的proposals,首先投影到bev视图上,然后在rpn的proposals周围的点都算进输入的点云中去。
(3)计算在rpn的fea-map上的点位:利用类似二维一样的方法去定位
(4)组合特征,如下图,也就是上图的前一个部分,上面部分是原始的点云和经过pointnet提取的特征。下面部分是经过voxelnet提取到的特征,疑惑点是–这个n怎么确定,是每一个proposals中点的个数,但是每一个对应到的proposals应该是不固定值的,要怎么做呢?
(5)需要提出的是作者的定位工作是为了取得每一个点在fea-map中的特征,我们假设这里proposals的点是n个,那么最后作者在fea-map的点的特征也就是n×C了。
(6)所以关键问题在,在pytorch中表示点云是(batchsize,proposals_num,n_points,dim)这里的proposals个数和每个proposals中点也是不固定的。要如何选择这个数值上的大小呢?

在这里插入图片描述

Network Structure

  • 采用注意力机制去结合这两部分的特征。具体结构如上图所示。

Fusion moudle的结构是进行特征融合,对应的高纬坐标信息首先经过cancatnate,然后再乘上这个卷积得到的注意力特征。
(2)最后的MLP层是回归层,进一步对Bbox进行回归。

  • 如下图所示,在计算回归目标时,给定建议框,通过旋转和平移将ground-truth框和点云规范化:
    在这里插入图片描述

这个操作按照特定的顺序组织ground-truth框corners,可以降低旋转引起的转角顺序的不确定性。实验结果表明,该方法具有一定的优越性

Network Training

两步法:

  • 训练VoxelRPN

(1)在BEV中,如果一个锚点对gt真实度IoU大于0.6,则认为该锚点为正样本。如果一个锚点的IoU值在所有ground-truth框中都小于0.45,则该锚点被认为是负的。训练的Loss为联合LOSS,包括回归和分类。
(2)分类LOSS采用的是交叉熵,由于positive和negatative的不平衡性,作者的参数设置的比较大。
(3)回归loss和voxelnet一样的:
在这里插入图片描述

  • RefinerNet

(1)仅仅是在positive的基础上进行训练

Experiments

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值