CVPR2020论文解读:3D Object Detection三维目标检测

PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Detection

论文链接:https://arxiv.org/pdf/1912.13192.pdf

本文在LITTI数据集3D Object Detection三维目标检测性能排名第一。

摘要

提出了一种新的高性能的三维目标检测框架:点体素RCNNPV-RCNN),用于从点云中精确检测三维目标。该方法将三维体素卷积神经网络(CNN)和基于点网的集合抽象技术有机地结合起来,以学习更具鉴别能力的点云特征。它利用了3D体素CNN的高效学习和高质量建议以及基于点网络的灵活接收功能。具体地说,该框架通过一个新的体素集抽象模块将具有3D体素CNN3D场景总结成一个小的关键点集,以节省后续计算,并对具有代表性的场景特征进行编码。考虑到体素CNN生成的高质量3D提议,RoI网格池被提议通过具有多个接收域的keypoint集抽象从关键点到RoI网格点抽象提议特定特征。与传统的池化操作相比,RoI网格特征点编码更丰富的上下文信息,以准确估计对象的密度和位置。在KITTI数据集和Waymo开放数据集上进行的大量实验表明,我们提出的PV-RCNN仅使用点云就可以在显著的边缘上超越最新的3D检测方法。

PV-RCNN

本文将Grid-based(称为Voxel-based)的方法和Point-based的方法优缺点结合了起来。本文首先说明了Grid-based和Point-based的方法的优缺点:

基于网格Grid-based的三维目标检测方法。

为了解决点云的不规则数据格式问题,现有的研究大多将点云投影到规则网格上,由二维或三维CNN处理。先锋工作MV3D[1]将点云投影到2D鸟瞰网格,并放置许多预先确定的3D锚来生成3D边界框,以下工作[11、17、16]开发了更好的多传感器融合策略,而[36、35、12]提出了更有效的鸟瞰表示框架。其他一些工作[27,41]将点云划分为3D体素,由3D-CNN处理,并且引入3D稀疏卷积[5]以有效地处理3D体素。[30,42]使用多个检测头,而[26]探索对象部件位置以提高性能。这些基于网格的方法通常对于精确的3D方案生成是有效的,但是接受域受到2D/3D卷积的核大小的限制。

基于点Point-based的三维目标检测方法。FPointNet[22]首先提出应用PointNet[23,24]从基于2D图像边界框的裁剪点云进行3D检测。PointRCNN[25]直接从整个点云生成3D建议,而不是仅使用点云进行3D检测的2D图像,下面的工作STD[37]提出了稀疏到密集的策略,以更好地解决建议问题。[21]提出了hough投票策略以更好地进行对象特征分组。这些基于点的方法主要基于点网系列,尤其是集合抽象操作[24],它为点云特征学习提供了灵活的接受域。

基于网格Grid-based的方法计算效率更高,但不可避免的信息损失降低了细粒度定位精度,而基于点Grid-based的方法具有较高的计算成本,但是可以容易地通过点集抽象实现更大的接收域。

网络的结构图如下:

RPN

Backbone: 3D Sparse Convolution

由于是backbone,其实也比较通用。为什么要用3D Sparse Convolution呢?因为它的高效率和精确性。

Classification & Regression Head

将3D的feature map转为俯视图,高度变为通道,然后使用每个cell每个类别设置两个anchor,角度分别为0和90度。

实验表明使用这种backbone和anchor的设置方式,Recall高:“As shown in Table 4, the adopted 3D voxel CNN backbone with anchor-based scheme achieves higher recall perfor- mance than the PointNet-based approaches [25, 37]”

但这里有个问题是anchor的角度是0或者90度,那-90度是怎么处理的?这相当于是怎么处理相反方向的车?车辆朝向的这个量这个在Proposal生成的过程中是否考虑?如果考虑,则怎么回归相反方向的车,这种anchor设置看起来不合理;如果不考虑,那么在通过Proposal生成6x6x6的grids的时候的顺序怎么确定,难道就一直不考虑?这个得通过具体Loss或者代码中看了。相当于在图像处理中,网络要学会对左右翻转的鲁邦性。

Voxel Set Abastraction ModuleVSA

Discussion

有了Proposal,就要提取Proposal中的feature,形成一个固定大小的feature map了,本文将Proposal分成了6x6x6的栅格。那么如何计算6x6x6的每个cell的feature呢?

