计算机视觉中的感受野

news2024/9/22 0:20:46

一、感受野的定义

感受野( R e c e p t i v e Receptive Receptive F i e l d Field Field)的定义是卷积神经网络每一层输出的特征图( f e a t u r e feature feature m a p map map)上的像素点在原始输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应原始输入图片上的区域,如下图所示。
在这里插入图片描述

二、感受野的例子

这里举两个例子来简单说明一下感受野。首先是一个5 * 5的输入图经过两层卷积核为3 * 3的卷积操作后得到的感受野是5*5,其中卷积核( f i l t e r filter filter)的步长( s t r i d e stride stride)为1、 p a d d i n g padding padding为0,如下图所示:
在这里插入图片描述
上图中 O u t 1 Out1 Out1中左上角第一个值是由 I n p u t Input Input中左上角3 * 3区域的值经过卷积计算出来的,即 O u t 1 Out1 Out1中左上角值的感受野是 I n p u t Input Input中左上角3 * 3的区域;

O u t 2 Out2 Out2中的值是由 O u t 1 Out1 Out1中对应3 * 3的区域经过卷积计算得到的,即 O u t 2 Out2 Out2中的感受野是 O u t 1 Out1 Out1中整个3 * 3的区域;

由此可知 O u t 2 Out2 Out2的值是由 I n p u t Input Input中所有的区域经过两层卷积计算得到的,即 O u t 2 Out2 Out2的感受野是 I n p u t Input Input中所有的5 * 5区域。
再举一个例子,7 * 7的输入图经过三层卷积核为3 * 3的卷积操作后得到 O u t 3 Out3 Out3的感受野为7 * 7,也就是 O u t 3 Out3 Out3中的值是由 I n p u t Input Input所有区域的值经过卷积计算得到,其中卷积核大小、步长和 p a d d i n g padding padding的值均和上面例子相同,如下图所示:
在这里插入图片描述

三、感受野的计算

在计算感受野时有下面几点需要说明:

(1)第一层卷积层的输出特征图像素的感受野的大小等于卷积核的大小。

(2)深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系。

(3)计算感受野大小时,忽略了图像边缘的影响,即不考虑padding的大小。

下面给出计算感受野大小的计算公式:

R F l + 1 = ( R F l − 1 ) ∗ ∏ i = 1 l s t r i d e s i + f l + 1 RF_{l+1} = (RF_{l}-1)*\prod_{i=1}^{l}strides_i + f_{l+1} RFl+1=(RFl1)i=1lstridesi+fl+1

其中 R F l + 1 RF_{l+1} RFl+1为当前特征图对应的感受野的大小,也就是要计算的目标感受野, R F l RF_{l} RFl为上一层特征图对应的感受野大小,f_{l+1}为当前卷积层卷积核的大小,累乘项 s t r i d e s strides strides表示当前卷积层之前所有卷积层的步长乘积。

以上面举的第二个 s a m p l e sample sample为例:

O u t 1 Out1 Out1层由于是第一层卷积输出,即其感受野等于其卷积核的大小,即第一层卷积层输出的特征图的感受野为3, R F 1 RF1 RF1=3;

O u t 2 Out2 Out2层的感受野 R F 2 RF2 RF2 = 3 + (3 - 1) * 1 = 5,即第二层卷积层输出的特征图的感受野为5;

O u t 3 Out3 Out3层的感受野 R F 3 RF3 RF3 = 3 + (5 - 1) * 1 = 7,即第三层卷积层输出的特征图的感受野为7;

下面给出了由上述方法来计算 A l e x n e t Alexnet Alexnet V G G 16 VGG16 VGG16网络中每一层输出特征图的感受野大小的 p y t h o n python python代码:

net_struct = {
    'alexnet': {'net': [[11, 4, 0], [3, 2, 0], [5, 1, 2], [3, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1], [3, 2, 0]],
                'name': ['conv1', 'pool1', 'conv2', 'pool2', 'conv3', 'conv4', 'conv5', 'pool5']},
    'vgg16': {'net': [[3, 1, 1], [3, 1, 1], [2, 2, 0], [3, 1, 1], [3, 1, 1], [2, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1],
                      [2, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1], [2, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1],
                      [2, 2, 0]],
              'name': ['conv1_1', 'conv1_2', 'pool1', 'conv2_1', 'conv2_2', 'pool2', 'conv3_1', 'conv3_2',
                       'conv3_3', 'pool3', 'conv4_1', 'conv4_2', 'conv4_3', 'pool4', 'conv5_1', 'conv5_2', 'conv5_3',
                       'pool5']}}

