卷积神经网络中感受野的详细介绍

"微信公众号"

本文同步更新在我的微信公众号里面,地址:https://mp.weixin.qq.com/s/qMasyxRILzyEF3YyLvjzqQ

本文同步更新在我的知乎专栏里面,地址:https://zhuanlan.zhihu.com/p/39184237


1. 感受野的概念

在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域,如图1所示。

图1:用图形理解感受野概念

2. 感受野的例子

(1)两层3*3的卷积核卷积操作之后的感受野是5*5,其中卷积核(filter)的步长(stride)为1、padding为0,如图2所示:

图2:两层3*3卷积核操作之后的感受野是5*5

(2)三层3*3卷积核操作之后的感受野是7*7,其中卷积核的步长为1,padding为0,如图3所示:

                            

                                                 图3:三层3*3卷积核操作之后的感受野是7*7

3. 感受野的计算

感受野计算时有下面几个知识点需要知道:

  • . 最后一层(卷积层或池化层)输出特征图感受野的大小等于卷积核的大小。
  • . 第i层卷积层的感受野大小和第i层的卷积核大小和步长有关系,同时也与第(i+1)层感受野大小有关。
  • . 计算感受野的大小时忽略了图像边缘的影响,即不考虑padding的大小。

关于感受野大小的计算方式是采用从最后一层往下计算的方法,即先计算最深层在前一层上的感受野,然后逐层传递到第一层,使用的公式可以表示如下:


其中,是第i层卷积层的感受野,是(i+1)层上的感受野,stride是卷积的步长,Ksize是本层卷积核的大小。

4. 计算VGG16网络每层的感受野

(1)引例。

VGG16网络有点复杂,我们先来计算一个简单的例子,先学会计算感受野,在来分析复杂的网络。

图4:简单的网络结构

我们从最后一层的池化层开始计算感受野:

pool3:RF=2(最后一层池化层输出特征图的感受野大小等于卷积核的大小)

conv4:RF=(2-1)*1+3=4。

conv3:RF=(4-1)*1+3=6。

pool2:RF=(6-1)*2+2=12。

conv2:RF=(12-1)*1+3=14。

pool1:RF=(14-1)*2+2=28。

conv1:RF=(28-1)*1+3=30。

因此,pool3输出的特征图在输入图片上的感受野为30*30。

(2)VGG16网络每层感受野计算

图5:VGG16网络结构

在VGG16网络中,我们从全连接层开始倒推,直到输入层,过程如下:

pool5:RF=2。(最后一层池化层输出特征图感受野的大小等于卷积核的大小)

conv5_3:RF=(2-1)* 2+2=4。

conv5_2:RF=(4-1)*1+3=6。

conv5_1:RF=(6-1)*1+3=8。

pool4:RF=(8-1)*2+2=16。

... ... ... ... ... ... ...

类推...

因此我们可以得出:pool5输出的特征图在输入图片上的感受野为212*212;conv5_3输出的特征图在输入图片上的感受野为196*196,其它层依次类推。

图6:VGG16网络感受野计算结果

5.Reference

【1】卷积神经网络物体检测之感受野大小计算 - machineLearning - 博客园

http://www.cnblogs.com/objectDetect/p/5947169.html

【2】对CNN感受野一些理解 - CSDN博客

https://blog.csdn.net/u010725283/article/details/78593410/

【3】感受野的详细介绍 - CSDN博客

https://blog.csdn.net/weixin_39912556/article/details/78366287?locationNum=2&fps=1

【4】无痛理解CNN中的感受野receptive field

https://zhuanlan.zhihu.com/p/22627224

【5】Receptive field(感受野)

https://www.jianshu.com/p/2b968e7a1715

【6】CNN中感受野的计算 - CSDN博客

https://blog.csdn.net/kuaitoukid/article/details/46829355

### 局部连接与权值共享的概念 #### 局部连接 局部连接是指神经网络中后一层的神经元仅与前一层的部分神经元相连,而不是传统的全连接方式。这种方式使得后一层神经元能够感知前一层的一部分信息而非全部信息[^2]。尽管表面上看起来会丢失一些信息,但实际上这种设计并不会影响整体性能。相反,它有助于减少网络所需的参数数量以及冗余信息。 #### 权值共享 权值共享则是指同一层内的不同神经元使用相同的权重来处理输入数据的不同部分。这种方法显著降低了模型的学习复杂度并提高了计算效率。例如,在卷积神经网络CNN)中,通过在空间上的权值共享机制实现了对图像或其他二维数据的有效分析[^1]。 --- ### 局部连接与权值共享的区别 | 特性 | 局部连接 | 权值共享 | |--------------------|-----------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| | **定义** | 后面一层的神经元只与前面一层的部分神经元相连接 | 不同位置上的相同功能单元共用一组可调参数 | | **作用目标** | 减少参数规模、降低过拟合风险 | 进一步压缩参数空间大小 | | **实现效果** | 提取局部特征 | 增强泛化能力 | 具体而言,虽然两者都可以有效削减传统全连接架构所带来的巨大开销问题,但它们各自侧重的方向有所不同——前者主要关注如何合理分配有限资源去捕捉重要模式;后者则强调通过对称性质假设简化优化过程从而加快收敛速度同时保持良好表现水平^。 --- ### 应用场景 #### 局部连接的应用 - 在计算机视觉领,特别是对于大尺寸图片的数据集来说尤为重要。因为一张完整的照片往往包含了丰富的细节内容,而并非所有的像素点都需要被同等对待或者参与最终决策制定环节当中。因此采用基于局部感受野原理构建而成的新一代框架便应运而生了。 #### 权值共享的应用 - 时间序列预测:如股票市场走势预估等任务里经常需要用到的一维卷积操作就充分利用到了这一特性; - 自然语言处理(NLP): 当我们面对诸如词嵌入向量这样的离散型变量集合时也可以借助类似的思路来进行高效建模尝试 。 ```python import tensorflow as tf # 定义一个简单的卷积层,展示局部连接和权值共享的特点 model = tf.keras.Sequential([ tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu', input_shape=(28, 28, 1))]) ``` 上述代码片段展示了如何创建具有局部连接特性的卷积层,并且该层内部自动实施了权值共享策略以提升运算效能[^4]. ---
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值