PV-RCNN 阅读笔记

date
Mar 26, 2022
Last edited time
Mar 27, 2023 09:03 AM
status
Published
slug
PV-RCNN阅读笔记
tags
DL
CV
3D
summary
有部分参考自知乎, 链接已给出
type
Post
origin
Field
Plat
CVPR2020 3D目标检测 PV-RCNN
第一次在知乎上进行自己的创作,研究方向是3D目标检测,之后也有空也会不时更新知乎的文章,目前将自己的学习都记录在 CSDN博客上 ,已经有一些如voxel-based的方法的深入研究和代码阅读以及自己的一些想法和实验,有时间的话也会陆续把博客迁到知乎平台共同学习交流。今天这一篇是19年12月30日放到arxiv上的,其实在CVPR2020截止后就一直在关注这一篇文章何时会放出来,毕竟在KITTI的3D检测上高居榜首,并且远远的超过了第二名。如下: 是很有必要研读一下,这篇文章出自港中文和商汤的工作。目前已经开源代码。该组的工作还有19年的Part^A.也是十分值得阅读的工作。 先看题目猜测一下,是结合了目前基于点和基于voxel的方法进行特征提取。 本文的特征提取方式充分利用的3D voxel卷积和基于点的pointnet卷积方式。其中作者给出的解释是3D voxel卷积高效,而point-based的方法感受野可变,因此结合了这两种检测方法的优点。 该方法是一个两阶段的方法, 第一阶段提proposals,第二阶段为refine 该方法远远好于KITTI其他的方法,在精度的表现上看。 一个简单的过程如下,盲猜为多尺度特征融合到key-point上的一个创新工作。 3D检测应用 本文是一个将point_based的方法和voxel_based方法的结合的新型网络结构(在文章作者称voxel_based为grid_based的方法,实则同一种方法) 一些point_based和grid_based方法的简单介绍。并且提取存在的问题。这也是作者的论文出发点,结合这两种方法的优点。(高效+可变感受野) the grid-based methods are more computationally efficient but the inevitable information loss degrades the finegrained localization accuracy, while the point-based methods have higher computation cost but could easily achieve larger receptive field by the point set abstraction PV-RCNN为结合这两种方法的算法,采用multi-scale的方法获得由voxel_based方法得到的高质量的proposals,然后再利用Point_based的方法获得精细的局部信息。 The principle of PV-RCNN lies in the fact that the voxel-based operation efficiently encodes multi-scale feature representations and can generate high-quality 3D proposals.
CVPR2020 3D目标检测 PV-RCNN

PV-RCNN

Abstract

  • 本文的特征提取方式充分利用的 3D voxel 卷积和基于点的 pointnet 卷积方式。其中作者给出的解释是 3D voxel 卷积高效,而 point-based 的方法感受野可变,因此结合了这两种检测方法的优点。
  • 该方法是一个两阶段的方法, 第一阶段提 proposals,第二阶段为 refine
  • 该方法远远好于 KITTI 其他的方法,在精度的表现上看。
一个简单的过程如下,盲猜为多尺度特征融合到 key-point 上的一个创新工作。
notion image

Introduction

  • 3D 检测应用
  • 本文是一个将 point_based 的方法和 voxel_based 方法的结合的新型网络结构(在文章作者称 voxel_based 为 grid_based 的方法,实则同一种方法)
  • 一些 point_based 和 grid_based 方法的简单介绍。并且提取存在的问题。这也是作者的论文出发点,结合这两种方法的优点。(高效 + 可变感受野)
the grid-based methods are more computationally efficient but the inevitable information loss degrades the finegrained localization accuracy, while the point-based methods have higher computation cost but could easily achieve larger receptive field by the point set abstraction
  • PV-RCNN 为结合这两种方法的算法,采用 multi-scale 的方法获得由 voxel_based 方法得到的高质量的 proposals,然后再利用 Point_based 的方法获得精细的局部信息。
