YOLO系列笔记(十)—— 基础:卷积层及其计算公式

news2025/1/10 11:15:51

卷积层及其计算公式

  • 前言
  • 定义与功能
  • 计算过程与输出尺寸
    • 没有填充的情况
    • 有填充的情况
  • 网络结构中的表示
    • 分析一:数字的含义
    • 分析二:分支的含义

前言

卷积层是在深度学习领域中非常常见、基础且重要的一种神经网络层。许多初学者可能会对卷积层的功能、其计算过程以及它在神经网络中的作用感到困惑。在这篇文章中,我将为大家详细介绍卷积层的基本概念和运作原理。

定义与功能

卷积层主要执行的是卷积操作,这是一种在神经网络中常用的操作,用于从输入数据中提取特征。在卷积层中,多个卷积核(也称为滤波器)在输入数据上滑动,并在每个位置上执行逐元素的乘积运算,随后将这些乘积相加以产生输出特征图中的一个元素。这个过程在数学上被描述为卷积运算,其目的是通过滤波器提取输入数据的局部特征。卷积操作步骤如下图(这里采用的是2*2的卷积核):
在这里插入图片描述

计算过程与输出尺寸

卷积层的输出尺寸受到多个因素的影响,包括卷积核的尺寸、步幅(stride)和填充(padding)。以一个640x640像素的图像通过一个3x3卷积核的卷积层为例来说明:

没有填充的情况

如果没有填充,且步幅为1,则输出尺寸可以通过以下公式计算:
o u t p u t = ( input_size − kernel_size stride ) + 1 output = \left( \frac{{\text{input\_size} - \text{kernel\_size}}}{{\text{stride}}} \right) + 1 output=(strideinput_sizekernel_size)+1

对于一个640x640的图像通过一个3x3的卷积核,步幅为1的情况下,输出尺寸为:

o u t p u t = ( 640 − 3 1 ) + 1 = 638 output = \left( \frac{{640 - 3}}{1} \right) + 1 = 638 output=(16403)+1=638

因此,输出的特征图大小为 638x638。这里假设了没有填充且步幅为 1 的情况。填充和步幅的设置会影响输出的大小。

有填充的情况

当在卷积操作中使用填充时,会在输入数据的边缘周围添加额外的像素值(通常是0),以便控制输出特征图的大小。填充的主要目的是为了保持输入和输出的大小相同,或者为了在卷积操作中保留边缘信息。

如果我们使用填充来保持输入和输出的大小相同,并且使用3x3的卷积核,则所需的填充大小计算如下:

o u t p u t = ( input_size + 2 × padding − kernel_size stride ) + 1 output = \left( \frac{{\text{input\_size} + 2 \times \text{padding} - \text{kernel\_size}}}{{\text{stride}}} \right) + 1 output=(strideinput_size+2×paddingkernel_size)+1

在这个公式中,padding 是填充的大小,kernel_size 是卷积核的大小,stride 是卷积操作的步幅。

如果我们想要输入和输出的大小相同,并且使用 3x3 的卷积核,那么可以通过以下方式来计算需要的填充大小:
padding = ( output_size − 1 × stride − input_size + kernel_size 2 ) \text{padding} = \left( \frac{{\text{output\_size} - 1 \times \text{stride} - \text{input\_size} + \text{kernel\_size}}}{{2}} \right) padding=(2output_size1×strideinput_size+kernel_size)

例如,对于一个640x640的图像,经过一个3x3大小的卷积核,且步幅为1,想要输出大小与输入相同(640x640),则填充计算为:
padding = ( 640 − 1 × 1 − 640 + 3 2 ) = 1 \text{padding} = \left( \frac{{640 - 1 \times 1 - 640 + 3}}{2} \right) = 1 padding=(26401×1640+3)=1

因此,需要在输入图像的边缘周围添加1个像素的填充。添加了填充后,卷积操作将在填充后的图像上进行,输出大小与输入相同,都是640x640。
o u t p u t = ( input_size + 2 × padding − kernel_size stride ) + 1 = ( 640 + 2 × 1 − 3 1 ) + 1 = 640 output = \left( \frac{{\text{input\_size} + 2 \times \text{padding} - \text{kernel\_size}}}{{\text{stride}}} \right) + 1 \\ = \left( \frac{{\text{640} + 2 \times \text{1} - \text{3}}}{{\text{1}}} \right) + 1 = 640 output=(strideinput_size+2×paddingkernel_size)+1=(1640+2×13)+1=640

注:所有公式中的大括号都代表了取整,即int强制转换类型操作。

网络结构中的表示

