详解两阶段3D目标检测网络PVRCNN:Point-Voxel Feature Set Abstraction for 3D Object Detection

在这里插入图片描述

在《动手学无人驾驶(4):基于激光雷达点云数据3D目标检测》一文中介绍了3D目标检测网络PointRCNN。今天介绍该作者新提出的3D检测模型:PVRCNN,论文已收录于CVPR2020
作者个人主页为:https://sshaoshuai.github.io/。
知乎ID为:https://www.zhihu.com/people/yilu-kuang-shuai。
PVRCNN论文链接为:https://arxiv.org/pdf/1912.13192.pdf。
代码链接为:https://github.com/open-mmlab/OpenPCDet。

在介绍论文前,大家可以先看看作者此前分享的3D目标检测报告:https://www.bilibili.com/video/av89811975?zw

基于点云场景的三维物体检测算法及应用

文章目录

      • 1. PVRCNN算法
        • 1.1 3D Voxel CNN for Efficient Feature Encoding and Proposal Generation
        • 1.2 Voxel-to-keypoint Scene Encoding via Voxel Set Abstraction
        • 1.3 Keypoint-to-grid RoI Feature Abstraction for Proposal Refinement
      • 2. Experiments

1. PVRCNN算法

在目前的点云目标检测中,3D voxel CNNs可以生成高质量的proposals;而基于PointNet的方法由于其感受野灵活,可以捕获更准确的目标位置信息。

在本文中,作者对这两种检测方法进行集成,首先使用3D voxel CNNs作为主干网来生成高质量的proposalas,然后在每一个proposal中,为了充分有效池化点云特征,作者提出了两种新的池化方式:Voxel-to-keypoint scene encodingkeypoint-to-grid ROI feature abstraction。通过这两种池化方法,能够有效提高预测可信度以及对目标位置进行优化。

1.1 3D Voxel CNN for Efficient Feature Encoding and Proposal Generation

这部分相对比较好理解,使用3D CNNs作为主干网,将输入的点云划分为一个个voxel。作者总共进行了4次下采样,最后投影到鸟瞰图上,生成proposal。从结果可以看出,这种生成proposal的方式有着更高的召回率。

在这里插入图片描述


1.2 Voxel-to-keypoint Scene Encoding via Voxel Set Abstraction

PointNet中提出的set abstraction operation显示出了强大的特征提取能力,能够对任意空间尺寸的点云集进行特征抽取。受此启发,作者提出了将多个voxels的特征聚合到keypoints上。

  1. 首先是Keypoints Sampling,和PointRCNN一样,作者使用最远点采样法(FPS)在所有点云中选取出nnn个关键点,在KITTI数据中n=2048n=2048n=2048
  2. 然后是Voxel Set Abstraction Module(VSA),如下图所示,作者在每一次进行下采样时都进行了一次VSA操作,将不同尺度范围的voxel特征汇聚到keypoints
    在这里插入图片描述
    具体地操作如下,其中lkl_klk表示第kkk层网络,pip_ipi表示为keypointvj(lk)v_{j}^{(l_k)}vj(lk)表示为第kkk层网络中voxel坐标,fj(lk)f_{j}^{(l_k)}fj(lk)表示为voxel队以应地特征向量。这样就组成每个keypoint邻域集SilkS_{i}^{l_k}Silk:包括voxel特征向量及voxelkeypoint之间地相对位置。

在这里插入图片描述
然后是对SilkS_{i}^{l_k}Silk进行一次maxmaxmax操作。具体操作如下,其中MMM表示在集合SilkS_{i}^{l_k}Silk中最多选取出TkT_kTkvoxelsGGG表示进行多层感知机操作,最外层是maxmaxmax操作。最终生成地每个keypoint特征为fipvkf_{i}^{{pv}_k}fipvk

