通过例子详解CNN感受野参数计算原理

前言

网上介绍卷积网络感受野(Receptive Field)参数计算往往都是通过代码来进行得,容易看的云里雾里。我这里通过一个例子来解释感受野参数原理以及通过公式来手算它们。 

感受野参数概念

感受野参数主要有3个:

jump:就是卷积特征图上移动一个像素,反映在输入图像(源图像)上实际上移动了多少个像素。其值用j表示。

receptive field size: 即感受野大小。 它得意思是卷积特征图上一个特征(像素)对应在输入图像上有多少个像素参与乘加运算来获得。其值用r来表示源图像上有rxr个像素被感受。

start:卷积特征图上左上角第一个特征/像素 对应到源图像上得感受域的中心点坐标。计算中心点坐标时需要把padding(填充)值排除出去。假如padding为0,当感受域大小为2x2时,则start为1,而感受域3x3对应的start为1.5。

感受野参数计算公式

feature_map_size = ((image_size + 2*padding - kernel_size) / stridding_size) + 1 

上面这个公式对理解卷积网络结构参数非常重要,它是 已知输入图像或卷积特征图大小,填充值p, 卷积核size以及移动步长来计算生成的特征图大小。 

计算jump,receptivie size以及start坐标的公式如下:

这些公式都是迭代型。换句话讲,你不能通过上面公式随意对某个比较深的卷积层一下就求出这些值,而是只能一步一步的求,比如conv1->conv2->conv3... ... 没有求出conv1时,不可能去获得conv2的相关值。

通过例子手算感受野参数

已知某个CNN网络结构以及模板参数如上图所示,求每个卷积层的感受野参数。

该题目的一个坑是 filter的size需要通过上面第一个公式反求出来。其实是要看的懂每一卷积层的各个维度表征什么意义。

下面就一层层来分别计算它们的参数值。

conv1:

     (32  + 2*0 - filter1_size)/2 + 1 = 16 反推出 filter1_size= 2

     j1 = j0 * stride1 = 1*2= 2

     r1 = r0+(filter1_size-1)*j0 = 1+(2-1)*1 =2

     start1 = start0 + ((filter1_size-1)/2-padding1)*j0 = 0.5+ 0.5*1 = 1

conv2:

    (16+2*1-k2)/1 + 1 = 8  反推 k2= 11

    j2 = j1 * stride2 = 2*1 = 2

    r2 = r1+(k2-1)*j1 = 2 + 10*2 = 22

   start2 = start1 + ((k2-1)/2-padding2)*j1 = 1 + (5-1)*2 = 9

conv3:

 (8+2*2-k3)/2 + 1 = 4 反推 k3=6

  j3 =j2 * stride3 = 2*2 = 4

  r3 = r2+(k3-1)*j2 = 22+5*2 = 32

start3 = start2 + ((k3-1)/2-padding3)*j2 = 9 + (2.5-2)*2 = 10

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ltshan139

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值