感受野详解

article/2025/9/14 17:07:01

目录

  • 概念
  • 举例
  • 感受野的计算规律
  • 两种计算感受野的方法
    • 从前往后
    • 从后往前
  • 推导VGG16网络的感受野
    • 结构
    • 从后往前
    • 从前往后
  • 感受野大于图片
  • 为什么要增大感受野

概念

  • 在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域,如图1所示。
    在这里插入图片描述
  • 在典型CNN结构中,FC层每个输出节点的值都依赖FC层所有输入,而CONV层每个输出节点的值仅依赖CONV层输入的一个区域, 这个区域之外的其他输入值都不会影响输出值,该区域就是感受野。

举例

  • 两层3*3的卷积核卷积操作之后的感受野是5*5,其中卷积核(filter)的步长(stride)为1、padding为0,如图所示:
    在这里插入图片描述
  • 三层3*3卷积核操作之后的感受野是7*7,其中卷积核的步长为1,padding为0,如图所示:
    在这里插入图片描述

感受野的计算规律

  • 设感受野为r(即r为一个元素映射到输入图像的正方形矩阵的边长,这里假设卷积核为正方形,所以映射也是正方形),s为步长,s1表示步长=1,s2表示步长=2,k为卷积核尺寸。
  • 初始feature map的感受野是1,即 r 0 = 1 r_{0}=1 r0=1,很明显嘛,输入图像还没有经过任何操作,每个元素的感受野当然是1。
  • 规定初始s是1,即 s 0 = 1 s_{0}=1 s0=1
  • 每经过一个conv k*k s,感受野按照如下公式变化: r i + 1 = r i + ( k i + 1 − 1 ) ∗ ∏ n = 0 i s n r_{i+1}=r_{i}+(k_{i+1}-1)*\displaystyle\prod_{n=0}^{i} s_{n} ri+1=ri+(ki+11)n=0isn
    一定要注意这个公式最后的连乘,我自己推公式的时候以为不是连乘而是 s i s_{i} si,其实是是不对的。因为很多博客的推导感受野公式的思路和我不一样,直到看到这篇博客是用的连乘我才意识到自己推导的公式的错误所在。博客链接:https://www.cnblogs.com/ocean1100/p/9864193.html
  • 由上述公式可知, r 1 = k 1 r_{1}=k_{1} r1=k1必然成立,也就是说,第一层的感受野必然等于卷积核的尺寸,这与已知符合。
  • 池化操作和卷积操作都对应上面的公式,其实仔细想想,池化和卷积其实是很相似的。
  • 上述公式是从前往后计算感受野的公式,而从后往前计算感受野可以用下面这个公式:
    r i − 1 = ( r i − 1 ) ∗ s i − 1 + k i − 1 r_{i-1}=(r_{i}-1)*s_{i-1}+k_{i-1} ri1=(ri1)si1+ki1
    此时最后一层感受野的大小=卷积核的大小,其实这种方法的原理就是倒过来看问题,你想最后一层感受野就像是细胞,模拟细胞分裂的过程, + k i − 1 +k_{i-1} +ki1其实是从 r i r_{i} ri中取出1来,这个细胞其实是由前一层卷过来的,卷积核尺寸是 k i − 1 k_{i-1} ki1,所以要加 k i − 1 k_{i-1} ki1,而 剩下的 r i 剩下的r_{i} 剩下的ri,即 r i − 1 r_{i}-1 ri1个感受野则是对应步长的。其实文字不太好叙述,大家需要好好理解一下,从后往前的好处就是不用计算s的叠乘了,不过这对于计算机来说并不是什么难事,从后往前是一种反向思维,我个人感觉从前往后更好理解一些。
  • 特殊情况,经过conv1x1 s1不会改变感受野,经过FC层和GAP层,感受野就是整个输入图像
  • 经过多分枝的路径,按照感受野最大支路计算,shotcut也一样所以不会改变感受野
  • ReLU, BN,dropout等元素级操作不会影响感受野
  • 全局步进等于经过所有层的步进累乘,即 ∏ n = 0 i s n \displaystyle\prod_{n=0}^{i} s_{n} n=0isn
  • 经过的所有层所加padding都可以等效加在输入图像,等效值P,直接用卷积的输入输出公式
    f o u t = ( f i n − k + 2 ∗ p ) / s + 1 f_{out}=(f_{in}-k+2*p)/s+1 fout=(fink+2p)/s+1
    反推出P即可