在这里插入图片描述
对每一层3D CNNs网络都进行上述VSA操作,这样就得到了keypoint结合后地特征fi(pv)f_{i}^{{(pv)}}fi(pv)
在这里插入图片描述

  1. 现在将VSA模块进行扩展,我们对原始点云进行公示(2)的操作,得到特征firawf_{i}^{raw}firaw。对鸟瞰图上的keypoint进行二项插值得到特征fi(bev)f_{i}^{(bev)}fi(bev),最终,关键点keypointkeypointkeypoint特征为fi(p)f_{i}^{(p)}fi(p)
    在这里插入图片描述
  2. 这里作者还设计了一个predicted keypoint weighting模块,如下图所示。在训练时,可以根据annotation来判断选取地关键点是不是属于前景点,这里训练使用地损失函数为focal loss
    在这里插入图片描述

1.3 Keypoint-to-grid RoI Feature Abstraction for Proposal Refinement

经过上面的处理,得到了一组含有多尺度语义特征的关键点集(keypoints with multi-scale semantic features)

为了进一步优化,作者在这里提出了keypoint-to-grid RoI feature abstraction,如下图4所示。
在这里插入图片描述
首先在每一个候选方案(proposal)中,统一采样6×6×66\times6\times66×6×6个gird points。这里的采样公式如下,其中gig_igi表示为grid points,pjp_jpj表示为keypoint,f~j(p)\widetilde f^{(p)}_{j}fj(p)表示为关键点特征。
在这里插入图片描述
然后使用一个PointNet-block得到grid point特征,具体方法如下:
在这里插入图片描述
最后通过两层MLP网络,得到256维的特征向量。


2. Experiments

下图是论文作者在KITTI数据集提交的结果(截至2020年11月22日),目前排在第15位,是榜上唯一开源的方案。

总的来说,作者提出的voxel-basedPointNet-based方法还是很创新的,值得借鉴。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一步步编写操作系统 53 任务状态段TSS介绍

操作系统是利用PCB来维护所有任务的,包括进程和线程,但cpu提供的是TSS,linux系统可没用它,因为效率太低。但是还是要了解下TSS才清楚操作系统中某些操作的原因。 本节中所讲的特权级与它有着密不可分的联系,TSS作用不…

动手学无人驾驶(6):基于IMU和GPS数据融合的自车定位

在上一篇博文《动手学无人驾驶(5):多传感器数据融合》介绍了如何使用Radar和LiDAR数据对自行车进行追踪,这是对汽车外界运动物体进行定位。 对于自动驾驶的汽车来说,有时也需要对自身进行更精确的定位,今天…

【Codeforces - 798C】 Mike and gcd problem(思维,贪心)

题干: Mike has a sequence A  [a1, a2, ..., an] of length n. He considers the sequence B  [b1, b2, ..., bn] beautiful if the gcd of all its elements is bigger than 1, i.e. . Mike wants to change his sequence in order to make it beauti…

一步步编写操作系统 48 加载内核1

其实,我们等了这一刻好久好久,即使我不说,大家也有这样的认识,linux内核是用c 语言写的,咱们肯定也要用c语言。其实...说点伤感情的话,今后的工作只是大部分(99%)都要用c语言来写&am…

Coursera自动驾驶课程第1讲:Welcome to the self-driving cars specialization

本专栏为Coursera自动驾驶课程笔记,B站上也有配套课程视频,对自动驾驶技术感兴趣的朋友可以看看。 本讲对应视频: https://www.bilibili.com/video/BV1WE411D74g?p1https://www.bilibili.com/video/BV1WE411D74g?p2https://www.bilibili.…

Coursera自动驾驶课程第2讲:The Requirements for Autonomy

上一讲《Coursera自动驾驶课程第1讲:Welcome to the self-driving cars specialization》对本课程进行了整体概述,同时回顾了自动驾驶汽车的发展历史。 从本讲我们开始进入正式的学习,我们将首先了解到如何划分自动驾驶汽车等级、以及自动驾…

一步步编写操作系统 51 加载内核4

咱们的内容都是连栽的,如果您没看过我之前的文章,本节您是看不懂的。 接上节。 介绍完内核初始化的函数kernel_init后,本节代码部分还差一点点没说啦,下面看代码: …略 179 ;在开启分页后,用gdt新的地址…

