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

news/2024/5/7 4:14:31/文章来源:https://blog.csdn.net/qq_43665602/article/details/126754736

感受野

  • 一、感受野
    • 1.全连接网络与卷积神经网络
    • 2.进一步体验“感受野”
    • 3.计算感受野通用方式
    • 4.综合实例
    • 5.总结

一、感受野

感受野:卷积神经网络中每个网络层输出的特征图中的单个元素映射回原始输入特征中的区域大小,网络层越深,其输出特征的元素对应感受野越大。可以这么去描述感受野:网络层输出特征图上的一个元素点,由原始输入中多大区域映射而来,其感受野就是多大。

1.全连接网络与卷积神经网络

对于全连接网络而言,其输出中的每一个元素都受到输入特征中所有元素的影响,而对于卷积神经网络而言,利用卷积核与输入特征之间的互相关操作提取特征,输出特征中的每一个元素由卷积核在输入特征上的一次移动得到,而卷积核的每次移动均是与输入中与之对应的局部区域进行运算,既输出中的每个元素只由输入中的局部区域影响,此处所说的局部区域的大小也就是网络层输出特征中元素的感受野。
此处对全连接网络与卷积神经网络进行实例对比(网络均只有一层):
1)全连接网络:可看到共输出5个元素,每个元素都受到输入中的所有元素影响。
在这里插入图片描述
2)卷积神经网络:可看到输出中的每个元素都由(3,3)的卷积核对应输入中(3,3)的局部区域“加权求和”得到,所以该输出的特征元素对应到输入中的区域大小就是3×3,既其感受野大小为3×3。
在这里插入图片描述

2.进一步体验“感受野”

下面的示例中所有卷积核大小均为:(3,3),图中的红线表示卷积层,如步长、填充等参数都保持默认:
1)原始输入(3,3),共经历1个卷积层:此时,唯一的卷积层输出结果为(1,1),输出特征仅含有一个元素,而该元素对应输入中的3×3区域,故其感受野为3×3。

在这里插入图片描述
2)原始输入(5,5),共经历2个卷积层:此时,第一个卷积层输出结果为(3,3),而第二个卷积层输出为(1,1)。第二层的输出仅有一个元素,该元素是由第一层输出结果中(3,3)特征得到;而对于第一层输出结果而言,其中的每一个元素的感受野是3×3,所有元素是通过原始输入中的(5,5)区域映射而来,所以对于第二层输出结果来说其元素的感受野为(5,5)。
在这里插入图片描述
3)原始输入O(7,7),共经历3个卷积层:此时三个卷积层的输出依次为A(5,5),B(3,3)和C(1,1)。对于C而言,仅有一个元素,是由B中3×3区域得到;对于B而言,每个元素由A中(3,3)区域得到,所有元素由A中(5,5)区域得到;对于A而言,每个元素由原始输入O中(3,3)区域得到,所有元素由O中(7,7)区域得到,A中一个(3,3)区域的特征由O中(5,5)特征映射而来,所以对于三个卷积层的输出结果A、B、C来说,感受野依次为(3,3)、(5,5)、(7,7)。
在这里插入图片描述
由上面的例子也可以看到通常情况下,网络越深,输出的结果所拥有的感受野越大。
所以对于当前层的输出结果,要看其感受野多大可通过以下方式从当前层的输出结果反向映射,直到映射回原始输入特征,此时即可得到对应的感受野大小。比如上图中的第三层结果C,C由中的元素由B中的3×3区域得到,B中的3×3区域需要A中的5×5区域得到,而A中的5×5区域由原始输入中的7×7区域得到,所以对于C中元素而言,其感受野大小为7×7。
看到这里大家对感受野的计算如果还没透彻,请不要着急,看一下下一节的感受野计算方式,再回过头来看我画的图,是不是一目了然。

3.计算感受野通用方式

