【3D目标检测】Frustum PointNets


代码
论文

一、论文思路

本文先通过2D模型通过图像生成2D的bounding box,再通过frustum(平截头体)的方式去映射成一个3D的候选区域。在模型的第二阶段,本文使用3D基于点云的模型(如PointNet和PointNet++)去对 上一阶段frustum找出的候选区域进行实例分割和最终3D bounding box的回归。

二、模型介绍

2.1 模型结构

在这里插入图片描述

  • 从图中的第一部分可以看出,该模型首先通过一个2D的CNN去得到一个物体2D的bounding box和它的类别,然后将2D的bounding box映射成一个3D的frustum proposal。
  • 图中的第二部分是一个实例分割的网络,可以将上一步frustum proposal中的点采样到 N × C N\times C ,其中 N N 是点的个数, C C 是每个点的特征维度,包含XYZ以及强度信息。最终这些点和这个proposal通过2D CNN得到的类别的one hot vector一起作为这一步实例分割网络的输入,输出一个对于N个点的mask掩码,被掩码过滤过的 M M 个点继续作为下一阶段的输入。
  • 最后一阶段,一个基于PointNet的TNet网络,将输入点校正对齐,并通过另一个网络回归预测出3D的bounding box。

2.2 实现细节

2.2.1 Frustum Proposal

通过一个投影矩阵,每一个2D的bounding box可以被映射成一个3D的frustum proposal。由于每一个frustum proposal的朝向都不一样,因此如下图过程(a)到(b),其会先将其旋转到与相机正交的方向,这样增加了后续算法的旋转不变性。

在2D的detection模型中,本文选用了FPN架构,在ImageNet上面训练,并在KITTI上面fine tune。
在这里插入图片描述

2.2.2 3D Instance Segmentation

从下图可以看出,如果仅仅使用Frustum Proposal的话,得到的点云中还包含了大量的背景点,因此这一模块主要的功能就是将我们需要的前景从背景中分割出来。并且如上一张图(c),对于分割出来的前景点云还要将其中心化来引入平移不变性。
在这里插入图片描述

2.2.3 Amodal 3D Box Estimation

在这里插入图片描述
这一部分主要包含两个部分:

  • T-Net:和PointNet中的T-Net类似,只不过这里学习的不是旋转矩阵,而是一个物体中心点的残差,并且这里是有监督的。
  • Box Estimation Net:输出最终bounding box的各种参数,输出的维度为 3 + 4 × N S + 2 × N H 3 + 4 × NS + 2×NH ,其中3代表对于中心点的残差回归,是接在T-Net回归之后的;NS代表不同size的anchor个数,每个anchor有四个维度,分别是该anchor的置信度以及长宽高的残差回归;NH代表不同朝向的anchor,每个anchor有两个参数,分别是置信度和朝向角θ。

2.2.4 模型结构

模型的具体结构如下:在这里插入图片描述

2.2.5 损失函数

由于这是一个多任务优化算法,因此在损失函数中应包含用于图像分割的Pointnet的损失 L s e g L_{seg} 用于坐标平移的T-Net的损失、和用于框出目标的损失三部分组成。具体的公式如下:
在这里插入图片描述

  • L c 1 r e g L_{c1-reg} L c 2 r e g L_{c2-reg} 分别对应T-Net的坐标平移损失和box estimation的中心回归损失(也就是判断中心产生的损失)。
  • L h c l s L_{h-cls} L h r e g L_{h-reg} 分别对应朝向的类别损失和回归损失(即离散值anchor的类型分类,和连续值的回归——smooth l1 loss)。
  • L s c l s L_{s-cls} L s r e g L_{s-reg} 分别代表box尺寸的类别损失和回归损失,与朝向类似。

上面的损失公式将box的尺寸和角度等参数视为独立的变量计算损失,但实际情况是box的尺寸和角度共同决定了box的信息,而最终得到的box的信息才是我们想要的。因此,frumstum pointnet引入了box的角损失(即对8个bounding box的corner进行损失计算),也就是上面的损失公式中的 L c o r n e r L_{corner} ,具体的计算公式为:
在这里插入图片描述
这里在NSxNH个anchor中仅有正确的size和head朝向的那个box会计算损失(即其他时候δ=0)。对于第i个size的第j个朝向的box的第k个角 P k i j P^{ij}_k ,会移动到ground truth box的中心,与每个对应的角算L1 Loss。为了考虑到翻转180度的问题,这里会算与180度旋转之后的角 P P^{**} 的损失,并取最小值。(后面最后一项中是对k求和而不是i,论文应该写错了)

三、实验结果

论文在detection的任务里比较了KITTI数据集(包含3D detection和鸟瞰图的detection)和SUN-RGBD数据集。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39373480/article/details/104101542