关于感受野的理解与计算

从像素到语义:深入理解感受野在CNN中的作用与计算 本文深入探讨了感受野在卷积神经网络(CNN)中的核心作用与精确计算方法。通过分析感受野的动态演变过程,揭示了网络深度与视野范围的关联,并提供了实用的感受野计算公式和应用技巧,帮助开发者在目标检测和语义分割等任务中优化模型设计。 阅读详情

关于感受野的理解与计算

感受野

在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上每个像素点在原始图像上映射的区域大小,这里的原始图像是指网络的输入图像,是经过预处理(如resize,warp,crop)后的图像。

神经元之所以无法对原始图像的所有信息进行感知,是因为在卷积神经网络中普遍使用卷积层和pooling层,在层与层之间均为局部连接。

神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次.

感受野的计算

如图所示7*7的原始图像,经过kernel_size=3, stride=2的Conv1,kernel_size=2, stride=1的Conv2后,输出特征图大小为2 * 2,很明显,原始图像的每个单元的感受野为1,Conv1的每个单元的感受野为3,而由于Conv2的每个单元都是由2 * 2范围的Conv1构成,因此回溯到原始图像,每个单元能够看到5 * 5大小的区域范围。
在这里插入图片描述那么卷积神经网络的每一层感受野应该如何计算呢?很明显,深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系,而涉及到这两个参数的有卷积层和pooling层。我们用k_n, s_n, r_n分别表示第n层的kernel_size,stride,receptive_field,通过对n-1层输出特征图的k_n * k_n个感受野为r_{n-1}的特征单元卷积得到的n层输出特征单元最大的感受野为k_n * r_{n-1},但在对n-1层输入特征图进行卷积时,经常会由于s_{n-1}小于k_{n-1}而存在重叠,因此要减去k_n - 1个重叠部分(k_n = 2存在一个重叠部分,k_n = 3存在两个重叠部分)。

在这里插入图片描述那么重叠部分应该怎么计算呢?如图所示,对于Conv2层,其输出特征单元最大感受野为:
k_2 * r_1 = 2 * 3 = 6
但由于Conv1层对输入图片卷积时存在重叠部分,所以Conv2层的特征单元感受野小于6,该重叠部分为:
k_1 * r_0 - s_1 * r_0 = r_1 - s_1 = 1
而对于Conv3层,其输出特征单元最大感受野为:
k_3 * r_2 = 2 * 5 = 10
又因为Conv2层对其输入特征图进行卷积时也存在重叠部分,所以Conv3层的特征单元感受野小于10,此时重叠部分为:

在这里插入图片描述
因此对于卷积神经网络,其感受野计算有如下规律:
在这里插入图片描述以上公式只计算conv层和pooling层,以AlexNet为例:
在这里插入图片描述
转自https://www.jianshu.com/p/9997c6f5c01e

卷积神经网络中感受野的理解和计算 参考 https://blog.youkuaiyun.com/qq_27825451/article/details/83302662 https://blog.youkuaiyun.com/program_developer/article/details/80958716 https://blog.youkuaiyun.com/SIGAI_优快云/article/details/80743475(卷积神经网络为什么有效) ... 阅读详情

相关推荐

阅读:CNN感受野计算和可视化

阅读:CNN感受野计算和可视化 感受野:输入空间中一个特定CNN特征的范围区域(The receptive field is defined as the region in the input space that a particular CNN’s feature is looking at),一个特征的感受野可以采用区域的中心位置和特征大小进行描述。即,在卷积神经网络CNN中,决定...

clover_my的博客 2008

轻量级网络ESPNet系列 空洞卷积简介

空洞卷积(Dilated/Atrous Convolution) 相比原来的正常convolution,dilated convolution 多了一个 hyper-parameter 称之为 dilation rate 指的是kernel的间隔数量: a是普通的卷积过程(dilation rate = 1),卷积后的感受野为3 b是dilation rate = 2的空洞卷积,卷积后的感受野为5 c是dilation rate = 3的空洞卷积,卷积后的感受野为7 卷积核膨胀是将卷积核扩张到膨

panghuzhenbang的博客 4363

深度学习-感受野与有效感受野

