感受野就是输出的feature map中的一个像素点对应到输入图像的映射;下图中特征点(绿色和黄色)对应的阴影部分即为感受野。

左边的图为正常的普通卷积过程;右边的为输入和输出大小一样的卷积过程,采用的方法是在得到的feature map中的特征点之间加入0(与带洞卷积类似,但不是一样的)

右边的好处是,可以明显的观察到每个特征点所映射的位置;特征点位于感受野面积的中心。

增大下层感受野的方式之一:stride >1 的一个作用就是增大下层的感受野;大卷积核也增大感受野,带洞卷积也增大。

感受野计算公式:RF = ((RF -1)* stride) + fsize    其中公式里RF为上一层的感受野,第一次一般为1,fsize是kernel size,这个公式是用来计算多层卷积层的感受野的。

感受野计算时有下面的几个情况需要说明:

  (1)第一层卷积层的输出特征图像素的感受野的大小等于滤波器的大小

  (2)深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系

  (3)计算感受野大小时,忽略了图像边缘的影响,即不考虑padding的大小

感受野以及带洞卷积

 

带洞卷积是卷积核带洞,动画演示效果图链接:https://www.zhihu.com/question/54149221

感受野以及带洞卷积感受野以及带洞卷积

 

 带洞卷积提出的目的,普通的fcn等都是需要卷积之后进行池化,池化的目的一是减少参数,二是增大感受野,但是之后还需要进行unsampling,这时就不可避免的会漏掉某些信息,结果会很

粗糙;人们就想有么有一种方法可以不进行池化达到同样的目的,就提出了带洞卷积,增大感受野的同时不损失信息。

Deeplab这里使用了一个非常优雅的做法:将VGG网络的pool4和pool5层的stride由原来的2改为了1,再加上 1 padding。就是这样一个改动,使得vgg网络总的stride由原来的32变成8,进而使得在输入图像为514x514时,fc7能得到67x67的score map, 要比FCN确实要dense很多很多。

普通的卷积的卷积核上的相邻的权重在feature map上的映射是连续的,如果使stride从2变为1,那么就要使用这种带洞卷积来保持这一步的感受野不变;

如果再增加padding大小,依然不会使结果粗糙,因为是带洞卷积,连接是skip的,所以2个padding不会同时和一个filter相连。

带洞卷积能够保证池化后的感受野不变,从而可以fine tune,同时也能保证输出的结果更加精细。

带洞卷积的特点是卷积核的参数个数保持不变,感受野的大小随着“dilation rate”参数的增加呈指数增长

总结:

带洞卷积保持不改变卷积核大小,参数不变的同时,也保证了输出特征映射feature map的大小不变,或者说不缩小feature  map 的大小的同时保持感受野大小不变,一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,但参数数量仅为9个。

 

对于标准的k*k卷积操作,stride为s,分三种情况:

(1)s > 1,感受野增大,卷积后图像尺寸较小;

(2)s = 1,步长为1的卷积,合理设置padding,卷积的图像输入与输出有相同的尺寸大小;

(3)0 < s < 1,fractionally strided convolution,相当于对图像做upsampling。比如s=0.5时,意味着在图像每个像素之间padding一个空白像素后,stride改为1做卷积,得到的feature map尺寸增大一倍。

而dilated conv不是在像素之间padding空白的像素,而是在已有的像素的基础上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight,达到一次卷积看到的空间范围变大的目的。

参考自:https://blog.csdn.net/u013250416/article/details/81346510

    https://blog.csdn.net/junparadox/article/details/52610744