一文详解卷积神经网络中的卷积层和池化层原理 !!

文章目录

前言

一、卷积核大小(Kernel Size)

1. 卷积核大小的作用

2. 常见的卷积核大小

3. 选择卷积核大小的原则

二、步长(Stride)

1. Stride的作用

三、填充(Padding)

1. 填充的作用

四、通道数(Channels)

五、池化(Pooling)

1. 池化层的作用

六、卷积层的作用

1. 局部特征的层次化提取过程


前言

卷积神经网络(Convolutional Neural Network,CNN)是深度学习神经网络经典形式之一,由于其计算过程中包含卷积运算,因此得名。卷积神经网络(CNN)通过使用卷积层来提取图像数据的局部特征,再通过池化层(Pooling Layer)来降低特征的空间维度,最后通过全连接层(Fully Connected Layer)进行分类或回归任务。CNN已经在图像识别、目标检测、图像生成和许多其他领域取得了显著的进展,成为了计算机视觉和深度学习研究的重要组成部分。

卷积神经网络最为关键的两个步骤是执行卷积(Convolution)操作和进行池化(Pooling)处理。卷积用于特征提取,通过卷积核在输入数据上滑动计算加权和;池化用于特征降维,通过聚合统计池化窗口内的元素来减少数据空间大小。

图像在计算机中是一堆按顺序排列的数字,数值为0到255.0表示最暗,255表示最亮,如下图的手写数字图像。

卷积操作是指将一个可移动的小窗口(称为数据窗口,如下图绿色矩形)与图像进行逐元素相乘然后相加的操作。这个小窗口其实是一组固定的权重,它可以被看作是一个特定的滤波器(filter)或卷积核。这个操作的名称“卷积”,源自于这种元素级相乘和求和的过程。这一操作是卷积神经网络名字的来源。

卷积有哪些重要参数?卷积的重要参数主要包括卷积核大小(Kernel Size)步长(Stride)以及填充(Padding),它们共同决定了卷积层的输出特征图的尺寸和特性。另外图像及输出特征图通道数也决定卷积神经网络的模型训练效果。

  • 卷积核大小(Kernel Size):决定了感受野的大小,即每次卷积操作能够覆盖的输入区域大小。
  • 步长(Stride):决定了卷积核在输入图像或特征图上滑动的距离。步长为1表示每次滑动一个像素,步长大于1则表示每次滑动多个像素。
  • 填充(padding):在输入图像或特征图的边缘添加额外的零值,以控制输出特征图的尺寸。常见的填充方式有“valid”(无填充)和“same”(填充后输出尺寸与输入相同)。
  • 通道数(Channels):对于输入图像,通道数指的是颜色通道数(如RGB图像的通道数为3)。对于卷积层,输出特征图的通道数由卷积核的数量决定。

一、卷积核大小(Kernel Size)

卷积核的大小是决定卷积层功能的重要参数之一。卷积核的大小通常指的是卷积核的维度,如3x3、5x5等,表示卷积核在输入数据上滑动的局部区域大小。

如下图,是一个大小为3x3的卷积核,对输入矩阵进行卷积操作。

1. 卷积核大小的作用

卷积核的大小决定了网络能够获取的空间维度信息。较大的卷积核可以捕捉更多的输入信息,从而可能获得更好的性能,但同时也会增加计算量,并可能使网络容易过拟合,较小的卷积核虽然计算效率较高,但可能会丢失一些全局信息。

2. 常见的卷积核大小

3x3:这是一个平衡的选择,可以捕捉一定的空间信息,同时不会使计算量过大。

5x5:更大的卷积核可以捕获更多的上下文信息,但计算成本也更高。

7x7:这些较大的卷积核可以提供更多的信息,但除非特定任务需要,否则通常较少使用,因为性能提升可能与计算成本不成比例。

3. 选择卷积核大小的原则

选择卷积核大小应根据具体任务、输入数据的尺寸以及计算资源来决定。通常情况下,可以从经验规则开始,如使用3x3卷积核,然后根据需要调整。较大的任务或复杂的数据集可能需要更大的卷积核来捕获更多细节。

