【3D目标检测】PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud
文章目录
- 前言
- 摘要
- 1. 介绍
- 2. PointRCNN算法框架
- 2.1 Bottom-up 3D proposal generation via point cloud segmentation
- 2.2 Point cloud region pooling
- 2.3 Canonical 3D bounding box refinement
- 3. 实验细节
- 4. 实验结果
- 5. 总结
前言
1. 为什么要做这个研究?
之前的方法做3D目标检测通常都是将点云投影到BEV视图或者正面图,又或者投射到体素中,效率比较低下。
2. 实验方法是什么样的?
PointRCNN分为两个阶段:
Stage-1:
- 通过PointNet++提取全局点云的特征;
- 进行前景分割(使用Focus Loss),并从前景点回归粗粒度的bounding box;
- 在bounding box的生成中,使用bin-based方法回归损失估计bounding box的中心点;
- bin-based方法是对每个前景点都以其为原点构建X-Z坐标系,预测bounding box中心点在哪一个bin里面,再对其进行精确地残差回归。
- 基于BEV图做NMS去除冗余的bounding box,训练阶段只保留300个进入stage-2。
Stage-2:
- 扩大Stage-1输入的bounding box,保留扩大框中的点和特征;
- 将每个bounding box通过正交变换转到以自身中心为原点的local坐标系,以便更好地学习bounding box中的局部空间信息;
- 使用PointNet++的SA module提取特征,得到最后每个点的特征向量,进行置信分类和box微调;
- 同样使用bin-based方法进行proposal回归。
3. 创新与不足
- 第一个只使用原始点云的two-stage anchor free 3D目标检测模型;
- 通过语义分割获取前景点并回归proposal,避免了在整个3D空间搜索proposal;
- 使用bin-based回归loss,提高了网络的收敛速度和准确率;
- 对每个proposal使用正交转换,这样box微调阶段可以更好地学习局部空间特征;
- 不足: 大规模点云上使用PointNet++比较慢。
摘要
PointRCNN是一个用于原始点云的3D目标检测模型,整个框架由两个阶段组成:stage-1为自底向上的3D候选框生成阶段,stage-2在规范坐标下微调proposal获得最终的检测结果。不同于之前的通过RGB图像生成候选框或者将点云投射到BEV图或体素上,PointRCNN的stage-1通过将整个场景的点云分割成前景点和背景点,以自下而上地方式从点云中生成少量高质量的3D候选框。Stage-2将每个候选框的池化点转换到正交坐标系,更好地学习局部空间特征,并与stage-1学习的每个点的全局语义特征相结合,实现Box优化和置信度预测。在KITTI数据集的3D检测基准实验中表明,PointRCNN仅使用点云作为输入,结果SOTA。
论文链接:https://arxiv.org/abs/1812.04244
代码链接:https://github.com/sshaoshuai/PointRCNN
1. 介绍
由于3D目标的不规则数据格式和6自由度(DoF)搜索空间大,利用点云检测3D目标仍然面临巨大挑战。之前的方法或是将点云投影到BEV视图、正面视图,或是投射到规则的3D voxel中,而PointRCNN直接从原始点云自下而上地生成3D候选框。
不同于2D图像,用于3D目标检测的训练数据直接为3D目标分割提供了语义掩码。基于此观测结果,PointRCNN在stage-1自下而上地生成3D候选框,利用3D bounding box 生成 ground-truth 分割掩模。Stage-1对前景点进行分割,并从分割点同时生成少量的候选框。该策略避免了以往方法在整个3D空间中使用大量的3D锚盒,节省了计算量。
Stage-2进行规范3D box改进,生成3D候选框后,采用点云区域池化操作将stage-1中学习到的点表示进行池化。与现有的直接估计全局盒坐标的3D方法不同,合并后的3D点被转x换为规范坐标,并与合并后的点特征以及stage-1的分割掩码相结合,学习相对坐标细化。提出了基于全箱的3D box回归损耗来生成和细化候选框。
贡献:
- 提出了一种新颖的自底向上的基于点云3D候选框生成算法,该算法将点云分割为前景对象和背景,生成少量高质量的3D候选框。从分割中学习到的点表示不仅善于生成候选框,而且对后续的box优化也有帮助。
- 提出的规范3D边界框利用了stage-1生成的高召回盒提案,并在带有高鲁棒性的基于区域的损失的规范坐标中学习优化框坐标。
- PointRCNN仅使用点云作为输入。
2. PointRCNN算法框架
2.1 Bottom-up 3D proposal generation via point cloud segmentation
2D目标检测算法中,one-stage方法通常更快,直接估计目标的边界框而没有微调;two-stage方法在第二阶段微调proposals和confidence。然而,由于3D搜索空间非常大和点云的不规则格式,直接将two-stage方法从2D拓展到3D不太合适。
AVOD在3D空间放置80-100k个anchor boxes,并在多个视图中对每个anchor池化特征生成proposals。
FPointNet从2D图像中生成2D proposals,并根据从2D区域裁剪出来的3D点估计3D boxes,但这样可能会漏掉只能从3D空间清晰观察到的物体。
作者提出了基于全场景点云分割的3D proposals生成算法。在3D场景中,物体是自然分开的,相互没有重叠。所有3D物体的分割掩码都可以通过其3D边界框注释直接获得,即将3D框内的3D点视为前景点。该算法逐点学习特征分割原始点云,并从分割好的前景点中生成3D proposals,这样就避免了在3D空间中使用大量预定义的3D boxes,极大地限制了3D proposals生成的搜索空间,提高召回率。
Learning point cloud representations
使用多尺度分组的PointNet++作为骨干网络,也可以选择VoxelNet。
Foreground point segmentation
同时进行前景分割和3D proposals生成,考虑到主干点云网络编码的逐点特征,添加了一个用于估计前景掩码的分割头和一个用于生成3D proposals的box回归头。对于点云分割,ground-truth分割掩模由3D ground-truth box提供。对于大型户外场景,前景点的数量通常比背景点的数量要小得多。因此,作者使用焦点损失来处理类不平衡问题。焦点损失减少了简单示例的损失贡献,并加强了对纠正错误分类示例的重视。
训练点云分割时,默认设置α=0.25,γ=2\alpha=0.25, \gamma=2α=0.25,γ=2。
Bin-based 3D bounding box generation
之前已经分割出前景点了,box回归头直接从前景点回归3D proposals位置。尽管没有从背景点回归box,但由于点云网络的感受野,这些背景点也为生成box提供了支持信息。
3D边界框在LiDAR坐标系中表示为(x,y,z,h,w,l,θ)(x,y,z,h,w,l,\theta)(x,y,z,h,w,l,θ),其中(x,y,z)为物体中心位置,(h,w,l)为物体大小,θ\thetaθ为物体从鸟瞰角度的方向,也就是偏航角。针对proposals中心点的定位,作者提出了bin-based方法。
对于每一个分割出的前景点,都对其X-Z坐标系构建一个网格,单方向搜索范围为S,每一格等长为δ\deltaδ,这样就可以初步预测中心点在哪一个bin里面,再对其进行精确地残差回归。Y轴由于比较扁平,因此可以直接使用smooth L1 loss回归。
(x(p),y(p),z(p))(x^{(p)},y^{(p)},z^{(p)})(x(p),y(p),z(p))是感兴趣的前景点的坐标;
(xp,yp,zp)(x^p,y^p,z^p)(xp,yp,zp)对应物体的中心坐标;
binx(p),binz(p)bin_x^{(p)},bin_z^{(p)}binx(p),binz(p)是X、Z轴上的ground-truth bin;
resx(p),resz(p)res_x^{(p)},res_z^{(p)}resx(p),resz(p)是在被分配的bin中做进一步定位微调的ground-truth残差;
C是归一化的bin长度。
训练及损失函数
在实验过程中,对于基于bin的预测参数 x、z、θ\thetaθ,首先选择置信度最高的bin中心点,再使用smooth L1 loss回归长宽高和y值。在训练时,采用0.85 IoU的NMS去除BEV图上的proposals,只保留前300进入stage-2的模型(测试的时候只保留前100)。
不同的训练损失项下的整个3D边界框的回归损失LregL_{reg}Lreg可表示为:
NposN_{pos}Npos是前景点的数量;
binu^(p),resu^(p)\widehat{bin_u}^{(p)},\widehat{res_u}^{(p)}binu(p),resu(p)是前景点p的被预测的bin分配和残差;
binu(p),resu(p)bin_u^{(p)},res_u^{(p)}binu(p),resu(p)是上面已经计算过的ground-truth对象;
FclsF_{cls}Fcls是分类的交叉熵损失;
FregF_{reg}Freg是smooth L1 loss。
2.2 Point cloud region pooling
扩大3D proposals
对于每个3D proposals, 放大一定的大小得到一个新的3D框,获取更多的context信息。
bi=(xi,yi,zi,hi,wi,li,θi)b_i=(x_i,y_i,z_i,h_i,w_i,l_i,\theta_i)bi=(xi,yi,zi,hi,wi,li,θi)
to bie=(xi,yi,zi,hi+η,wi+η,li+η,θi)b^e_i=(x_i,y_i,z_i,h_i+\eta,w_i+\eta,l_i+\eta,\theta_i)bie=(xi,yi,zi,hi+η,wi+η,li+η,θi)
η\etaη是一个用来放大box的大小的固定值。
判断点是否在扩大的边界框内
对于每个点p,若在扩大框内,则该点及其特征会被保留用来微调bib_ibi。
内部点p的特征包括:3D坐标(x(p),y(p),z(p))∈R3(x^{(p)},y^{(p)},z^{(p)}) \in \R^3(x(p),y(p),z(p))∈R3、激光反射强度r(p)∈R3r^{(p)}\in\R^3r(p)∈R3,来自stage-1的预测分割掩码m(p)∈{0,1}m^{(p)}\in\{0,1\}m(p)∈{0,1}和点特征表示f(p)∈Rcf^{(p)}\in\R^cf(p)∈Rc。
通过分割掩码m(p)m^{(p)}m(p)来区分扩大框中的是前景点还是背景点,点特征f(p)f^{(p)}f(p)用于分割和生成proposals,然后消除没有内部点的proposals。
2.3 Canonical 3D bounding box refinement
如图2所示,每个proposal的池化点及其特征都被喂入stage-2中,用来微调3D框的位置及其前景目标置信度。
Canonical transformation(正交变换)
利用正交变换转换到每个proposal的local坐标系,一个3D proposal的正交坐标系表示:
- 坐标系的中心点是proposal的center;
- X′,Z′X^{'},Z^{'}X′,Z′轴平行于地平面,X′X^{'}X′轴指向proposals的heading方向,Z′Z^{'}Z′轴垂直于X′X^{'}X′轴;
- Y′Y^{'}Y′轴与LiDAR坐标系保持一致;
proposal内的点p都从原来的坐标转换为local坐标系p~\tilde{p}p~,这样box优化阶段可以更好地学习每个proposal的局部空间特征,学习的方法同stage-1一样,也是利用PointNet++的结构结合bin-based的方式,把回归问题转换为分类问题。
Feature learning for box proposal refinement
微调子网络的组成
微调子网络结合了已转换的局部空间点特征p~\tilde{p}p~及其来自stage-1的全局语义特征f(p)f^{(p)}f(p)。
正则变换的缺陷和解决方法
正则变换能够实现鲁棒的局部空间特征学习,但会丢失每个对象的深度信息。例如,由于LiDAR传感器扫描的时候,远处的物体通常比附近的物体拥有更少的点。为了补偿深度信息的丢失,将到传感器的距离d(p)=(x(p))2+(y(p))2+(z(p))2d^{(p)}=\sqrt{(x^{(p)})^2+(y^{(p)})^2+(z^{(p)})^2}d(p)=(x(p))2+(y(p))2+(z(p))2纳入点p的特征中。
微调方法
对于每个proposal,首先将其关联点的局部空间特征p~\tilde{p}p~和额外特征[r(p),m(p),d(p)][r^{(p)}, m^{(p)},d^{(p)}][r(p),m(p),d(p)]concate后经过几个全连接层,将它们的局部特征编码为与stage-1得到的全局特征f(p)f^{(p)}f(p)相同的维数。然后将局部特征和全局特征concate起来,用PointNet++的SA module提取特征,得到最后每个点的特征向量,进行置信分类和box微调。
Losses for box proposal refinement
采用类似stage-1的bin-based方法来优化proposal。如果gt box和proposal的IoU>0.55,则将该gt box分配给3D box proposal来学习box微调。
3D proposals和相应的3D gt box都被转换成正交坐标系,因此,
3D proposal: bi=(xi,yi,zi,hi,wi,li,θi)b_i=(x_i,y_i,z_i,h_i,w_i,l_i,\theta_i)bi=(xi,yi,zi,hi,wi,li,θi)
to b~i=(0,0,0,hi,wi,li,0)\tilde{b}_i=(0,0,0,h_i,w_i,l_i,0)b~i=(0,0,0,hi,wi,li,0);
3D ground-truth box: bigt=(xigt,yigt,zigt,higt,wigt,ligt,θigt)b_i^{gt}=(x_i^{gt},y_i^{gt},z_i^{gt},h_i^{gt},w_i^{gt},l_i^{gt},\theta_i^{gt})bigt=(xigt,yigt,zigt,higt,wigt,ligt,θigt)
to b~igt=(xigt−xi,yigt−yi,zigt−zi,higt,wigt,ligt,θigt−θi)\tilde{b}_i^{gt}=(x_i^{gt} - x_i,y_i^{gt}- y_i,z_i^{gt}- z_i,h_i^{gt},w_i^{gt},l_i^{gt},\theta_i^{gt}-\theta_i)b~igt=(xigt−xi,yigt−yi,zigt−zi,higt,wigt,ligt,θigt−θi)。
Stage-2的loss整体为:
BBB是来自stage-1的3D proposals集合;
BposB_{pos}Bpos存放了positive的回归proposals;
probiprob_iprobi是估算的bi~\tilde{b_i}bi~的置信度;
labelilabel_ilabeli是对应的label;
L~bin(i),L~res(i)\tilde{L}_{bin}^{(i)},\tilde{L}_{res}^{(i)}L~bin(i),L~res(i)和公式3相似,但是用的是上面提到的通过b~igt,bi~\tilde{b}_i^{gt},\tilde{b_i}b~igt,bi~计算的新结果。
最后,通过BEV视图上NMS IoU>0.01去除重叠的proposal。
3. 实验细节
网络结构
Stage-1的输入是16384个点,采用PointNet++,经过4次SA层(多尺度分组)提取特征,采样个数为[4096, 1024, 256, 64],然后经过4次FP层获得逐点特征向量进行分割和proposal生成;
Stage-2的输入是每个proposal的合并区域随机抽取的512个点,采用3次SA(单尺度分组),采样个数为[128, 32, 1],生成单个特征向量,用于目标置信度分类和proposal位置优化。
Stage-1(car)
- 选择ROI(Region of Interest)的时候在原前景分割的基础上向外扩0.2m;
- bin-based的中心点预测时,单方向搜索范围S=3m,箱子大小δ\deltaδ=0.5m;
- 偏航角预测n=12;
- epoch=200,batch size=16,learning rate=0.002。
Stage-2(car)
- Box置信度的输出:IoU>0.6为正例,IoU<0.45为负例;
- 角回归的输出:IoU>0.55;
- bin-based参数:S=1.5m,δ\deltaδ=0.5m,旋转角为10°;
- epoch=50,batch size=256,learning rate=0.002
数据增强
随机翻转,[0.95,1.05]放缩比例因子,绕Y轴旋转[-10°,10°]。
4. 实验结果
5. 总结
PointRCNN是一个two-stage的3D detection模型。模型分为两个阶段,Stage-1先使用PointNet++作为主干网络,分割出前景点,生成少量粗粒度的3D proposal;Stage-2进一步优化proposal。将这些bounding box通过正交变换转换到自己的局部坐标系下,再使用PointNet++学习局部特征,完成优化。
【3D目标检测】PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud相关推荐
- 【3D目标检测】3D Object Detection for Autonomous Driving: A Survey
目录 概述 细节 背景 常用数据集及其评价指标 基于RGB图像的算法 基于点云的算法 基于RGB图像与点云模态融合的算法 概述 这是一篇21年的综述,介绍了3D目标检测背景.传感器以及基于传感器的算法 ...
- 【论文阅读】【综述】3D Object Detection 3D目标检测综述
目录 写在开头 3D Object Detection 相关博客: Sliding window Vote3Deep: Fast Object Detection in 3D Point Clouds ...
- 3D Object Detection 3D目标检测综述
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/wqwqqwqw1231/articl ...
- 点云 3D 目标检测 - CenterPoint:Center-based 3D Object Detection and Tracking(CVPR 2021)
点云 3D 目标检测 - CenterPoint: Center-based 3D Object Detection and Tracking - 基于中心的3D目标检测与跟踪(CVPR 2021) ...
- 3D目标检测论文阅读摘要
3D目标检测论文阅读摘要 2D Object Detection 的研究已经非常成熟了,代表作品有RPN系列的FasterRCNN,One Shot系列的YOLOv1-YOLOv3,这里推荐一个2D ...
- 3D目标检测深度学习方法数据预处理综述
作者 | 蒋天元 来源 | 3D视觉工坊(ID: QYong_2014) 这一篇的内容主要要讲一点在深度学习的3D目标检测网络中,我们都采用了哪些数据预处理的方法,主要讲两个方面的知识,第一个是rep ...
- CVPR2020 | PV-RCNN: 3D目标检测 Waymo挑战赛+KITTI榜 单模态第一算法
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Shaoshuai Shi@知乎 来源丨https://zhuanlan.zhihu.com/p ...
- 动手学无人驾驶(4):基于激光雷达点云数据3D目标检测
上一篇文章<动手学无人驾驶(3):基于激光雷达3D多目标追踪>介绍了3D多目标追踪,多目标追踪里使用的传感器数据为激光雷达Lidar检测到的数据,本文就介绍如何基于激光雷达点云数据进行3D ...
- 基于激光雷达点云的3D目标检测算法论文总结
作者丨eyesighting@知乎 来源丨https://zhuanlan.zhihu.com/p/508859024 编辑丨3D视觉工坊 前言 过去很多年激光雷达的车规标准和高昂价格是阻碍其量产落 ...
- 点云 3D 目标检测 - RangeDet(ICCV 2021)
点云 3D 目标检测 - RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection - 基于LiDAR的3D目标检测 ...
最新文章
- gem是什么证书_什么是GIA钻石?
- 《python3网络爬虫开发实战》--基本库的使用
- linux dd iflag oflag,centos – dd oflag =直接5倍速
- lintcode:合并排序数组
- maven deploy到nexus报错:Return code is: 401, ReasonPhrase:Unauthorized
- Eclipse没有Web插件和JavaEE插件咋整
- 为什么数据库用B+树(3条法则需记牢)
- python百度文库下载器_真正百度文库免费下载,比冰点文库下载器还更牛x!
- 二叉树前中后序遍历及其本质
- opendir php 中文,php的opendir是什么意思?
- 服务器网站常用端口号,web服务器常用端口号
- Flutter文本或图片生成PDF文件
- photoshop制作ico图标
- cocos2d音效设置
- ubuntu:beyond compare 4 This license key has been revoked 有效解决方案
- 微信小程序正则判断手机号?
- Godaddy服务器 部署免费SSL证书
- Tuscany SCA软件架构设计理念分析(二)
- 网络知识总结二:物理层和链路层协议详解
- CAD制图初学入门教程之立剖网格