然后作者提出了对目前方法不足的地方的讨论:

(i) 这些特征体通常具有较低的空间分辨率,因为它们被下采样多达8倍,这妨碍了对象在输入场景中的精确定位。             

ii)即使可以上采样以获得更大空间尺寸的特征体积/地图,它们通常仍然非常稀疏。

也就是说使用差值的方法,类似于图像中的目标检测那样的RoI Align的方法不太好。

作者就提出了一种思路,使用PointNet++中的SA层,对每个cell,使用SA层,综合这个cell一定范围内的BackBone输出的feature map中的feature。但作者提出,这种方法,计算量太高。

使用集合抽象操作来合并场景特征体素的一个简单解决方案是将场景中的多尺度特征体直接聚合到RoI网格中。然而,这种直观的策略占用了大量内存,在实际应用中效率很低。例如,来自KITTI数据集的一个公共场景可能会在4×下采样的特征体积中产生18000个体素。如果对每个场景和每个 box标有3×3×3格。即使经过距离阈值处理,2700×18000对距离和特征集合也无法有效计算。

为了解决这个问题,作者提出了VSA Module,来减少要聚集的feature的总数量,也就是上例子中的18000。

VSA Module

VSA Module在示例图中已经画的非常形象了。过程如下:(公式1,2,3)

1)在原始点钟用Furthest Point Sampling选n个点

2)在每一层中的feature map中,使用SA Module综合每个点一定邻域内的feature

3)然后把所有feature concat起来

Extended VSA Module还多两种feature:

·      
在Backbone输出的feature map转到的BEV图中,用2D bilinear interpolation计算的feature

·      
使用原始点云通过SA Module计算的feature

PKW ModulePredicted Keypoint Weighting

问题是n个点中,有些点事前景点,比较重要,有些点是背景点,不重要。这就要区分一下,通过这n个点的feature,可以计算n个weight,weight由真实的mask做监督

训练,然后用这weight乘以点的feature,得到每个点的最终的feature。(公式5)这个过程被称为PKW module。

上述过程是使用n个点来表示整个场景,文章中叫做voxel-to-keypoint scene encoding,n个点叫做key-points

到此,我们有了Proposal和n个点的坐标和对应的feature。

RCNN

有了Proposal,就可以生成6x6x6个cell,对于每个cell的中心点,可以在之前得到的n个点中选取那些在其邻域的点,然后使用SA Module综合特征,得到cell的特征。(公式6,7)

得到了Proposal的固定大小的特征,就可以做confidence prediction和box refinement了。这里要注意的是confidence prediction的真实值是由IOU给出的。

Experiments

在KITTI上和Waymo Open Dataset上效果都很好。

Ablation Studies:

·      
验证了voxel-to-keypoint scene encoding的有效性,与RPN和朴素的想法做了对比。

·      
验证了different features for VSA module。

·      
验证了PKW module的有效性。

·      
验证了RoI-grid pooling module比RoI-aware pooling module(PointRCNN中的方法)的有效性。

思考

提出了一种基于点云的精确三维目标检测的新方法,即PV-RCNN框架。通过新的体素集抽象层将多尺度三维体素CNN特征和基于点网PointNet-based的特征融合到一个小的关键点集上,这些关键点的识别特征被聚合到具有多个接受域的RoI网格点上,以获取更丰富的上下文信息,用于细粒度的提案。在KITTI数据集和Waymo开放数据集上的实验结果表明,本文提出的体素到关键点场景编码和关键点到网格特征提取策略与以前的最新方法相比,显著提高了三维目标检测性能。

