感受野是卷积网络一个十分重要的概念,我们在详解卷积神经网络CNN 一文中简单介绍了下其概念以及用了一个例子来直观说明感受野的计算。 这里我们将尝试推导一下其计算公式,为此我们需要先明确几点:
-
感受野是指卷积神经网络各输出特征图中的每个像素点在原始输入图片上映射区域的大小
-
卷积计算方式为,从输入图像的左上角开始,将卷积核覆盖在输入图中,对应位置的数据相乘后在进行相加,如下图所示
一定要记住这个动图,可以帮助我们更好的理解感受野的推导 ,接下来我们会用纯脑补方式进行推导。
-
特征图大小计算公式为
O w = f l o o r ( W − F w S w ) + 1 O h = f l o o r ( H − F h S h ) + 1 \begin{aligned}O_w &= floor\bigg(\frac{W-F_w}{S_w} \bigg)+1 \\ O_h &= floor\bigg(\frac{H-F_h}{S_h} \bigg)+1 \end{aligned} OwOh=floor(SwW−Fw)+1=floor(ShH−Fh)+1
设 n n n表示卷积层数, k n k_n kn表示第 n n n层卷积使用的卷积核大小, s n s_n sn表示第 n n n层卷积使用的卷积步长, r n r_n rn表示第 n n n层卷积得到的特征图的感受野, F n F_n Fn表示第 n n n层卷积得到的特征图 。
(为了简化描述,事实上卷积核大小以及特征图大小均应描述为 W ∗ H W*H W∗H的格式,这里均假设 W = H W=H W=H,且只用 W W W来描述其大小)
很明显有 r 0 = 1 、 r 1 = k 1 r_0=1、r_1=k_1 r0=1、r1=k1
在计算 r 2 r_2 r2时,我们从 F 2 F2 F2开始倒推, F 2 F2 F2 对于 F 1 F1 F1的感受野为 k 2 k_2 k2, 即 F 2 F_2 F2的一个像素点对应 F 1 F_1 F1 的区域大小为 k 2 k_2 k2, 要获取 F 1 F_1 F1的 k 2 k_2 k2区域大小,需要在第 1 1 1层卷积时,移动 k 2 − 1 k_2-1 k2−1次卷积核 k 1 k_1 k1,此时对应原图的区域大小为 ( k 2 − 1 ) s 1 + k 1 (k_2-1)s_1+k_1 (k2−1)s1+k1 ,因此有 r 2 = ( k 2 − 1 ) s 1 + k 1 = ( k 2 − 1 ) s 1 + r 1 r_2 = (k_2-1)s_1+k_1 = (k_2-1)s_1+r_1 r2=(k2−1)s1+k1=(k2−1)s1+r1 。根据倒推过程,我们可以进行正向卷积推导,即输入原图大小为 ( k 2 − 1 ) s 1 + k 1 (k_2-1)s_1+k_1 (k2−1)s1+k1 ,经过两层卷积,得到大小为 1 1 1的特征图,表示如下
( k 2 − 1 ) s 1 + k 1 ⟶ k 1 , s 1 k 2 ⟶ k 2 , s 2 1 (k_2-1)s_1+k_1 \overset{k_1,s_1}{\longrightarrow} k_2 \overset{k_2,s_2}{\longrightarrow} 1 (k2−1)s1+k1⟶k1,s1k2⟶k2,s21
也就是说,经过两层卷积之后,得到特征图的一个像素点对应原图的区域大小为 ( k 2 − 1 ) s 1 + k 1 (k_2-1)s_1+k_1 (k2−1)s1+k1 . 因此
r 2 = ( k 2 − 1 ) s 1 + k 1 = ( k 2 − 1 ) s 1 + r 1 r_2 = (k_2-1)s_1+k_1 = (k_2-1)s_1+r_1 r2=(k2−1)s1+k1=(k2−1)s1+r1
计算 r 3 r_3 r3时,仍采用倒推的方式, F 3 F_3 F3对 F 2 F_2 F2的感受野为 k 3 k_3 k3,即 F 3 F_3 F3的一个像素点对应 F 2 F_2 F2的 k 3 k_3 k3 区域大小, F 2 F_2 F2的 k 3 k_3 k3 区域大小则对应 F 1 F_1 F1的 ( k 3 − 1 ) s 2 + k 2 (k_3-1)s_2+k_2 (k3−1)s2+k2区域, F 1 F_1 F1的 ( k 3 − 1 ) s 2 + k 2 (k_3-1)s_2+k_2 (k3−1)s2+k2区域则对应原图 ( ( k 3 − 1 ) s 2 + k 2 − 1 ) s 1 + k 1 ((k_3-1)s_2+k_2-1)s_1+k_1 ((k3−1)s2+k2−1)s1+k1 的区域,因此有
r 3 = ( ( k 3 − 1 ) s 2 + k 2 − 1 ) s 1 + k 1 = ( k 3 − 1 ) s 2 s 1 + ( k 2 − 1 ) s 1 + k 1 = ( k 3 − 1 ) s 2 s 1 + ( k 2 − 1 ) s 1 + r 1 = ( k 3 − 1 ) s 2 s 1 + r 2 \begin{aligned}r_3 &= ((k_3-1)s_2+k_2-1)s_1+k_1 \\&= (k_3-1)s_2s_1+(k_2-1)s_1+k_1 \\&= (k_3-1)s_2s_1+(k_2-1)s_1+r_1 \\&= (k_3-1)s_2s_1+r_2\end{aligned} r3=((k3−1)s2+k2−1)s1+k1=(k3−1)s2s1+(k2−1)s1+k1=(k3−1)s2s1+(k2−1)s1+r1=(k3−1)s2s1+r2
倒推完成之后,我们仍进行正向卷积推导,即输入原图大小为 ( ( k 3 − 1 ) s 2 + k 2 − 1 ) s 1 + k 1 ((k_3-1)s_2+k_2-1)s_1+k_1 ((k3−1)s2+k2−1)s1+k1 ,经过三层卷积,得到大小为 1 1 1的特征图,表示如下
( ( k 3 − 1 ) s 2 + k 2 − 1 ) s 1 + k 1 ⟶ k 1 , s 1 ( k 3 − 1 ) s 2 + k 2 ⟶ k 2 , s 2 k 3 ⟶ k 3 , s 3 1 ((k_3-1)s_2+k_2-1)s_1+k_1 \overset{k_1,s_1}{\longrightarrow} (k_3-1)s_2+k_2 \overset{k_2,s_2}{\longrightarrow} k_3 \overset{k_3,s_3}{\longrightarrow} 1 ((k3−1)s2+k2−1)s1+k1⟶k1,s1(k3−1)s2+k2⟶k2,s2k3⟶k3,s31
也就是说,经过三层卷积之后,得到特征图的一个像素点对应原图的区域大小为 ( ( k 3 − 1 ) s 2 + k 2 − 1 ) s 1 + k 1 ((k_3-1)s_2+k_2-1)s_1+k_1 ((k3−1)s2+k2−1)s1+k1 . 因此有
r 3 = ( ( k 3 − 1 ) s 2 + k 2 − 1 ) s 1 + k 1 = ( k 3 − 1 ) s 2 s 1 + r 2 \begin{aligned}r_3 &= ((k_3-1)s_2+k_2-1)s_1+k_1 = (k_3-1)s_2s_1+r_2\end{aligned} r3=((k3−1)s2+k2−1)s1+k1=(k3−1)s2s1+r2
同样的方式可推理出 r 4 = ( k 4 − 1 ) s 3 s 2 s 1 + r 3 r_4=(k_4-1)s_3s_2s_1+r_3 r4=(k4−1)s3s2s1+r3
最终,可归纳出
r n = ( k n − 1 ) ∏ i = 1 n − 1 s i + r n − 1 r_n=(k_n-1)\prod\limits_{i=1}^{n-1}s_i+r_{n-1} rn=(kn−1)i=1∏n−1si+rn−1
如果你有兴趣,也可以对该过程进行正向卷积推导,即输入原图大小为 ( k n − 1 ) ∏ i = 1 n − 1 s i + r n − 1 (k_n-1)\prod\limits_ {i = 1} ^ {n-1} s_i + r_ {n-1} (kn−1)i=1∏n−1si+rn−1,经过 n n n层卷积之后得到大小为 1 1 1的特征图,表示如下
( k n − 1 ) ∏ i = 1 n − 1 s i + ( k n − 1 − 1 ) ∏ i = 1 n − 2 s i + ( k n − 2 − 1 ) ∏ i = 1 n − 3 s i + ⋯ + ( k 4 − 1 ) ∏ i = 1 3 s i + ( k 3 − 1 ) ∏ i = 1 2 s i + ( k 2 − 1 ) ∏ i = 1 1 s i + k 1 ⟶ k 1 , s 1 ( k n − 1 ) ∏ i = 2 n − 1 s i + ( k n − 1 − 1 ) ∏ i = 2 n − 2 s i + ( k n − 2 − 1 ) ∏ i = 2 n − 3 s i + ⋯ + ( k 4 − 1 ) ∏ i = 2 3 s i + ( k 3 − 1 ) ∏ i = 2 2 s i + k 2 ⟶ k 2 , s 2 ( k n − 1 ) ∏ i = 3 n − 1 s i + ( k n − 1 − 1 ) ∏ i = 3 n − 2 s i + ( k n − 2 − 1 ) ∏ i = 3 n − 3 s i + ⋯ + ( k 4 − 1 ) ∏ i = 3 3 s i + k 3 ⟶ k 3 , s 3 ( k n − 1 ) ∏ i = 4 n − 1 s i + ( k n − 1 − 1 ) ∏ i = 4 n − 2 s i + ( k n − 2 − 1 ) ∏ i = 4 n − 3 s i + ⋯ + k 4 ⋮ ⟶ k n − 2 , s n − 2 ( k n − 1 ) ∏ i = n − 1 n − 1 s i + k n − 1 ⟶ k n − 1 , s n − 1 k n ⟶ k n , s n 1 \begin{aligned}&(k_n-1)\prod\limits_{i=1}^{n-1}s_i+(k_{n-1}-1)\prod\limits_{i=1}^{n-2}s_i+(k_{n-2}-1)\prod\limits_{i=1}^{n-3}s_i + \cdots + (k_4-1)\prod\limits_{i=1}^{3}s_i+ (k_3-1)\prod\limits_{i=1}^{2}s_i+ (k_2-1)\prod\limits_{i=1}^{1}s_i+ k_1 \\ &\overset{k_1,s_1}{\longrightarrow} \\ &(k_n-1)\prod\limits_{i=2}^{n-1}s_i+(k_{n-1}-1)\prod\limits_{i=2}^{n-2}s_i+(k_{n-2}-1)\prod\limits_{i=2}^{n-3}s_i + \cdots + (k_4-1)\prod\limits_{i=2}^{3}s_i+ (k_3-1)\prod\limits_{i=2}^{2}s_i+ k_2 \\ &\overset{k_2,s_2}{\longrightarrow} \\ &(k_n-1)\prod\limits_{i=3}^{n-1}s_i+(k_{n-1}-1)\prod\limits_{i=3}^{n-2}s_i+(k_{n-2}-1)\prod\limits_{i=3}^{n-3}s_i + \cdots + (k_4-1)\prod\limits_{i=3}^{3}s_i+k_3 \\ &\overset{k_3,s_3}{\longrightarrow} \\ &(k_n-1)\prod\limits_{i=4}^{n-1}s_i+(k_{n-1}-1)\prod\limits_{i=4}^{n-2}s_i+(k_{n-2}-1)\prod\limits_{i=4}^{n-3}s_i + \cdots +k_4 \\ &\vdots \\ &\overset{k_{n-2},s_{n-2}}{\longrightarrow} \\ &(k_n-1)\prod\limits_{i=n-1}^{n-1}s_i +k_{n-1} \\ &\overset{k_{n-1},s_{n-1}}{\longrightarrow} \\ &k_n \\ &\overset{k_{n},s_{n}} {\longrightarrow} \\ &1\end{aligned} (kn−1)i=1∏n−1si+(kn−1−1)i=1∏n−2si+(kn−2−1)i=1∏n−3si+⋯+(k4−1)i=1∏3si+(k3−1)i=1∏2si+(k2−1)i=1∏1si+k1⟶k1,s1(kn−1)i=2∏n−1si+(kn−1−1)i=2∏n−2si+(kn−2−1)i=2∏n−3si+⋯+(k4−1)i=2∏3si+(k3−1)i=2∏2si+k2⟶k2,s2(kn−1)i=3∏n−1si+(kn−1−1)i=3∏n−2si+(kn−2−1)i=3∏n−3si+⋯+(k4−1)i=3∏3si+k3⟶k3,s3(kn−1)i=4∏n−1si+(kn−1−1)i=4∏n−2si+(kn−2−1)i=4∏n−3si+⋯+k4⋮⟶kn−2,sn−2(kn−1)i=n−1∏n−1si+kn−1⟶kn−1,sn−1kn⟶kn,sn1
即大小为 ( k n − 1 ) ∏ i = 1 n − 1 s i + r n − 1 (k_n-1)\prod\limits_ {i = 1} ^ {n-1} s_i + r_ {n-1} (kn−1)i=1∏n−1si+rn−1的图,经过 n n n层卷积之后,得到大小为 1 1 1的特征图,因此有 r n = ( k n − 1 ) ∏ i = 1 n − 1 s i + r n − 1 r_n =(k_n-1)\prod\limits_ {i = 1}^{n-1}s_i + r_{n-1} rn=(kn−1)i=1∏n−1si+rn−1