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

卷积层及其计算公式

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

前言

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

定义与功能

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

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

相关文章

JDK不同版本里中国夏令时时间

什么是夏令时? 夏令时,(Daylight Saving Time:DST),也叫夏时制,又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采…

部署xwiki服务需要配置 hibernate.cfg.xml如何配置?

1. 定位 hibernate.cfg.xml 文件 首先,确保您可以在 Tomcat 的 XWiki 部署目录中找到 hibernate.cfg.xml 文件: cd /opt/tomcat/latest/webapps/xwiki/WEB-INF ls -l hibernate.cfg.xml如果文件存在,您可以继续编辑它。如果不存在&#xff…

KaiwuDB 参编的《分析型数据库技术要求》标准正式发布

近期,中国电子工业标准化技术协会正式发布团体标准《分析型数据库技术要求》(项目号:T-CESA 2023-006)。该标准由中国电子技术标准化研究院、KaiwuDB(上海沄熹科技有限公司) 等国内 16 家企业联合起草&…

Win11安装Docker Desktop运行Oracle 11g 【详细版】

oracle docker版本安装教程 步骤拉取镜像运行镜像进入数据库配置连接数据库,修改密码Navicat连接数据库 步骤 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g运行镜像 docker run -d -p 1521:1521 --name oracle11g registry.cn-ha…

《QT实用小工具·六十二》基于QT实现贝塞尔曲线画炫酷的波浪动画

1、概述 源码放在文章末尾 该项目实现了通过贝塞尔曲线画波浪动画,可控制 颜色密度速度加速度 安装与运行环境 语言:C 框架:Qt 11.3 平台:Windows 将屏幕水平平均分为10块,在一定范围内随机高度的12个点(…

提取网页元数据的Python库之lassie使用详解

概要 Lassie是一个用于提取网页元数据的Python库,它能够智能地抓取网页的标题、描述、关键图像等内容。Lassie的设计目的是为了简化从各种类型的网页中提取关键信息的过程,适用于需要预览链接内容的应用场景。 安装 安装Lassie非常简单,可以通过Python的包管理器pip进行安…

如何自定义Markdown中插入图片的位置

工作中常常需要在VsCode下写Markdown笔记,在写笔记的过程中不免需要插入图片。  Markdown中插入笔记的操作往往是比较繁琐的,比如:在文档中引用本地某个文件夹下的图片,首先需要你先保存图片到本地路径,然后需要你在文…

多模态模型Mini-Gemini:代码模型数据均开源,MiniCPM小钢炮2.0全家桶四连发,可以在Android 手机端上运行的大模型,效果还不错

多模态模型Mini-Gemini:代码模型数据均开源,MiniCPM小钢炮2.0全家桶四连发,可以在Android 手机端上运行的大模型,效果还不错。 多模态模型Mini-Gemini:代码模型数据均开源 香港中文大学终身教授贾佳亚团队提出多模态模…

【C++STL详解(十)】--------priority_queue的模拟实现

目录 前言 一、堆的向上调整算法 二、堆的向下调整算法 三、优先队列模拟实现 Ⅰ、接口总览 Ⅱ、各个接口实现 1.构造函数 2.仿函数 3.向上调整 4.向下调整 5.其余接口 Ⅲ、完成代码 前言 上节内容我们简单的介绍了关于priority_queue的使用内容,我们明白…

【数据结构】手把手带你玩转线性表

前言: 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我…

crontab开启定时任务

linux上面可以使用crontab -e配置定时任务,但是一般需求进行一些配置才能使用,默认如下: crontab开启定时任务: 1.输入select-editor 2.选择 2. /usr/bin/vim.basic 有时候不需要第一步直接输入2就可以了,如下图所示 此时就可以在里面配置我们想要执行的定时任务…

vue3实现动态表格

vue3结合element-plus实现动态表格&#xff0c;可添加、删除、对单行数据判断。 实现效果&#xff1a;查看源代码 实现代码&#xff1a; <div class"arrTable-Box"><el-table :data"tableData" border max-height"250"><el-t…

控制台打印空数组展开有数据

控制台打印空数组展开有数据 控制台显示: 代码如下: export const getDict1 = (dictCode) => {let list = []queryDict({dictCode }

nginx配置文件和配置命令详解案例

一.nginx.conf配置结构 1.1配置结构图 1.2 nginx中配置nginx.conf配置内容 #user nobody; user root; # 表示worker进程是有root用户去执行的 worker_processes 2; events {# 默认使用epolluse epoll;# 每个worker链接最大数据worker_connections 1024; } http {include …

直播产业赋能数字经济蓬勃发展!成都东部集团有限公司莅临天府锋巢直播产业基地考察交流

2024年4月25日&#xff0c;天府锋巢直播产业基地迎来了一次重要的考察交流。成都东部集团有限公司产业部副部长高文婷、集团产业部主管罗中婧亲临基地&#xff0c;与天府锋巢直播产业基地的招商总负责人姜国东等基地代表进行了深入的交流和探讨。 姜国东热情接待了来访的考察团…

芝加哥量子曼哈顿项目:200 亿美元的量子计算园区

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨王珩 排版丨沛贤 深度好文&#xff1a;1000字丨5分钟阅读 摘要&#xff1a;芝加哥商业媒体称&#xff0c;伊利诺伊州政府正在大力推动耗资200亿美元、占地150英亩的芝加哥量子计算园区建设…

Windows11 同时安装jdk8和jdk17 可切换

Windows11 同时安装jdk8和jdk17 可切换 死忠于JDK8的码农们&#xff0c;可能不得不做出一些改变的 因为在springboot3最低也是只能用17 并且最近如果创建springboot项目的时候&#xff0c;你会发现&#xff0c;最低也是17的 并且&#xff0c;如果使用springcloud开发&#x…

动态IP避坑指南:如何挑选合适的动态代理IP?

在如今的网络环境中&#xff0c;使用动态IP代理成为实现隐私保护、访问受限内容和提高网络效率的一种常见方式&#xff0c;选择合适的国外动态IP代理可以让我们的业务处理事半功倍。面对市面上琳琅满目的选择&#xff0c;如何挑选购买适合自己的动态IP代理服务呢&#xff1f;在…

通用产品发布解决方案(家居分类表设计以及renren代码生成器的使用)

文章目录 1.商品分类表设计1.需求分析2.数据库表设计1.数据库sunliving_commodity&#xff0c;商品分类表commodity_category2.测试数据 2.代码生成器生成crud1.解压到sunliving下并聚合管理1.解压2.修改sunliving的pom.xml进行聚合管理3.刷新maven报错 parent.relativePath4.将…

深入探索不相交集合:链表表示与加权合并策略的实现

深入探索不相交集合&#xff1a;链表表示与加权合并策略的实现 1. MAKE-SET 操作伪代码C语言实现 2. FIND-SET 操作伪代码C语言实现 3. UNION 操作伪代码C语言实现 4. 集合对象和表对象的属性5. 总结 在本文中&#xff0c;我们将探讨如何使用链表表示和加权合并启发式策略来实现…