CVPR2020论文解读:3D Object Detection三维目标检测的更多相关文章

  1. CVPR 2019 论文解读 | 小样本域适应的目标检测

    引文 ​ 最近笔者也在寻找目标检测的其他方向,一般可以继续挖掘的方向是从目标检测的数据入手,困难样本的目标检测,如检测物体被遮挡,极小人脸检测,亦或者数据样本不足的算法.这里笔者介绍一篇小样本(few ...

  2. Histograms of Sparse Codes for Object Detection用于目标检测的稀疏码直方图

    AbstractObject detection has seen huge progress in recent years, much thanks to the heavily-engineer ...

  3. ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测

    ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测 STD: Sparse-to-Dense 3D Object Detector for Point Cloud 论文链 ...

  4. 三维目标检测论文阅读:Deep Continuous Fusion for Multi-Sensor 3D Object Detection

    题目:Deep Continuous Fusion for Multi-Sensor 3D Object Detection 来自:Uber: Ming Liang Note: 没有代码,主要看思想吧 ...

  5. CVPR2020论文解读:三维语义分割3D Semantic Segmentation

    CVPR2020论文解读:三维语义分割3D Semantic Segmentation xMUDA: Cross-Modal Unsupervised Domain Adaptation  for 3 ...

  6. CVPR2020:利用图像投票增强点云中的三维目标检测(ImVoteNet)

    CVPR2020:利用图像投票增强点云中的三维目标检测(ImVoteNet) ImVoteNet: Boosting 3D Object Detection in Point Clouds With ...

  7. CVPR2020 论文解读:少点目标检测

    CVPR2020 论文解读:具有注意RPN和多关系检测器的少点目标检测 Few-Shot Object Detection with Attention-RPN and Multi-Relation ...

  8. CVPR2020论文解读:OCR场景文本识别

    CVPR2020论文解读:OCR场景文本识别 ABCNet:  Real-time Scene Text Spotting with Adaptive Bezier-Curve Network∗ 论文 ...

  9. CVPR2020论文解读:手绘草图卷积网络语义分割

    CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...

随机推荐

  1. 关于js中的回调函数callback,通俗易懂

    前言 其实我一直很困惑关于js 中的callback,困惑的原因是,学习中这块看的资料少,但是平时又经常见,偶尔复制一下前人代码,功能实现了也就不再去追其原由,这么着,这个callback的概念就越来 ...

  2. python 利用opencv去除图片水印

    python 去除水印"人工"智能去除水印 这两天公司来了一个新的需求--去除水印,对于我一个从未接触过的这种事情的人来说,当时我是蒙的.不过首先我就去搜索了一下是否有该种合适的功 ...

  3. 【DB宝51】CentOS7修改网卡名称

    目录 1.修改/etc/default/grub文件 2.修改/etc/udev/rules.d/70-persistent-net.rules文件 3.修改网卡配置文件 4.重启服务器 需求:原来的 ...

  4. ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(下)

    快速上手多人游戏服务器开发.后续会基于 Google Agones,更新相关 K8S 运维.大规模快速扩展专用游戏服务器的文章.拥抱️原生 Cloud-Native! 系列 ColyseusJS 轻量 ...

  5. 全套AutoCAD版本安装教程及下载地址

    1:AutoCAD 2004 安装教程及下载地址 https://mp.weixin.qq.com/s/4So2zmJ6nWu6Z3bSo3W19Q 2:AutoCAD 2005 安装教程及下载地址 ...

  6. 解决移动端300ms延迟fastclick

    为什么要使用fastclick 移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击.为了能够立即响应用户的点击事件,才有了fastclick. f ...

  7. 敏捷史话(十七):维基(Wiki)背后的灵感来源—— Ward Cunningham

    在软件开发领域, Ward Cunningham 有许多独到的见解与成就. 1949年,Ward Cunningham 出生于印第安纳州的密歇根市,并在莱克县的一个小镇中长大.怀揣着对计算机浓厚的兴趣 ...

  8. net5学习笔记---依赖注入

    小王的故事 小王去上班 ​ 小王是个程序员,每个工作日他都要去上班,诸多交通工具他最喜欢的交通工具是骑电车.在骑行的过程中放空自己使他很快. ​ 突然有一天天气预报说近期有很大的雨,小王再想骑电车去上 ...

  9. QFNU 10-30 training

    7-9 特立独行的幸福 题意:见PTA 思路:其实就是遍历进行查找,利用递归函数,为了解决是特立独行,还要用一个全局数组进行存储所有满足条件的数进行去重标记,最后在输出的时候进行判断是否是只读取过一次 ...

  10. linux下将一个大的文件拆分成若干小文件

    命令:split,例子: 以行数拆分 -l参数: split –l 50 原始文件 拆分后文件名前缀 说明:以50行对文件进行拆分,最后一个文件的行数没有50行以实际行数进行分配,比如有一个名为 wl ...