1 经过卷积层前后的变化
假设输入数据为 channel1 × nh × nw 经过一个 kh × kw 的卷积核,步长为 s,padding为 p,则输出的空间维度为 ⌊( nh − kh + p ) / s + 1⌋ × ⌊( nw − kw + p ) / s + 1⌋,易知,输出空间存在 ⌊( nh − kh + p ) / s + 1⌋ * ⌊( nw − kw + p ) / s + 1⌋ 个单元。
下面用 mh 和 mw 分别代表输出的空间维度,此时输出空间内的一个单元在输入空间上的感受野为 kh * kw,那么输出空间内全部单元的感受野之和为 mh * mw * kh * kw,而输出空间在输入空间上感受野最大即为输入空间本身,即 nh * nw 。
下面根据不同情况分析(不考虑 padding):
- kh > sh && kw > sw 时,输入空间上的一个单元会成为输出空间的多个单元的感受野,这样就会导致输出空间内全部单元的感受野之和大于输入空间本身,大于的具体数量即为重复计算的感受野。
- kh < sh && kw < sw 时,输入空间上的部分单元不会成为输出空间的任何单元的感受野,这样就会导致输出空间内全部单元的感受野之和小于输入空间本身,小于的具体数量即为输入空间没有被感受的单元。
- kh == sh && kw == sw 时,输出空间内全部单元的感受野之和等于输入空间本身。
2 卷积核的合并
要保证数个卷积层相当于一个卷积层,要做到两者对相同维度的输入,有相同维度的输出。
因为深度学习中卷积核大小往往大于步长,下面我们只考虑 kh > sh && kw > sw && p == 0 && sn == sw 时的情况。
2.1 两个3 × 3卷积核相当于一个5 × 5卷积核
假设输入数据为 channel1 × nh × nw,经过一个 channel1 × 3 × 3 的卷积核,输出的空间维度即为 channel1 × ⌊( nh − 3 ) / sh + 1⌋ × ⌊( nw − 3 ) / sw + 1⌋。
设 ⌊( nh − 3 ) / sh + 1⌋,⌊( nw − 3 ) / sw + 1⌋ 分别为 mh 和 mw,再经过一个 channel1 × 3 × 3 的卷积核,输出的空间维度即为 channel1 × ⌊( mh − 3 ) / sh + 1⌋ × ⌊( mw − 3 ) / sw + 1⌋。
- 当 sn == sw == 1 时,最终输出的空间维度为 channel1 × nh - 4 × nw - 4,将 sn == sw == 1 带入维度输出公式并与 nh - 4,nw - 4 分别联立,可以得到 kh == kw == 5。即两个3 × 3卷积核相当于一个5 × 5卷积核。
- 当 sn == sw == 2 时:
- 当 nh,nw 为偶数时,最终输出的空间维度为 channel1 × ⌊ nh / 2 ⌋ - 2 × ⌊ nw / 2 ⌋ - 2,将 sn == sw == 1 带入维度输出公式并与 nh / 2 - 2,nw / 2 - 2 分别联立,可以得到 kh == kw == n / 2 + 3。即两个3 × 3卷积核相当于一个 (n / 2 + 3) × (n / 2 + 3) 卷积核。
- 当 nh,nw 为奇数时,最终输出的空间维度为 channel1 × ⌊ nh / 2 ⌋ - 1 × ⌊ nw / 2 ⌋ - 1,将 sn == sw == 1 带入维度输出公式并与 ⌊ nh / 2 ⌋ - 1,⌊ nw / 2 ⌋ - 1 分别联立,可以得到 kh == kw == ⌈ n / 2 ⌉ + 2。即两个3 × 3卷积核相当于一个 (⌈ n / 2 ⌉ + 2) × (⌈ n / 2 ⌉ + 2) 卷积核。
2.2 三个3 × 3卷积核相当于一个7 × 7卷积核
同理,当 sn == sw == 1 时,三个3 × 3卷积核相当于一个7 × 7卷积核。
2.3 总结
涉及多个卷积层的问题,要先一层层将输入空间维度、卷积核维度、步长代入,一层层计算到最后一层,算出最终输出的空间维度,将其作为结果,与初始输入空间维度联立,根据不同步长,可以得到相应的合并后卷积核。