目标检测 | Point Cloud RoI Pooling

目录

  • [目标检测 | Point Cloud RoI Pooling](#目标检测 | Point Cloud RoI Pooling)
    • [Point Cloud RoI Pooling 概述](#Point Cloud RoI Pooling 概述)
    • Pooling
    • [RoI Pooling](#RoI Pooling)
    • [Point Cloud RoI Pooling](#Point Cloud RoI Pooling)
    • [Point Cloud RoI Pooling 实现细节](#Point Cloud RoI Pooling 实现细节)

目标检测 | 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 实现细节

(未完待续)

相关推荐
AI完全体2 分钟前
【AI知识点】偏差-方差权衡(Bias-Variance Tradeoff)
人工智能·深度学习·神经网络·机器学习·过拟合·模型复杂度·偏差-方差
卷心菜小温37 分钟前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
陈苏同学1 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
FL16238631291 小时前
[深度学习][python]yolov11+bytetrack+pyqt5实现目标追踪
深度学习·qt·yolo
羊小猪~~2 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm
我是哈哈hh2 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
龙的爹23332 小时前
论文 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust
人工智能·gpt·深度学习·语言模型·自然语言处理·prompt
工业机器视觉设计和实现2 小时前
cnn突破四(生成卷积核与固定核对比)
人工智能·深度学习·cnn
醒了就刷牙2 小时前
58 深层循环神经网络_by《李沐:动手学深度学习v2》pytorch版
pytorch·rnn·深度学习
985小水博一枚呀2 小时前
【对于Python爬虫的理解】数据挖掘、信息聚合、价格监控、新闻爬取等,附代码。
爬虫·python·深度学习·数据挖掘