The principle of PV-RCNN lies in the fact that the voxel-based operation efficiently encodes multi-scale feature representations and can generate high-quality 3D proposals.
  • 核心也就是如何将上述的两种方法有效的结合起来,这里作者的做法是:在每一个 3D proposals 内平均的采样一些 Grid-point,然后再通过 P2 的 FPS 最远点采样的方法得到该 Grid_point 周围的点,再通过结合去进一步 refine 最后的 proposals
  • 因此,作者采用两阶段的方法去更好的结合上述的两种算法的优点。
      1. 第一阶段为:“voxel-to-keypoint scene encoding step”,这一步是提出 proposals,作者首先对整个场景采用 voxel 的方法进行特征提取,同时对场景的原始点云采用 FPS 采样得到key_point 的位置. key_point 的 feature 则使用 Voxel Set Abstraction Module 方式获得.
        1. notion image
      1. 第二阶段为‘keypoint-to-grid RoI feature abstraction’:这一步骤,作者提出了一个新的 RoI-grid pooling module,该模块将上一步骤的 key_points 的特征和 RoI-grid points 特特征融合.
        1. notion image

PV-RCNN for Point Cloud Object Detection

3D Voxel CNN for Efficient Feature Encoding and Proposal Generation

  • Discussions
      1. 目前大多精度高的工作都采用了 refine 优化的工作,这里作者提出两个问题,如果采用类似 roi_pooling 的方式去做,那么由于 8 倍的下采样会使得分辨率很低,此外如果采样得到的是较高的分辨率图片又会得到稀疏的表示(Fast-PointRCNN)。第二个问题是传统的 ROI-POOLING 和 ROI-ALIGN 实际上得到仅能在一个小的区域内进差值,因此如果在 3D 稀疏的表达上可能得到几乎都是 0 的特征表示。
      1. 进一步的,P2 提出的 Set-Abstruction 的操作很好的编码 “可变” 领域的特征,后续考虑到去 voxel 上差值的内存占用,作者提出了先提出关键点,然后再利用关键点编码 voxel 卷积过程的多尺度特征。

Voxel-to-keypoint Scene Encoding via Voxel Set Abstraction

  • Keypoints Sampling
    • 采用 FPS 采样,对 KITTI 数据集的关键点个数为 2048,对 waymo 数据集为 4096 个点。用于代表整个场景的特征信息。
  • Voxel Set Abstraction Module
    • 作者自行设计了 Voxel Set Abstraction (VSA) module 这样的一个模块,这个模块的作用是将 key_point 周围非空的 voxel 特征采集出来结合在一起,原文用了很多数学表达,含义大致如此。
  • Extended VSA Module
    • 进一步的在二维上,采用的是双线性插值得到关键点投影到 BEV 上的特征。最终的特征将有三部分组成,分别是来自 voxel 语义信息 fipv, 来自原始点云的特征信息 firaw (作者说这一部分信息是为了弥补之前在 voxel 化时丢失的信息),来自 BEV 的高级信息fibev .
      相关代码
      代码中 Voxel Set Abstraction Module Extended VSA Module 是写在一起的
      作者使用这两个模块从原始点云, Voxel特征, BEV特征中找到key_point所对应的位置, 将其邻域使用 pointnet2 的方法提取特征, 作为 key_point 的 feature.
       
  • Predicted Keypoint Weighting.
      1. 上述的特征融合实际上都是为了进一步的 refine 做准备,第一阶段的 proposals 实际上是由 voxel-based 的方法提出来的,这一步 Keypoint Weighting 的工作是为了给来自背景和前景的关键点一个不一样的权重,使得前景对 refine 的贡献更大。
      1. 为了做这样的一个工作,作者设计了如下的额为的网络结构。这里面的 Label 对应的是是否在 gt 内,采用 fcoal_loss。
notion image

Keypoint-to-grid RoI Feature Abstraction for Proposal Refinement

