卷积 - 感受野(Receptive Field)

卷积 - 感受野(Receptive Field)

flyfish

感受野(Receptive Field)是指卷积神经网络中某一层的一个特定神经元能够“看到”并响应的输入图像区域。简单来说,它是指卷积核在输入图像上滑动过程中每次覆盖的区域。感受野的大小随着卷积层的增加而增大,即网络越深,感受野越大。

感受野的直观理解

假设我们有一个简单的卷积神经网络,只有一层卷积层,卷积核大小为 3 × 3 3 \times 3 3×3,步长为 1,没有填充。

例子

输入图像(大小为 5 × 5 5 \times 5 5×5):
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ] \begin{bmatrix} 1 & 2 & 3 & 4 & 5 \\ 6 & 7 & 8 & 9 & 10 \\ 11 & 12 & 13 & 14 & 15 \\ 16 & 17 & 18 & 19 & 20 \\ 21 & 22 & 23 & 24 & 25 \\ \end{bmatrix} 16111621271217223813182349141924510152025
卷积核(大小为 3 × 3 3 \times 3 3×3):
[ 1 0 − 1 1 0 − 1 1 0 − 1 ] \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} 111000111
卷积操作的步骤:

  1. 卷积核首先覆盖输入图像的左上角 3 × 3 3 \times 3 3×3 区域: [ 1 2 3 6 7 8 11 12 13 ] \begin{bmatrix} 1 & 2 & 3 \\ 6 & 7 & 8 \\ 11 & 12 & 13 \\ \end{bmatrix} 161127123813 这个区域就是第一个神经元的感受野。
  2. 卷积核向右滑动一个步长,覆盖下一个 3 × 3 3 \times 3 3×3 区域: [ 2 3 4 7 8 9 12 13 14 ] \begin{bmatrix} 2 & 3 & 4 \\ 7 & 8 & 9 \\ 12 & 13 & 14 \\ \end{bmatrix} 271238134914 这个区域就是第二个神经元的感受野。
    以此类推,卷积核会覆盖输入图像上的每一个可能的 3 × 3 3 \times 3 3×3 区域,每个区域都对应一个神经元的感受野。

更深层的感受野

假设我们有一个两层卷积神经网络:

  • 第一层卷积层的卷积核大小为 3 × 3 3 \times 3 3×3,步长为 1,没有填充。
  • 第二层卷积层的卷积核大小为 3 × 3 3 \times 3 3×3,步长为 1,没有填充。
    在第一层,感受野的大小为 3 × 3 3 \times 3 3×3。在第二层,每个神经元的感受野由它在第一层的感受野决定,并且考虑到卷积核的大小,它实际上看到了第一层的 3 × 3 3 \times 3 3×3 区域的 3 × 3 3 \times 3 3×3 感受野。

第二层神经元的实际感受野大小可以通过计算来确定:

  1. 第一层的感受野大小: 3 × 3 3 \times 3 3×3
  2. 第二层的卷积核大小: 3 × 3 3 \times 3 3×3
  3. 第二层的每个神经元的感受野包括第一层中 3 × 3 3 \times 3 3×3 区域的感受野。
    所以,第二层的感受野大小是 5 × 5 5 \times 5 5×5,因为第二层的卷积核会覆盖第一层卷积的多个感受野,具体如下:
  • 如果考虑第一层的每个感受野( 3 × 3 3 \times 3 3×3)作为一个单位块,那么第二层的感受野大小就是这些单位块的覆盖范围。
  • 例如,第二层的一个神经元可能会结合第一层的9个不同感受野的输出