通过将这些概念应用于具体的网络结构如YOLOv5,在网络可视化工具中我们可以看到每个卷积层的参数设置和细节实现,这有助于我们更好地理解卷积层如何在实际的深度学习模型中发挥作用。
这里采用yolov5s.onnx文件,将其输入可以展示神经网络结构的网址中,可以得到卷积层的表示:在这里插入图片描述

分析一:数字的含义

Conv代表该层是卷积层(Convolution),其中WB 通常代表卷积层中的权重(weights)和偏置(biases)。在该示例中,WB 的维度具体表示如下:

  • W:32 * 3 * 6 * 6
    1. 32:这是输出通道数(也被称为滤波器或卷积核的数量)。每个滤波器都会产生一个不同的特征图(feature map)。
    2. 3:这是输入通道数。例如,在处理RGB图像的第一卷积层中,这个数字通常为3,代表红、绿、蓝三个颜色通道。
    3. 6 * 6:这是每个滤波器的空间维度,即每个卷积核的高度和宽度。这里,每个卷积核是6x6像素大小。
  • B:32
    1. 32:这表示有32个偏置值,每个输出通道对应一个偏置值。偏置是在计算卷积之后、激活函数之前加到每个特征图上的一个标量值,用于调整网络的输出。

总结W 是一个四维张量,其中包含了整个卷积层的所有滤波器(卷积核),而 B 是一个一维向量,包含了对应于每个输出通道的偏置值。这样的配置使得卷积层能够对输入数据进行有效的特征提取,每个滤波器通过其独特的权重集从输入数据中提取不同的特征,而偏置值则帮助调整输出信号,增强网络学习的灵活性和表达能力。

分析二:分支的含义

  1. 分支一(未修改的特征图):直接将卷积层的输出保持不变,这部分通常保留了原始的特征信息。

  2. 分支二(Sigmoid变化):这个分支对相同的卷积层输出应用Sigmoid激活函数。Sigmoid函数的输出范围是0到1,可以将其解释为一种权重或概率,用于调节特征的重要性。

  3. Mul层合并:在Mul层(逐元素乘法),两个分支的输出被相乘。具体来说,Sigmoid处理过的输出,作为权重应用于未修改的输出上。这个操作相当于对原始特征图进行了一个按元素的缩放,其中缩放系数由Sigmoid输出确定。

作用解释: 这种结构通常用于实现注意力机制,通过它,模型能够学习到哪些部分的特征是更加重要的。在目标检测任务中,这可以帮助模型更加集中注意力于图像中对于当前任务更为重要的区域,从而提高检测的准确性。此外,这种动态调节特征的方式还可以增强模型对输入数据中变化的适应性,提高模型的泛化能力。

