F-PointNets

论文:《Frustum PointNets for 3D Object Detection from RGB-D Data》

Abstract

利用RGB-D进行目标检测。尽管之前的方法集中在图像或者3D体素上,常常掩盖自然3D模式和3D数据的不变体,但是我们通过RGB-D扫面直接操作原始点云。但是,这个方法的关键在于如何在大范围扫描(区域候选框)的点云中高效的局部化物体。相比于单独依赖于3D候选区域,我们的方法利用预训练好的2D目标检测器和先进的3D深度学习来进行目标局部化,达到即使是对于小目标而言也是高效和高召回率的。

Introduction

关键问题:如何在3D空间中高效地推出目标的可能位置。

  • 直接使用3D RPN网络,但是对于3D来说,这个计算量巨大,不适用于自动驾驶的实时场景;
  • 我们提出了减少搜索空间的方法:我们首先利用成熟的2D目标检测网络获取2D 候选区域,利用矩阵转换得到3D 边界视锥图。利用修剪后的3D空间,我们通过PointNet网络的两个变体(3D实力分割网络和3D边界框评估网络)获取3D目标实例分割和3D边界框回归。

Related Work

RGB-D数据的目标检测的方法:

  • 基于前视图的方法

  • 基于鸟瞰图的方法

    • MV3D就是将3D激光雷达投影到鸟瞰图,并为获取3D边界候选框训练RPN网络。该方法在检测行人和自行车等小物体上表现不足,而且在垂直方向上有多物体时,表现也不理想。
  • 基于3D的方法

    • 《Sliding shapes for 3d object detection in depth images》在通过点云中抽取的手动设计的几何特征上利用SVM训练3D目标分类器,之后利用滑动窗口搜索定位目标;
    • 《Fast object detection in 3d point clouds using efficient convolutional neural networks》利用体素的3D网格进行3D CNN替换上述的SVM,进行分类;
    • 《Three-dimensional object detection and layout prediction using clouds of oriented gradients》设计新的几何特征用于预测点云的3D目标检测;
    • 《 Deep sliding shapes for amodal 3d object detection in rgb-d images》将整个场景的点云转换为体积网格和使用3D CNN进行目标推荐和分类。

Problem Definition

给定RGB-D数据作为输入,我们的目标是对3D空间的目标进行分类和定位。

深度数据是通过激光雷达或者室内深度传感器获取,通过点云在RGB相机的坐标中展示。投影矩阵也是已知的,所以我们能够从2D图像区域获取3D视锥图。每个目标都是通过一类(预定义的k类)和3D边界框展示。即使物体的一部分被遮挡或者截断,也是可以通过边界框完全展示的。

3D边界框的参数如下:

高宽长:h,w,lh, w, lh,w,l

中心点:cx,cy,czc_x, c_y, c_zcx​,cy​,cz​

方向:θ,ϕ,ψ\theta, \phi, \psiθ,ϕ,ψ

在操作中,我们只需要考虑围绕向上坐标轴的θ\thetaθ角即可。

3D Detection with Frustum PointNets

目标检测由以下三部分组成:Frustum Proposal, 3D Instance Segmentation, Amodal 3D Box Estimation


思路:

首先输入RGB图像,利用2D检测网络提取2d region proposal,之后通过和输入的点云进行矩阵转换,得到Frustum Proposal。之后再frustum中利用PointNet网络进行3D语义分割,缩小proposal的3d空间,最后利用T-Net对坐标进行归一化,并再使用PointNet网络,评估3D bounding box参数。

Frustum Proposal

根据已知的相机投影矩阵,一个2D的边界框能够推广到一个锥视图(通过深度传感器的范围指定的近距离和远距离的平面)。我们之后利用锥视图收集所有的点形成一个锥视图点云。锥视图可能朝向不同的方向,这将会导致点云位置较大的变化,如图(a)所示。因此我们通过将它们朝向一个中心点视角进行旋转,进而归一化锥视图,以便于锥视图的中心轴正交于图像平面,如图(b)所示。归一化有利于提升算法的旋转不变性。这个过程成为frustum proposal generation

2D region proposal是基于FPN模型,采用的是在ImageNet分类和COCO目标检测数据集的预训练参数,并在KITTI的2D目标检测数据上进行微调,达到分类和预测2D边界框的目的。

3D Instance Segmentation

由于在3D上进行分割要比图像上更加自然,因为在像素上距离较远的位置,在点云上比较近。基于这个原因,我们提出对3D点云进行实例分割,而不是2D图像或者是深度映射。类似于Mask-RCNN,它在图像领域对像素进行二分类进而达到实例分割,我们利用基于PointNets网络对锥视图的点云进行3D实例分割。