Coursera自动驾驶课程第3讲:Self-Driving Hardware and Software Architectures

在上一讲《Coursera自动驾驶课程第2讲:The Requirements for Autonomy》中我们了解到了如何划分自动驾驶汽车等级、以及自动驾驶三大模块:感知、决策和执行。 本讲我们将学习新的模块:自动驾驶汽车的硬件和软件架构。 B站视频链接&#xff…

一步步编写操作系统 54 CPL和DPL入门1

我们在工作中,公司都给员工配有员工卡,此员工卡就是员工身份的“标签”,用它来出入公司、食堂就餐等。给公司创造价值的是员工的生产力,不是员工卡,员工卡只是公司人事部门管理员工的一种手段而已。 现在说计算机&…

Coursera自动驾驶课程第4讲:Safety Assurance for Autonomous Vehicles

在上一讲《Coursera自动驾驶课程第3讲:Self-Driving Hardware and Software Architectures》中我们了解了自动驾驶汽车常用的传感器和硬件组件、软件系统。 本讲我们将学习新的模块,也是自动驾驶汽车最重要的模块之一:安全模块。 B站视频链…

【Codeforces - 1000C】Covered Points Count(思维,离散化,差分)

题干: You are given nn segments on a coordinate line; each endpoint of every segment has integer coordinates. Some segments can degenerate to points. Segments can intersect with each other, be nested in each other or even coincide. Your task i…

Coursera自动驾驶课程第5讲:Vehicle Dynamic Modeling

在上一讲《Coursera自动驾驶课程第4讲:Safety Assurance for Autonomous Vehicles》中我们了解了自动驾驶汽车中一个非常重要的模块:安全模块。 本讲我们将学习新的模块:汽车运动学和动力学模块。(这部分可能需要一定的理论力学和…

Java同步锁——lock与synchronized 的区别【转】

在网上看来很多关于同步锁的博文,记录下来方便以后阅读 一、Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,synchronized是在JVM层面…

Coursera自动驾驶课程第6讲:Vehicle Longitudinal Control

在上一讲《Coursera自动驾驶课程第5讲:Vehicle Dynamic Modeling》中我们了解了汽车运动学和动力学模块。 本讲我们继续学习新的模块:汽车纵向控制。具体地,我们将学习PID控制算法,看看该算法是如何在自动驾驶汽车中应用的。 B站…

Java并发:线程共享变量可见性原理

0、线程安全性:线程安全性包括两个方面,①可见性。②原子性。 0.1、线程之间的通信:线程的通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种共享内存和消息传递。 (1)在共…

Coursera自动驾驶课程第7讲:Vehicle Lateral Control

在上一讲《Coursera自动驾驶课程第6讲:Vehicle Longitudinal Control》中我们了解了如何使用PID算法进行汽车纵向控制。 本讲我们继续学习新的模块:汽车横向控制。具体地,我们将学习三种控制算法:Pure pursuit,Stanle…

Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision

在上一讲《Coursera自动驾驶课程第7讲:Vehicle Lateral Control》中我们了解了如何对汽车进行横向控制。 本课程第一个篇章就暂时告一段落了,接下来我们开始学习新的篇章。 课程第二个篇章是状态估计和定位模块。不过在这里我做了一下调整,我…

Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching

在上一讲《Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision》中我们学习了计算机视觉基本知识。 本讲我们将学习计算机视觉中的视觉特征模块。 B站视频链接:https://www.bilibili.com/video/BV1PE411D72p 文章目录1. Introduction to Image f…

Coursera自动驾驶课程第10讲:Feedforward Neural Networks

在上一讲《Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching》中我们学习了如何进行图像特征检测,特征匹配以及如何构建视觉里程计来估计相机的运动。 本讲我们将学习神经网络模块,关于神经网络或深度学习网上…

守护进程和守护线程

对于JAVA而言,一般一个应用程序只有一个进程——JVM。除非在代码里面另外派生或者开启了新进程。 而线程,当然是由进程开启的。当开启该线程的进程离开时,线程也就不复存在了。 所以,对于JAVA而言,线程是完全可以由自…