最后,看到这里如果觉得该笔记对您有用的话,可以点个小小的赞,或者点赞收藏关注一键三连ヾ(◍’౪`◍) ~ 谢谢!!

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

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

相关文章

【Git】Github创建远程仓库并与本地互联

创建仓库 点击生成新的仓库 创建成功后会生成一个这样的文件 拉取到本地 首先先确保本地安装了git 可以通过终端使用 git --version来查看是否安装好了git 如果显示了版本信息,说明已经安装好了git,这时候我们就可以进入我们想要clone到问目标文件夹 …

数据库开启远程连接

服务器端添加一个允许远程连接的root用户: mysql -u root -p create user root192.168.10.20 identified by admin; //创建一个192.168.10.20地址远程连接的root用户 grant all privileges on *.* to root192.168.10.20; //赋予远程root用户所有的权…

【计算机毕业设计】springboot河北任丘非物质文化遗产数字化传承

当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强, 计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统购物方式采取了人工的管理方法,但这种管理方法存在着许…

TypeScript学习日志-第二十一天(声明文件d.ts)

声明文件d.ts 在使用 Typescript 并使用第三方库 的时候 我们会发现会有很多的提示或补全,这都是声明文件起的作用,但是有写冷门的第三方库是没有声明文件的,这时候引用就会报错,我们就使用 express 库作为例子来展示一下&#x…

视频怎么打水印?6个软件教你快速进行视频水印制作

视频怎么打水印?6个软件教你快速进行视频水印制作 添加水印是保护视频版权、提升视频专业性的重要手段之一。以下是六款软件,它们能够帮助你快速进行视频水印制作,让你的视频更具个性和专业性: 1.迅捷视频剪辑软件:…

Docker快速搭建NAS服务——FileBrowser

Docker快速搭建NAS服务——FileBrowser 文章目录 前言FileBrowser的搭建docker-compose文件编写运行及访问 总结 前言 本文主要讲解如何使用docker在本地快速搭建NAS服务,这里主要写如下两种: FileBrowser1:是一个开源的Web文件管理器&…

TikTok自动评论、回复的脚本怎么制作?

在当今数字化的时代,社交媒体平台如TikTok已经成为人们日常生活的一部分,为了更有效地在TikTok上进行营销或互动,许多用户和企业开始寻找自动化工具,如自动评论和回复的脚本,以节省时间并提高效率。 本文将科普如何制…

5.11学习记录

20长安杯部分 检材 1 的操作系统版本 CentOS Linux 7.6.1810 (Core) 检材 1 中,操作系统的内核版本是 3.10.0-957.el7.x86_64 检材 1 中磁盘包含一个 LVM 逻辑卷,该 LVM 开始的逻辑区块地址(LBA)是 2099200 物理卷&#xff…

【福利来袭】免费领取量化交易软件,轻松炒股!

随着科技的发展和信息的普及,量化交易逐渐成为投资者们提高投资效率和盈利能力的重要工具。为了让更多的投资者能够轻松参与量化交易,让投资者能够更加便捷地进行炒股。本文将详细介绍两款免费量化交易软件,帮助投资者更好地了解和选择适合自…

Linux的编译器

程序编译的过程 程序的编译过程是将源代码转换为可执行文件的一系列步骤。这个过程涉及多个阶段,主要包括预处理、编译、汇编和链接。下面详细介绍每个阶段: 1. 预处理(Preprocessing) 在实际编译之前,源代码文件首…

vs2019 里 C++ 20规范的 string 类的源码注释

(1)读源码,可以让我们更好的使用这个类,掌握这个类,知道咱们使用了库代码以后,程序大致具体是怎么执行的。而不用担心程序出不知名的意外的问题。也便于随后的代码调试。 string 类实际是 库中 basic_strin…

STC8增强型单片机开发【定时器Timer⭐】

目录 一、引言 二、定时器基础知识 三、STC8定时器配置 四、代码示例 五、总结 一、引言 在单片机开发中,定时器(Timer)是一个极其重要的组件,它允许开发者基于时间触发各种事件或任务。STC8增强型单片机作为一款功能丰富的…

【机器学习】逻辑化讲清PCA主成分分析

碎碎念:小编去年数学建模比赛的时候真的理解不了主成分分析中的“主成分”的概念!!但是,时隔两年,在机器学习领域我又行了,终于搞明白了!且看正文!再分享一个今天听到的播客中非常触…

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1 1、 Dev.step(3) Dev.turnLeft() Dev.step(3) Spaceship.step(4) Spaceship.turnRight() Spaceship.step(4) Dev.step(3) while Item[1].y ! Dev.y:wait()2、 Dev.step(4) while Item[0].x ! Dev.x:wait() Dev.turnLe…

luceda ipkiss教程 69:导出器件或者线路的三维模型

ipkiss 3.12版加入write_obj函数,可以直接输出器件的三维模型。 如,输出自定义的mmi的三维模型: 代码如下: from si_fab import all as pdk from ipkiss3 import all as i3class MMI1x2(i3.PCell):"""MMI with …

北京车展现场体验商汤DriveAGI自动驾驶大模型展现认知驱动新境界

在2024年北京国际汽车展的舞台上,众多国产车型纷纷亮相,各自展示着独特的魅力。其中,小米SUV7以其精美的外观设计和宽敞的车内空间,吸引了无数目光,成为本届车展上当之无愧的明星。然而,车辆的魅力并不仅限…

学习3D几何和特征一致的高斯溅射目标去除

earning 3D Geometry and Feature Consistent Gaussian Splatting for Object Removal 学习3D几何和特征一致的高斯溅射目标去除 Yuxin Wang 王玉欣 HKUST &Qianyi Wu Monash University &Guofeng Zhang Zhejiang University &Dan Xu HKUST 香港科技大学&吴倩…

java期末复习

java jdk jre jvm .java-------->.class----jvm---->机器语言 编写源文件 编译源文件生成字节码 加载运行字节码 java语句执行顺序 顺序 选择 循环 异常处理 基本语法 方法格式 权限修饰符 返回值声明 方法名称(参数列表){方法中封装的逻辑功能;return 返回值;}–权…

三级综合医院微信预约挂号系统源码,PC后台管理端+微信公众号+支付宝小程序全套源码

智慧医院预约挂号系统,微信医疗预约挂号小程序源码,实体医院预约挂号支付系统源码 本系统主要面向中大型的医疗机构,适用于各级公立和民营医院,可对接院内his、lis、pacs系统。 PC后台管理端微信公众号支付宝小程序 系统支持当日…

mac安装禅道

前提已安装:phpapacheMySQL mac安装 php7.1/apache-CSDN博客 安装MySQL 一、禅道下载 安装官方文档 源码包下载地址:禅道下载 - 禅道开源项目管理软件 。 1. 解压禅道源码包 2. 将解压后的文件复制到Apache访问目录下 (默认路径为 /Libra…