其他推理框架可能不支持AdaptivePooling操作,该操作仅存于PyTorch中

PyTorch官方文档可知,

  • AdaptivePooling可通过输入大小input_size自适应控制输出大小output_size,
  • 而一般的AvgPooling/MaxPooling则是通过kernel_size、stride、padding来计算output_size,公式如下:
    outputsize=ceil((inputsize+2∗padding−kernelsize)/stride)+1output_size=ceil((input_size+2∗padding−kernel_size)/stride)+1outputs​ize=ceil((inputs​ize+2∗padding−kernels​ize)/stride)+1

因此通过input_size、output_size反推kernel_size、stride、padding,参考官方源码(https://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/AdaptiveAveragePooling.cpp)将padding设为0,那么可推出去kernel_size、stride:

stride=floor(inputsize/outputsize)stride=floor(input_size/output_size)stride=floor(inputs​ize/outputs​ize)
kernelsize=inputsize−(outputsize−1)∗stridekernel_size=input_size−(output_size−1)∗stridekernels​ize=inputs​ize−(outputs​ize−1)∗stride

例如,PyTorch网络的某一层含有nn.AdaptiveAvgPool2d(output_size=(14,14)),

  • 它的output_size为(14,14)(14, 14)(14,14),
  • 该层的输入特征图大小为10∗128∗12810*128*12810∗128∗128,
  • 那么输出的特征图大小为10∗14∗1410*14*1410∗14∗14,那么带入公式

可计算出nn.AvgPool2d(kernel_size, stride)的

  • stride=(int(128/14), int(128/14)),
  • kernel_size=((128-(14-1)*stride, (128-(14-1)*stride)

验证如下:

import torch
from   torch import nninput = torch.randn(10, 36, 36)
AAVP = nn.AdaptiveAvgPool2d(output_size=(12,12))
AVP  = nn.AvgPool2d(kernel_size=(3,3), stride=(3,3))output_AAVP = AAVP(input)
output_AVP  = AVP(input)

链接:https://blog.csdn.net/github_28260175/article/details/103436020

实际情况

GAP

global average pooling 与 average pooling 的差别就在 “global” 这一个字眼上。global 与 local 在字面上都是用来形容 pooling 窗口区域的。 local 是取 feature map 的一个子区域求平均值,然后滑动这个子区域; global 显然就是对整个 feature map 求平均值了。

链接:https://blog.csdn.net/qq_23304241/article/details/80292859

代码验证

利用现有的pooling API实现全局平均池化的效果。

首先我们简单理解全局平均池化操作。
如果有一批特征图,其尺寸为 [ B, C, H, W], 我们经过全局平均池化之后,尺寸变为[B, C, 1, 1]。
也就是说,全局平均池化其实就是对每一个通道图所有像素值求平均值,然后得到一个新的1 * 1的通道图。

明白这个思路之后,我们就可以很容易实现全局平均池化了。

利用自适应平均池化就可以快速实现。或者自适应最大池化也可以,一样

链接:https://blog.csdn.net/CVSvsvsvsvs/article/details/90495254

In [1]: import torchIn [2]: a = torch.rand([1, 2048 ,32 ,32])In [3]: a.size()
Out[3]: torch.Size([1, 2048 ,32 ,32])In [4]: b = torch.nn.functional.adaptive_avg_pool2d(a, (1,1))  # 自适应池化,指定池化输出尺寸为 1 * 1In [5]: b.size()
Out[5]: torch.Size([1, 2048 , 1, 1])

池化padding

这里主要分析最大池化和平均池化两个函数,函数中padding参数设置和矩阵形状计算都与卷积一样,但需要注意的是:

  • 当padding=‘SAME’,计算avg_pool时,每次的计算是除以图像被filter框出的非零元素的个数,而不是filter元素的个数,如下图,第一行第三列我们计算出的结果是除以2而非4,第三行第三列计算出的结果是除以1而非4;

  • 当计算全局池化时,即与图像矩阵形状相同的过滤器进行一次池化,此情况下无padding,即在边缘没有补0,我们直接除以整个矩阵的元素个数,而不是除以非零元素个数(注意与第一点进行区分)

填充0,还是1

padding实在卷积操作之前的, 可以进行补0操作,也可补其他的.

其中padding补0 的策略是四周都补,如果padding=1,那么就会在原来输入层的基础上,上下左右各补一行,如果padding=(1,1)中第一个参数表示在高度上面的padding,第二个参数表示在宽度上面的padding.如下图:

池化层中都会加入padding操作的作用

(1) 池化层的作用体现在降采样,保留图像的显著特征,降低图像维度,使得特征图变小,简化网络.,增大kernel的感受野, 同时,也会提供一些旋转不变性. 但是特征图变小,有可能会影响到网络的准确度(措施:可以通过增加特征的深度来弥补,如深度变成原来的2倍)

(2) 卷积会带来的两个问题(1,卷积运算后,输出图像的尺寸会缩小; 2 越是边缘的像素点,对输出的影响就越小,卷积的时候移到边缘就结束了,但是中间的像素点有可能会参与多次计算,但是边缘的像素点可能只参与一次计算…因此可能会丢失边缘信息.)

padding的用途: 保持边界信息;可以对有差异的图片进行补齐,使得图像的输入大小一致;在卷积层中加入padding ,会使卷基层的输入维度与输出维度一致; 同时,可以保持边界信息 …

使用AvgPooling替换AdaptivePooling,池化padding,global average pooling 与 average pooling 的差别相关推荐

  1. 全局平均池化(Global Average Pooling)

    出处:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013. 定义:将特征图所有像素值相加 ...

  2. 深度学习入门 (九):卷积层和池化层的实现

    目录 卷积神经网络 CNN 整体结构 卷积层 全连接层存在的问题 卷积运算 乘积累加运算 偏置 填充 (padding) 步幅 (stride) 小结:卷积层的输出特征图的大小 3 维数据的卷积运算 ...

  3. 狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层

    狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层 在这篇文章中您将会从数学和算法两个角度去重新温习一下卷积层,激活函数,池化层,Dropout层,BN层,全链接 ...

  4. 卷积神经网络---卷积层、激励层、池化层以及全连接层

    文章目录 概述 卷积神经网络 局部连接+权值共享** 输入层 卷积层 激励层 池化层 全连接层 参考资料 概述 这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊.看到了一篇博文写的很好 ...

  5. 全局平均池化(Golbal Average Pooling)与Concatenate层

    转载:全剧平均池化 出处:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013. 查看全文 ...

  6. 图像平均池化 利用pytorch对图像进行池化

    一. 池化简介 平均池化:将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值. 池化:使用均等大小的网格将图片分割,并求网格内代表值的过程. 池化是卷积神经网络(convolution ...

  7. (arxiv-2018)图像检索的注意力感知广义平均池化

    图像检索的注意力感知广义平均池化 paper题目:ATTENTION-AWARE GENERALIZED MEAN POOLING FOR IMAGE RETRIEVAL paper是吉联科技集团发表 ...

  8. 对卷积神经网络中卷积层、激活层、池化层、全连接层的理解

    文章目录 卷积神经网络 输入层 卷积层 激励层 池化层 全连接层 卷积神经网络 举一个卷积神经网络识别汽车的例子如下: 其中数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,PO ...

  9. padding和卷积的区别_池化、池化与卷积异同、zero-padding

    1 池化(pooling)层的理解 池化,也即降采样(subsample),降低数据的大小. 池化(pooling) 2 池化方法 常用的池化方法是:最大值池化(max_pooling),平均值池化. ...

  10. PyTorch中池化层的padding和ceil_mode参数设置

    在池化操作的接口中,padding和ceil_mode这两个参数会影响到输出特征图的大小.padding即对特征图大小进行扩充的像素数量:ceil_mode指明,当剩余的像素不足滤波器大小,是否仍对这 ...

最新文章

  1. 这 3 个字是未来发展关键,不重视的企业,正在被淘汰
  2. 我对CTO的理解 CTO要有技术魅力
  3. 网络适配器无法建立连接_「图」KB4515384更新令人抓狂:网络适配器又无法启用...
  4. halcon算子翻译——dev_set_paint
  5. 程序员面试题精选100题(62)-C/C++/C#面试题(5)
  6. svg标签的CSS3动画特效 - 经典特效2
  7. android ios语音转码,手机如何将语音转文字?这几种方法真简单,安卓苹果通用...
  8. 电脑分辨率设置工具_手机也能运行电脑上的软件了?苹果这个办法好
  9. UVa 10288 (期望) Coupons
  10. 设计模式10: Facade 外观模式(结构型模式)
  11. 【CCCC】L2-020 功夫传人 (25分),,模拟水题,多叉树的存储与遍历
  12. iOS 控制器View加载顺序详细版
  13. linux mysql 主从数据库_Linux下MySQL数据库主从同步配置
  14. 2022年高压电工模拟考试及高压电工复审模拟考试
  15. 已解决:如何彻底删除快压/以及彻底删除顽固的dll文件
  16. STM8L051F3_03_CLK应用
  17. 相乘函数计算机表示符号,excel乘积函数_excel相乘函数使用方法
  18. iOS证书(.p12)和描述文件(.mobileprovision)申请
  19. CNN结构:色彩特征提取-从RGB空间到HSV空间(色彩冷暖判断)
  20. ansi、unico、utf8

热门文章

  1. Python爬虫基础-02-提取数据
  2. 微信支付v3 php 源码,求微信支付wxpayv3服务端完整代码
  3. solr html显示,在SOLR中,如何执行索引. html 文件_solr_开发99编程知识库
  4. 面试官问:Java 中的锁有哪些?我跪了……
  5. 点钞机语音怎么打开_这才是华为手机语音助手正确打开方式,远比你想象的要强大很多!...
  6. springboot 微服务_Spring Boot在微服务中的最佳实践
  7. spark学习——(二)spark基础环境配置-linux(1)
  8. python atm详解_python基础之ATM-1
  9. abp框架 mysql_ABP框架迁移到Mysql
  10. 学生选课系统代码-6-conf配置层