论文阅读笔记 | 三维目标检测——PointRCNN

news2025/7/16 7:12:10

如有错误,恳请指出。


文章目录

  • 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)。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文详解Redis企业版软件!

一、Redis企业版软件概述 Redis企业版软件(Redis Enterprise)是企业级的数据库软件,也是一款实时数据平台,为全球超过8500家知名企业提供实时数据服务。具有线性可扩展性、高可用性、持久性、备份和恢复、地理分布、分层内存访问…

WhatsApp群发系统-SendWS拓客系统功能后台介绍(五):WhatsApp筛号群发,群发超链

WhatsApp群发系统 基于WhatsApp进行群发功能,将品牌和产品推送给全世界各地的人们或者选择筛选好的用户,进行针对性的群发,提升了品牌和产品的影响力,让更多人了解认识品牌,帮助客户低成本实现WhatsApp营销精准拓客。…

windows和linux可以共用的端口连通性是否丢包测试工具paping

通常我们在系统无论是在windows还是linux,都会使用telnet命令来测试端口的连通性,但此命令只能测试是否通,无法测试是否有丢包或者是否有中断。paping这个工具就应用而生,它可以在多系统环境下进行像ping一样测试。 一、下载&…

【vscode】远程容器内开发python

一、环境 本人的远程开发环境: docker容器miniconda 常用的IDE: pyCharm专业版vsCodeRemote Development插件Python插件 由于pyCharm专业版要么花钱要么破解,我选择了vscode插件的方式,插件都是microsoft出品。 二、使用 服务…

记一道前端高难度面试题

目录 提问:如何让下面的这行代码成立 1.错误原因 2.思路 3.解题 4.小结 提问:如何让下面的这行代码成立 var [a,b] {a:1,b:2} 直接运行会报错,报错信息如下: Uncaught TypeError: {(intermediate value)(intermediate valu…

手柄零件的工艺设计

手柄零件的工艺设计 目录 一、零件的工艺分析及生产类型的确定 1.零件的作用-------------------------------------------------------------------------- 3 2.热处理-------------------------------------------------------------------------------- 3 3.零件的生产类型-…

架构师书籍推荐

讲实话,要看书只能看看架构师思维相关的数据,开拓一下思路就行,看看别人的看法和观念。 架构师需要积累的技术不要从书上来,去官网看他的说明书,一切纯讲技术类的书籍都有滞后性。 正在用的技术要时常关注一下他官网…

数据结构-图的基本概念

目录 完全图无向图有向图路径长度回路或环⭐⭐无向图-->连通图和连通分量⭐⭐有向图-强连通图和强连通分量完全图 无向图 无向图中每两个顶点之间都存在着一条边。 称为完全图 无向完全图包含n(n-1)/2条边。 有向图 有向图每两个顶点之间都存在着方向相反的两条边。 称…

Nature 、cell 双开花-抗氧化剂与氧化应激

癌细胞经常通过癌症转移调控自身的新陈代谢,进而来有效地支持细胞增殖和存活。因此,因恶性肿瘤转移造成的死亡占癌症整体发病的 95%。2019 年 6 月 27 日,国际 TOP 杂志 Nature 在线发表了中科院上海生化与细胞研究所杨巍维课题组与中科院大连…

el-table中显示echarts的趋势折线图(燃尽图)

显示效果:右边的趋势图其实是查询当前行的30天数据量 背景:为了模仿禅道上的燃尽图,但是查看其源码,发现是用php写的,我们想用vue实现 实现步骤:1.先使用el-table画出表格来 注意:此时数据是…

ctfshow 萌新赛 给她

初识: 一开始看到这个题目以为是sql注入,尝试了各种sql注入转义次都注入不了 .git泄露:最后还是看了一下大佬的解题,发现方向就错了,“给她”——“git”,这题的入口是.git泄露。 我是纯小白,…

如何在React项目中使用TypeScript

本文主要记录我如何在React项目中优雅的使用TypeScript,来提高开发效率及项目的健壮性。 项目目录及ts文件划分 由于我在实际项目中大部分是使用umi来进行开发项目,所以使用umi生成的目录来做案例。 . ├── README.md ├── global.d.ts ├── mo…

SpringBoot SpringBoot 开发实用篇 1 热部署 1.2 自动启动热部署

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇1 热部署1.2 自动启动热部署1.2.1 问题引入1.2.2 自动启动热部署1.2.…

Nacos2.1.1集群和持久化配置以及Nginx负载均衡分发(重点)

Nacos集群和持久化配置(重点) 1、官网说明 官网文档地址:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html 对如上图片进行翻译如下 根据下图,需要配置MySQL作为持久化保存Nacos的信息 默认Nacos使用嵌入式数据库实现…

如何在 Visual Paradigm 中创建流程图丨使用教程

让我们看看如何在 Visual Paradigm 中绘制流程图。我们将在这里使用一个非常简单的流程图示例。完成本教程后,您可以扩展示例。 1.从主菜单中选择图表 > 新建。 2.在New Diagram窗口中,选择Flowchart并单击Next。 3.您可以从空图表开始,…

股价暴跌了74.5%后,乐信第三季度财报可能会低于市场预期

来源:猛兽财经 作者:猛兽财经 乐信2022年第三季度财报前瞻 此前,乐信(LX)曾在2022年11月10日宣布,公司将于2022年11月16日发布2022年第三季度财报。 猛兽财经认为,乐信2022年第三季度的实际财务业绩可能会令市场失望。…

最佳使用案例NO.1–干涉测量

为了营造今年的节日气氛,我们决定发布4份特别的新闻通讯展示我们的“2019最佳使用案例” 在VirtualLab Fusion中所实现的快速物理光学技术为著名的干涉仪的快速仿真提供了强有力的工具,从而使我们能够研究干涉图样中的相干和色散效应。 基于物理光学的Vi…

webpack5 Css 兼容性处理postcss-loader

postcss-loader | webpack 中文文档webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹&#xf…

震撼来袭,最具中国特色的微服务组件:新一代SpringCloud Alibaba

都说程序员工资高、待遇好, 2022 金九银十到了,你的小目标是 30K、40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算难。然而,提升 Java…

【嵌入式 · 机器人】在 Linux 下安装 ROS2(机器人操作系统)

安装要求 安装 ROS2 需要保证 Linux 系统的发行版是 Ubuntu,并且不同版本的 Ubuntu 只能安装对应版本的 ROS2。 系统不是 Ubuntu 怎么办? 系统是 Mac OS 或 Windows:安装一个 Ubuntu 的虚拟机,在虚拟机里安装 ROS2。(…