PyTorch入门(五)常用的池化操作
常用的池化操作
深度学习中常规的池化层的池化操作有最大池化(Max Pooling)和平均池化(Average Pooling),同时有以下常用的池化层:金字塔池化、全局平均池化、RoI池化…
- 金字塔池化
空间金子塔池化的优点:
- 使得CNN可以输入任意大小和任意比例的图像
- 从feature map中可以提取多维度特征
https://www.cnblogs.com/marsggbo/p/8572846.html
- 全局平局池化
如果要预测K个类别,在卷积特征抽取部分的最后一层卷积层,就会生成K个特征图,然后通过全局平均池化就可以得到 K个1×1的特征图,将这些1×1的特征图输入到softmax layer之后,每一个输出结果代表着这K个类别的概率(或置信度 confidence),起到取代全连接层的效果。
文章图片
优点:
- 和全连接层相比,使用全局平均池化技术,对于建立特征图和类别之间的关系,是一种更朴素的卷积结构选择。
- 全局平均池化层不需要参数,避免在该层产生过拟合。
- 全局平均池化对空间信息进行求和,对输入的空间变化的鲁棒性更强
- 收敛速度变慢
卷积层+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池化
文章图片
RoI池实际上做了什么?对于来自边界框列表的每个感兴趣区域,它采用与其对应的输入特征图的一部分并将其缩放到某个预定义的大小(例如,7×7)。缩放通过以下方式完成:
- 将感兴趣区域划分为相等大小的部分(其数量与输出的维度相同)
- 找到每个部分的最大值
- 将这些最大值复制到输出(max pooling)
- 从具有多个卷积核池化的深度网络中获得的固定大小的feature maps;
- 一个表示所有ROI的N*5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示其余的左上角和右下角坐标
- 对于输入的image,在feature map上找到RoI对应的位置,即将ROI映射到feature map对应位置
- 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)
- 对每个sections进行max pooling操作
RoI池化的优点:
- 极大地提高了处理速度,减少了training和testing过程的消耗时间
- 可以对CNN产生的feature map进行再利用
- 以end-to-end的形式训练目标检测系统
RoI池化操作过程中存在两次量化,均为向下取整:
- 将候选框边框量化为整数坐标值
- 将量化之后的候选框平均分成成k * k个部分时,将每个部分的边框长度量化为整数
为了解决这种问题,Mask R-CNN提出RoIAlign,并通过实验证在检测测任务中 ROI Align 可以提升检测模型的准确性。
在目标检测任务中,大目标物体可以采用RoI Pooling,当小目标物体较多时,常常采用RoIAlign。
关于RoIAlign的详细介绍见以下博客:
- RoIPooling与RoIAlign的区别
- 详解 ROI Align 的基本原理和实现细节
推荐阅读
- android第三方框架(五)ButterKnife
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 【故障公告】周五下午的一次突发故障
- 华为旁!大社区、地铁新盘,佳兆业城市广场五期!
- 五年后,我要成为独立自强自信的女性
- 二十年后的家乡
- 《格列佛游记》第二卷第五章概括
- 六月更新的......
- 2021-05-05五一的五天假期结束了
- 阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15|阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15 20191025