如有错误,恳请指出。


文章目录

  • 1. 背景
    • 2. 网络结构
    • 2.1 Proposal Generation
    • 2.2 Proposal Refinement
  • 3. 实验部分
    • 3.1 kitti上的测评
    • 3.2 消融实验

paper:《PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud》
文章比较复杂,所以这里会记录得比较仔细

1. 背景

在PointRCNN诞生之前,对于点云的物体检测基本上是利用鸟瞰图(多视图的投影)或者是量化成Voxel再进行3D卷积的方法实现,这样量化的操作其实相比直接利用点云输入是有部分信息的丢失,而且3D卷积的计算量也较大。基于这个出发点,PointRCNN是第一个比较work完全以点云数据为输入的3d检测算法。

以点云为输入就必然需要面对点云无序性等问题,但是也有其中的优势。相比于2d目标检测的ground truth是有可能重叠的,在一个3维空间中的object之间是彼此独立不可能重叠,也就是说对于点云数据的ground turth来说,其一方面提供了3d边界框的属性,同时还提供了语义分割的属性(分割掩码)。几个特征概括PointRCNN的属性:point-based、anchor-free,two-stage。接下来就介绍PointRCNN的完整结构。


2. 网络结构

PointRCNN是一个two-stage的检测算法,简单来说,第一个阶段是候选框的生成(Bottom-up 3D Proposal Generation);第二个阶段是对生成的候选框进行修正(Canonical 3D Box Refinement),以下将围绕这两个阶段进行总结。网络结构图如下:

2.1 Proposal Generation

PointRCNN直接以点云为输入进行特征提取。PointRCNN采用的PointNet++作为Encoder-and-Decoder的结构进行特征提取,具体来说使用了4层的set abstraction layer模块,同时使用4层的feature propagation进行融合(也就是点云的上采样操作),实现对每个点进行特征的编码处理(Point-wise feature vector)。

由于获得了每个点的编码特征,利用3d候选框的标注,可以进行一个前景点(foreground points)的分割学习(相当于结合了一个语义分割的任务来获取当前的前景点)。一般来说,背景点(background points)的数量一般会比前景点的数量多得多,在进行训练时可以使用focal loss进行类别平衡。同时,利用这些前景点还可以进行候选框(proposals)的生成。虽然没有利用背景点进行回归,但是对点特征进行整体编码解码的过程中,由于网络接受域(receptive field)的作用,这些背景点同样对前景点生成候选框提供了作用。

如何利用前景点生成的候选框进行有效地回归,PointRCNN中提出了Bin-based的3d候选框生成模块。在点云数据中,3d检测框可以被描述为:(x,y,z,h,w,l,θ)。其中(x,y,z)是框的中心点位置,(h,w,l)是框尺寸也就是长宽高,而θ是目标俯视图下(也可以说是鸟瞰图)的转向角,用于确定了目标的方向。通常来说预估ground truth最简单的方法就是直接进行smooth L1损失进行预测,但是这样回归比较困难不稳定也不够精确。这里PointRCNN的做法是对每个前景点的周围区域构建一个长度为S的搜索范围,沿着X和Z轴构建一个个均匀长度为 δ的bin,将整个回归问题转化为一个分类+剩余回归问题。示意图如下:

这种方法在一定程度上利用了先验知识,是建立在对象的中心点是在前景点附近不远处的假设上。具体的做法就是首选预测出中心点在X与Z轴上的哪个bin,在此基础上再回归剩余距离。所以整个中心点的定位过程包含了两个部分:第一个部分是沿X和Z轴两个方向上的区间分类问题,以减少回归距离,缩小搜索区间,这部分可以使用cross-entropy loss处理;第二个部分就是对设定区间bin中进行剩余距离的回归(residual regression),这部分使用smooth L1 loss处理。整个回归过程就被转化为大概区间的分类问题与确定区间的剩余距离回归问题。相比之下,分类问题是容易很多的。

在第一阶段中,处理x和z两个参数使用分区分类+残差回归的方法处理外,还有方向θ参数。对于方向(-π~π)的方向划分为n个分区,同时确定所在分区后再进行残差回归获得最后的精确值。而对于边界框的尺寸(h,w,l)选择直接回归,Object的Y坐标通常浮动范围也很小,也选择进行直接回归。总结是对于(x,z,θ)参数使用分区分类+残差回归的方法进行构造损失,而对于(y,h,w,l)参数使用直接回归的方法进行构造损失,总的损失既是以上两个部分是叠加(这里的损失只是对前景点进行处理的,因为只有前景点生成候选框),总损失再除以前景点的数量进行归一化。

同时这里上面的bin分区图中解释一下为什么是X与Z轴(而不是xy轴),这是与kitti数据集的坐标系标定有关。这里使用的是kitti数据集的camera坐标系:x = right, y = down, z = forward。所以在俯视图中就是x和z轴,y轴的方向是垂直向里的。此外,雷达Velodyne和GPS的坐标系均是:x = right, y = down, z = forward

