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
PV-RCNNAbstractIntroductionPV-RCNN for Point Cloud Object Detection3D Voxel CNN for Efficient Feature Encoding and Proposal GenerationVoxel-to-keypoint Scene Encoding via Voxel Set AbstractionKeypoint-to-grid RoI Feature Abstraction for Proposal RefinementTraining lossesExperimentsPV-RCNN++PV-RCNN++: F ASTER AND B ETTER 3D DETECTION W ITH PV-RCNN F RAMEWORKSectorized Proposal-Centric Sampling for Efficient and Representative Keypoint SamplingLocal Vector Representation for Structure Preserved Local Feature Learning from Point CloudsExperiments
PV-RCNN
Abstract
- 本文的特征提取方式充分利用的 3D voxel 卷积和基于点的 pointnet 卷积方式。其中作者给出的解释是 3D voxel 卷积高效,而 point-based 的方法感受野可变,因此结合了这两种检测方法的优点。
- 该方法是一个两阶段的方法, 第一阶段提 proposals,第二阶段为 refine
- 该方法远远好于 KITTI 其他的方法,在精度的表现上看。
一个简单的过程如下,盲猜为多尺度特征融合到 key-point 上的一个创新工作。
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
- 因此,作者采用两阶段的方法去更好的结合上述的两种算法的优点。
- 第一阶段为:“voxel-to-keypoint scene encoding step”,这一步是提出 proposals,作者首先对整个场景采用 voxel 的方法进行特征提取,同时对场景的原始点云采用 FPS 采样得到key_point 的位置. key_point 的 feature 则使用 Voxel Set Abstraction Module 方式获得.
- 第二阶段为‘keypoint-to-grid RoI feature abstraction’:这一步骤,作者提出了一个新的 RoI-grid pooling module,该模块将上一步骤的
key_points
的特征和RoI-grid points
特特征融合.
PV-RCNN for Point Cloud Object Detection
3D Voxel CNN for Efficient Feature Encoding and Proposal Generation
- Discussions
- 目前大多精度高的工作都采用了 refine 优化的工作,这里作者提出两个问题,如果采用类似
roi_pooling
的方式去做,那么由于 8 倍的下采样会使得分辨率很低,此外如果采样得到的是较高的分辨率图片又会得到稀疏的表示(Fast-PointRCNN)。第二个问题是传统的 ROI-POOLING 和 ROI-ALIGN 实际上得到仅能在一个小的区域内进差值,因此如果在 3D 稀疏的表达上可能得到几乎都是 0 的特征表示。 - 进一步的,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.
- 上述的特征融合实际上都是为了进一步的 refine 做准备,第一阶段的 proposals 实际上是由 voxel-based 的方法提出来的,这一步 Keypoint Weighting 的工作是为了给来自背景和前景的关键点一个不一样的权重,使得前景对 refine 的贡献更大。
- 为了做这样的一个工作,作者设计了如下的额为的网络结构。这里面的 Label 对应的是是否在 gt 内,采用 fcoal_loss。
Keypoint-to-grid RoI Feature Abstraction for Proposal Refinement
这就是作者提出的第二阶段,refinement,前文提到通过 3D 稀疏卷积处理 voxel 已经得到了比较好的精度的 proposals,但是多尺度的 keypoint 的特征是为了进一步 refine 结果。因此作者在这个阶段提出了 keypoint-to-grid RoI feature abstraction 模块。如下:
- 从该模块名称和图就可以看得出来,作者是想通过将 key-point 的特征整合到 grid-point 中去,并且也采用了 multi-scale 的策略。作者在每个 proposals 中都采样 6×6×6 个 grid points.
- 首先确定每一个 grid-point 的一个半径下的近邻,然后再用一个 pointnet 模块将特征整合为 grid_point 的特征,这里会采用多个 scale 的特征融合手段。
- 得到了所有的 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 的数据集上: 几乎都好比第二名好几个点,真的牛。
在 waymo 上如下:
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
Sectorized Proposal-Centric Sampling for Efficient and Representative Keypoint Sampling
Farthest point sampling 方法生成 key_point 的计算量大, 并且会在我们所需要的 ROI 范围之外生成大量无用的 key_point, 这大大影响了训练以及推理的效率. 因此, 文章提出了一种新的采样方法: Sectorized Proposal-Centric (SPC) Keypoint Sampling.
简单来说, 就是把原始点云提取出 ROI 内的部分, 然后从 Scene center 把已经分批的点云再次分批. 这样多批次的点云可以同时运行 FPS 采样, 大大加快的运行的效率.
Local Vector Representation for Structure Preserved Local Feature Learning from Point Clouds
- Limitations of Set Abstraction
作者提出原来的 Set Abstraction 操作会花费大量的时间和空间来运行. 假设有 个需要获得 feature 的点, 每个点的 feature 从其周围的 个点获得, 而这 个点又有 的通道. 比如在 Roil-grid 模块中, . 然后使用 MLP 将 维通道降维到 维. 此外, 使用的 MaxPooling 操作丢失了点云的空间信息, 这影响了特征提取的效果.
- VectorPool Aggregation for Structure-Preserved Local Feature Learning
- 更简洁的特征
- position-sensitive 的特征表达
作者提出了 VectorPool aggregation 方法, 据说能既保留空间特征, 又能减少计算量和内存使用量.
原始点云数据维度为 , 作者将原始的特征做了一个折叠来减少特征数量. 折叠之后的特征维度为 .
作者使用插值的方法, 从原始点云中获得特征表达. 下面是插值的公式
为距离点 最近的三个点. 为点云中的 key_poin 距离 grid_point 的距离的倒数.