文章目录感受野增加感受野有效感受野与反卷积的区别总结 感受野 卷积核的大小(高度和宽度)定义了一个区域的空间范围,改区域可以被卷积核在每个卷积步骤中修改,因而卷积核的大小称为卷积核的“感受野”。 感受野(receptive field, RF),卷积神经网络每一层输出的特征图(feature map)上的特征点在原始图像上映射的区域大小,即特征点能“看”到的范围。越高(深)层的特征点描述的原图信息越全面,越能表述语义信息。 神经元之所以无法对原始图像的所有信息进行感知,是因为在卷积神经网络中普遍使用卷积层和

Tc、zyh的博客 6019

OpenWRT开发实战:如何用libubox快速构建事件驱动型网络服务(附完整代码)

本文详细介绍了如何在OpenWRT系统中使用libubox库构建高性能事件驱动网络服务。通过实战案例展示TCP回显服务器的完整实现,涵盖环境配置、事件循环机制、客户端连接处理及高级功能扩展,帮助开发者高效处理并发网络请求。

weixin_30632089的博客 388

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

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。

NorthSmile的博客 1万+

011、目标检测基础概念:IoU、NMS、Anchor、感受野的直观理解与代码计算

本文深入剖析了目标检测中的四个基础概念:IoU、NMS、Anchor和感受野,并分享了实际工程中的经验教训。作者通过代码示例展示了IoU计算的各种边界情况和优化方法,NMS的实现陷阱及优化策略,Anchor从手工设计到自动学习的演变过程,以及感受野的正确计算方法。特别强调了这些概念的相互关联性:Anchor尺寸影响正样本分配和IoU计算,感受野决定Anchor设置,而NMS阈值需要根据数据集特性调整。文章最后给出实用建议:Anchor应在训练前确定,调参时要综合考虑这些基础概念的协同作用,避免动态调整Anc

ai技术增长的博客 386

感受野 深度理解

知乎是个好东西,深入理解一些理念,靠博客是不行的。 感受野计算和理解的内容参考自:https://zhuanlan.zhihu.com/p/44106492/https://zhuanlan.zhihu.com/p/40267131 后两个卷积的内容参考自:https://www.zhihu.com/question/54149221 目录 一、卷积后特征图维度的公式 二:感受野介...

Snoopy_Dream 1万+

Star CCM+中的物性参数(定值、多项式、查表)

仿真过程中我们一定会遇到设置物性参数的问题,对于固定的物性参数还好说,直接输入一个固定的值即可。但是对于冷却液、气体、两相流等,物性参数是随着温度或温度和压力变化的。此时就涉及到多项式和查表。首先创建物理连续体,选择计算模型。

2201_75375391的博客 2958

感受野知识点总结

VGG论文中提出的几个结论:

sunmingyang1987的博客 820

RT-Thread实战:手把手教你用STM32F04ZGT6通过SPI驱动BMI088(附完整工程)

本文详细介绍了如何使用RT-Thread操作系统在STM32F04ZGT6上通过SPI接口驱动BMI088高性能6轴惯性传感器(包含陀螺仪和加速度计)。从硬件连接到软件配置,再到数据采集与处理,提供了完整的开发指南和优化技巧,帮助开发者快速实现精确的姿态测量功能。

kappa的博客 237

从零开始:kohya_ss环境部署与LoRA/SDXL模型训练实战指南

本文提供了一份详细的kohya_ss环境部署与模型训练实战指南。从零开始,手把手教你使用Conda创建虚拟环境、安装依赖并启动Web GUI界面。核心内容涵盖高质量数据集的准备方法,并重点解析了如何使用kohya_ss工具进行LoRA模型和SDXL模型的微调训练,包括关键参数配置与常见报错解决方案,帮助初学者快速上手AI绘画模型定制。

weixin_29162439的博客 536

感受野(Receptive Field)的理解与计算

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

程序客栈 1208

Unity URP项目里Post Processing死活没效果?别慌,这5个坑我帮你踩过了

本文详细解析了Unity URP项目中Post Processing效果失效的五大常见问题,包括渲染管线配置冲突、Volume作用域误判、摄像机参数漏配、Layer层级冲突和Profile引用异常。通过实际项目案例和代码示例,提供专业级解决方案,帮助开发者快速排查并修复后处理效果不生效的问题。

weixin_33721427的博客 334

感受野的计算与理解(一看就会)

Q1:感受野指什么? A1:(1)从局部理解:(上层->本层)感受野等价与卷积核尺寸。 (2)从全局理解:指输出特征层中一个点映射在原始输入图像中的区域。 Tips:通常感受野指全局理解。 Q2:如何计算一个点映射在原始图像中的区域大小? A2:(1)常规卷积核 首先需要理解输出feature map大小的计算...

