CV岗位面试题:感受野是什么?
文 | 七月在线
编 | 小七
解析:
某一层特征图中的一个cell,对应到原始输入的响应的大小区域。
什么是感受野
感受野(Receptive Field),指的是神经网络中神经元“看到的”输入区域,在卷积神经网络中,feature map上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野。
卷积神经网络中,越深层的神经元看到的输入区域越大,如下图所示,kernel size 均为3×3,stride均为1,绿色标记的是Layer2 每个神经元看到的区域,黄色标记的是Layer3 看到的区域,具体地,Layer2每个神经元可看到Layer1 上 3×3 大小的区域,Layer3 每个神经元看到Layer2 上 3×3 大小的区域,该区域可以又看到Layer1 上 5×5 大小的区域。
所以,感受野是个相对概念,某层feature map上的元素看到前面不同层上的区域范围是不同的,通常在不特殊指定的情况下,感受野指的是看到输入图像上的区域。
为了具体计算感受野,这里借鉴视觉系统中的概念:
准确计算感受野,需要回答两个子问,即视野中心在哪和视野范围多大。
只有看到”合适范围的信息”才可能做出正确的判断,目标识别问题中,我们需要知道神经元看到是哪个区域,才能合理推断物体在哪以及判断是什么物体。
但是,网络架构多种多样,每层的参数配置也不尽相同,感受野具体该怎么计算?
符号定义
在正式计算之前,先对数学符号做如下约定:
k:kernel size
p:padding size
s:stride size
Layer:用Layer表示feature map,特别地 Layer 0为输入图像;
Conv:用Conv表示卷积,k、p、s为卷积层的超参数,Conv l的输入和输出分别为 Layer l−1 和 Layer l+1;
n:feature map size为 n×n,这里假定height=width;
r:receptive field size为r×r,这里假定感受野为方形;
j:feature map上相邻元素间的像素距离,即将feature map上的元素与输入图像Layer
0 上感受野的中心对齐后,相邻元素在输入图像上的像素距离,也可以理解为 feature map上前进1步相当于输入图像上前进多少个像素,如下图所示,feature map上前进1步,相当于输入图像上前进2个像素,j=2;
start:feature map左上角元素在输入图像上的感受野中心坐标(start,start),即视野中心的坐标,在上图中,左上角绿色块感受野中心坐标为(0.5,0.5),即左上角蓝色块中心的坐标,左上角白色虚线块中心的坐标为(−0.5,−0.5);
l:l表示层,卷积层为Conv l,其输入feature map为Layer l−1,输出为Layer l。
感受野大小:
感受野大小的计算是个递推公式。
再看上面的动图,如果feature map Layer 2 上的一个元素A看到feature map Layer 1 上的范围为3×3(图中绿色块),其大小等于kernel size k2,所以,A看到的感受野范围r2等价于Layer 1上3×3窗口看到的Layer 0 范围,据此可以建立起相邻Layer感受野的关系,如下所示,其中rl为Layer l的感受野,rl−1为Layer l−1 的感受野:
Layer l 一个元素的感受野rl等价于Layer l−1 上k×k 个感受野的叠加;
Layer l−1 上一个元素的感受野为rl−1;
Layer l−1 上连续k 个元素的感受野可以看成是,第1个元素看到的感受野加上剩余k−1步扫过的范围,Layer l−1 上每前进1个元素相当于在输入图像上前进jl−1个像素,结果等于rl−1+(k−1)×jl−1
可视化如下图所示,
下面的问题是,jin怎么求?
Layer l 上前进1个元素相当于Layer l−1上前进sl个元素,转换成像素单位为
其中,sl为Conv l的kernel在Layer l−1 上滑动的步长,输入图像的s0=1。
根据递推公式可知:
Layer l上前进1个元素,相当于在输入图像前进了jl个像素,即前面所有层stride的连乘。
进一步可得,Layer l的感受野大小为
感受野中心
感受野中心的计算也是个递推公式。
在上一节中计算得jl,表示feature map Layer l上前进1个元素相当于在输入图像上前进的像素数目,如果将feature map上元素与感受野中心对齐,则jl为感受野中心之间的像素距离。如下图所示,
其中,各层的kernel size、padding、stride超参数已在图中标出,右侧图为feature map和感受野中心对齐后的结果。
相邻Layer间,感受野中心的关系为
所有的start坐标均相对于输入图像坐标系。其中,start0=(0.5,0.5),为输入图像左上角像素的中心坐标,startl−1表示Layer l−1左上角元素的感受野中心坐标,(kl−1)/2−pl为Layer l与Layer l−1感受野中心相对于Layer l−1坐标系的偏差,该偏差需折算到输入图像坐标系,其值需要乘上jl−1,即Layer l−1相邻元素间的像素距离,相乘的结果为{(kl−1)/2−pl}∗jl−1,即感受野中心间的像素距离——相对输入图像坐标系。至此,相邻Layer间感受野中心坐标间的关系就不难得出了,这个过程可视化如下。
知道了Layer l左上角元素的感受野中心坐标(startl,startl),通过该层相邻元素间的像素距离jl可以推算其他元素的感受野中心坐标。
小结
由上面的递推公式,就可以从前向后逐层计算感受野了,在线可视化计算可参见Receptive Field Calculator:https://fomoro.com/research/article/receptive-field-calculator
Layer l的感受野大小与sl、pl无关,即当前feature map元素的感受野大小与该层相邻元素间的像素距离无关;
为了简化,通常将padding size设置为kernel的半径,即p=k−12,可得startl=startl−1,使得feature map Layer l 上(x,y)位置的元素,其感受野中心坐标为(xjl,yjl);
对于空洞卷积dilated convolution,相当于改变了卷积核的尺寸,若含有dilation rate参数,只需将kl替换为dilation rate∗(kl−1)+1 ,dilation rate=1时为正常卷积;
对于pooling层,可将其当成特殊的卷积层,同样存在kernel size、padding、stride参数;
非线性激活层为逐元素操作,不改变感受野。
评论