在使用卷积层时,除了卷积核大小,还需要考虑步长(stride)、填充(padding)等其他参数,这些因素一起决定了卷积层输出的特征图的空间维度。合理配置这些参数对于优化网络性能至关重要。

二、步长(Stride)

滑动卷积核时,我们会先从输入的左上角开始,每次往左滑动一列或者往下滑动一行逐一计算输出,我们将每次滑动的行数和列数称为Stride,即步长,在之前的图片中,Stride=1;在下图中,Stride=2。

1. Stride的作用

是成倍缩小尺寸,而这个参数的值就是缩小的具体倍数,比如步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3,以此类推。

三、填充(Padding)

填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。下图中我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。

下面的动态图,很好的展示了填充后,卷积的计算操作过程:

1. 填充的作用

(1)保留边缘信息

  • 在卷积核滑动过程中,输入图像边缘的像素通常参与计算的次数较少,导致边缘特征容易被忽略。通过填充(如补零),边缘像素可以更充分地参与卷积运算,减少边缘信息丢失;
  • 例如,3x3的卷积核在未填充时,边缘像素仅参与一次计算,而填充后能多次参与,提升特征提取的完整性。

(2)控制输出特征图尺寸

  • 填充允许调整输出特征图的空间维度。例如,当希望输出尺寸与输入相同时,需通过填充补足因卷积核滑动减少的尺寸。

(3)增强网络灵活性

  • 填充使网络设计更灵活:若未填充,随着网络加深,特征图尺寸迅速缩减,限制网络深度;填充后可通过调整步长和填充数平衡计算与特征保留需求。例如,使用“same填充”可保持各层特征图尺寸稳定,便于堆叠更多卷积层。

(4)引入平移不变性

  • 填充(尤其是零填充)通过模糊边缘位置差异,使网络对目标在图像中的位置变化更鲁棒,从而增强平移不变性。

该动态图形象地展示了卷积层计算的过程,卷积核大小为3x3,然后对输入数据进行了填充,其次步长为Stride=2,卷积计算的结果为输入图像矩阵乘以对应神经元的权重值w,再加上偏置值b。

四、通道数(Channels)

上面只是针对单通道的图像,也就是灰度图,而更普遍的图像表示方式是RGB颜色模型,即红、绿、蓝三原色的色光以不同的比例相加,以产生多种多样的色光。RGB颜色模型中,单个矩阵就扩展成了有序排列的三个矩阵,也可以用三维张量去理解。

其中的每个矩阵又叫这个图片的一个channel(通道),宽、高、深来描述。

那么对一个彩色图像做卷积,到底做了什么呢?下面这张动图,很好地展示了图像卷积计算的过程,原始图像有RGB三个通道channel1-3,对应有3个卷积核Kernel1-3,每一个通道的图片与对应的卷积核做乘加运算,每个通道得到的数值再相加,加上总体的偏置Bias得到特征图(feature map)里面的一个值。

五、池化(Pooling)

讲完卷积,就必须要讲一下池化,因为通常卷积层和池化层都是配合使用的。池化操作有多种方式,其中最常见的是最大值池化(Max Pooling)平均池化(Average Pooling)。它们分别通过选取局部区域内的最大值和平均值来减少特征图的尺寸。

最大值池化(Max Pooling):在定义的池化窗口内,选取所有元素中的最大值,并将该最大值作为池化结果输出到下一层特征图的对应位置。

平均池化(Average Pooling):在定义的池化窗口(如2x2、3x3等)内,计算所有元素的平均值,并将该平均值作为池化结果输出到下一层特征图的对应位置。

下面是以动态图的形式,展示两种池化操作的异同。

1. 池化层的作用

(1)降维:池化层通过池化操作降低特征图的空间维度,减少计算复杂度,同时保留重要的特征信息。

(2)防止过拟合:池化层的降维操作减少了模型参数的数量,有助于防止模型过拟合,提高模型的泛化能力。

(3)位置不变性:池化层通过取局部区域的最大值或平均值,使得模型对特征的位置变化具有一定的不变性。

六、卷积层的作用

