PointRCNN论文解读和代码解析

目录

一、论文动机

二、论文方法

三、网络结构

 第一阶段

第二阶段

 四、代码分析

第一阶段点云特征提取

 第一阶段分类头和回归头

 第二阶段PointRCNNHead微调

五、Reference


论文地址:https://arxiv.org/abs/1812.04244

代码地址:GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection.

一、论文动机

3D目标检测现在比较SOTA的方法有两种,一种是将点云投影到俯视图上,使用2D的检测框架。要么是变成规则的Voxel,这两种方法在量化过程中都存在信息缺失的问题。而且最近有人提出了pointnet和pointnet++这种直接从点云中学习特征的网络,所以作者想借鉴这两个,直接从3D点云中获取检测框。同时3D场景中物体都是自然分割的,相互之间没有重叠,所以3D物体的分割掩码都能通过他们的3D真实框直接获取,框内的点被认为前景点。

二、论文方法

提出了一个两阶段的Anchor-free3D目标检测框架,PointRCNN首次直接在点云数据上分割mask

第一阶段用一个自底向上的方法生成3D候选框,先分割前景点,同时在这些被分割出来的点中生成少些候选框。它的优势是避免了在整个3D空间使用大量的锚框。

第二个阶段是对生成的3D候选框进行微调。将局部框内xyz和depth深度信息,分割掩码进行MLP升维,然后和第一阶段的点特征结合再MLP分类回归。

它的优势是充分利用了第一阶段分割和推荐子网络提供的全部信息。

为了学习更有效的坐标微调,作者还提出了针对推荐生成和微调的完全基于bin的3D box回归损失,加速了网络的收敛速度和准确率。

三、网络结构

 第一阶段

我们通过逐点地学习特征来分割原始点云,并且从分割好的前景点中生成3D候选框,这种方法我们避免了设置大量的3D锚框,极大的限制了3D候选框的生成候选空间。为了学习有区别的逐点特征来描述原始点云,我们使用带有多尺度分组的PointNet++作为骨干网络,后面增加了一个估计前景掩码的分割头和一个生成3D候选框的回归头,同时进行前景分割和候选框回归。对于大尺度的外景,前景点数量远小于背景点,所以我们使用Focal Loss.

虽然只是从前景点回归3D回归框位置,没有从背景点回归,但因为点云网络的感受野,背景点也为box的生成提供了信息。为了估计一个目标的中心位置,我们将每个前景点周围的xz轴分割成一系列离散的bin,我们发现对x-z轴使用基于bin的交叉熵损失分类比直接smoothL1 LOSS回归能得出更加精确鲁棒的中心定位。而y轴直接L1 Loss就可以获得精确的y值。物体的方向估计也是基于bin的,hwl则是直接由整个训练集每个类的平均尺寸直接回归得到

 为了移除冗余的候选框,我们对鸟瞰图的定向IOU使用NMS,来生成少些高质量的候选框,训练时我们将IOU设置为0.85,NMS保留前300个给二阶段。推理时,设置IOU阈值为0.8,NMS保留前100个给二阶段。

  

第二阶段

为了学习每个候选框更加具体的局部特征,我们根据每个推荐框来池化(就是降采样)它的3D点以及对应特征。我们对候选框进行扩大,来从旁边获取有用的环境信息,对于每一个点判断在不在扩大的框里,在的话这个点和他的特征就被保留用来微调候选框。后面框内坐标统一转换为正则坐标系下的局部坐标,因为这样可以更好的学习每个proposals的局部特征。对于每个候选框内的点,他的局部空间特征,分割掩码和空间距离经过MLP与第一阶段点特征结合,喂进PointNet++网络进行置信度和box细化。

 其中x,y,z,h,w,l,角度的计算和一阶段一样,有几个也是基于bin的,不过这次bin的搜索范围更小,只是用来微调。

 四、代码分析

代码原论文里和OpenPCdet里的不是很一样,但原作者说OpenPCdet里效果更稳定,我们以OpenPCdet代码为主。

第一阶段点云特征提取

 第一阶段分类头和回归头

 第二阶段PointRCNNHead微调

(4条消息) PointRCNN论文和逐代码详解_NNNNNathan的博客-CSDN博客_pointrcnn代码
(4条消息) PointRCNN的loss计算与推理实现_NNNNNathan的博客-CSDN博客


 

五、Reference

(6条消息) Point RCNN论文翻译及图解_KirutoCode的博客-CSDN博客

(6条消息) 【代码阅读】PointRCNN网络可视化,代码详解_麒麒哈尔的博客-CSDN博客_pointrcnn源码​​​​​​

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Pointrcnn是一种用于三维目标检测深度学习算法,可以在点云数据上实现对目标的检测和定位。下面是一个关于如何复现Pointrcnn的简要步骤: 首先,需要准备点云数据集以及对应的目标标签。可以使用公开的点云数据集,如KITTI、SUN RGB-D等,并使用相应的标注工具对目标进行标注。 然后,搭建Pointrcnn的网络架构。Pointrcnn网络主要由三个模块组成:PointNet,RPN和RCNNPointNet用于提取点云的局部特征,RPN用于生成候选框,RCNN作为分类器和回归器。可以根据论文中的网络结构图来搭建这些模块,并使用TensorFlow或PyTorch等深度学习框架进行实现。 接下来,训练网络模型。将点云数据输入模型进行训练,使用交叉熵损失函数和平滑的L1损失函数对模型进行优化。此外,可以采用数据增强技术来增加训练集的多样性,如旋转、平移、缩放等。 在训练过程中,可以使用GPU加速计算以提高训练速度,同时监控网络的训练损失和精度,以便及时调整超参数。 最后,对测试集进行测试和评估。使用训练好的模型对测试集中的点云数据进行目标检测和定位,并根据预测结果和真实标签进行评估,如计算精确度、召回率和平均准确度等指标。 总结来说,复现Pointrcnn需要准备点云数据集和目标标签,搭建网络架构,训练网络模型,并对测试集进行测试和评估。这只是一个简要的概述,实际的复现过程可能还涉及一些细节和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CVplayer111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值