重新回到模型结构中,对于每个前景点均会利用bin-based损失回归ground truth生成候选框。之后常见的做法就是对候选框进行第一步的非极大值抑制处理(NMS)筛选,这里PointRCNN使用基于鸟瞰图的oriented IOU>0.85获取前300个高质量候选框,进入第二阶段进行修正。

不过作者视频的原话是更具每个前景点的置信度分数来确定候选框的,就是选取置信度最高的前k个点所生成的边界框作为候选框,这种直接以前景点置信度作为评判标准是比较粗糙的,而已IOU为筛选标准可能会准确一些。

2.2 Proposal Refinement

筛选后的前景点随后来到第二阶段进行修正。对于每个筛选后前景点所生成的候选框,这里会将其预测的框尺寸小范围的扩大,但中心坐标(xyz)和转向角(θ)保持不变。这样做带来的结果是候选框可能会包含部分的背景点,将这些格外的上下文信息进行后续的编码融合处理(这里还有一个inside/outside test来判断每个点是否属于前景点)。而扩大候选框的另一个意义我觉得可能是在候选框外的前景点云重新包裹回来进行修正,提高边界框的iou准确率。现在,每个扩大后的候选框内的点都会进行第二阶段的后续处理。

规范变化(Canonical transformation)是PointRCNN结构中极其重要的一个步骤。对于每个候选框内的点都需要进行规范变化,一般是通过点云旋转和平移来实现。具体做法是,每个候选框以自身中心为原点建立坐标系,这里回想起来PointNet++中分组后进行特征提取时,同样需要对点坐标进行与质心坐标的相减,构建成质心的相对坐标,提取局部特征。在这里也是类似,作为归一化的一种方式。此外,以方向朝向右边作为统一进行旋转实现规则变化,如下图所示。使用规则坐标系可以让每个候选框在后续操作中学习到更好的局部特征。

在当前的每个候选框中,拥有来自阶段一的Point-wise特征向量(候选框内的每个点具有,包含前景点和背景点),这种Point-wise vector作为了候选框的全局语义信息(global feature)。此外,对于刚刚规范坐标后的位置特征p’,还有点的反射强度特征r,点的深度距离特征d(在规范坐标系前利用距离公式sqrt(x2+y2+z^2)获取),以及语言分割掩码特征m(区分当前候选框内的是前景点还是背景点),以上4种特征进行点方面上的特征拼接经过MLP编码维度信息与全局语义信息f特征相同,作为候选框的局部语义信息(local feature)。现在讲全局语义信息和局部语义信息再拼接在一起,输入到一个三层的set abstraction layers(SSG,没有多尺度)的PointNet结构中进行最后的编码处理。最后的编码向量最为第二阶段当前候选框的修正预测。

候选框与ground truth的3D iou>0.55时才会被分配ground truth,也就是说与ground truth的3D Iou>0.55的候选框才会被进行修正,这些候选框作为二阶段的positive。在修正构造损失时,(x,z,θ)参数同样采用bin-based损失,也就是分区分类+残差回归来回归,搜索范围空间S会适当的减少,而且可以适当的缩小角度的搜索范围,由(-ππ)缩小至(-π/2π/2);而(h,w,l,y)同样是进行直接的回归预测。总的损失包括对每个候选框的置信度损失以及正样本positve的基于bin-based分区的回归损失。筛选出来的候选框同样尽管NMS处理以避免重复预测,获得最后的预测框。

整个算法流程到处结束。这里补充一些模型细节,对于每个场景点云都会采样固定大小16384个点作为刚开始的输入,如果少于16384个点则需要进行随机的重复采样。而对于二阶段的候选框来说,会对前景点的预测边界进行扩大导致会包含一些上下文信息(背景点),但这里的细节操作是对这个扩大的候选框内随机采样512个点作为后续的输入。为什么需要采样,显而易见是因为网络结构必须是提前设计好的,参数不能动态增大减小地调整。

此外,在训练过程中PointRCNN还使用到了点云多种数据增强方式。比如随机翻转,随机缩放(0.95~1.05倍缩放),以及绕Y轴进行随机旋转(整体进行旋转,所以相对坐标和方向是不变的,但是绝对坐标会发生变化,这是因为坐标系的变化)。以及使用了copypaste的策略,就是将其他场景的ground truth在不重合的情况下放置在当前的场景中,实现ground truth的扩充。


3. 实验部分

3.1 kitti上的测评

PointRCNN相比之前的多视角融合以及voxel-based的方法都有较大的提升,同时拥有较高的召回率。但是对于行人的预测没有多视角融合的方法高,这可能由于行人的尺寸较小而图像相比点云可以捕获较多的细节。

3.2 消融实验

在讲述网络结构时,我提到了一点是在PointRCNN中坐标系的规范是极其重要的,没有这个操作会带来雪崩式的断崖影响(13.68%),意味着模型基本训练不起来。此外,候选框适当扩大来补充上下文信息,增加一些周围的背景点在实验中表面是有助以提升性能的,但需要是否,否则可能太大扩充可能会导致当前候选框会包括其他Object的噪声前景点。

