Convolution Computation

Author Avatar
Tianqi Zhang 12月 20, 2019

算法层面上

我们假设输入数据的 shape 为 $(N \times C \times H \times W)$, Filter 的 shape 为 $(M \times C \times R \times S)$. 同时设 padding 的大小为 $P$, stride 为 $d$.

现在我们只考虑一个 channel 上的卷积核和输入进行计算,即 $(H\times W)$ 和 $(R\times S)$,同时只考虑在 $H, R$ 这个空间维度上的计算,另一个空间维度与之类似。显然第 0 次计算的区间为 $[0, R-1]$. stride 为 $S$, 则第 $k$ 次计算的区间为 $[kd, R-1 + kd]$. 假设 $k$ 就是最后一次计算,显然应该有

为了简单起见我们将 padding 直接算进空间尺度中去,即 $H \leftarrow H + 2P $. 那么得到

因为我们的计算是从第 0 次到第 $k$ 次,所以总计算次数是 $k+1$. 得到

这个不等式对于整数而言就是向下取整,代码中直接可以写成 $H_{new} = \frac{H + 2P - R + 1}{d} + 1$

得到

实现层面上

Im2col