常见卷积尺寸计算

在搭配深度学习多个卷积层时我们经常要计算卷积层的输出张量的尺寸大小,可以用如下公式计算:

1, 公式

卷积层输出尺寸: o = ?(i + 2p - k) / s? + 1
式中,i:输入尺寸;o:输出尺寸;p:padding;k: kernel_size;s: stride。?…?表示向下取整。

2, 推导过程

这个公式不用死记,下面我用非常便于理解的方法描述这个推导。卷积就是对相邻的一片数据进行加权求和得到一个数的一种“合并”操作,将此操作对输入张量进行滑动扫描以得到输出张量。循着这个过程,我们很容易推导出卷积输出尺寸的计算公式。
(1)注意padding指的是两边同时补零,所以补零后输入尺寸相当于变成了i+2p;
(2)用卷积核扫描的时候,想象一把尺子在桌子上从左移动到右,受到左右边框的界限,它的移动范围只有i+2p-k大小。
(3)如果每次移动的步长是s,实际上移动的步数就是 (i+2p-k)/s,但移动的步数必须是整数,因为不能出界,如果最后一步哪怕还差一点也不能算,所以必须要向下取整。
(4)即使一步不移动,也会在原位得到一个输出点,所以最后得到的输出尺寸是移动的总步数再加上1。

3, 膨胀卷积

对用膨胀卷积,上公式不变,只需要对卷积核膨胀计算一下,
膨胀后卷积核: k’ = d × (k-1) + 1
式中,k: 输入的卷积核尺寸; d: 膨胀系数; k’: 膨胀后等效的卷积核尺寸。用k’代入上公式的k,就可以计算出输出尺寸。

4, 反卷积

反卷积就是把卷积的i, o调换就可以了。
反卷积输出尺寸: o = (i-1)×s + k - 2p

5, 常用等尺寸变换配置

经常希望经过卷积后张量尺寸不变,常用以下(k, s, p)组合:
(k, s, p) = (1, 1, 0) or (3, 1, 1) or (5, 1, 2) or (7, 1, 3)

你可能感兴趣的:(模式识别,pytorch,目标检测,python)