CNN中感受野的计算

感受野(receptive field)是怎样一个东西呢,从CNN可视化的角度来讲,就是输出featuremap某个节点的响应对应的输入图像的区域就是感受野。

比如我们第一层是一个3*3的卷积核,那么我们经过这个卷积核得到的featuremap中的每个节点都源自这个3*3的卷积核与原图像中3*3的区域做卷积,那么我们就称这个featuremap的节点感受野大小为3*3

如果再经过pooling层,假定卷积层的stride是1,pooling层大小2*2,stride是2,那么pooling层节点的感受野就是5*5

有几点需要注意的是,padding并不影响感受野,stride只影响下一层featuremap的感受野,size影响的是该层的感受野。

至于如何计算感受野,我的建议是top to down的方式。下面我拿一个例子来算算

pool3的一个输出对应pool3的输入大小为2*2

依次类推,对应conv4的输入为5*5,因为2*2的每个角加一个3*3的卷积核,就成了5*5,当然这是在stride=1的情况下才成立的,但是一般都是stride=1,不然也不合理

对应conv3的输入为7*7

对应pool2的输入为14*14

对应conv2的输入为16*16

对应pool1的输入为32*32

对应conv1的输入为34*34

所以pool3的感受野大小就是34*34

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 06:40:41

CNN中感受野的计算的相关文章

卷积神经网络物体检测之感受野大小计算

学习RCNN系列论文时, 出现了感受野(receptive field)的名词, 感受野的尺寸大小是如何计算的,在网上没有搜到特别详细的介绍, 为了加深印象,记录下自己对这一感念的理解,希望对理解基于CNN的物体检测过程有所帮助. 1 感受野的概念 在卷积神经网络中,感受野的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小. RCNN论文中有一段描述,Alexnet网络pool5输出的特征图上的像素在输入图像上有很大的感受野(have very

CNN中减少网络的参数的三个思想

CNN中减少网络的参数的三个思想: 1) 局部连接(Local Connectivity) 2) 权值共享(Shared Weights) 3) 池化(Pooling) 局部连接 局部连接是相对于全连接来说的.全连接示意图如下: 比如说,输入图像为1000*1000大小,即输入层有1000*1000=10^6维,若隐含层与输入层的数目一样,也有10^6个,则输入层到隐含层的全连接参数个数为10^6 * 10^6=10^12,数目非常之大,基本很难训练. 一般认为人对外界的认知是从局部到全局的,而

CNN中的卷积核及TensorFlow中卷积的各种实现

声明: 1. 我和每一个应该看这篇博文的人一样,都是初学者,都是小菜鸟,我发布博文只是希望加深学习印象并与大家讨论. 2. 我不确定的地方用了"应该"二字 首先,通俗说一下,CNN的存在是为了解决两个主要问题: 1. 权值太多.这个随便一篇博文都能解释 2. 语义理解.全连接网络结构处理每一个像素时,其相邻像素与距离很远的像素无差别对待,并没有考虑图像内容的空间结构.换句话说,打乱图像像素的输入顺序,结果不变. 然后,CNN中的卷积核的一个重要特点是它是需要网络自己来学习的.这一点很简

(原)CNN中的卷积、1x1卷积及在pytorch中的验证

转载请注明处处: http://www.cnblogs.com/darkknightzh/p/9017854.html 参考网址: https://pytorch.org/docs/stable/nn.html?highlight=conv2d#torch.nn.Conv2d https://www.cnblogs.com/chuantingSDU/p/8120065.html https://blog.csdn.net/chaolei3/article/details/79374563 1x1

在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。

在如下8*6的矩阵中,请计算从A移动到B一共有__种走法.要求每次只能向上或向右移动一格,并且不能经过P. A:456 B:492 C:568 D:626 E:680 F:702 解析: 8*6的矩阵,从左下角A到右上角B,一共需要走12步,其中5步向上,7步向右,因此总的走法一共有C(12,5)=792种,但题目规定不能经过P,因此需要减去经过P点的走法. 经过P的路径分为两部分,从A到P,从P到B. 同理,从A到P的走法:C(6,2)=15: 同理,从P到B的走法:C(6,3)=20: 因此

Python中的简单计算

Python中的简单计算 (1)基本的加减乘除 >>> 2 + 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5  1.6 (2)除法总是会返回一个浮点数,想要返回整数,需要用"//"来表示(floor division),另外,可以用"%"进行取余操作 >>> 17 / 3  # classic division ret

警惕C++中整数除法计算的精度损失

很偶然发现了一个精度损失的问题,简单来说: 有表达式: l = i/30 + j/40 + k/25, 求当{i,j,k} = {50,85,27}时l的值,很简单,用计算器马上可以算出答案为4.8717,但是编写了以下程序来实现: int i = 50,j = 85, k = 27; double l = i/30 + j/40 + k/25; 运行后,结果显示4.000000000! 为什么?这是因为在C++中两个整数相处得到的结果还是整数,故除法都被四舍五入了再相加,就得到结果4.0000

openstack中彻底删除计算节点的操作记录

在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很多时候,在删除计算节点的时候由于删除不彻底而导致了后面使用openstack出现了诸多问题. 下面记录了在openstack中彻底删除计算节点linux-node2.openstack的操作: 在控制节点上操作 查看计算节点 [[email protected] src]# openstack ho

Mean and Standard Deviation-从文件中读取数据计算其平均数和标准差

Meanand Standard Deviation-从文件中读取数据计算其平均数和标准差 //Meanand Standard Deviation-从文件中读取数据计算其平均数和标准差 #include<iostream> #include<fstream> #include<cstdlib> #include<cmath>   int main() {     usingnamespace std;     ifstream fin;     ofstr