两种计算感受野的方法

从前往后

  • 我们来计算一个简单的例子,先学会计算感受野,再来分析复杂的网络。
    在这里插入图片描述
    根据上面的规律,我们可以计算:
    r 0 = 1 , s 0 = 1 r_{0}=1,s_{0}=1 r0=1s0=1
    r 1 = 3 r_{1}=3 r1=3
    r 2 = 3 + ( 2 − 1 ) ∗ 1 = 4 r_{2}=3+(2-1)*1=4 r2=3+(21)1=4(r2即对应pool1层)
    r 3 = 4 + ( 3 − 1 ) ∗ 2 = 8 r_{3}=4+(3-1)*2=8 r3=4+(31)2=8
    r 4 = 8 + ( 2 − 1 ) ∗ 2 = 10 r_{4}=8+(2-1)*2=10 r4=8+(21)2=10(r4即对应pool2层)
    r 5 = 10 + ( 3 − 1 ) ∗ 4 = 18 r_{5}=10+(3-1)*4=18 r5=10+(31)4=18
    r 6 = 18 + ( 3 − 1 ) ∗ 4 = 26 r_{6}=18+(3-1)*4=26 r6=18+(31)4=26(r6即对应conv4层)
    r 7 = 26 + ( 2 − 1 ) ∗ 4 = 30 r_{7}=26+(2-1)*4=30 r7=26+(21)4=30

从后往前

  • 我们从最后一层的池化层开始计算感受野:
    p o o l 3 : R = 2 (最后一层池化层输出特征图的感受野大小等于卷积核的大小) pool3:R=2(最后一层池化层输出特征图的感受野大小等于卷积核的大小) pool3R=2(最后一层池化层输出特征图的感受野大小等于卷积核的大小)
    c o n v 4 : R = ( 2 − 1 ) ∗ 1 + 3 = 4 。 conv4:R=(2-1)*1+3=4。 conv4R=211+3=4
    c o n v 3 : R = ( 4 − 1 ) ∗ 1 + 3 = 6 。 conv3:R=(4-1)*1+3=6。 conv3R=411+3=6
    p o o l 2 : R = ( 6 − 1 ) ∗ 2 + 2 = 12 。 pool2:R=(6-1)*2+2=12。 pool2R=612+2=12
    c o n v 2 : R = ( 12 − 1 ) ∗ 1 + 3 = 14 。 conv2:R=(12-1)*1+3=14。 conv2R=1211+3=14
    p o o l 1 : R = ( 14 − 1 ) ∗ 2 + 2 = 28 。 pool1:R=(14-1)*2+2=28。 pool1R=1412+2=28
    c o n v 1 : R = ( 28 − 1 ) ∗ 1 + 3 = 30 。 conv1:R=(28-1)*1+3=30。 conv1R=2811+3=30

推导VGG16网络的感受野

结构

在这里插入图片描述

从后往前

在VGG16中:pool5中
pool5:RF=2
conv5_3 :RF=(2-1)*1+3=4
conv5_2 : RF=(4-1)*1+3=6
conv5_2: RF=(6-1)*1+3=8
conv5_1: RF=(8-1)*2+2=16
pool4 : RF=(8-1)*2+2=16
conv4_3: RF=(16-1)*1+3=18
conv4_2: RF=(18-1)*1+3=20
conv4_1 : RF=(20-1)*1+3=22
pool3: RF=(22-1)*2+2=44
conv3_3: RF=(44-1)*1+3=46
conv3_2: RF=(46-1)*1+3=48
conv3_1: RF=(48-1)*1+3=50
pool2: RF=(50-1)*2+2=100
conv2_2: RF=(150-1)*1+3=152
conv2_1: RF=(152-1)*1+3=154
pool1: RF=(154-1)*2+2=208
conv1_2: RF=(208-1)*1+3=210
conv1_1: RF=(210-1)1+3=212