PointRCNN还尝试使用多种损失来进行对比实验:esidual-based loss (RB-loss) 、residual-cos-based loss (RCB-loss)、 corner loss (CN-loss) 、 partial-bin-based loss (PBB-loss) 、and our full bin-based loss (BB-loss)。这些损失分别来自于VoxelNet(RB-loss)、MV3D(CN-loss)、F-PointNet(PBB-loss)、PointRCNN (BB-loss)。


论文阅读笔记 | 三维目标检测——PointRCNN相关推荐

  1. 论文阅读笔记 | 三维目标检测——PartA2算法

    如有错误,恳请指出. 文章目录 0. 前言与补充知识 1. 背景 2. 相关工作 3. 网络结构 3.1 Part-aware stage Anchor-free Proposal Generatio ...

  2. 论文阅读笔记 | 三维目标检测——VoxelNet算法

    如有错误,恳请指出. 文章目录 1.背景 2. 网络结构 2.1 体素特征表示 2.2 卷积特征提取 2.3 RPN网络 3. 实验结果 paper:<VoxelNet: End-to-End ...

  3. 论文阅读笔记 | 三维目标检测——3DSSD

    如有错误,恳请指出. 文章目录 1. 背景 2. 网络结构 2.1 特征提取 2.2 边框生成 3. 实验结果 paper:<3DSSD: Point-based 3D Single Stage ...

  4. 论文阅读笔记 | 三维目标检测——VoxelRCNN算法

    如有错误,恳请指出. 文章目录 1. 背景 2. 网络结构 Voxel Query Voxel ROI Pooling Accelerated Aggregation Loss Compute 3. ...

  5. 论文阅读笔记 | 三维目标检测——Complex-YOLO算法

    如有错误,恳请指出. 文章目录 1. 背景 2. 网路结构 3. 实验结果 paper:<Complex-YOLO: An Euler-Region-Proposal for Real-time ...

  6. 论文阅读笔记 | 三维目标检测——MV3D算法

    如有错误,恳请指出. 文章目录 1. 背景 2. 网络结构 2.1 提案投影网络 2.2 区域融合网络 3. 实验结果 paper:<Multi-View 3D Object Detection ...

  7. 『论文阅读笔记』目标检测模型中的性能评价方式-IOU、precision/recall、mAP、PR、Fps!

    目标检测模型中的性能评估标准-IOU.precision/recall.mAP.PR.Fps! 文章目录 一.交并比IOU 二.精确率(precision)和召回率(recall) 三.P-R(pre ...

  8. 【论文阅读】2d目标检测:综述

    最近在恶补2d目标检测的文章,把他们整理了一下,写一下综述,方便以后查看. 写得比较简略,主要是自己对于 一些网络的理解. - sppnet 本文引入了一种针对不同尺度图片的目标检测网络.传统网络针对 ...

  9. 论文阅读笔记 | 目标检测算法——PP-YOLOv2

    如有错误,恳请指出. 文章目录 1. Introduction 2. Revisit PP-YOLO 2.1 Pre-Processing 2.2 Baseline Model 2.3 Trainin ...

最新文章

  1. plsql误删除数据,提交事务后如何找回?
  2. 提高云计算中的软件质量
  3. lisp天正图元位置修改_块内图元的坐标定位[已解决]感谢版主
  4. 深度学习已成强弩之末?Bengio等大牛NeurlPS2019上支招
  5. 「WC2018」即时战略
  6. excel两个表格数据对比_Excel表格怎么防止看错数据?阅读模式了解一下
  7. Spring Boot配置文件有提示
  8. 仿小说蓝色小说网站导航引流网站源码 带手机版
  9. 校招 C++ 大概学习到什么程度?
  10. [USACO 09FEB]Fair Shuttle
  11. Eclipse找不到或无法加载主类
  12. 二阶系统的性能分析(开环相幅和阶跃响应)——自动控制原理基础补充(三)
  13. 算法题15 穿越沙漠问题,飞机加油问题
  14. 2022年调味品行业研究报告
  15. 麦弗逊悬架硬点布置 根据设计输入,布置麦弗逊悬架硬点坐标,匹配转向拉杆断开点,匹配车轮外倾角和前束值,从而获得硬点初版坐标
  16. 种草拔草.......人生就是酱紫
  17. UEBA 的当下与未来
  18. 台式机通过笔记本的WIFI上网
  19. JavaScript游戏之连连看连线算法实例
  20. 4、ESP32-S - 连接 WiFi

热门文章

  1. 论文笔记(综述):Deep Learning-based Multi-focus Image Fusion: A Survey and A Comparative Study
  2. R语言统计分析|批量单变量Cox回归分析
  3. mysql_check_MySQL中check的用法
  4. 硬币拼凑指定面额的动态规划算法
  5. isl导致编译gcc-8.1出现错误
  6. C语言程序的入口真的是main方法吗?
  7. 51单片机语音声控智能台灯可调光冷暖光人检测锂电池供电太阳能和USB充电
  8. RK3566 AndroidR usb otg host和peripheral切换软件手动切换,写/sys/devices/platform/fe8a0000.usb2-phy/otg_mode
  9. IE6双倍margin问题
  10. 名词解释 算法的有限性_数据结构复习之【数据结构和算法概念】