尺寸计算公式
先给出两种模式下的输出特征图尺寸计算公式。在二维数据模式(如图像)下,尺寸应该是对两个维度宽、高的大小描述,用元组$(w,h)$描述最为恰当。但是此处,为了统一、方便描述,暂且只考虑某一个维度(比如,宽)上的尺寸,且做出如下约定:
- 输入(input)尺寸为$i$
- 输出(output)尺寸为$o$
- 卷积核(kernel)尺寸为$k$
- 步长(stride)为$s$
- 填充(padding)为$p$
- out_padding(逆置卷积特有)为$op$
卷积层输出尺寸公式描述为
逆置卷积层输出尺寸公式描述为
如何保持图像经过卷积和逆置卷积尺寸不变
在自编码器等模型中,要求输入数据和模型输出数据尺寸完全一致是很常见的。而这种范式的模型中,通常在编码器部分需要用到下采样等技术对输入数据进行降维,而在解码器部分用到上采样等技术对编码器的紧凑编码结果进行原始数据的重构。其中,下采样技术包括池化,而逆置卷积可以视为上采样技术的一种。
那么接下来我尝试探究一下满足如何的条件,可以使得数据通过卷积、逆置卷积之后尺寸保持不变呢?
首先,我们从数学推导开始,也就是上面给出的两个尺寸计算公式。这里,更清晰地,我们记
- 最原始的数据尺寸为$i$
- 卷积部分的卷积核尺寸为$k_1$,逆置卷积的卷积核尺寸为$k_2$
- 卷积部分的步长为$s_1$,逆置卷积部分的步长为$s_2$
- 卷积部分的填充为$p_1$,逆置卷积部分的填充为$p_2$
- 卷积输出尺寸为$z$,逆置卷积输出尺寸为$o$
- 暂且认为逆置卷积特有的$op=0$,原因按下不表
定义了更加清晰的数学符号后,代入上述公式,得到
于是,将(3)式代入(4)式,我们得到最终输出尺寸和最初输入尺寸之间的代数关系
注意,实际编程时,$z$的结果早已确定,而不是可以人为地和$s_2$进行可能存在的约分。那么为了能够去除此处的向下取整符号,我们简单分情况讨论一下。
最简单的情况:$s_1=1$。此时有
这时,逆置卷积层和卷积层的各个参数保持一致(即$p_1=p_2,k_1=k_2,s_1=s_2$,代入上式得到$o=i$),便可以使得输入数据尺寸保持不变(特征图$S_1$通过卷积层、逆置卷积层后得到的特征图$S_2$,两者尺寸一致即$S_1=S_2$)。
稍复杂的情况:$s_1 \ne 1$但是$s_1 | (i+2p_1-k_1)$(整除)。此时操作同上,各个参数对应相等即可。
最复杂的情况:$s_1 \ne 1$且不存在整除。此时,为了保持数据尺寸不变,就需要用上之前提过的output_padding($op$)了。此前情况下我们认为$op=0$,设置这个属性的值不为零,其他的各个参数对应相等,可以使得$o$与$i$相等。
综上所述,在设计模型时,有时需要精心设计卷积层和逆置卷积的各个参数,使得数据尺寸能够前后匹配一致。如何选择参数上面的数学分析已经给出。