CNN感受视野(receptive field)计算方法(ROI如何对应到feature map):宽度计算和坐标转换

feature map: 首先,介绍下什么是CNN的feature map,我觉得叫特征映射最合适,如图为AlexNet的结构图,输入的是一个224*224*3的RGB图像,通过卷积层和池化层进行特征提取,后面的图层在全连接层之前都是3维的图层,并且是多层的2维图,例如feature map1的维度为55*55*96,即96个55*55的二维图,每一个2维图对应一个卷积核滤波操作后得到的特征映射,即不同的卷积核滤波后可以提取到不同的特征,换言之就是将图像的不同特征通过卷积滤波映射到不同的图层,故称之为feature map(特征映射)。

感受视野(receptive field):CNN中,某一输出层feature map中一个元素点(这里我们还是称之为像素点)对应的输入层区域的大小,被称作感受视野(receptive field)。例如,feature map2的一个像素点对应feature map1的一个5*5像素区域,其坐标取决于卷积核滤波的坐标位置。

卷积层\池化层感受视野大小

卷积层\池化层输出的feature map的一个像素对应的输入层的感受视野大小等于滤波器的大小。那么多个像素点对应的输入层感受视野大小呢?我下面来推导一下:

感受视野大小必然有kernel size(ks, 卷积核大小)、stride(str,步长)、padding(pad,全零填充,保持原有尺寸)、output size(ops,输出像素点尺寸(二维))和input size(ips,输入像素点尺寸(二维),也就是感受视野尺寸),我们首先推导出卷积的输入尺寸ips(感受视野大小)和输出尺寸ops间的关系如下:

ops=(ips-ks)/str+1(1)

反过来可以推导出ipsops关系:

ips=(ops-1)\times{str}+ks(2)

注意这里是单层卷积\池化层的输入输出关系。

这里给出alexnet的感受视野表(各个网络层对应的原始输入图片的感受视野),我们通过对符号加下标层号的方式来表示第几层,例如第3层Conv2的ops表示为ops_3,我们现在利用之前公式(1)推导Conv2在原始图像的感受视野宽度,这里特指Conv2的一个像素点对应最初RGB图像输入像素点宽度(卷积核长宽相同,这里只以宽度为例,其实是一样的):

Conv2层(即Conv2卷积后输出的特征图)在Pooling1层的感受视野宽度为:(1-1)\times1+5=5

Conv2层在Conv1层的感受视野宽度为:(5-1)\times2+3=11

Conv2层在输入图像的感受视野宽度为:(11-1)\times4+11=51

其他层同样可用类似方法计算。

下面推导出一种更简单的递推计算感受视野(这里特指对输入图像的感受视野)的公式,设第i层的感受视野是FR_i,显然

FR_1=ks_1

接着我们推导FR_2,同样其视野宽为一个kernel所有像素点视野宽的并集,kernel滤波的第一个像素点对应的视野宽度为FR_1=ks_1,从第二个点开始额外增加的视野宽,取决于第一层的步长str_1,从第二个点开始每个点都会将视野拓宽str_1,故可以得到

FR_2=(ks_2-1)\times{str_1}+ks_1=(ks_2-1)\times{str_1}+FR_1

接着我们推导FR_3,同样其视野宽为一个kernel所有像素点视野宽的并集且kernel滤波的第一个像素点对应的视野宽度为FR_2,从第二个点开始由于第二层步长为str_1,其在第二层的视野拓宽了str_2,而由于第二层每一个点都会在第一层拓宽str_1,故从第二个点开始每个点都会将视野拓宽str_1\times{str_2},故可以得到

FR_3=(ks_3-1)\times{str_1}\times{str_2}+FR_2

显然根据递推关系,我们可以得到FR_{i+1}FR_i间的递推关系(注意这里要满足卷积核宽度大于步长,当然这通常是满足的):

FR_{i+1}=(ks_{i+1}-1)\times\prod_{k=1}^i{str_k}+FR_i(3)

输入层1,可以看作卷积核为1,步长为1,同样满足此公式,我们可以马上通过AlexNet表验证下前三层:

FR1=(11-1)\times 1+1=11

FR2=(3-1)\times 1 \times 4+11=19

FR3=(5-1)\times 1 \times 4 \times 2+19=51
坐标转换:

这里坐标的定义以图的左上角为(0,0)点,向右向下均为正像素点个数-1,设i层坐标像素的坐标点为p_i,注意对于视野区域这里的坐标是指其中心点坐标,那么我们容易得到相邻层坐标的关系:

p_i=str_i \times p_{i+1}+(ks_i-1)/2-padding(4)

注意这里的padding是指左边和上边的零点个数,举个例子,一个4 \times 4的原图,用3 \times 3的卷积核滤波,则生成2 \times 2的特征图,若p_2=(1,1),可以反推出:

p_1=(1,1)*1+(((3-1)/2,(3-1)/2)-(0,0))=(2,2)

公式(1)(2)(3)(4)是经常用到的,希望做CNN相关的小伙伴们能熟记于心,不但编程需要,面试的时候也经常问哦(●'◡'●)。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值