CNN输出尺寸公式与感受野计算公式;何为感受野(receptive field)?何为Scale?

输出 feature map 尺寸计算

经过某一层 Conv2D 后,feature map 的输出大小为

其中,N 为原图尺寸,F 为 Filter/Kernel size. 一下图片截图自 stanford cs231n

图片.png

图片.png

图片.png

感受野尺寸计算

在读CycleGAN源码中的PathGAN (Discriminator) 部分时,发现并没有对原图进行显示地分割,于是猜测应该和感受野的计算有关系,查了一下果然是这样(原作者在 GitHub 的回复),此外还在该页面发现了一个计算感受野的工具。
感受野计算公式如下(代码中的层数排序是从底端向上数的):

def f(last_receptive_field, ksize, stride):
    return (last_receptive_field - 1) * stride + ksize

last_layer = f(last_receptive_field=1, ksize=4, stride=1)
# Receptive field: 4
fourth_layer = f(last_receptive_field=last_layer, ksize=4, stride=1)
# Receptive field: 7
third_layer = f(last_receptive_field=fourth_layer, ksize=4, stride=2)
# Receptive field: 16
second_layer = f(last_receptive_field=third_layer, ksize=4, stride=2)
# Receptive field: 34
first_layer = f(last_receptive_field=second_layer, ksize=4, stride=2)
# Receptive field: 70

print(first_layer)

何为感受野?何为Scale?

感受野receptive field):从直观上讲,就是视觉感受区域的大小。在卷积神经网络中,感受野的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。我的理解是,feature map 上的某一点p对应输入图片中的一个区域,这个区域中的点发生变化,p可能随之变化。而这个区域外的其它点不论如何改变,p的值都不会受之影响。VGG16conv5_3 的感受野为 228,即 feature map 上每一个点,都包含了原图一个 228×228 区域的信息。

Scale(这并不是一个通用的术语概念):输入图片的尺寸比上 feature map 的尺寸。比如输入图片是 3×224×224,feature map 是 512×14×14,那么scale就是 14/224=1/16。可以认为 feature map 中一个点对应输入图片的 16 个像素。在 Faster R-CNN 中由于相邻的同尺寸、同比例的 anchor 是在 feature map 上的距离是一个点,对应到输入图片中就是 16 个像素。在一定程度上可以认为anchor的精度为 16 个像素。不过还需要考虑原图相比于输入图片又做过缩放(这也是 dataset 返回的scale参数的作用,这个的scale指的是原图和输入图片的缩放尺度,和上面的 scale 不一样)。

你可能感兴趣的:(CNN输出尺寸公式与感受野计算公式;何为感受野(receptive field)?何为Scale?)