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

(未完待续)

相关推荐
加点油。。。。5 分钟前
【强化学习】——策略梯度方法
人工智能·机器学习·强化学习
怎么全是重名20 分钟前
Survey on semantic segmentation using deep learning techniques
图像处理·人工智能·深度学习·图像分割
俊俊谢21 分钟前
【机器学习】python使用支持向量机解决兵王问题(基于libsvm库)
python·机器学习·支持向量机·svm·libsvm
YuforiaCode26 分钟前
黑马AI大模型神经网络与深度学习课程笔记(个人记录、仅供参考)
人工智能·笔记·深度学习
Christo327 分钟前
NIPS-2022《Wasserstein K-means for clustering probability distributions》
人工智能·算法·机器学习·数据挖掘·kmeans
深度学习实战训练营36 分钟前
nnU-Net:基于unet的医学图像分割自适应框架,自动配置超参数与结构-k学长深度学习专栏
人工智能·深度学习
lybugproducer37 分钟前
深度学习专题:模型训练的张量并行(一)
人工智能·深度学习·transformer
油泼辣子多加44 分钟前
【信创】中间件对比
人工智能·深度学习·算法·中间件
拉姆哥的小屋1 小时前
基于多模态深度学习的城市公园社交媒体评论智能分析系统——从BERTopic主题建模到CLIP图文一致性的全栈实践
人工智能·python·深度学习·矩阵·媒体
V1ncent Chen1 小时前
深度学习进化的里程碑:Transformer模型
人工智能·深度学习·transformer