目标检测 | Point Cloud RoI Pooling

Point Cloud RoI Pooling 概述

Points Cloud RoI Pooling(点云RoI池化)是3d点云目标检测中一个相对重要的机制,RoI Pooling Layer是two-stage detector(二阶段检测网络)中最为核心的模块之一,使其与one-stage detector(一阶段检测网络)区别。据调研,其最早出自于Shaoshuai Shi等人的文章PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud,在文章中被称为Point cloud region pooling(点云区域池化)

Point Cloud RoI Pooling机制顾名思义,是为了处理点云而在RoI Pooling基础上进行改进得到的,与RoI Pooling的目的和原理基本一致。

Pooling

首先,我们先从深度学习中,最基础且最熟悉不过的Pooling说起。Pooling最早是使用在LeNet,其用于减少特征图的尺寸并提取最显著的特征,从而降低模型复杂性并减少计算量,有助于防止过拟合,相对于是一个对特征subsampling的过程。

一般常用的有Max Pooling和Average Pooling,在某些做global descriptor的网络中还会使用Global Pooling

  • Max Pooling(最大池化):对每个池化窗口内的特征取最大值作为该区域的代表特征。
  • Average Pooling(平均池化):对每个池化窗口内的特征取平均值作为该区域的代表特征。
  • Global Pooling(全局池化):将整个特征图进行池化,通常是全局平均池化或全局最大池化,将整个特征图降为一个单一的值或向量。

就以Max Pooling为例,其实现是通过滑动固定大小的\(N\times N\)窗口(图中是\(2\times 2\))在特征图上移动,对每个窗口内的特征进行汇总或提取,产生一个新的特征图。这个过程可以减小特征图的尺寸,保留最重要的特征信息,并减少参数数量和计算量。

此外如果是Average Pooling,还可以看作是卷积核为\(N\times N\)的全\(1\)矩阵,\(\text{stride}=N\)的卷积操作。

RoI Pooling

RoI Pooling最早出现Ross Girshick等人的文章Fast R-CNN。这篇文章提出了一种称为Fast R-CNN的目标检测方法,其中RoI Pooling被用于从卷积特征图中提取固定大小的特征表示,以用于后续的分类和边界框回归任务。

RoI Pooling机制的引入,使得网络可以将不同尺寸的RoI映射到固定大小的特征图上,这样就可以通过一个固定维度的全连接层处理所有的RoI了。

我们首先回顾一下two-stage detector的结构,如下图所示,其一共可以被分为三个部分:

  • Backbone Network (骨干网络)

    Backbone Network负责从原始输入图像中提取特征。通常是一系列的卷积层、池化层和其他操作的堆叠,用于捕获图像的低级到高级特征。

    其输出一般为比原始图像要小且通道数更高的\(B\times C^\prime\times W^\prime\times H^\prime\)矩阵

  • Region Proposal Network(RPN,区域建议网络)

    RPN 是用于提出RoI(Region of Interest,感兴趣区域)的神经网络组件。它在骨干网络的基础上,通过滑动窗口或锚框技术,生成可能包含物体的RoI。

    其输出一般为\(B\times N \times 4\)的矩阵,每一个RoI由\((x,y,w,h)\)的四维向量所表示,\((x,y)\)表示该RoI的中心点坐标,\((w,h)\)表示该RoI的长与宽,共有\(N\)个。

  • Classification Head(分类头)与Regression Head(回归头)

    Classification Head用于对候选框内的目标物体进行分类,而Regression Head用于对候选框进行细化。Classification Head和Regression Head一般都是由固定大小的全连接层组成,通过RoI提取特征之后输入其中得到最终的目标检测结果。

如果我们关注RPN与Classification Head之间的连接,我们就会发现一个问题:得到的每一张RoI区域形状不一(长与宽不是固定的),那么其中包含的feature也将不是固定维度的,无法输入固定大小的Classification Head进行处理。