卷积层通过可学习的滤波器(卷积核)对输入数据进行局部感知,捕捉空间关联性强的特征。例如,低层卷积核可提取边缘、角点、纹理等基础特征,而高层通过组合这些基础特征逐步形成更复杂的抽象特征(如物体形状、部件等)。这种层次化特征组合能力使CNN无需人工设计特征,而是通过反向传播自动优化滤波器参数。

手动设计卷积核,提取图像特征(如,边缘特征)

下图是ResNet卷积神经网络中的卷积层提取的特征图:

在图像目标检测、识别、分类任务中,卷积神经网络(CNN)通过多层次的局部感知、参数共享和反向传播机制,逐步从原始像素中学习目标的抽象特征。

1. 局部特征的层次化提取过程

(1)低层基础特征学习

输入图像通过卷积核(如3x3或5x5的滤波器)进行局部扫描,计算像素点与卷积核的加权和,生成特征图。这些初始卷积核通过反向传播自动学习,捕捉边缘、角点、颜色梯度等基础特征。

(2)中层抽象特征组合

随着网络加深,低层特征被组合为更复杂的模式。例如,边缘组合成纹理,纹理组合成物体部件(如车轮、眼睛)。这些组合通过多层卷积实现,如VGGNet通过堆叠多个3×3卷积层扩大感受野,模拟生物视觉系统的层次化处理。

(3)高层语义特征表达

深层网络通过非线性激活函数(如ReLU)和跨通道信息融合,提取目标整体的语义特征(如“汽车”“人脸”)。例如,ResNet的残差块允许梯度直接传递,促进深层网络学习高阶特征。

参考资料:E等于mc平方

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

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

相关文章

云+AI双轮驱动,亚马逊云科技加速中国企业出海新浪潮

导读:全球化就是本地化 作者 | 小葳 图片来源 | 摄图 近年来,中国企业出海步伐不断加快,“不出海,就出局”成为很多企业的共识。 据沙利文统计,2024年上半年,超过2000家中国上市企业布局海外市场&#xff…

C语言HashTable基本理解

文章目录 一、哈希表概念1. 哈希表的基本概念2. 哈希表的核心组件2.1 哈希函数2.2 冲突处理(哈希碰撞) 3.哈希表的三种结构(1) 数组作为哈希表示例: 2. Set(集合)示例:查找数组中的重复元素1. Set 基础概念…

【缓存与数据库结合最终方案】伪从技术

实现伪从技术:基于Binlog的Following表变更监听与缓存更新 技术方案概述 要实现一个专门消费者服务作为Following表的伪从,订阅binlog并在数据变更时更新缓存,可以采用以下技术方案: 主要组件 MySQL Binlog监听:使…

《100天精通Python——基础篇 2025 第3天:变量与数据类型全面解析,掌握Python核心语法》

目录 一、Python变量的定义和使用二、Python整数类型(int)详解三、Python小数/浮点数(float)类型详解四、Python复数类型(complex)详解---了解五、Python字符串详解(包含长字符串和原始字符串)5.1 处理字符串中的引号5.2 字符串的…

【前后端分离项目】Vue+Springboot+MySQL

文章目录 1.安装 Node.js2.配置 Node.js 环境3.安装 Node.js 国内镜像4.创建 Vue 项目5.运行 Vue 项目6.访问 Vue 项目7.创建 Spring Boot 项目8.运行 Spring Boot 项目9.访问 Spring Boot 项目10.实现 Vue 与 Spring Boot 联动11.安装 axios12.编写请求13.调用函数请求接口14.…

线性代数(一些别的应该关注的点)

一、矩阵 矩阵运算:线性变换 缩放、平移、旋转 无所不能的矩阵 - 三维图形变换_哔哩哔哩_bilibili

01Redis快速入门(nosql、安装redis、客户端、命令及类型、java客户端、序列化)

Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串…

AI编程:[体验]从 0 到 1 开发一个项目的初体验

一、开发信息 开发时间:1.5-2天工具使用: 不熟练,开发本项目前1天,才简单使用了Cursor的功能 功能复杂度: 开发的功能相对简单。页面:2个,登录页面,个人中心页面功能:5个…