从前往后

conv1_1: RF=3
conv1_2: RF=3+(3-1)*1=5
pool1: RF=5+(2-1)*1=6
conv2_1: RF=6+(3-1)*2=10

后面的数在上图的栏目里都有了,我就不一一计算了,最终结果也是212

感受野大于图片

  • 感受野大于图片怎么理解呢?其实是由于存在padding操作导致的。padding操作对于感受野的意义就相当于扩大图片。扩大后的尺寸可以用我在规律里最后一条提到的公式去计算,相当于去掉所有步骤中的padding操作去计算实际的图片尺寸,这个没有什么意义……只要知道为啥感受野大于图片就好了。

为什么要增大感受野

  • 卷积、池化都有一个重要作用就是增大感受野,为什么感受野这么重要呢?
  • 前面看过感受野的定义,是表示在前几层对应的图像区域的大小,那么为了保证所利用的信息是全局的,而不仅仅是局部信息,我们就应该保证感受野较大。同时,合理计算感受野,可以保证效率,例如,输入图像大小是128*128,如果最后一层的感受野已经可以超过128,我们可以认为在做最后的分类判断时所用到的特征已经涵盖了原始图像所有范围的信息了。如果能够尽可能的降低网络的参数总量,也十分重要。

http://chatgpt.dhexx.cn/article/6OOOskcU.shtml

相关文章

深度理解感受野(一)什么是感受野?

Introduction 经典目标检测和最新目标跟踪都用到了RPN(region proposal network),锚框(anchor)是RPN的基础,感受野(receptive field, RF)是anchor的基础。本文介绍感受野及其计算方法,和有效感受野概念 什么是感受野? 感受野与视觉 感受…

感受野的含义及计算方法

1 感受野(Receptive Field)的概念 感受野(Receptive Field)的概念:在卷积神经网络中,感受野的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始输入图像上映射的区域大小。第一层卷积层的输出特征图像素的感…

感受野是什么?

在卷积神经网络中,感受野(Receptive Field)是指特征图上的某个点能看到的输入图像的区域,即特征图上的点是由输入图像中感受野大小区域的计算得到的。神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的…

细说卷积神经网络(CNN)中所谓的“感受野”(Receptive Field)

感受野 一、感受野1.全连接网络与卷积神经网络2.进一步体验“感受野”3.计算感受野通用方式4.综合实例5.总结 一、感受野 感受野:卷积神经网络中每个网络层输出的特征图中的单个元素映射回原始输入特征中的区域大小,网络层越深,其输出特征的元…

【Kafka】10道不得不会的 Kafka 面试题

博主介绍: 🚀自媒体 JavaPub 独立维护人,全网粉丝15w,csdn博客专家、java领域优质创作者,51ctoTOP10博主,知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和副业。🚀 公众号&…

Java程序员必备的50道Kafka面试题及解析,面试再也不怕问Kafka了

前言 Apache Kafka的受欢迎程度很高,Kafka拥有充足的就业机会和职业前景。此外,在这个时代拥有kafka知识是一条快速增长的道路。所以,在这篇文章中,我们收集了Apache Kafka面试中常见的问题,并提供了答案。因此&#…

Kafka面试题总结

1、kafka是什么? 可以用来做什么? Kafka 是一个分布式的、高吞吐量的、可持久性的、自动负载均衡的消息队列。 它不仅可以实现传统意义上MQ功能,异步、解耦、削峰。 还可以作为大数据的流处理平台。 2、为什么kafka安装需要依赖Zookeeper? 配置中心&#xf…

kafka面试题知识点整理