# 输入图片size
imsize = 224

def outFromIn(isz, net, layernum):
    totstride = 1
    insize = isz
    for layer in range(layernum):
        fsize, stride, pad = net[layer]
        # outsize为每一层的输出size
        outsize = (insize - fsize + 2 * pad) / stride + 1
        insize = outsize
        totstride = totstride * stride
    return outsize, totstride


def inFromOut(net, layernum):
    RF = 1
    for layer in reversed(range(layernum)):
        fsize, stride, pad = net[layer]
        # 感受野计算公式
        RF = ((RF - 1) * stride) + fsize
    return RF


if __name__ == '__main__':
    print("layer output sizes given image = %dx%d" % (imsize, imsize))

    for net in net_struct.keys():
        print('************net structrue name is %s**************' % net)
        for i in range(len(net_struct[net]['net'])):
            p = outFromIn(imsize, net_struct[net]['net'], i + 1)
            rf = inFromOut(net_struct[net]['net'], i + 1)
            print("Layer Name = %s, Output size = %3d, Stride = % 3d, RF size = %3d" % (net_struct[net]['name'][i], p[0], p[1], rf))

4.感受野的作用

(1)一般 t a s k task task要求感受野越大越好,如图像分类中最后卷积层的感受野要大于输入图像,网络深度越深感受野越大性能越好;

(2)密集预测 t a s k task task要求输出像素的感受野足够的大,确保做出决策时没有忽略重要信息,一般也是越深越好;

(3)目标检测 t a s k task task中设置 a n c h o r anchor anchor要严格对应感受野, a n c h o r anchor anchor太大或偏离感受野都会严重影响检测性能。

5.有效感受野

U n d e r s t a n d i n g Understanding Understanding t h e the the E f f e c t i v e Effective Effective R e c e p t i v e Receptive Receptive F i e l d Field Field i n in in D e e p Deep Deep C o n v o l u t i o n a l Convolutional Convolutional N e u r a l Neural Neural N e t w o r k s Networks Networks一文中提出了有效感受野( E f f e c t i v e Effective Effective R e c e p t i v e Receptive Receptive F i e l d Field Field, E R F ERF ERF)理论,论文发现并不是感受野内所有像素对输出向量的贡献相同,在很多情况下感受野区域内像素的影响分布是高斯,有效感受野仅占理论感受野的一部分,且高斯分布从中心到边缘快速衰减,下图第二个是训练后 C N N CNN CNN的典型有效感受野。
在这里插入图片描述
回到这张图,我们看绿色的这个区域,黄色为图像,绿色框扫过时,对于第一列是只扫过一次,也就是参与一次运算,而之后之间的几列均是参与了多次计算。因此,最终实际感受野,是呈现一种高斯分布。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.10 x64dbg 反汇编功能的封装

LyScript 插件提供的反汇编系列函数虽然能够实现基本的反汇编功能,但在实际使用中,可能会遇到一些更为复杂的需求,此时就需要根据自身需要进行二次开发,以实现更加高级的功能。本章将继续深入探索反汇编功能,并将介绍如…

redis缓存简介

1、为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并…

中国地图数据可视化制作,python的pyecharts模块读取excel可视化,

数据格式如下: import pandas as pd from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.globals import ChartType# 读取Excel数据 data pd.read_excel(C:\\Users\\Administrator\\Desktop\\国内数据.xlsx)# 创建地图实例 m…

C语言itoa转化为二进制

C语言itoa函数常常用于把整型转换为字符数组;最常用的是十进制的转换; 也可以用于获取一个数的二进制; 在C语言中 3&51;&是按位与; 先输出3&5; 再分别输出3和5的二进制看一下; …

Shader 基础之 Unity Shader概念

目录 目录 Shader compilation Conditionals in shaders Different types of conditionals Switch code branch at runtime Branching in shaders Static branching How to use static branching Dynamic branching How to use dynamic branching Shader variants …

选读SQL经典实例笔记04_日期运算(上)

1. 年月日加减法 1.1. DB2 1.1.1. sql select hiredate -5 day as hd_minus_5D,hiredate 5 day as hd_plus_5D,hiredate -5 month as hd_minus_5M,hiredate 5 month as hd_plus_5M,hiredate -5 year as hd_minus_5Y,hiredate 5 year as hd_plus_5Yfrom empwhere dept…

