前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CNN学习:如何计算模型的感受野?

CNN学习:如何计算模型的感受野?

作者头像
AI深度学习求索
发布2018-12-11 16:55:45
1.6K0
发布2018-12-11 16:55:45
举报
文章被收录于专栏:AI深度学习求索

CNN学习:如何计算模型的感受野?

阅读论文时常常看见论文中说感受野的大小,对于有些问题,需要了解更多的上下文信息,则需要相对大的感受野。那么,这里的感受野是什么意思呢?

感受野可以理解为卷积神经网络输出的feature map中一个像素点对应的原图片中区域的大小,或者说feature map中的一个像素点的值是受原图片中的多大的区域影响的,也可以间接地模型融合上下文信息的多少。

那么,感受野如何计算呢?

  • 每一层计算从上往下,top-down,即从最后一层开始计算。
  • 这里的ksize是卷积核大小,stride是每一层的stride, RF是感受野大小

函数:

代码语言:javascript
复制
def receptiveField(net, n_layers):
 for layer in range(n_layers):
 RF = 1
 ksize, stride, pad = net[layer]
 RF = ((RF-1)*stride) + ksize
 return RF

示例:

  • 以下面的这个网络为例,计算网络的感受野
代码语言:javascript
复制
net_D_B(
 (netD_B): DataParallel(
 (module): NLayerDiscriminator(
 (model): Sequential(
 (0): Conv2d(3, 64, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1))
 (1): LeakyReLU(0.2, inplace)
 (2): Conv2d(64, 128, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1))
 (3): InstanceNorm2d(128, eps=1e-05, momentum=0.1, affine=False)
 (4): LeakyReLU(0.2, inplace)
 (5): Conv2d(128, 256, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1))
 (6): InstanceNorm2d(256, eps=1e-05, momentum=0.1, affine=False)
 (7): LeakyReLU(0.2, inplace)
 (8): Conv2d(256, 512, kernel_size=(4, 4), stride=(1, 1), padding=(1, 1))
 (9): InstanceNorm2d(512, eps=1e-05, momentum=0.1, affine=False)
 (10): LeakyReLU(0.2, inplace)
 (11): Conv2d(512, 1, kernel_size=(4, 4), stride=(1, 1), padding=(1, 1)) # 30
 ))))
  • 计算:
    • 初始化:RF = 1
    • 第五层:RF5 = ( 1-1 ) * 1 + 4 = 4
    • 第四层:RF4 = ( 7-1 ) * 1 + 4 = 7
    • 第三层:RF3 = (7-1 ) * 2 + 4 = 16
    • 第二层:RF4 = (16-1) * 2 + 4 = 34
    • 第一层:RF4 = (34-1) * 2 + 4 = 70
  • 上面的层数,表示计算到哪一层,而不是第几层的感受野,若计算中间某一层的感受野,则将那一层从1开始计算
  • 计算得到该网络在图片上感受野为70*70,这也是pix2pix中patchGAN的原理
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI深度学习求索 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档