不积跬步,无以至千里;不积小流,无以成江海。——荀子

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 感受野的概念

在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域。
 
感受野有什么用呢?
  • 一般task要求感受野越大越好,如图像分类中最后卷积层的感受野要大于输入图像,网络深度越深感受野越大性能越好
  • 密集预测task要求输出像素的感受野足够的大,确保做出决策时没有忽略重要信息,一般也是越深越好
  • 目标检测task中设置anchor要严格对应感受野,anchor太大或偏离感受野都会严重影响检测性能
 

2.感受野的计算

 
计算方法有2种,分别为 从后向前计算方法和从前往后计算方法。
从后向前计算方法,极其简单适合人脑计算,看看网络结构就知道感受野了。
计算方法可以参考这篇文章:卷积神经网络中感受野的详细介绍(https://blog.csdn.net/program_developer/article/details/80958716
 
从前往后计算方法,比较规律适合电脑计算,简单编程就可以计算出感受野大小和位置。

 

 

其中 表示特征感受野大小, 表示层数, , 表示输入层, ,
比如下图(该图为了方便,将二维简化为一维),这个三层的神经卷积神经网络,每一层卷积核的 , ,那么最上层特征所对应的感受野就为如图所示的7x7。
 
 
第一层特征,感受野为3
 
 
第二层特征,感受野为5
第三层特征,感受野为7
 
如果有dilated conv的话,计算公式为
 
 
 
 
以下是一些显(bu)而(hui)易(zheng)见(ming)的结论(基于从后往前的计算方法得出的结论):
  • 初始feature map层的感受野是1
  • 每经过一个conv kxk s1的卷积层,感受野 r = r + (k - 1),常用k=3感受野 r = r + 2, k=5感受野r = r + 4
  • 每经过一个conv kxk s2的卷积层或max/avg pooling层,感受野 r = (r x 2) + (k -2),常用卷积核k=3, s=2,感受野 r = r x 2 + 1,卷积核k=7, s=2, 感受野r = r x 2 + 5
  • 每经过一个maxpool2x2 s2的max/avg pooling下采样层,感受野 r = r x 2
  • 特殊情况,经过conv1x1 s1不会改变感受野,经过FC层和GAP层,感受野就是整个输入图像
  • 经过多分枝的路径,按照感受野最大支路计算,shotcut也一样所以不会改变感受野
  • ReLU, BN,dropout等元素级操作不会影响感受野
  • 全局步进等于经过所有层的步进累乘,
  • 经过的所有层所加padding都可以等效加在输入图像,等效值P,直接用卷积的输入输出公式 反推出P即可
 
 
 
  • 步进stride=1的卷积层线性增加感受野,深度网络可以通过堆叠多层卷积增加感受野
  • 步进stride=2的下采样层乘性增加感受野,但受限于输入分辨率不能随意增加
  • 步进stride=1的卷积层加在网络后面位置,会比加在前面位置增加更多感受野,如stage4加卷积层比stage3的感受野增加更多
  • 深度CNN的感受野往往是大于输入分辨率的,如上面ResNet-101的843比输入分辨率大3.7倍
  • 深度CNN为保持分辨率每个conv都要加padding,所以等效到输入图像的padding非常大
 
 

有效感受野

NIPS 2016论文Understanding the Effective Receptive Field in Deep Convolutional Neural Networks提出了有效感受野(Effective Receptive Field, ERF)理论,论文发现并不是感受野内所有像素对输出向量的贡献相同,在很多情况下感受野区域内像素的影响分布是高斯,有效感受野仅占理论感受野的一部分,且高斯分布从中心到边缘快速衰减,下图第二个是训练后CNN的典型有效感受野。
 
这点其实也很好理解,继续回到最初那个微型CNN,我们来分析第1层,下图标出了conv3x3 s1卷积操作对每个输入值的使用次数,用蓝色数字表示,很明显越靠近感受野中心的值被使用次数越多,靠近边缘的值使用次数越少。5x5输入是特殊情况刚好符合高斯分布,3x3输入时所有值的使用次数都是1,大于5x5输入时大部分位于中心区域的值使用次数都是9,边缘衰减到1。每个卷积层都有这种规律,经过多层堆叠,总体感受野就会呈现高斯分布。
 
 

四、应用

  • 分类

 
Xudong Cao写过一篇叫《A practical theory for designing very deep convolutional neural networks》的technical report,里面讲设计基于深度卷积神经网络的图像分类器时,为了保证得到不错的效果,需要满足两个条件:
 
Firstly, for each convolutional layer, its capacity of learning more complex patterns should be guaranteed; Secondly, the receptive field of the top most layer should be no larger than the image region.
其中第二个条件就是对卷积神经网络最高层网络特征感受野大小的限制。
 
  • 目标检测

现在流行的目标检测网络大部分都是基于anchor的,比如SSD系列,v2以后的yolo,还有faster rcnn系列。
基于anchor的目标检测网络会预设一组大小不同的anchor,比如32x32、64x64、128x128、256x256,这么多anchor,我们应该放置在哪几层比较合适呢?这个时候感受野的大小是一个重要的考虑因素。
放置anchor层的特征感受野应该跟anchor大小相匹配,感受野比anchor大太多不好,小太多也不好。如果感受野比anchor小很多,就好比只给你一只脚,让你说出这是什么鸟一样。如果感受野比anchor大很多,则好比给你一张世界地图,让你指出故宫在哪儿一样。
《S3FD: Single Shot Scale-invariant Face Detector》这篇人脸检测器论文就是依据感受野来设计anchor的大小的一个例子,文中的原话是
we design anchor scales based on the effective receptive field
《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》这篇论文在设计多尺度anchor的时候,依据同样是感受野,文章的一个贡献为
We introduce the Multiple Scale Convolutional Layers
(MSCL) to handle various scales of face via enriching
receptive fields and discretizing anchors over layers
 
 
ECCV2016的SSD论文指出更好的anchar的设置应该对齐感受野:
 
 
参考:

卷积神经网络的感受野https://zhuanlan.zhihu.com/p/44106492

关于感受野的总结https://zhuanlan.zhihu.com/p/40267131

Understanding the Effective Receptive Field in Deep Convolutional Neural Networkshttps://arxiv.org/pdf/1701.04128v2.pdf

卷积神经网络中感受野的详细介绍https://blog.csdn.net/program_developer/article/details/80958716

 
 
 
 
 

 

posted on 2020-05-25 18:25  hejunlin  阅读(1071)  评论(0编辑  收藏  举报