使用AvgPooling替换AdaptivePooling,池化padding,global average pooling 与 average pooling 的差别
其他推理框架可能不支持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)+1outputsize=ceil((inputsize+2∗padding−kernelsize)/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(inputsize/outputsize)
kernelsize=inputsize−(outputsize−1)∗stridekernel_size=input_size−(output_size−1)∗stridekernelsize=inputsize−(outputsize−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 的差别相关推荐
- 全局平均池化(Global Average Pooling)
出处:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013. 定义:将特征图所有像素值相加 ...
- 深度学习入门 (九):卷积层和池化层的实现
目录 卷积神经网络 CNN 整体结构 卷积层 全连接层存在的问题 卷积运算 乘积累加运算 偏置 填充 (padding) 步幅 (stride) 小结:卷积层的输出特征图的大小 3 维数据的卷积运算 ...
- 狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层
狠补基础-数学+算法角度讲解卷积层,激活函数,池化层,Dropout层,BN层,全链接层 在这篇文章中您将会从数学和算法两个角度去重新温习一下卷积层,激活函数,池化层,Dropout层,BN层,全链接 ...
- 卷积神经网络---卷积层、激励层、池化层以及全连接层
文章目录 概述 卷积神经网络 局部连接+权值共享** 输入层 卷积层 激励层 池化层 全连接层 参考资料 概述 这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊.看到了一篇博文写的很好 ...
- 全局平均池化(Golbal Average Pooling)与Concatenate层
转载:全剧平均池化 出处:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013. 查看全文 ...
- 图像平均池化 利用pytorch对图像进行池化
一. 池化简介 平均池化:将图片按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值. 池化:使用均等大小的网格将图片分割,并求网格内代表值的过程. 池化是卷积神经网络(convolution ...
- (arxiv-2018)图像检索的注意力感知广义平均池化
图像检索的注意力感知广义平均池化 paper题目:ATTENTION-AWARE GENERALIZED MEAN POOLING FOR IMAGE RETRIEVAL paper是吉联科技集团发表 ...
- 对卷积神经网络中卷积层、激活层、池化层、全连接层的理解
文章目录 卷积神经网络 输入层 卷积层 激励层 池化层 全连接层 卷积神经网络 举一个卷积神经网络识别汽车的例子如下: 其中数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,PO ...
- padding和卷积的区别_池化、池化与卷积异同、zero-padding
1 池化(pooling)层的理解 池化,也即降采样(subsample),降低数据的大小. 池化(pooling) 2 池化方法 常用的池化方法是:最大值池化(max_pooling),平均值池化. ...
- PyTorch中池化层的padding和ceil_mode参数设置
在池化操作的接口中,padding和ceil_mode这两个参数会影响到输出特征图的大小.padding即对特征图大小进行扩充的像素数量:ceil_mode指明,当剩余的像素不足滤波器大小,是否仍对这 ...
最新文章
- 这 3 个字是未来发展关键,不重视的企业,正在被淘汰
- 我对CTO的理解 CTO要有技术魅力
- 网络适配器无法建立连接_「图」KB4515384更新令人抓狂:网络适配器又无法启用...
- halcon算子翻译——dev_set_paint
- 程序员面试题精选100题(62)-C/C++/C#面试题(5)
- svg标签的CSS3动画特效 - 经典特效2
- android ios语音转码,手机如何将语音转文字?这几种方法真简单,安卓苹果通用...
- 电脑分辨率设置工具_手机也能运行电脑上的软件了?苹果这个办法好
- UVa 10288 (期望) Coupons
- 设计模式10: Facade 外观模式(结构型模式)
- 【CCCC】L2-020 功夫传人 (25分),,模拟水题,多叉树的存储与遍历
- iOS 控制器View加载顺序详细版
- linux mysql 主从数据库_Linux下MySQL数据库主从同步配置
- 2022年高压电工模拟考试及高压电工复审模拟考试
- 已解决:如何彻底删除快压/以及彻底删除顽固的dll文件
- STM8L051F3_03_CLK应用
- 相乘函数计算机表示符号,excel乘积函数_excel相乘函数使用方法
- iOS证书(.p12)和描述文件(.mobileprovision)申请
- CNN结构:色彩特征提取-从RGB空间到HSV空间(色彩冷暖判断)
- ansi、unico、utf8
热门文章
- Python爬虫基础-02-提取数据
- 微信支付v3 php 源码,求微信支付wxpayv3服务端完整代码
- solr html显示,在SOLR中,如何执行索引. html 文件_solr_开发99编程知识库
- 面试官问:Java 中的锁有哪些?我跪了……
- 点钞机语音怎么打开_这才是华为手机语音助手正确打开方式,远比你想象的要强大很多!...
- springboot 微服务_Spring Boot在微服务中的最佳实践
- spark学习——(二)spark基础环境配置-linux(1)
- python atm详解_python基础之ATM-1
- abp框架 mysql_ABP框架迁移到Mysql
- 学生选课系统代码-6-conf配置层