基于3D实例分割,我们能够达到基于残差的3D定位。我们预测了局部坐标系系统的3D边界框中心—3D mask coordiantes,如上图©所示。

3D Instance Segmentation PointNet

这个网络取锥视图中的一个点云,并预测每个点的可能分数,这个表示有多大可能这个点属于感兴趣的目标。需要注意的是每个锥视图只包含一个感兴趣的目标。和2D实例分割一样,在一个锥视图的目标点可能在另外一个锥视图中被遮挡或者混乱。因此,我们的分割PointNet学习遮挡和混乱模式以及识别某一类目标的几何体。

经过3D实例分割,分类为感兴趣物体的点云被提取出来(如图中的masking)。之后将进一步归一化它的坐标来提升算法的平移不变性。在我们的操作中,我们利用质心减去XYZ坐标值进而将点云平移到局部坐标系中。如图©所示。需要注意的是,我们不缩放点云,因为部分点云的边界球尺寸会受到视角的巨大影响,而且点云的真实大小有利于边界框的尺寸评估。

在实验中,我们发现坐标平移,比如上述以及之前的锥视图旋转对于3D目标检测的结果起到了关键的作用。如下表所示:

v1和v2版本的网络结构如下图所示:

Amodal 3D Box Estimation

给定分割的目标点云(在3D mask coordinate),这个模型利用带有预训练的transformer网络的边界框回归PointNet评估目标的3D边界框。

利用T-Net进行基于学习的3D对齐

尽管我们根据它们的中心位置,已经对齐了分割的目标点,但是我们发现掩码坐标框架的初始点(Fig.©)和模型的边界框中心相差较远。

因此,我们提出了利用轻权重的回归PointNet(T-Net)来评估全部目标的真实中心,之后再平移坐标,使得预测的中心点成为初始点(Fig.(d))。

这个结构和我们的T-Net网络的训练类似于文章中的《Pointnet: Deep learning on point sets for 3d classification and segmentation》的T-Net,可以看成是一种特殊的STN网络。

T-Net网络如下图所示:

3D 边界框评估的PointNet

在3D目标坐标系中(fig.(d))中给定一个目标点云,边界框评估网络预测边界框(对于整个物体,包括看不见的部分)。这个网络类似于目标分类,但是输出不再是目标类的分数,而是3D边界框的参数。

如上述所说, 我们的3D边界框的参数有中心点(cx,cy,cz)(c_x, c_y, c_z)(cx​,cy​,cz​),尺寸(h,w,l)(h,w,l)(h,w,l)基于前进的旋转角(θ)(\theta)(θ)。对于边界框的中心评估,我们采用了残差法。由边界框预测网络预测的中心残差结合了之前的由T-Net得到的中心残差和编码的中心,进而得到完全的中心。公式如下:
Cpred=Cmask+△Ct−net+△Cbox−netC_{pred} = C_{mask} + \triangle C_{t-net} + \triangle C_{box-net} Cpred​=Cmask​+△Ct−net​+△Cbox−net​
对于边界框的尺寸和前进角,我们采用了之前的网络,使用分类和回归方程的混合。具体来说,我们预先定义了一个NS大小的模板和NH等分角箱。我们的模型对那些预先定义的分类进行尺寸和heading分类(NS对尺寸打分,NH对heading打分),同时对每个种类的残差数量(对高、宽和长度的3xNS残差方向,heading的NH残差角度)。最后,这个网络总的输出数量为3+4xNS + 2xNH.

边界框评估网络的PointNet:

Training with Multi-task Losses

我们同时优化3个网络涉及多任务损失。

3个网络:

3D 实例分割PointNet;

T-Net;

边界框评估PointNet.
Lmulti−task=Lseg+λ(Lc1−reg+Lc2−reg+Lh−cls+Lh−reg+Ls−cls+Ls−reg+γLcorner)L_{multi-task} = L_{seg} + \lambda(L_{c1-reg}+L_{c2-reg}+L_{h-cls}+L_{h-reg}+L_{s-cls}+L_{s-reg}+\gamma L_{corner}) Lmulti−task​=Lseg​+λ(Lc1−reg​+Lc2−reg​+Lh−cls​+Lh−reg​+Ls−cls​+Ls−reg​+γLcorner​)

其中Lc1−regL_{c1-reg}Lc1−reg​是T-Net;

Lc2−regL_{c2-reg}Lc2−reg​是边界框评估网络中心点回归损失;

Lh−clsL_{h-cls}Lh−cls​和Lh−regL_{h-reg}Lh−reg​是前进角预测的损失;

