CNN学习:如何计算模型的感受野?
阅读论文时常常看见论文中说感受野的大小,对于有些问题,需要了解更多的上下文信息,则需要相对大的感受野。那么,这里的感受野是什么意思呢?
感受野可以理解为卷积神经网络输出的feature map中一个像素点对应的原图片中区域的大小,或者说feature map中的一个像素点的值是受原图片中的多大的区域影响的,也可以间接地模型融合上下文信息的多少。
那么,感受野如何计算呢?
函数:
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
示例:
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
))))