【计算机网络】第三章 数据链路层(虚拟机与局域网)

文章目录 3.9 以太网交换机自学习和转发桢的流程3.10 以太网交换机的生成树协议STP3.11 虚拟局域网3.11.1 虚拟局域网VLAN概述3.11.2 虚拟局域网VLAN的实现机制 3.9 以太网交换机自学习和转发桢的流程 以太网交换机的自学习和转发数据帧的流程如下: 自学习&#x…

Mac中使用命令行来加密压缩zip文档

背景 最近需要对一些文件加密,但是Mac上没有找到相应的加密工具,macOS中创建密码保护的压缩 zip 文件很容易并且不需要任何额外附加物或下载。使用命令行的方式处理即可。对压缩包加密之后便意味着有人想要解压缩zip文件时,必须输入正确的密码…

Layui入门必看:登录注册界面搭建与功能开发解析

目录 Layui介绍 什么是Layui? Layui入门 Layui登录实例 导入jar 配置 导入Layui 编写公共jsp 编写代码 Layui注册实例 代码实例 Layui介绍 Layui是一款面向前端开发者的轻量级JavaScript库,旨在简化网页开发过程。它提供了丰富的基础UI组件和…

电气设备漏电保护方式研究

摘要:电气设备漏电故障可能对无防范意识人员产生触电危害,轻者灼伤人体接触位置,重者危及人员生命,甚至会产生漏电火花引起火灾,给企业带来不可估计的损失。文中浅谈电气设备漏电危害性及漏电保护方式,意指…

C++使用rapidjson读写json数据

一、背景 RapidJSON简介及使用_fengbingchun的博客-CSDN博客 rapidjson是腾讯的高效C Json解析器,只有头文件,可跨平台使用 mirrors / Tencent / rapidjson GitCode 二、读数据 使用rapidjson解析和组装json_youyicc的博客-CSDN博客 三、写数据 …

AES加解密算法强化训练

目标: 使用openssl算一遍,再使用网页在线工具算一遍,看看结果是否一样 构造数据 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符 然后用ultraedit打开,…

常见加密算法介绍

文章目录 一、背景:二、几种常见的加密算法1. 不可逆加密算法(哈希算法):1.1 MD51.1.1 优点:1.1.2 缺点:1.1.3 Demo:1.1.4 案例分析: 1.2 SHA-2561.2.1 Demo:1.2.2 案例分…

day19三数之和 int *returnSize,int ** returnColumnSizes的理解

题目描述 *1.关于参数 int returnSize, int ** returnColumnSizes的理解 具体看这篇文章 [https://blog.csdn.net/m0_52775920/article/details/121461911?spm1001.2014.3001.5502] (1)*returnSize 的理解 returnSize 返回大小为returnSize的二维数组&…

代码随想录算法二刷 day49 | 动态规划 之121 买卖股票的最佳时机 122 买卖股票的最佳时机II

day49 121. 买卖股票的最佳时机1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 题目链接 解题思路: 动规五部曲分析如下&#xf…

【Linux-Windows】 关于PCI和PCIE接口

【Linux-Windows】 关于PCI和PCIE接口 1、背景2、物理外观区别3、其它区别 1、背景 最近在配置电脑主机。 由于要在主机上安装了一块PCI接口的固高控制卡,其系统架构如下图: 使用的PCI接口的固高控制卡外形如下图: 为此,我额外…

2023-7-10-第十五式命令模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

java 代码块

文章目录 代码块的描述静态代码块静态代码块的特点 非静态代码块分析加载顺序 代码块的描述 代码块(或初始化块)的作用: 对Java类或对象进行初始化 代码块(或初始化块)的分类: 一个类中代码块若有修饰符,则只能被static修饰,称为…

嵌入式_一种非常简单实用的基于GD32的裸机程序框架

嵌入式_一种非常简单实用的基于GD32的裸机程序框架 搜索了一下关于GD或ST裸机程序的问题,网上有非常多也非常的例子,但是针对裸机开发的程序框架却比较少,这里简单整理了一下在项目中使用过的一种比较小巧便携的裸机程序框架(确切…

cloud Alibab+nacos+gateway集成swaggerui,统一文档管理(注意点)

首先说明&#xff1a;本文只说整合注意点 效果图和功能参考链接 1.使用gateway访问nacos服务&#xff0c;503 在网关服务添加依赖即可解决 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign&…