我们知道在实际搭建卷积神经网络时可能用到大量的卷积层、池化层进行堆叠构成完整的网络结构,而这两种网络层均会改变特征图的大小,实现特征之间的映射,在这两种网络层中均涉及到卷积核(或池化核)kernel_size、步长stride等参数,这些参数共同决定了输出结果对应的感受野大小。
在计算感受野的过程中需要注意以下几点:
(1)计算感受野时不考虑padding和dilation的影响;
(2)当前网络层对于当前层输入来说,感受野大小等于当前卷积核大小。如上图中最后一层的输出C相对于B来说,感受野为(3,3);
(3)采用“从后往前”的计算方式计算感受野:从当前层开始反向映射直到原始输入,先计算当前层输出在前一网络层输出中的感受野大小,再依次传递到原始输入即可得到当前层所拥有的感受野大小;
(4)感受野计算通用公式:在这里插入图片描述此处RF、S、K分别表示感受野、步长、卷积核大小,计算第i层输出结果的感受野时,利用上面公式从RF(i)一直计算到RF(1)时,RF(1)即为第i层对应的感受野大小。

有没有看到计算感受野的这个公式特别熟悉,没错这和卷积层(其他参数保持默认)计算输出结果大小的公式一毛一样:
在这里插入图片描述
很好理解,卷积层输出和输入结果的指定大小区域之间遵循上面公式。以此可得到相邻网络层之间感受野大小的计算关系。

这里我再将上一节中最后的一个示例推导一波,以此验证感受野计算公式:
输入(7,7);输出(1,1)

网络层输入卷积核步长输出感受野
Conv1(7,7)(3,3)1(5,5)(3,3)
Conv2(5,5)(3,3)1(3,3)(5,5)
Conv3(3,3)(3,3)1(1,1)(7,7)

网络共包含三个卷积层,从前往后以此标记为1,2,3层,下面从后往前计算每层感受野,当前层感受野大小受到当前层卷积核大小、步长以及下一层的感受野共同影响:
计算Conv3的感受野大小:

  • Conv3在Conv2的(3,3)输出中感受野大小等于Conv3卷积核,既RF3=3×3;
  • 要想Conv2得到RF3=3×3大小的输出,输入需提供RF2=S2(RF3-1)+K2=1×(3-1)+3=5,既RF2=5×5;
  • 同理,要想Conv1得到RF2=5×5大小的输出,输入需提供RF1=S1(RF2-1)+K1=1×(5-1)+3=7,既RF1=7×7;

因此对于Conv3的输出来说,感受野大小为(7,7).
按照此方式,大家可以自行计算Conv2输出结果的感受野为(5,5)。

4.综合实例

举一个综合实例,依据“从后往前”原则计算最后一个网络层在原始输入上的感受野大小:

索引网络层类型卷积核尺寸步长
1Conv13×31
2Conv22×22
3Pool13×31
4Conv33×31
5Pool22×22
6Conv42×22

计算Conv4层输出结果的感受野:

  • RF6=2 ;
  • RF5=S5(RF6-1)+k5=2(2-1)+2=4 ;
  • RF4=S4(RF5-1)+k4=1(4-1)+3=6;
  • RF3=S3(RF4-1)+k3=1(6-1)+3=8 ;
  • RF2=S2(RF3-1)+k2=2(8-1)+2=16;
  • RF1=S1(RF2-1)+k1=1(16-1)+3=18;

因此对于Conv4层输出结果中的元素,其在原始输入上的感受野大小为18×18。

5.总结