为此,我们需要通过一种机制将所有不同的\(W^\prime\times H^\prime\)的特征图处理为固定长度为\(M\)的特征,这就是RoI Pooling机制在发挥的作用了。

RoI Pooling任意的大小为\(C\times W^\prime \times H^\prime\)的RoI特征映射为固定大小为\(M=C\times W^{\prime\prime} \times H^{\prime\prime}\)的RoI特征,其中RoI Pooling可以被分为三步。

  • 对齐RoI区域
  • 划分RoI区域
  • 池化RoI区域

下图简单地描述了RoI Max-pooling中的三个步骤

此外,还有一种称为RoI Align的机制是在RoI Pooling的基础上通过爽线性插值进行池化,因为与本随笔主题关系不大就不在此赘述了。

Point Cloud RoI Pooling

Point Cloud RoI Pooling顾名思义,是点云3d目标检测版本的RoI Pooling,据调研,最早见于Shaoshuai Shi等人的文章PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud,在文章中被称为Point cloud region pooling(点云区域池化)

点云的RoI Pooling相比于RGB图像的RoI Pooling发生了如下的改变:

  • RoI和目标框由2d变为3d,这就意味着其参数由四维的\((x,y,w,h)\)上升为七维的\((x,y,z,l,w,h,\theta)\),其中\(\theta\)是目标框的yaw(偏航角)。虽然是3d目标检测,但是一般来说很少会有超过两个自由度的任务,所以使用一个七个参数就足以表示了。
  • RGB图像是有序的点阵图,可以直接通过坐标查询,而点云的结构化程度低,无法直接通过坐标查询。其中点云是通过大小为\(B\times N\times(3+C)\)的矩阵进行表示,\(N\)是点云数量,\(3+C\)表示每个点云的特征(\(x,y,z\)坐标以及提取特征)。

同样的,给定采样数量\(S^\prime\),Point Cloud RoI Pooling也可以被划分为以下几个步骤:

  • pts assign,计算出每个点所属的RoI区域,输出大小为\(B\times M \times N\)的布尔矩阵pts assign,如果第\(B\)个batch中第\(M\)个点处于第\(N\)个RoI,那么\([B][M][N]=\textbf{true}\),反之\([B][M][N]=\textbf{false}\)。
  • pts pool,通过第一步得到的布尔矩阵pts assign,计算出每个RoI区域中所拥有的点,并通过随机采样的方式将点的数量由\(S\)对齐为固定大小的\(S^\prime\),输出大小为\(B\times M \times S^\prime\)的index矩阵pts pool,其中每个元素都是点在点云中的index。
  • feature forward,,将从第二步得到的大小为\(B\times M \times S^\prime\)的index矩阵pts pool映射成大小为\(B\times M \times S^\prime \times (3+C)\)的pooled feature(池化特征)

最后我们所得到固定大小为\(B\times M \times S^\prime \times (3+C)\)的池化特征,输入到分类头中,其输入大小为\(I=S^\prime \times (3+C)\),这样就完成了Point cloud pooling的操作。

Point Cloud RoI Pooling 实现细节

(未完待续)