kafka-面试题整理 刚刚学了kafka,整理一些面试题知识点,帮助记忆1、什么是kafka2、什么是消息队列3、kafka通信流程4、Leader选举流程5、副本及同步原理6、消费者消费数据的方式7、分区分配策略以及原理8、如何保证消息的可靠性9、数据有序/乱序10、幂等…

kafka面试题

1.Kafka数据积压如何处理? 1. 实时/消费任务挂掉导致的消费滞后 a. 任务重新启动后直接消费最新的消息,对于"滞后"的历史数据采用离线程序进行"补漏"。b. 任务启动从上次提交offset处开始消费处理 如果积压的数据量很大&#xff0c…

Kafka 面试题,看这一篇就够了

Kafka 基础 消息系统的作用 大部分小伙伴应该都清楚,这里用机油装箱举个例子: 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。 引入一个场景,我们知道中国移动,中国联…

32 道常见的 Kafka 面试题

最近很多粉丝后台留言问了一些大数据的面试题,其中包括了大量的 Kafka、Spark等相关的问题,所以我特意抽出时间整理了一些大数据相关面试题,本文是 Kafka 面试相关问题,其他系列面试题后面会陆续整理,欢迎关注过往记忆…

Kafka面试题及答案整理 110道 (持续更新)

最新Kafka面试题【附答案解析】Kafka面试题及答案,Kafka最新面试题及答案,Kafka面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发…

2022 最新 Kafka 面试题

Kafka 面试题 1、如何获取 topic 主题的列表2、生产者和消费者的命令行是什么?3、consumer 是推还是拉?4、讲讲 kafka 维护消费状态跟踪的方法5、讲一下主从同步\6、为什么需要消息系统,mysql 不能满足需求吗?1.解耦:2…

20道常见的kafka面试题以及答案

JAVA面试宝典,搞定JAVA面试,不再是难题,系列文章传送地址,请点击本链接。 目录 1、kafka的消费者是pull(拉)还是push(推)模式,这种模式有什么好处? 2、kafka维护消息状态的跟踪方法 3、zookeeper对于ka…

VS2017安装打包插件

1、打开VS2017:工具-》》扩展和更新-》》 2、搜索Microsoft Visual Studio 2017 Installer Projects 3、点击下载,下载完成 4、按照提示,关闭所有VS后,自动安装 5、选择修改 6、安装完成

VS2017安装CLR

打开Visual Studio Community 2017,选择更改,然后在右侧安装详细信息将C/CLI支持打上勾,然后更新就可以了。 在VS里面新建项目就可以看见已经有CLR了。

VS2017安装成功后,无MFC选项解决办法

在安装VS2017时,勾选了安装MFC工作负载,但是新建项目时没有MFC选项。解决办法如下: 首先打开VS INSTALLER,点击修改 发现已经勾选MFC工作负载,点击右侧“安装详细信息”栏中的“使用C的桌面开发” 勾选“用于X86和X6…

vs2017安装勾选哪些_vs2017安装以编写c语言

安装这两个插件就行了 创建第一个项目 注意:C 是在 C 语言的基础上进行的扩展,所有在本质上,C 已经包含了 C 语言的所有内容,所以大部分 IDE 会默认创建后缀名为 .cpp 的C 源文件。为了大家养成良好的规范,写 C 语言代…

VS2017安装qt插件失败(已解决)

VS2017安装qt插件失败(已解决) 试过很多方法没有解决此问题,偶然间删除一个文件夹,重新安装就成功了。 解决方法:删除红色框中的文件夹即可。(该文件路径在C盘的用户文件夹中查找,勾选隐藏的项目即可看到隐…

vs2017 安装Qt VS Tools ,新建项目没有Qt GUI Application选项 ,解决方法

一、查看测试栏有没有该选项 二、如果也没有,就是Qt GUI Application版本太高 1、已知Qt VS Tools 2.4.0和Qt VS Tools 2.1.2是有的, 分享一个Qt VS Tools 2.1.2 链接:https://pan.baidu.com/s/18AmBnxQHqmVspsPlQmbPBw 提取码:1…