import torch
import torch.nn as nnclass SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=0)self.conv2 = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=0)def forward(self, x):x = self.conv1(x)print(f"After conv1: {x.shape}")x = self.conv2(x)print(f"After conv2: {x.shape}")return xdef calculate_receptive_field(layers):receptive_field = 1for layer in layers:kernel_size = layer.kernel_size[0]stride = layer.stride[0]padding = layer.padding[0]receptive_field = ((receptive_field - 1) * stride) + kernel_size - 2 * paddingprint(f"Layer {layer}: receptive field size = {receptive_field}")# 输入图像
input_image = torch.tensor([[1, 2, 3, 4, 5],[6, 7, 8, 9, 10],[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25]
], dtype=torch.float32).unsqueeze(0).unsqueeze(0)  # 添加批次和通道维度# 创建模型
model = SimpleCNN()# 进行前向传播
output = model(input_image)# 打印输出结果
print("输出结果:")
print(output.squeeze().detach().numpy())# 计算并输出感受野大小
calculate_receptive_field([model.conv1, model.conv2])
After conv1: torch.Size([1, 1, 3, 3])
After conv2: torch.Size([1, 1, 1, 1])
输出结果:
4.2884874
Layer Conv2d(1, 1, kernel_size=(3, 3), stride=(1, 1)): receptive field size = 3
Layer Conv2d(1, 1, kernel_size=(3, 3), stride=(1, 1)): receptive field size = 5

运行这段代码将会输出每一层卷积之后的特征图形状,以及每一层的感受野大小。输出结果将会显示每一层卷积操作后的感受野如何变化。

感受野大小的计算步骤

第一层卷积 c o n v 1 conv1 conv1
  • 输入图像大小: 5 × 5 5 \times 5 5×5
  • 卷积核大小: 3 × 3 3 \times 3 3×3
  • 步长: 1 1 1
  • 填充: 0 0 0
    计算第一层感受野大小:
    R 1 = 3 R_1 = 3 R1=3
第二层卷积 c o n v 2 conv2 conv2
  • 第一层输出特征图大小: 3 × 3 3 \times 3 3×3
  • 卷积核大小: 3 × 3 3 \times 3 3×3
  • 步长: 1 1 1
  • 填充: 0 0 0
    计算第二层感受野大小:
    R 2 = ( ( R 1 − 1 ) × stride ) + kernel size − 2 × padding R_2 = ((R_1 - 1) \times \text{stride}) + \text{kernel size} - 2 \times \text{padding} R2=((R11)×stride)+kernel size2×padding
    R 2 = ( ( 3 − 1 ) × 1 ) + 3 − 2 × 0 R_2 = ((3 - 1) \times 1) + 3 - 2 \times 0 R2=((31)×1)+32×0
    R 2 = 5 R_2 = 5 R2=5

通过这种方式,我们可以跟踪每一层卷积操作后感受野大小的变化。代码中的 calculate_receptive_field 函数通过遍历每一层卷积层来计算和输出感受野大小。

核心概念

卷积神经网络(CNN)之所以在处理图像等数据时非常有效,是因为它们利用了三大核心概念:局部连接(Local Connectivity)、权值共享(Weight Sharing)、平移不变性(Translation Invariance)。让我们详细探讨这些概念。

1. 局部连接(Local Connectivity)

在传统的全连接神经网络中,每个神经元与上一层的每个神经元相连接,形成一个全连接的网络结构。而在卷积神经网络中,卷积层的每个神经元只与上一层的局部区域(称为感受野)相连接。

解释:
  • 局部连接是指每个卷积核仅覆盖输入图像的一个小区域(如 3 × 3 3 \times 3 3×3 5 × 5 5 \times 5 5×5)。
  • 这种局部连接的方式使得卷积层能够捕捉局部特征,如边缘、角点等。
例子:

假设我们有一个 5 × 5 5 \times 5 5×5 的输入图像和一个 3 × 3 3 \times 3 3×3 的卷积核。卷积核每次只关注输入图像的一个 3 × 3 3 \times 3 3×3 的区域,逐步滑动覆盖整个图像。这种方式使得网络能够有效地学习局部特征。

2. 权值共享(Weight Sharing)

在卷积神经网络中,卷积核的参数(权重)在整个输入图像上是共享的。这意味着卷积核在不同位置上应用相同的一组参数进行卷积操作。

解释:
  • 权值共享是指在整个输入图像上使用相同的卷积核,减少了需要训练的参数数量。
  • 这种方式确保了在不同位置检测到的相同特征具有相同的权重。
