卷积神经网络:每个滤波器将覆盖多少像素?

4

我该如何计算网络中每个过滤器在原始图像中所覆盖的面积?

例如: 假设图像的大小为WxW像素。 我使用以下网络:

layer 1 : conv :  5x5
layer 2 : pool :  3x3
layer 3 : conv :  5x5
.....
layer N : conv :  5x5

我想计算每个滤镜在原始图像中覆盖的面积。
例如,第一个图层中的滤镜将覆盖原始图像中的5x5像素。
1个回答

1
类似的问题是,每个激活将覆盖多少像素?这本质上与输入图像必须有多大才能在层中产生一个激活相同。假设层的过滤器大小和步幅为k和s,输入的大小为x * x,则我们有(((x-k1 + 1) / s1-k2 + 1) / s2 ... / sn)= 1,而x可以轻松解决。原始问题等价于,在不考虑最后一层的步幅的情况下,输入图像必须有多大才能在层中产生恰好一个激活?因此答案是x / sn,应通过以下伪代码计算。
x = layer[n].k
from i = n-1 to 1
   x = x*layer[i].s + layer[i].k - 1

总像素数量为x*x
在您的示例中,第一层的sum_1d为5,第二层为5*1+3-1=7,第三层为5*3+2+4=21(我假设池化层是非重叠的,s=3)。
您可以通过反向操作进行验证,例如输入为21 * 21,在第一层之后为17 * 17,在池化之后为(17-2)/3 = 5(实际上16 * 16和15 * 15将给出相同的结果),恰好适合第三层中的一个滤波器。

谢谢。假设图像大小为487,ks_arr = [11, 7, 11, 7],step_arr = [3, 3, 3, 3]。根据您的计算,最后一层将覆盖77个像素。但如果我反转它,最终图像大小将为4x4。487/4〜= 120。所以我觉得最后一个滤波器应该覆盖约120个像素。我正确吗? - user570593
@user570593 对的..非常抱歉给出错误的答案,我会尽力修正它。 - dontloo
谢谢你的回答。我感觉 layer[i-1].s 需要乘以一些值,但我有点困惑。 - user570593
谢谢,但我不确定这是否正确。过滤器大小将应用于具有不同大小的图像(在不同层中,图像大小将不同)。因此,对过滤器大小求和可能不正确。你认为呢? - user570593
对于ks_arr = [11, 7, 11, 7],step_arr = [3, 3, 3, 3]的示例,第四层的len_1d应该是((((7*3+10)*3+6)3+10)=307,反向计算,第一层后,(307-10)/3=99,第二层后(99-6)/3=31,第三层后(31-10)/3=7,这将适合于一个77的过滤器。 - dontloo
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接