1)输入结果感受野一致的前提下,使用连续的小卷积核替换单个大卷积核,第一可以有效降低网络训练的参数量,第二可以增加网络深度,第三可以引入更丰富的非线性变换,使得网络可以拟合更多的可能性,更好地缓解过拟合;
输入(C,7,7),对于最终的输出其感受野为(7,7),假设每个卷积层的输出通道数均为C,我们看一下各自的参数量:
(1)使用连续的3个(3,3)卷积,其参数量为:(3×3×C)×C×3=27×C×C
在这里插入图片描述
(2)使用一个(7,7)卷积,其参数量为:(7×7×C)×C=49×C×C
在这里插入图片描述
由此看到感受野一致的前提下,使用连续的小卷积核替换单个大卷积核,可以有效降低网络训练的参数量。
2)网络浅层提取的特征针对输入特征的局部区域进行,感受野较小;而网络深层对应的感受野更大,可以体现原始输入更多的全局信息;
3)在分类任务中,合理设计网络深度,可得更合理的感受野,保证网络性能。如此操作使最后的输出结果中,元素对应的感受野可以大于等于原始输入特征的大小,这样可确保分类所用特征可以包含原始输入所有的信息。比如在一个分类网络中,原始输入大小为(64,64),而输出结果中元素对应的感受野大小超过了64×64,那么可保证最后分类判断所用特征可以体现原始输入中所有的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6046.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为机试题练习-HJ16 购物单

HJ16 购物单背包问题-01背包 中等 通过率:23.60% 时间限制:1秒 空间限制:32M 知识点动态规划 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 王强决定把…

探索 Sa-Token (二) 登录认证、权限认证

(一)登录认证 说明:因为这里没有连接数据,我模拟两个用户,用户:zhang ,用户:liu,密码 123456 提前做了加密。 1.密码加密接口 /*** 加密* param pwd* return*/GetMappi…

系统优化 : 笔记本盖上休眠

如何使休眠可用按下键盘上的 Windows 按钮,打开开始菜单或开始屏幕。 搜索“cmd”。 在搜索结果中,右键单击“命令提示符”,然后选择“以管理员身份运行”。 当用户帐户控制提示时,选择“继续”。 在命令提示符处,键入 powercfg.exe /hibernate on,然后按 Enter。 键入“…

MySQL复制

环境条件master:192.168.247.20 rocky8.6 mysql8.0.26 slave: 192.168.247.21 rocky8.6 mysql8.0.26基本环境准备 hostnamectl set-hostname mysql-master-01 hostnamectl set-hostname mysql-slave-01主从安装mysql-server服务 yum -y install mysql-server systemctl enabl…

3、计算机系统漫游

目录1 计算机的信息2 编译系统3 编译系统4 高速缓存5 存储器层次结构6 操作系统6.1 操作系统的抽象表示6.2 进程 1 计算机的信息信息:就是位+上下文 系统中所有的信息,包括磁盘文件、内存中的程序,内存中存放的用户数据,以及网络上传输的数据,都是由一串0、1表示 位:指8位…

vue3项目-小兔鲜儿笔记-购物车02

1.购物车页面-列表展示-本地准备已选择的商品列表数据,已选择的商品件数以及需要支付的金额渲染模板// 有效商品列表 validList(state) {return state.list.filter((goods) => goods.isEffective && goods.stock > 0) }, // 有效商品件数 validTotal() {return …

django框架八

批量操作数据 自定义分页器(重在思路) form组件 modelform组件 cookie与session简介批量操作数据 浏览器访问一个django路由 立刻创建10万条数据并展示到前端页面create()、all() 涉及到大批量数据的创建 直接使用create可能会造成数据库崩溃批量数据创建>>>:bulk_cre…

07- 诊断事件diagnostic events的类图关系

文章目录 1 DEM模块的诊断事件diagnostic events的类图关系2 各个参数的含义介绍1 DEM模块的诊断事件diagnostic events的类图关系 这个时DEM模块的诊断事件diagnostic events的类图关系。 关于其在Davinci中的体现,请参考【06- 诊断事件DemEventParameter的配置】文章的介绍…

【日常】edge和chrome浏览器截屏工具快捷键

首先打开开发者工具 使用右键===>检查 就能打开开发者模式 在开发者模式下,快捷键ctrl+shift + p然后输入截屏,就能看到了 开源作品 GOFLY是一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的在线客服系统,编译后的二进制文件可…

mysql在移机后的机器上配置(该机器重装了操作系统)

说明一切就绪后,唯有mysql没起来 连接本地数据库,mysql提示Can‘t connect to MySQL server on localhost (10061)解决办法_Geeca的博客-CSDN博客 https://blog.csdn.net/Geeca/article/details/125924886 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决_java奋…