例子:

如果我们使用一个 3 × 3 3 \times 3 3×3 的卷积核在 5 × 5 5 \times 5 5×5 的输入图像上滑动,该卷积核会在每个位置上应用相同的权重。这样,不管特征出现在图像的哪个部分,该卷积核都能有效地检测到它。

3. 平移不变性(Translation Invariance)

平移不变性是指卷积神经网络能够识别出图像中的特征,无论这些特征出现在图像的哪个位置。卷积操作通过滑动窗口机制,确保网络对图像中不同位置的特征具有相同的响应。

解释:
  • 平移不变性使得网络能够在图像的任何位置检测到相同的特征。
  • 这种特性使得卷积神经网络在处理图像分类等任务时非常有效,因为特征的位置不再重要,网络关注的是特征本身。
例子:

假设我们有一张包含数字“7”的图片。不管“7”出现在图像的左上角还是右下角,卷积神经网络都能够识别出这个特征。这是因为卷积核在整个图像上滑动,确保能够检测到特征的位置。

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

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

相关文章

09-Eureka-搭建eureka服务

09-Eureka-搭建eureka服务 1.动手实践: 1.搭建EurekaServer 2.将user-service、order-service都注册到Eureka 3.在order-service中完成服务拉取,然后通过负载均衡挑选一个服务,实现远程调用 2.搭建EurekaServer服务步骤如下: 1.…

【设计模式】结构型设计模式之 组合模式

介绍 这里的组合模式,与之前的设计模式中的"组合关系"完全是两码事,这里的组合模式主要用来处理结构为树形的数据。 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树状结构来表示…

MongoDB ObjectId 详解

MongoDB ObjectId 详解 MongoDB 是一个流行的 NoSQL 数据库,它使用 ObjectId 作为文档的唯一标识符。ObjectId 是一个 12 字节的 BSON 类型,它在 MongoDB 中用于保证每个文档的唯一性。本文将详细解释 ObjectId 的结构、生成方式以及它在 MongoDB 中的应用。 ObjectId 的结…

2024年水利水电安全员考试题库及答案

一、单选题 1.在各类有机电解质之间,其毒性大小排序正确的是()。 A.脂肪煙〉醇>酮>环煙〉芳煙 B.脂肪煙>醇>酮〉芳煙〉环煙 C.芳煙〉醇>酮>环煙〉脂肪煙 D.芳煙〉酮…

【C++】函数模板和类模版

目录 前言 模板参数 类型模板参数 非类型模板参数 模板的特化 函数模板的特化 类模板的特化 全特化 偏特化 模板的分离编译 模板总结 前言 函数模板和类模板是C模板编程中的两个核心概念,它们允许程序员编写泛型代码,这些代码可以在多种数据…

月薪70-100k,京东招ML算法工程师和运筹优化专家!

Datawhale分享 推荐:黄玉琳,京东,Datawhale成员 团队介绍 我们是京东零售集团供应链算法优化团队,通过在人工智能与运筹优化领域的持续性技术革新,为京东自营千万级商品提供算法策略支持,实现了以用户为中心的供应链管理和更高效…

常用PromQL语句

常用PromQL语句 1. 查询CPU使用率:2. 查询内存使用率:3. 查询磁盘使用率:4. 查询网络带宽使用率:5. 查询数据库连接数:6. 查询HTTP请求响应时间:7. 查询日志错误数量:8. 查询系统负载&#xff1…

我的创作纪念日-2024年6月10日

机缘 最开始写博客的想法很单纯,记录自己的学习过程在以后可以随时回顾自己需要的知识。 收获 从第一篇博客到现在最明显的变化就是自己做实验和写东西的思路越来越规范了,学习了解实现的东西也更加具体了。通过一篇篇博客我看到了自己在一点点积累&am…

Web前端GIS入门:从基础到实践的全方位探索

