关于感受野的总结

写在前面:一直以来,极市得到了许许多多开发者的关注和支持,极市的成长离不开各位开发者的见证,为此我们特开设极市开发者祝愿帖,期待听到您真实的心声和建议~φ (> ω<*) :

极市开发者祝愿活动 (有奖回馈)

感受野是卷积神经网络里面最重要的概念之一,为了更好地理解卷积神经网络结构,甚至自己设计卷积神经网络,对于感受野的理解必不可少。


一、定义

感受野被定义为卷积神经网络特征所能看到输入图像的区域,换句话说特征输出受感受野区域内的像素点的影响。

比如下图(该图为了方便,将二维简化为一维),这个三层的神经卷积神经网络,每一层卷积核的 kernel_size=3, stride=1 ,那么最上层特征所对应的感受野就为如图所示的7x7。

file
△感受野示例[1]


二、计算方式

file


第一层特征,感受野为3
file
file

△第1层感受野[1]


第二层特征,感受野为5
file
file

△第2层感受野[1]


第三层特征,感受野为7
file

file
△第3层感受野[1]


如果有dilated conv的话,计算公式为

file

三、更上一层楼

上文所述的是理论感受野,而特征的有效感受野(实际起作用的感受野)实际上是远小于理论感受野的,如下图所示。具体数学分析比较复杂,不再赘述,感兴趣的话可以参考论文[2]。

file
△有效感受野示例[2]


file
file

△两层3x3 conv计算流程图

四、应用

分类
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


引用:

[1]convolutional nerual networks

[2]Understanding the Effective Receptive Field in Deep Convolutional Neural Networks

CV干货 微信公众号: 极市平台
ID: extrememart