Ls−clsL_{s-cls}Ls−cls​和Ls−regL_{s-reg}Ls−reg​是边界框尺寸;

SoftmaxSoftmaxSoftmax用于所有的分类任务,smooth−L1smooth-L1smooth−L1损失用于所有的回归任务中。

边界框参数的联合优化的角损失

当我们的3D边界框参数是紧实和完整的,对于最终的3D边界框准确率的学习并不是最优的,中心点、尺寸和前进方向有分开的损失项。假设这样一种情况,中心点和尺寸都准确的预测到了,而前进角偏差较大,这个和真实边界框的3D IoU将会被角度偏差而主导。理想情况下,三项(center, size, heading)应该联合优化以便于得到最优的3D边界框评估(在IoU指标下)。为了解决这个问题,我们提出了一个新颖的正则化损失,corner loss:

这个corner loss是预测框和真实边界框的八个角的距离和。因为角的位置取决于center,size,heading的联合作用,所以corner loss可以正则化这些参数的多任务训练。

为了计算corner loss,我们首先从所有尺寸的模板和前进角箱中构建NS * NH个锚定。之后将锚定平移到评估边界框的中心。我们将锚定边界框的角标定为PkijP_k^{ij}Pkij​,i,j,k分别表示尺寸类,前进角类和(预定义的)角的类别。为了避免反转前进评估较大的惩罚,我们进一步计算了翻转真实边界框的角的距离(P∗∗kP^**_kP∗∗k​),并且使用原始和翻转的情况的最小值。δij\delta_{ij}δij​表示真实尺寸/前进类和0的其中一种,是一个用于选择我们关心的距离项的二维掩码。

Experiment

实验主要分为三个部分:

  • 对比在KITTI数据集和SUN-RGBD数据集上3D目标检测最好的方法;
  • 验证我们设计选择的深度分析;
  • 量化结果,并讨论方法的优缺点;

和当前最好的方法进行对比

KITTI

比MV3D 高出很多,而且我们的方法基于PointNet(v1)和PointNet++(v2)的backbone更为干净。而且相信进行传感器融合能够更进一步提升结果。

通过3D目标定位(BEV)也是遥遥领先:

结构设计分析

Comparing with alternative approaches for 3D detection

不同数据对比:

2D mask与3D mask对比如下图所示:

由上图可知3D mask 这个阶段起到了非常重要的作用。而2D+3D反而将2D中较大的误差加入到3D中,所以误差比只使用3D mask的准确率更低。

Effects of point cloud normalization

由上表可以看出frustum rotation、mask centralizaion起到了关键作用,目标中心点的平移也能有助于提升准确率。

Effects of regression loss formulation and corner loss

上图可以看到各类损失对于提升准确率的作用。

量化结果和讨论

优点:

  • 在没有遮挡,而且合适的距离的情况下,我们的模型输出显著准确的3D实例分割掩码和3D边界框;
  • 我们的模型甚至能够预测只有部分数据的3D边界框;
  • 对于在2D图像中重叠的目标,在3D空间中,变得容易定位。

缺点:

  • 在稀疏点云中(有些情况是少于5个点)常常由于不准确的姿势和尺寸导致常识性的错误。我们认为图像特征可以提供很大的帮助。因为我们可以接触到高清晰的图像块,即使是在较远距离的目标;
  • 在一个锥视图中的同一类的多个实例(比如两个站在一起的人)。因为我们假定的是一个锥视图有单一的兴趣目标,当有多个实例出现时,就会产生困惑,因此输出混合的分割结果。如果我们能够提出一个锥视图可以有多个3D边界框,这个问题就可以得到缓解。
  • 有时候我们的2D检测器没有检测到目标,因为较暗的光线或者较强的遮挡。因为我们的锥视图推举是基于候选区域,没有给定2D目标检测就没法进行3D检测。

测试结果

Benchmark easy moderate hard
Car (Detection) 96.482544 90.305161 87.626389
Car (3D Detection) 83.960136 69.317223 62.751877
Car (Bird’s Eye View) 87.790451 82.268562 74.436012
Pedestrian (Detection) 84.555908 76.389679 72.438660
Pedestrian (3D Detection) 66.706535 55.950409 48.960270
Pedestrian (Bird’s Eye View) 71.108696 61.005306 53.808998
Cyclist (Detection) 88.994469 72.703659 70.610924
Cyclist (3D Detection) 69.160477 51.361362 47.442177
Cyclist (Bird’s Eye View) 74.139236 56.213768 53.002541

2D object detection results

3D object detection results

Bird’s eye view results

2D object detection results

3D object detection results

Bird’s eye view results

