PyTorch入门(五)常用的池化操作


常用的池化操作

深度学习中常规的池化层的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling),同时有以下常用的池化层:金字塔池化、全局平均池化、RoI池化…

  • 金字塔池化
金字塔池化有空间金字塔池化(spatial pyramid pooling, SPP)、空洞空间金子塔池化(atrous spatial pyramid pooling, ASPP)和密集空洞空间金字塔池化(densely connected atrous spatial pyramid pooling, DenseASPP)。这里主要介绍最基本的金字塔池化操作,即空间金字塔池化
空间金子塔池化的优点:
  1. 使得CNN可以输入任意大小和任意比例的图像
  2. 从feature map中可以提取多维度特征
具体的操作过程、公式推导和pytorch版本的代码见以下博客:
https://www.cnblogs.com/marsggbo/p/8572846.html
  • 全局平局池化
全局平均池化(Global Average Pooling, GAP):以feature map为单位进行均值化,即一个feature map输出一个值。用来代替FC层。
如果要预测K个类别,在卷积特征抽取部分的最后一层卷积层,就会生成K个特征图,然后通过全局平均池化就可以得到 K个1×1的特征图,将这些1×1的特征图输入到softmax layer之后,每一个输出结果代表着这K个类别的概率(或置信度 confidence),起到取代全连接层的效果。
PyTorch入门(五)常用的池化操作
文章图片
优点:
  1. 和全连接层相比,使用全局平均池化技术,对于建立特征图和类别之间的关系,是一种更朴素的卷积结构选择。
  2. 全局平均池化层不需要参数,避免在该层产生过拟合。
  3. 全局平均池化对空间信息进行求和,对输入的空间变化的鲁棒性更强
缺点:
  1. 收敛速度变慢
卷积层+GAP层+softmax层import torch import torch.nn as nn import torch.nn.functional as F#GAP层 input = torch.randn(2,3,10,8) m = nn.AdaptiveAvgPool2d((1,1)) output = m(input) #直接接softmax层 output = output.squeeze() output = F.softmax(output,dim=1)

  • RoI池化
感兴趣区域池化(Region of interest pooling)(也称为RoI pooling)是使用卷积神经网络在目标检测任务中广泛使用的操作。例如,在单个图像中检测多个汽车和行人。其目的是对非均匀尺寸的输入执行最大池化以获得固定尺寸的特征图(例如7×7)。使用ROL池化进行目标检测的pipeline如下图所示:
PyTorch入门(五)常用的池化操作
文章图片

RoI池实际上做了什么?对于来自边界框列表的每个感兴趣区域,它采用与其对应的输入特征图的一部分并将其缩放到某个预定义的大小(例如,7×7)。缩放通过以下方式完成:
  1. 将感兴趣区域划分为相等大小的部分(其数量与输出的维度相同)
  2. 找到每个部分的最大值
  3. 将这些最大值复制到输出(max pooling)
Rol池化层的输入:
  1. 从具有多个卷积核池化的深度网络中获得的固定大小的feature maps;
  2. 一个表示所有ROI的N*5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示其余的左上角和右下角坐标
RoI池化层的具体操作:
  1. 对于输入的image,在feature map上找到RoI对应的位置,即将ROI映射到feature map对应位置
  2. 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)
  3. 对每个sections进行max pooling操作
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI的大小和卷积feature maps大小,而取决于输出规模(sections的数量)。
RoI池化的优点:
  1. 极大地提高了处理速度,减少了training和testing过程的消耗时间
  2. 可以对CNN产生的feature map进行再利用
  3. 以end-to-end的形式训练目标检测系统
RoI池化的缺点:
RoI池化操作过程中存在两次量化,均为向下取整:
  • 将候选框边框量化为整数坐标值
  • 将量化之后的候选框平均分成成k * k个部分时,将每个部分的边框长度量化为整数
【PyTorch入门(五)常用的池化操作】上述两次量化会造成感兴趣区域边界框的误差,即区域不匹配问题(mis-alignment)
为了解决这种问题,Mask R-CNN提出RoIAlign,并通过实验证在检测测任务中 ROI Align 可以提升检测模型的准确性。
在目标检测任务中,大目标物体可以采用RoI Pooling,当小目标物体较多时,常常采用RoIAlign。
关于RoIAlign的详细介绍见以下博客:
  • RoIPooling与RoIAlign的区别
  • 详解 ROI Align 的基本原理和实现细节

    推荐阅读