半度微凉的博客 1621

【ArcGIS】ArcMap中北京1954坐标系转WGS84的实战技巧与参数选择

本文详细解析了在ArcMap中将北京1954坐标系数据转换为WGS84坐标系的完整流程与核心技巧。针对常见的坐标偏移问题,文章首先强调了数据“归位”的重要性,并提供了处理假东、假北值的具体操作步骤。随后,重点阐述了地理变换参数(如Beijing_1954_To_WGS_1984_2)的选择逻辑及其对转换精度的决定性影响,并结合案例说明了参数选择、中央经线确认及结果验证等关键环节,旨在帮助用户高效、准确地完成坐标转换。

f6g7h8i9j的博客 330

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2180

CNN中感受野的理解与计算(以VGG16中为例)

由于SSD的主干网络是VGG16,出于对“低层features map的感受野较小,高层的感受野较大”的结论进行挖掘,因此对VGG16网络中的感受野进行了计算。 感受野的定义:神经网络中每一层输出特征图上的像素点在输入图片上的映射的区域大小,也就是特征图上的每一个点对应的输入图片的区域。 感受野的计算公式: RFi=(RF(i-1)-1)*stride+Ksize(i) ...

qq_38296005的博客 2537

Mac电脑安装burp suite2024版本记录

下载最新版本burpsuitloader-XXX-all.jar,改名为burpsuitloader.jar。目录下,修改vmoptions.txt文件,新增以下内容,如果keygen不是这个名称的话,需要修改。,点击license左侧的copy复制它,然后手动从启动台启动burpsuite。,复制如下命令到终端即可(要加双引号,不然目录中空格会导致命令截断)再复制激活响应信息到burpsuite中即可激活。后续运行burp直接从启动台运行即可。将如下框的信息复制到激活器中。输入后下一步,点击手动激活。

墨痕诉清风的博客 906

『拨云见日』卷积网络感受野的计算

写在最前,正向感受野计算公式rn=rn−1+(k−1)∗∏i=1n−1sir_n=r_{n-1}+(k-1)*\quad \prod_{i=1}^{n-1} {s_i} \quadrn​=rn−1​+(k−1)∗i=1∏n−1​si​其中k为卷积核尺寸,s为步长。几个博客把这个公式抄来抄去,也没个所以然,实在是头疼看不懂,所以推导一下。 先简单介绍一下普通卷积和扩张卷积: 普通卷积: 卷积后图像的...

qq_39740996的博客 687

智能运营模型的建设与运用实践

一项运营活动的全流程,主要包含客群挖掘与筛选、产品与权益选择、触点与活动选择、运营策略调优等关键环节,涉及客群管理、活动管理、权益管理、触达管理、智能调控等系统支撑需求,如今工商银行已开展与其相对应的推荐模型、分析模型等的研发与实践。自2023年9月该模型被知客运营平台吸收并上线以来,已累计有远程银行中心、吉林分行、重庆分行等30余家分行或机构使用,赋能融e借、积存金、结售汇、基金、理财、存款等12种场景,产生营销客户清单达千万人次,有力促进了保守型理财、天天盈、添益快线、寿险等产品的销售。

银行信息系统应用架构详解 850

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

卷积在计算机中实现+pool作用+数据预处理目的+特征归一化+理解BN+感受野理解与计算+梯度回传+NMS/soft NMS

一.卷积在计算机中怎么实现 将其存入内存当中再操作(按照“行先序”): 这样就造成混乱. 故需要im2col操作,将特征图转换成庞大的矩阵来进行卷积计算,利用矩阵加速来实现,牺牲了空间. 而对于1x1卷积,按照原始储存结构和im2col存储结构计算是一样的,故1x1卷积不需要im2col的过程,所以底层可以有更快的实现,大大节省了数据重排列的时间和空间。如下图所示: 二....

智障变智能 3561

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深度学习:如何计算感受野

8×88×8。

小白的博客 1953

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习感受野计算公式推导(前向/反向详解)

感受野计算公式推导

weixin_43356770的博客 1754
上一篇: tensorflow中slim模块api介绍
下一篇: 空洞卷积(dilated convolution)理解
like_study_cat
博客等级 码龄7年 44粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值