LeetCode-392 判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#…

Linux 系统监控大师:Glances 工具详解助力自动化

看图猜诗,你有任何想法都可以在评论区留言哦~ 摘要 Glances 是一款基于 Python 开发的跨平台系统监控工具,集成了 CPU、内存、磁盘、网络、进程等核心指标的实时监控能力,并支持命令行、Web界面、客户端-服务器模式等多种使用场景。其轻量级…

Spring Boot 3.4.5 运行环境需求

📝 Spring Boot 3.4.5 运行环境要求 🌿 1️⃣ 基本需求 ☑️ JDK版本:最低 Java 17 🔗 https://www.java.com/ 最高兼容至 Java 24 ☑️ 依赖框架:需搭配 Spring Framework 6.2.6 🔗 https://docs.sprin…

在KEIL里C51和MDK兼容以及添加ARM compiler5 version编译器

前言 我们想在一个keil里面可以打开32和51的文件,这样就不需要两个keil了 还有就是现在的keil,比如我用的是5.41的,就没有5版本的处理器,所以要安装 本篇文章我们来详细讲解如何实现上面说的两个内容 准备的东西 1.ARM5编译器 …

Flutter 弹窗队列管理:支持优先级的线程安全通用弹窗队列系统

在复杂的 Flutter 应用开发中,弹窗管理是一个常见难题。手动管理弹窗的显示顺序和条件判断不仅繁琐,还容易出错。为此,我们实现了一个支持优先级的线程安全通用弹窗队列管理系统。它能够自动管理弹窗的显示顺序,支持条件判断&…

鸿蒙NEXT开发剪贴板工具类(ArkTs)

import { pasteboard } from kit.BasicServicesKit; import { StrUtil } from ./StrUtil;/*** 剪贴板工具类* 需要权限:* ohos.permission.READ_PASTEBOARD // 允许应用读取剪贴板。* author CSDN-鸿蒙布道师* since 2025/04/25*/ export class PasteboardUtil {…

FastAPI 零基础入门指南:10 分钟搭建高性能 API

一、为什么选择 FastAPI? 想象一下,用 Python 写 API 可以像搭积木一样简单,同时还能拥有媲美 Go 语言的性能,这个框架凭借三大核心优势迅速风靡全球: 开发效率提升 3 倍:类型注解 自动文档,…

【算法】BFS-解决FloodFill问题

目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思,假设有下面的一块田地,负数代表是凹地,正数代表是凸地,数字的大小表示凹或者凸的程度。现在下一场大雨&…

代码随想录算法训练营第三十七天|动态规划part4

1049. 最后一块石头的重量 II 题目链接: 1049. 最后一块石头的重量 II - 力扣(LeetCode) 文章讲解: 代码随想录 思路: 理解为把石头分成两堆 使得两堆的差值尽可能小 求这个最小值1 理解为往背包里装物品 每个物品的…

(八)深入了解AVFoundation-采集:拍照功能的实现

引言 在上一篇文章中,我们初步完成了使用 AVFoundation 采集视频数据的流程,掌握了 AVCaptureSession 的搭建与视频流的预览显示。 本篇将继续深入 AVFoundation,聚焦于静态图片采集的实现。通过 AVCapturePhotoOutput,我们可以…

git tag使用场景和实践

背景 每次上线一个迭代,为了区分本次代码的分支是哪个迭代的commit,可以给分支打上tag,这样利于追踪分支所属迭代,如果devops没有自动给分支打tag,需要自己来打 操作 1.查看当前tag git tag2.给分支打tag git tag…

从零开始掌握Linux数据流:管道与重定向完全指南

全文目录 1 知识背景与核心概念1.1 操作系统的输入输出模型1.2 Shell 的中间人角色 2 重定向技术深度解析2.1 输出重定向2.1.1 覆盖写2.1.2 追加写2.1.3 错误重定向2.1.4 同时重定向 stdout 和 stderr 2.2 输入重定向2.2.1 文件作为输入源2.2.2 Here Document(多行输…