0
点赞
收藏
分享

微信扫一扫

感受野计算公式推导

文章目录

Receptive Field

forward

从浅层往深层计算。

示意图说明:

​图中共有三层,图像层img,第一层map1,第二层,map2。为了方便推导,我们使用一维卷积进行演示。一个正方框表示一个像素点,长条状的就是卷积核,为了清楚的分辨出卷积核移动的位置,做了颜色差别处理和长宽放大。箭头所指的是经过这次卷积后产生的图像。

rf

f i r s t = { k 1 = 4 s 2 = 3 s e c o n d = { k 2 = 3 s 1 = 1 \begin{aligned} first= \begin{cases} k_1=4 \\ s_2=3 \end{cases} \\ second= \begin{cases} k_2=3 \\ s_1=1 \end{cases} \end{aligned} first={k1=4s2=3second={k2=3s1=1
第一层卷积核fisrt大小为4,步长为3,第二层卷积核second大小为3,步长为1。

符号定义:

r i : 第 i 层 感 受 野 大 小 k i : 第 i 层 卷 积 核 大 小 s i : 第 i 层 卷 积 步 长 \begin{aligned} &r_i:第i层感受野大小 \\ &k_i:第i层卷积核大小 \\ &s_i:第i层卷积步长 \\ \end{aligned} ri:iki:isi:i
规定 r 0 = 1 r_0=1 r0=1表示图像层的感受野大小为1。推导过程中,大家可以自行发挥推导过层,其中我们可以用手动数来验证我们的推导公式是否正确。

r 1 r_1 r1表示第一层,即map1层。第一层感受野大小为4。显然:
r 1 = k 1 = 4 r_1=k_1=4 r1=k1=4

r 2 r_2 r2表示第二层,即map2层。第二层感受野大小为10。显然:
r 2 ≠ k 2 = 3 r_2\neq k_2=3 r2=k2=3
显然:
r 2 ≠ k 2 ∗ k 1 = 12 r_2 \neq k_2*k_1=12 r2=k2k1=12
当我们计算第二层 r 2 r_2 r2时,看图!感受野大小与第二层卷积核(k=3) 将 第一层map1中套起来的三个像素有关。可这三个像素在img层中涉及到的像素有重叠的。所以不能直接所不能简单的使卷积核的相乘。


第i层和i-2层的关系

接下来,我将解析如何将感受野与卷积核建立联系,此推导过程可类比于输出图像的计算公式推导。

计算 r 2 r_2 r2肯定要看第二层卷积核在map1上包括的范围。

感受野大小计算公式分解为:首项+其他项

既然上面提到有重叠,那我们利用首项+其他项的思想去重叠。

首项计算:map1中的第一个蓝框作为首项,单独拿出来,它所占的感受野大小为 k 1 k_1 k1

其他项:map1中第二红框,第三绿框作为其他项。他们在img上的包裹的图像大小为步长 s 1 s_1 s1,(黄色虚线之间)。这样计算是没有重叠的。总共包括的感受野大小为: ( k 2 − 1 ) ∗ s 1 (k_2-1)*s_1 (k21)s1

综上:
r 2 = ( k 2 − 1 ) ∗ s 1 + k 1 r_2=(k_2-1)*s_1+k_1 r2=(k21)s1+k1
此时我们建立了,第 i i i层和第 i − 2 i-2 i2层的关系。即第二层map2一个方框在图像层img包含的相邻元素的个数。

第三层:
r 3 = ( k 3 − 1 ) ∗ s 2 + k 2 r_3=(k_3-1)*s_2+k_2 r3=(k31)s2+k2
重新回顾下,计算第 r 2 r_2 r2在img的相邻元素时,我们要计算第二层卷积核在第一层map1包含相邻元素的个数,此个数就是 k 2 k_2 k2

此时我们根据上述 r 3 r_3 r3公式,知道了第三层map3在第一层map1中相邻元素的个数。

r 3 r_3 r3在map1中的个数替换 r 2 r_2 r2中的个数 k 2 k_2 k2,即可得到第三层map3在img图像上包含的相邻元素的个数。
r 3 = ( ( ( k 3 − 1 ) ∗ s 2 + k 2 ) − 1 ) ∗ s 1 + k 1 r_3=\big(((k_3-1)*s_2+k_2)-1 \big)*s_1 + k_1 r3=(((k31)s2+k2)1)s1+k1


第i层和第i-1层的关系

建立第i层和第i-1层的关系。

联立 r 2 , r 3 r_2,r_3 r2,r3,消去 k 1 k_1 k1,得到
{ r 2 = ( k 2 − 1 ) ∗ s 1 + k 1 r 3 = ( ( ( k 3 − 1 ) ∗ s 2 + k 2 ) − 1 ) ∗ s 1 + k 1 ⟹ r 3 = ( k 3 − 1 ) ∗ s 2 ∗ s 1 + r 2 \begin{aligned} &\begin{cases} r_2=(k_2-1)*s_1+k_1 \\ r_3=\big(((k_3-1)*s_2+k_2)-1 \big)*s_1 + k_1 \end{cases} \\ \Longrightarrow & \quad r_3=(k_3-1)*s_2*s_1 + r_2 \end{aligned} {r2=(k21)s1+k1r3=(((k31)s2+k2)1)s1+k1r3=(k31)s2s1+r2

归纳:
{ r 1 = k 1   ,   k = 1 r i = ( k i − 1 ) s i ∗ s i − 1 ∗ s i − 2 ∗ ⋯ ∗ s 1 + r i − 1   ,   k > 1 \begin{cases} r_1=k_1 \ , \ k=1\\ r_i=(k_i-1)s_i*s_{i-1}*s_{i-2}*\cdots *s_1 +r_{i-1} \ , \ k>1 \end{cases} {r1=k1 , k=1ri=(ki1)sisi1si2s1+ri1 , k>1
s 0 = 1 , r 0 = 1 s_0=1,r_0=1 s0=1,r0=1,则:
r i = ( k i − 1 ) ∏ j = 0 i s j + r i − 1 r_i=(k_i-1)\prod_{j=0}^{i}s_j + r_{i-1} ri=(ki1)j=0isj+ri1

backward

从后往前算,待续

举报

相关推荐

0 条评论