Web前端GIS入门:从基础到实践的全方位探索 随着信息技术的飞速发展,地理信息系统(GIS)已经深入到我们生活的方方面面。而Web前端GIS作为GIS领域的一个重要分支,正逐渐成为开发者和研究者的热门选择。本文将从四个方面…

攻防世界---misc---BotW-

1、下载附件是一张图片 2、查看图片属性,用winhex分析,没有发现奇怪的地方,用binwalk,接着使用foremost 3、得到两张图片,一张是原图,一张是特殊的字符 4、经过查阅资料得知,这是希卡文字&#…

iOS 查看runtime源码的几种方法

目录 前言 查看runtime 源码方法 1.下载 Apple 官方提供的源代码 2.通过 GitHub 访问镜像 3.使用命令行工具查看 4.示例 前言 这篇博客主要介绍了查看iOS runtime源代码的方法。 查看runtime 源码方法 查看iOS runtime源码的方法包括以下几个步骤: 1.下载 A…

IPv6 归属地城市级 Api 接口 - 精准定位每一个连接

随着互联网的快速发展,人们对于网络安全和隐私保护的要求也越来越高。在网络世界中,每一个连接都有其特定的地理位置,了解连接的归属地信息对于识别恶意行为以及网络运营具有重要意义。IPv6 归属地城市级 Api 接口就能够实现对连接的精准定位…

复数乘法IP核的使用

一、IP核解析 在这张图片中,我们看到的是一个“Complex Multiplier (6.0)” IP 核的配置界面。以下是各个配置参数的详细说明: 1.1 Multiplier Construction Use LUTs: 选择这个选项时,乘法器将使用查找表(LUTs)来实现…

使用jemalloc实现信号驱动的程序堆栈信息打印

使用jemalloc实现信号驱动的程序堆栈信息打印 本文介绍应用如何集成jemalloc,在接收到SIGUSR1信号10时打印程序的堆栈信息。 1. 编译jemalloc 首先,确保你已经编译并安装了启用prof功能的jemalloc。以下是ubuntu18.04上的编译步骤: git c…

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation

Understanding Diffusion Objectives as the ELBO with Simple Data Augmentation 引言 本文前作 VDM 已经推导出了扩散模型可以将优化 ELBO 作为目标函数。然而现在 FID (也就是感知质量)最好的模型还是用的其他目标函数(如 DDPM 的噪声预…

【JavaScript脚本宇宙】触摸、响应式、定制化——图形和图像库的百变魅力!

身临其境的视觉盛宴:图形与图像库全方位解析! 前言 在现代Web开发中,图形和图像库扮演着至关重要的角色,为开发人员提供了丰富的工具和资源来实现各种视觉效果和交互体验。本文将深入探讨几种流行的图形和图像库,包括…

用AI制作历史解说视频:GPT + MidJourney + PiKa + FunSound + 剪映

1. 项目介绍 最近某站看到一个看到利用AI创作视频解说,成品画面很酷炫。对此以初学者视角进行复现,创意来源:用AI制作历史解说视频 2. 开始创作 我们参照原作者展示的内容,对古代人物屈原来生成解说视频。 2.1 故事脚本分镜 【…

Mysql数据库连接异常处理: Host is not allowed to connect to this MySQL server解决方法

这个错误,其实就是我们安装的MySQL不允许远程登录,解决方法如下: 1. 在装有MySQL的机器上登录MySQL mysql -u root -p密码,执行如下命令: use mysql; select host from user where user root; 该结果表示是当前的…

洛谷 P5043 【模板】树同构([BJOI2015]树的同构)题解 树哈希 树的重心

【模板】树同构([BJOI2015]树的同构) 题目描述 树是一种很常见的数据结构。 我们把 N N N 个点, N − 1 N-1 N−1 条边的连通无向图称为树。 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这…

区块链共识机制技术一--POW(工作量证明)共识机制

1. 概述 POW(Proof of Work,工作量证明)是一种通过消耗计算能力来解决复杂数学问题,从而达到共识的机制。它是最早应用于区块链技术的共识算法,最著名的应用便是比特币网络。 2. 工作原理 在POW机制中,节点…