目标检测 | Point Cloud RoI Pooling的更多相关文章

  1. CVPR2020论文解读:3D Object Detection三维目标检测

    CVPR2020论文解读:3D Object Detection三维目标检测 PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Det ...

  2. ROI pooling

    R-CNN需要大量的候选框,对每个候选框都提取特征,速度很慢,无法做到实时检测,无法做到端到端.ROI pooling层实现training和testing的显著加速,并提高检测accuracy. R ...

  3. 目标检测(二)SSPnet--Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognotion

    作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun 以前的CNNs都要求输入图像尺寸固定,这种硬性要求也许会降低识别任意尺寸图像的准确度. ...

  4. 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)

    Spatial pyramid pooling in deep convolutional networks for visual recognition 作者: Kaiming He, Xiangy ...

  5. 目标检测中的pooling操作

    1.SPPnet池化过程 假设这个feature map的尺寸是M*N*256,将这个feature map的每一个channel以4*4,2*2和1*1来划分格子,每个格子里面做max poolin ...

  6. 目标检测中roi的有关操作

    1.roi pooling 将从rpn中得到的不同Proposal大小变为fixed_length output, 也就是将roi区域的卷积特征拆分成为H*W个网格,对每个网格进行maxpooling ...

  7. 定位、识别;目标检测,FasterRCNN

    定位: 针对分类利用softmax损失函数,针对定位利用L2损失函数(或L1.回归损失等) 人关节点检测 针对连续变量和离散变量需要采用不同种类的损失函数. 识别: 解决方案: 1.利用滑动窗口,框的 ...

  8. 目标检测方法总结(R-CNN系列)

    目标检测方法系列--R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD 目录 相关背景 从传统方法到R-CNN 从R-CNN到SPP Fast R-CNN ...

  9. 目标检测之R-CNN系列

    Object Detection,在给定的图像中,找到目标图像的位置,并标注出来. 或者是,图像中有那些目标,目标的位置在那.这个目标,是限定在数据集中包含的目标种类,比如数据集中有两种目标:狗,猫. ...

  10. 利用更快的r-cnn深度学习进行目标检测

    此示例演示如何使用名为“更快r-cnn(具有卷积神经网络的区域)”的深度学习技术来训练对象探测器. 概述 此示例演示如何训练用于检测车辆的更快r-cnn对象探测器.更快的r-nnn [1]是r-cnn ...

随机推荐

  1. 前端三件套系例之BootStrap—— BootStrap组件、BootStrap插件

    文章目录 1 BootStrap组件 1 Glyphicons 字体图标 2 下拉菜单 2.1 基本使用 2.2 对齐 2.3 标题 2.4 分割线 2.5 禁用的菜单项 3 按钮组 3.1 基本使用 ...

  2. Git——Git 常用命令

    文章目录 仓库 配置 增加/删除文件 代码提交 分支 标签 查看信息 远程同步 撤销 其他 仓库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 ...

  3. A piece of cake

    1. A piece of cake(易事情)2. Break a leg(祝好运)3. Don't count your chickens before they hatch(不要过早乐观)4. D ...

  4. OpenResty入门之压测篇:压测工具界的 “悍马” wrk 审核中

    在上篇文章 每个后端都应该了解的 OpenResty 入门以及网关安全实战 中,我向大家介绍了 OpenResty 的入门使用是 WAF 防御实战,这篇文章将给大家继续介绍 OpenResty 入门之 ...

  5. 如何为你的WSL2更换最新的6.5.7kernel

    1.如果你像我一样,喜欢折腾你的 WSL2 ,这里是安装内核 6.X 的方法. 2.这是一个坏主意,可能会导致系统不稳定.数据损坏和其他问题.也可能会没事的,但不要怪我. Arch linux的wsl ...

  6. JS个人总结(1)

    1. html页面引入js文件优先使用引入外部js文件. 2. 如果在html页面里使用<script></script>,则把js内容放在html内容下面,也就是</b ...

  7. splay + 垃圾回收 知识点与例题的简要讲解

    splay 简要讲解 前置芝士:普通二叉树 splay tree是一个越处理越灵活的数据结构,通过splay(伸展)操作,使整棵树的单次查询时间复杂度接近于O(log n),整棵树的高度也接近于log ...

  8. Android-Java-反序列化JSON

    import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; String jsonStr= WebAPIOperato ...

  9. spring---反射(java.lang.reflect)

    反射简介 反射是Java的高级特性之一,但是在实际的开发中,使用Java反射的案例却非常的少,但是反射确实在底层框架中被频繁的使用. 比如:JDBC中的加载数据库驱动程序,Spring框架中加载bea ...

  10. arm架构docker安装nacos

    前言 搞了个hk1box,装了armbian系统,想用这个当服务器调试微服务,需要安装nacos.尝试安装非docker版本的nacos,去github下载arm版本的并且放到linux下面,运行的时 ...