F-PointNets相关推荐

  1. 《Frustum PointNets for 3D Object Detection from RGB-D Data》中文翻译

                用于从RGB-D数据进行3D物体检测的Frustum PointNets 摘要:  在这项工作中,我们研究了室内和室外场景中RGB-D数据的三维物体检测. 虽然以前的方法专注于 ...

  2. 使用PointNets在雷达数据中进行二维汽车检测

    摘要 对于许多自动驾驶功能而言,对车辆环境的高度准确感知是至关重要的前提.现代高分辨率雷达传感器每个物体会产生多个雷达目标,这使得这些传感器特别适合2D物体检测任务.这项工作提出了一种仅使用Point ...

  3. python %f 怎样指定小数点的位数

    %f 格式化浮点数字,可指定小数点后的精度 看下面的 pi = 3.14 print("当前的p= %f" % pi) 打印结果如下 想保留小数点后多少位数只需要在f 前面添加相应 ...

  4. [codeforces]Round #538 (Div. 2) F. Please, another Queries on Array?

    题解:    $$  ans=F\left ( \prod _{i=l}^{r}a_i \right ) $$ $$ =(p_i-1){p_i}^{k_i-1}*.....*(p_j-1){p_j}^ ...

  5. Ubuntu apt-get install、apt-get -f install、apt-get --purge remove、apt-get update、apt-get upgrade、

    1. 常用命令列表 命令 描述 apt-cache search package 搜索软件包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-g ...

  6. openoj的一个小比赛(F题解题报告)poj3978(dp+素数筛选)

    http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=47#problem/F 一个素数帅选法的题目,才开始直接就套模板结构tle ...

  7. cad里面f命令用不了,CAD出现命令无效、失灵等问题?不用慌,两招帮你快速解决...

    一.CAD常见无效问题 1.填充命令无效 我们有时候需要对某一区域进行填充,但是却发现怎么也填充不出来,这个时候就应该检查一下[选项]设置了,具体操作步骤如下: ①命令行中输入[OP],按下回车键调出 ...

  8. 深度学习--TensorFlow(5)BP神经网络(混淆矩阵、准确率、精确率、召回率、F值)

    目录 一.混淆矩阵 二.准确率 三.召回率 四.精确率 五.综合评估指标 -- F值 一.混淆矩阵         也程误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示.在机器学习领 ...

  9. SLAM小结——求解退化问题解析(F、H、E)(面试经验总结)

    总结:        1 Essential Matrix E= t ^ R 为3*3的矩阵,奇异值为 [ u, u, 0] ^ T 的形式.为本质矩阵的内在性质. 性质:理论上综合旋转.平移共有6个 ...

  10. 【Qt】在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效的解决方法

    1.问题描述 Win10操作系统环境下,在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效. 2.原因分析 Ctrl+Shift+f快捷键在各种输入法中,常用来做中文简体和繁 ...

最新文章

  1. 报告:最大化人工智能(AI)机遇
  2. 链接时undefined reference to构造函数
  3. CSS命名方法(笔记)
  4. 一点一点学ASP.NET之基础概念——HttpHandler
  5. [Grooy]List, Map and Range习题
  6. pthread_cleanup_push()/pthread_cleanup_pop()
  7. 04 Mysql之单表查询
  8. 随机变量的均值与样本的平均值有何区别
  9. 7、重建二叉树(Python)
  10. R语言【箱线图和茎叶图】
  11. python判断是否是英文字母_python学习:判断字符串中字母数字空格的个数
  12. 使用JLINK仿真器调试树莓派4
  13. 问题 E: 天宝便利店
  14. HyperLynx(十二)BoardSim和PCB板级仿真分析(三)
  15. 软件生存周期的图示——DO-178B/ED-12B学习笔记之九
  16. [nrf52][SDK17] 如何修改BLE_MAC地址?
  17. 在线直播源码中直播间内大转盘功能的实现
  18. Ubuntu 如何更换内核
  19. emqx broker安装
  20. javaweb——初用idea创建一个三层架构的web项目(Dao,service,controller)

热门文章

  1. 将csv导入python_将CSV导入Oracle表(Python)
  2. 基础内网信息探针思路
  3. 自适应滤波:递归最小二乘
  4. 今日头条有麻烦了!App 被下架
  5. 通过OpenCV实现虚拟键盘
  6. ubuntu配置网易云音乐
  7. 微信短信显示服务器解包异常,最新微信小程序解包反编译bug处理 解决 $gwx is not defined 错误...
  8. 乐安全 支持x86_不用苦等五一 四款近期主打平板推荐
  9. 下载 raywenderlich.com 上的 iOS/android/Unity 视频、源码
  10. 波浪下划线怎么设置_如何在word中的文字下面加波浪线