这就是作者提出的第二阶段,refinement,前文提到通过 3D 稀疏卷积处理 voxel 已经得到了比较好的精度的 proposals,但是多尺度的 keypoint 的特征是为了进一步 refine 结果。因此作者在这个阶段提出了 keypoint-to-grid RoI feature abstraction 模块。如下:
notion image
  1. 从该模块名称和图就可以看得出来,作者是想通过将 key-point 的特征整合到 grid-point 中去,并且也采用了 multi-scale 的策略。作者在每个 proposals 中都采样 6×6×6 个 grid points.
  1. 首先确定每一个 grid-point 的一个半径下的近邻,然后再用一个 pointnet 模块将特征整合为 grid_point 的特征,这里会采用多个 scale 的特征融合手段。
  1. 得到了所有的 grid-point 的点特征后,作者采用两层的 MLP 得到 256 维度的 proposals 的特征。
  • 3D Proposal Refinement and Confidence Prediction 作者在 confidence prediction branche 这一分支上采用了前人提出的 3D Intersection-over-Union (IoU),对于第 k 个 ROI 的置信度的目标是如下公式:
    • 该公式中 表示第 k 个 ROI 对应的 GT,因此 confidence prediction branche 的 LOSS 函数采用的是交叉熵 loss:

Training losses

  • RPN loss
  • keypoint seg loss 也就是前背景关键点的权重 loss。
  • refinement loss 定义如下:
这里的两部分 loss 第一个置信度 LOSS 也就是前文提出的 LOSS,后面的 SmoothL1 LOSS 和以前的一样。
相关代码

Experiments

有一些参数设置和实验的实现细节,博主就不写下来了。原文很详尽。列出实验效果吧。在 test 的数据集上: 几乎都好比第二名好几个点,真的牛。
notion image
在 waymo 上如下:
notion image
 

PV-RCNN++

作者在 PV-RCNN 的基础上提出了 PV-RCNN++ 模型. PV-RCNN++ 模型主要有两点改进: 1. 提出了 SPC (sectorized proposal-centric strategy) 采样方法, 替代了原来的 FPS 方法. 2. 使用 VectorPoolAggregationModuleMSG方法来替代原来在 VoxelSetAbstraction 中使用的 StackSAModuleMSG 方法, 能够更好地提取点云特征并且消耗更少地资源.
使用了这两种方法, PV-RCNN++ 模型的速度是 PV-RCNN 的2倍, 占用更少的资源, 并且能得到更好的效果.

PV-RCNN++: F ASTER AND B ETTER 3D DETECTION W ITH PV-RCNN F RAMEWORK

notion image

Sectorized Proposal-Centric Sampling for Efficient and Representative Keypoint Sampling

Farthest point sampling 方法生成 key_point 的计算量大, 并且会在我们所需要的 ROI 范围之外生成大量无用的 key_point, 这大大影响了训练以及推理的效率. 因此, 文章提出了一种新的采样方法: Sectorized Proposal-Centric (SPC) Keypoint Sampling.
notion image
简单来说, 就是把原始点云提取出 ROI 内的部分, 然后从 Scene center 把已经分批的点云再次分批. 这样多批次的点云可以同时运行 FPS 采样, 大大加快的运行的效率.

Local Vector Representation for Structure Preserved Local Feature Learning from Point Clouds

notion image
  • Limitations of Set Abstraction
    • 作者提出原来的 Set Abstraction 操作会花费大量的时间和空间来运行. 假设有 个需要获得 feature 的点, 每个点的 feature 从其周围的 个点获得, 而这 个点又有 的通道. 比如在 Roil-grid 模块中, . 然后使用 MLP 将 维通道降维到 维. 此外, 使用的 MaxPooling 操作丢失了点云的空间信息, 这影响了特征提取的效果.
  • VectorPool Aggregation for Structure-Preserved Local Feature Learning
    • 作者提出了 VectorPool aggregation 方法, 据说能既保留空间特征, 又能减少计算量和内存使用量.
    • 更简洁的特征
      • 原始点云数据维度为 , 作者将原始的特征做了一个折叠来减少特征数量. 折叠之后的特征维度为 .
    • position-sensitive 的特征表达
      • 作者使用插值的方法, 从原始点云中获得特征表达. 下面是插值的公式
        为距离点 最近的三个点. 为点云中的 key_poin 距离 grid_point 的距离的倒数.

Experiments

notion image
notion image
notion image

© Lazurite 2021 - 2024