论文题目:Frustum PointNets for 3D Object Detection from RGB-D Data

开源代码:github.com/charlesq34/f

一、基本思路

这篇文章是PointNet和PointNet++的作者写的,其目的是在使用PointNet进行点云处理之前,先使用图像信息得到一些先验搜索范围,这样既能提高效率,又能增加准确率。

具体怎样通过图像获得有用的信息呢?看下面这张图就明白了

在这张图里,左上角的意思是先把图像和点云信息标定好(这个属于传感器的外参标定,在感知之前进行),左下角是用CV里的目标检测算法检测出物体的边界框(BoundingBox),有了边界框之后,以相机为原点,沿边界框方向延伸过去就会形成一个锥体(上图的右半部分),该论文题目里frustum这个词就是锥体的意思,我们用点云对该物体进行识别的时候只需要在这个锥体内识别就行了,大大减小了搜索范围。

二、实现方法

上面讲的是作者思路的出发点,要实现这个思路,就要设计一个完整的网络结构,而且要考虑更多的细节,使之更完善。下图就是本论文设计的网络结构

可以看出,网络共分为三部分,第一部分是使用图像进行目标检测并生成锥体,第二部分是在锥体内的点云实例分割,第三部分是点云物体边界框的回归。

下面对这三部分分别介绍

  1. 基于图像生成锥体

基于图像的目标检测就不用说了,我们重点说一下怎样从图像生成锥体。

由于检测到的目标不一定在图像的正中心,所以生成的锥体的轴心就不一定和相机的坐标轴重合,如下图中(a)所示。为了使网络具有更好的旋转不变性,我们需要做一次旋转,使相机的Z轴和锥体的轴心重合。如下图中(b)所示。


2. 在锥体内进行点云实例分割

实例分割使用PointNet,PointNet的详细内容我们之前在别的文章里做过介绍,这里不详细说了

一个锥体内只提取一个物体,为啥?因为这个锥体是图像中的边界框产生的,一个边界框内也只有一个完整物体。

另外一点,需要注意的是,我们在生成锥体的时候提到了旋转不变性,此处完成分割这一步之后,还需要考虑平移不变性,因为点云分割之后,分割的物体的原点和相机的原点必不重合,而我们处理的对象是点云,所以应该把原点平移到物体中去,如下图中(c)所示。

3. 生成精确边界框

我们再重新看一些这部分的结构

从这个结构里可以看出,在生成边界框之前,需要经过一个T-Net,这个东西我们之前介绍PointNet的时候就提过,它的作用是生成一个平移量,之所以要做这一步,是因为在上一步得到的物体中心并不完全准确,所以为了更精确地估计边界框,在此处对物体的质心做进一步的调整,如下图中(d)所示。

下面就是边界框回归了,对一个边界框来讲,一共有七个参数,包括:

  • 中心点: cx,cy,cz
  • 长宽高: l,w,h
  • 角度: θ

最后总的残差就是以上目标检测、T-Net和边界框残差之和,可以据此构建损失函数。

三、实验结果

直接列出对比结果和效果图吧