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. Jquery 代码参考

    jquery 代码参考 jQuery(document).ready(function($){}); jQuery(window).on('load', function(){}); $('.vide ...

  2. hdu4081 最小树+DFS或者次小树的变形

    题意:       给你一个全图,在里面找到一棵树,这棵树最多只有一条边可以不是最小树(也可以是), 要求 那对特殊的边的两个权值/除了这条边其他边的和最大. 思路:      方法有很多,最少有三种 ...

  3. hdu1686 最大匹配次数 KMP

    题意:      给你两个串,问你串a在串b中出现了多少次. 思路:       直接匹配,KMP时匹配到匹配串的最后一个的时候不用跳出,直接匹配就行了,最后一个'/0'不会和目标串匹配,所以经过ne ...

  4. Linux中的防火墙(Netfilter、Iptables、Firewalld)

    目录 Netfilter Iptables iptables做本地端口转发 Firewalld Netfilter Netfilter是Linux 2.4内核引入的全新的包过滤引擎,位于Linux内核 ...

  5. POJ3498最大流,枚举终点,企鹅,基础最大流

    题意:       有一n个冰块,每个冰块上都有一些企鹅,所有的企鹅要跳到一个冰块上去,但是由于起跳是的后坐力原因导致每个冰块最多条mi次,最后问你所有的企鹅都跳到一个冰块上去的那块冰块可以是哪一块, ...

  6. spring.framework 版本从4.1.6.RELEASE升到5.0.20.RELEASE

    将org.springframework 使用到的jar 版本号改为5.0.20.RELEASE后运行会报错: Servlet.service() for servlet [springmvc] in ...

  7. Getting Started and Beyond|云原生应用负载均衡选型指南

    作者 冉昕,腾讯云服务网格TCM产品经理,现负责云原生流量接入网关与应用通信可观测性等产品特性策划与设计工作. 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理 ...

  8. IOS小组件(6):小组件实现时钟按秒刷新

    引言   上一节中我们了解了IOS小组件的刷新机制,发现根本没法实现按秒刷新,但是看别的App里面有做到,以为用了什么黑科技,原来是因为系统提供了一个额外的机制实现时间的动态更新,不用走小组件的刷新机 ...

  9. Catalan数以及相关性质的证明

    \(Catalan\) 数相关证明 Mushroom 2021-5-14 \(Catalan\)数的定义 给定一个凸\(n + 1\)边形, 通过在内部不相交的对角线,把它划分成为三角形的组合,不同的 ...

  10. 什么是redis的缓存雪崩, 穿透, 击穿?

    目前的互联网系统没有几个不使用缓存的, 但是只要使用缓存的话就会面临这几个问题, 如使用redis缓存技术, 可能会遇到缓存的雪崩, 穿透, 以及击穿. 首先来看一个简单的正常缓存流程: 如用户访问J ...