当前位置:   article > 正文

卷积尺寸计算公式(含膨胀卷积和反卷积情况)_卷积计算尺寸

卷积计算尺寸

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

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改为膨胀后的卷积核k’,
膨胀后卷积核: 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)

对于更多其他情况,我们仍想要保持卷积后尺寸不变,可以用下面的代码autopad自动计算p的值,该代码可用于用单个数字表示的正方形的卷积核或用元组表示的矩形的卷积核。

def autopad(k, p=None):  # kernel, padding
    # Pad to 'same'
    if p is None:
        p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-pad
    return p
conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/103493
推荐阅读
相关标签
  

闽ICP备14008679号