PowerShell中异步方法的使用

问题 PowerShell脚本中有个文件上传功能,使用HttpClient 脱敏处理后基本就是这样子 $client = new-object System.Net.Http.HttpClient; $result = $client.PostAsync($URL,@{}).Result;别问为什么不用await,问就是有原因某天程序执行后,$result始终为空,也无异常 经过艰苦卓…

html对象常用属性和Window 对象属性

​/* *作者:呆萌老师 *☑csdn认证讲师 *☑51cto高级讲师 *☑腾讯课堂认证讲师 *☑网易云课堂认证讲师 *☑华为开发者学堂认证讲师 *☑爱奇艺千人名师计划成员 *在这里给大家分享技术、知识和生活 *各种干货,记得关注哦! *vx:it_daimeng */ html对象常用属性 取值赋值:inn…

Javaweb学习笔记第四弹

JDBC API详解 1、DriverManager作用: 1、注册驱动 registerDriver 2、获取数据库连接 getConnection 参数:1、url jdbc:mysql://localhost:3306/数据库名称 ​ 2、user 用户名 ​ 3、password 密码 注意:在url中,如果连接的是本机,并且…

Educational Codeforces Round 132 (Rated for Div. 2) A.B.D

A. Three Doors 题目链接: Problem - A - Codeforces 题面: 题意: 共有三扇门,一开始你有一把钥匙,有两扇门后面有钥匙,一扇门后面没有钥匙(如果有钥匙,就会告诉你可以开哪扇门&am…

【Servlet】这一文详细的讲述了Servlet的知识,呕心沥血,终于文成。

文章目录什么是Servlet?Servlet的使用1、创建一个Web项目,并集成Tomcat2、引入Servlet的依赖3、创建一个Web启动类第一个是重写Servlet接口第二个是继承HttpServletServlet的理解Servlet的执行流程Servlet的生命周期加载和实例化阶段初始化阶段请求处理服…

202112-2 CCF 序列查询新解 (枚举 + 分段讨论 满分题解)

问题描述 序列查询新解 题目链接 解题思路 这个是上一道题目总结出来的规律 就是 f(x) i 当x属于 【a[i], a[i 1] ) 这个区间 也就是在这个区间里f(x)都等于一个数i 再看g(x)这个函数,g(x) x / 常数,也可以知道,g…

微服务技术初探(go-micro)

微服务技术初探 微服务概述 微服务是近几年产生的新概念,与传统的单体式服务相比,微服务具有更好的扩展性及低耦合度等特性。微服务的重点在于服务的治理和调度。 微(micro):狭义来说就是体积小。 服务(service):区别于系统,服务一个或者一组相对较小且独立的功能单元,是…

c语言实现通讯录

目录标题通讯录的介绍通讯录的准备通讯录的初始化通讯录的添加通讯录的打印通讯录的查找并打印通讯录的删除通讯录的排序通讯录的修改通讯录的改善动态通讯录的实现以文件的形式存储通讯录的介绍 通讯录想必大家都应该不陌生,我们在手机里面都会有通讯录里面记录着…

爬虫数据可视化前的环境准备(已安装python环境前提下)

一、requests请求库安装 在桌面右键打开终端输入:pip install requests 二、Beautiful Soup解析库安装 终端输入:Beautiful Soup 4安装:pip install bs4 lxml安装:pip install lxml三、matplotlib安装下载miniconda下载地址:https://docs.conda.io/en/latest/miniconda.ht…

CF102411 ICPC 2019-2020 North-Western Russia Regional Contest题解

A Accurate Movement 签到 M Managing Difficulties 签到 B Bad Treap 已知\(y=\sin(x)\),要求给出数组\(a[n]\),满足\(\forall i,j\in[1,n],a[i]\neq a[j]\),都有\(\sin(a[i])\neq \sin(a[j])\)。 这里又一种不怎么玄的写法,就是我们找到一个整数\(x\),\(sin(x)\)非常非常…