许久不见~
本节我们延续上一节的话题来看看卷积神经网络的架构,看看具体的卷积、池化等操作


卷积神经网络详解:从基础操作到整体架构

一、卷积操作:特征提取的核心

卷积是卷积神经网络(CNN)的核心操作,灵感来源于人类视觉系统。在图像处理中,卷积可表示为:

(I∗K)(i,j)=∑m∑nI(i+m,j+n)⋅K(m,n)(I * K)(i,j) = \sum_{m}\sum_{n} I(i+m,j+n) \cdot K(m,n)(IK)(i,j)=mnI(i+m,j+n)K(m,n)

其中:

  • III 是输入图像矩阵
  • KKK 是卷积核(滤波器)
  • (i,j)(i,j)(i,j) 是输出位置坐标

卷积过程图解
在这里插入图片描述

计算示例(左上角位置):
(0×0)+(1×1)+(3×2)+(4×3)=19(0×0) + (1×1) + (3×2) + (4×3) = 19(0×0)+(1×1)+(3×2)+(4×3)=19
简单来说就是对应相乘然后求和

卷积核本质是特征检测器,不同核可提取边缘、纹理等特征:

  • 垂直边缘检测核:[10−110−110−1]\begin{bmatrix}1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1\end{bmatrix}111000111
  • 水平边缘检测核:[111000−1−1−1]\begin{bmatrix}1 & 1 & 1 \\ 0 & 0 & 0 \\ -1 & -1 & -1\end{bmatrix}101101101

至于特征是什么,你就当做是属性或者本质来理解吧


二、步幅(Stride):控制计算密度

步幅定义卷积核每次移动的像素数。设步幅为SSS

  • S=1S=1S=1:滑动间隔1像素(输出尺寸最大)
  • S=2S=2S=2:滑动间隔2像素(输出尺寸减半)

步幅影响图解

S=1时移动路径:    S=2时移动路径:
→→→→→            → → → 
↓↓             ↓   ↓
→→→→→            → → → 
↓↓
→→→→→

数学意义:步幅增加会降低特征图分辨率,但能显著减少计算量,适用于深层网络。


三、填充(Padding):边界信息保护

填充是在输入图像边缘添加像素(通常为0),解决两个核心问题:

  1. 边界信息丢失(角落像素参与计算次数少)
  2. 输出尺寸收缩

常用填充模式:

类型公式输出尺寸特点
ValidP=0P=0P=0W−FS+1\frac{W-F}{S}+1SWF+1无填充,输出缩小
SameP=F−12P=\frac{F-1}{2}P=2F1WWW输入输出同尺寸

填充量PPP的计算:
P=⌊F−12⌋P = \left\lfloor \frac{F-1}{2} \right\rfloorP=2F1
其中FFF为卷积核尺寸

填充效果示例(3x3核,Same填充):

原始输入:    填充后(P=1):
1 2 3       0 0 0 0 0
4 5 6   →   0 1 2 3 0
7 8 9       0 4 5 6 00 7 8 9 00 0 0 0 0

四、池化层:空间信息压缩

池化层通过降采样减少参数量,增强特征不变性。

1. 最大值池化(Max Pooling)

输出(i,j)=max⁡m,n∈R输入(i×S+m,j×S+n) \text{输出}(i,j) = \max_{m,n \in \mathcal{R}} \text{输入}(i×S+m, j×S+n) 输出(i,j)=m,nRmax输入(i×S+m,j×S+n)

可以这样来理解,在一个区域内挑选最大的

  • 在这里插入图片描述

  • 历史:1980年福岛邦彦在Neocognitron首次提出,1998年LeNet-5正式应用

  • 特点:保留显著特征,对噪声鲁棒

2. 平均池化(Average Pooling)

输出(i,j)=1∣R∣∑m,n∈R输入(i×S+m,j×S+n) \text{输出}(i,j) = \frac{1}{|\mathcal{R}|} \sum_{m,n \in \mathcal{R}} \text{输入}(i×S+m, j×S+n) 输出(i,j)=R1m,nR输入(i×S+m,j×S+n)
平均池化就是将这个区域内的值求平均数

  • 在这里插入图片描述

  • 历史:2012年AlexNet首次大规模应用,缓解过拟合

  • 特点:保留整体特征分布,平滑特征图

池化过程图解(2x2池化窗口,S=2):

输入矩阵:        最大值池化:     平均池化:
[1 5 0 2]        [5  2]         [3.0  1.5]
[3 2 4 1]   →    [4  3]         [3.5  2.5]
[7 0 3 5]        [7  5]         [3.5  4.0]
[2 6 1 4]                          

在这里我们将池化的核叫做感受眼 池化只算一种操作而不是卷积网络中的一层,但是它依旧会影响输入输出的特征图大小


五、输出特征图计算通式

给定参数:

  • 输入尺寸:W×H×DinW \times H \times D_{in}W×H×Din
  • 卷积核尺寸:FH×FW×DinFH \times FW \times D_{in}FH×FW×Din
  • 卷积核通道数:DDD
  • 步幅:SSS
  • 填充:PPP

输出特征图尺寸:通道数由卷积核的通道数决定
在这里插入图片描述

计算示例

  • 输入:224×224×3224 \times 224 \times 3224×224×3 图像
  • 卷积核:7×7×37 \times 7 \times 37×7×3K=64K=64K=64
  • S=2S=2S=2P=3P=3P=3
  • 输出:Wout=⌊(224−7+6)/2⌋+1=112W_{out} = \lfloor(224-7+6)/2\rfloor+1 = 112Wout=⌊(2247+6)/2+1=112
  • 最终输出:112×112×64112 \times 112 \times 64112×112×64

六、多通道卷积运算

多通道卷积是CNN处理彩色图像的关键,运算过程分三步:

  1. 输入结构DinD_{in}Din通道输入(如RGB三通道)
    输入∈RW×H×Din \text{输入} \in \mathbb{R}^{W \times H \times D_{in}} 输入RW×H×Din

  2. 卷积核结构:每个卷积核包含DinD_{in}Din个通道的权重
    Kk∈RF×F×Din(k=1,2,...,K) K_k \in \mathbb{R}^{F \times F \times D_{in}} \quad (k=1,2,...,K) KkRF×F×Din(k=1,2,...,K)

  3. 计算过程
    输出k(i,j)=∑d=1Din(∑m=0F−1∑n=0F−1Id(i+m,j+n)⋅Kk(d)(m,n))+bk \text{输出}_k(i,j) = \sum_{d=1}^{D_{in}} \left( \sum_{m=0}^{F-1} \sum_{n=0}^{F-1} I_d(i+m,j+n) \cdot K_k^{(d)}(m,n) \right) + b_k 输出k(i,j)=d=1Din(m=0F1n=0F1Id(i+m,j+n)Kk(d)(m,n))+bk

多通道卷积示意图

输入通道(3通道)      卷积核组(2个核)
[ R ]               [ K1_R ] [ K2_R ]
[ G ]          *    [ K1_G ] [ K2_G ]  = 输出特征图(2通道)
[ B ]               [ K1_B ] [ K2_B ]

为什么会是这样呢?对于输入的3通道 ,每一个通道会和卷积核的一个通道进行卷积计算然后进行叠加,得到一个通道的输出,卷积核有多少的通道就会进行多少次这样的计算,因此由卷积核的通道(核的数量)决定本层的输出通道数


七、卷积神经网络整体架构

典型CNN包含以下层级结构:

1. 输入层
  • 接收W×H×CW \times H \times CW×H×C张量
  • 预处理:归一化、数据增强
2. 卷积块(重复N次)

这一块代码你可能还看不懂,没有关系,我们下一节具体来讲解

# 典型卷积块代码实现
def conv_block(x, filters, kernel_size=3):x = Conv2D(filters, kernel_size, padding='same')(x)x = BatchNormalization()(x)x = ReLU()(x)return x
  • 卷积层:提取局部特征
  • 激活函数:引入非线性(常用ReLU:f(x)=max⁡(0,x)f(x)=\max(0,x)f(x)=max(0,x)
  • 批归一化:加速训练
3. 池化层
  • 空间降维:通常2×22\times22×2窗口,S=2S=2S=2
  • 位置:每1-2个卷积块后
4. 全连接层
  • 特征整合:将3D特征展平为1D向量
    Flatten:RW×H×D→RN(N=W×H×D) \text{Flatten}: \mathbb{R}^{W\times H\times D} \to \mathbb{R}^{N} \quad (N=W\times H\times D) Flatten:RW×H×DRN(N=W×H×D)
  • 分类输出:Softmax激活函数
5. 经典架构演进
网络创新点深度Top-5错误率
LeNet-5 (1998)首个实用CNN架构7层-
AlexNet (2012)ReLU/Dropout/多GPU训练8层16.4%
VGG (2014)3x3小卷积核堆叠16-19层7.3%
ResNet (2015)残差连接解决梯度消失50-152层3.57%

现代CNN架构特征

  • 深度堆叠:16~100+层
  • 残差连接:H(x)=F(x)+xH(x) = F(x) + xH(x)=F(x)+x
  • 瓶颈结构:1x1卷积降维
  • 注意力机制:通道/空间注意力
  • 轻量化设计:深度可分离卷积

八、端到端计算流程示例

以10x10 RGB图像分类为例:

  1. 输入层10×10×310 \times 10 \times 310×10×3
  2. 卷积层1:32个3×33\times33×3核,S=1,P=1 → 10×10×3210 \times 10 \times 3210×10×32
  3. 池化层1:2x2 MaxPooling, S=2 → 5×5×325 \times 5 \times 325×5×32
  4. 卷积层2:64个3×33\times33×3核,S=1,P=1 → 5×5×645 \times 5 \times 645×5×64
  5. 池化层2:2x2 MaxPooling, S=2 → 2×2×642 \times 2 \times 642×2×64
  6. 全连接层:Flatten → 256256256神经元
  7. 输出层:Softmax → 类别概率

参数量计算:

  • 卷积层1:(3×3×3+1)×32=896(3×3×3+1)×32 = 896(3×3×3+1)×32=896
  • 卷积层2:(3×3×32+1)×64=18,496(3×3×32+1)×64 = 18,496(3×3×32+1)×64=18,496
  • 全连接层:(256+1)×10=2,570(256+1)×10 = 2,570(256+1)×10=2,570
  • 总计:21,962参数(传统神经网络需数百万参数)

九、卷积神经网络优势
  1. 局部连接:每个神经元仅连接局部区域,大幅减少参数量
    参数量=(F×F×Din+1)×Dout \text{参数量} = (F \times F \times D_{in} + 1) \times D_{out} 参数量=(F×F×Din+1)×Dout

  2. 权值共享:同一卷积核在整张图像滑动,增强泛化能力

  3. 平移不变性:池化操作使特征对位置变化鲁棒

  4. 层次化特征

    • 浅层:边缘/纹理
    • 中层:部件组合
    • 深层:语义对象

本介绍涵盖卷积神经网络核心组件及其数学原理,通过系统阐述,由基础操作延伸至架构设计,结合公式推导和概念图解,构建完整的知识体系。实际实现时需结合PyTorch/TensorFlow等框架,通过反向传播优化卷积核权重。
So,我们下一节来看看经典的神经网络的参数然后直接进行实战练习吧~

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

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

相关文章

C语言的控制语句

C的控制语句 控制语句是C语言中用于控制程序执行流程的结构。通过控制语句,可以根据条件执行不同的代码块,或者重复执行某些操作,从而实现复杂的逻辑和功能。掌握控制语句是编写有效和高效C程序的关键。 1 条件控制 条件控制语句用于根据某些条件来决定程序的执行路径。C语…

Mac电脑基本功能快捷键

1. 个性化桌面 将喜爱照片添加为桌面墙纸。前往“系统设置”,然后点按边栏中的“墙纸”。点按“添加照片”,然后从文件或“照片”App选取一张照片。 2. 截屏 按下键盘上的Shift  Command ⌘ 5,然后选取捕捉整个屏幕、App窗口或…

微算法科技(NASDAQ: MLGO)开发量子边缘检测算法,为实时图像处理与边缘智能设备提供了新的解决方案

图像边缘检测是计算机视觉的核心任务,传统算法(如 Sobel、Canny)依赖梯度计算与阈值分割,在处理高分辨率、复杂纹理图像时面临计算效率瓶颈。随着量子计算技术的发展,利用量子态叠加与并行处理特性,微算法科…

断点续传Demo实现

基于我们的DownloadManager.swift代码,让我详细解释断点续传需要实现的核心功能: 断点续传的核心实现要素 1. 后台会话配置 private func setupBackgroundSession() {let config URLSessionConfiguration.background(withIdentifier: "com.test.do…

《Leetcode》-面试题-hot100-子串

题目列表 560. 和为K的子数组 中等难度 leetcode链接 239 滑动窗口最大值 困难难度 leetcode链接 76 最小覆盖子串 困难难度 leetcode链接 题目 (1)和为K的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 …

点击弹框以外的区域关闭弹框

在 Vue 3 中&#xff0c;如果你想判断点击的目标是否在弹框内&#xff0c;可以通过以下步骤实现。这里我们将使用 ref 来引用弹框组件&#xff0c;并在点击事件中进行判断。 示例代码 1. 创建弹框子组件 首先&#xff0c;创建一个名为 Modal.vue 的子组件。 <!-- Modal.vue …

00.Vue基础入门【小白级别手把手!】

目录 一、Vue介绍 二、创建Vue项目 nodeJs nvm版本管理 创建Vue项目 VS Code编辑器 三、.Vue文件结构说明 数据渲染 四、Vue项目目录说明 main.ts文件说明 五、Vue官网文档学习 一、Vue介绍 基础介绍 Vue是一个前端Web框架&#xff0c;属于单页应用&#xff08;SPA&am…

将Varjo XR技术融入战斗机训练模拟器,有效提升模拟训练沉浸感与效率

本周在Varjo总部&#xff0c;收到了一份令人兴奋的礼物&#xff0c;一架由Dogfight Boss与varjo XR-4集成的训练模拟器。这是一个专业级模拟器&#xff0c;专为高保真训练和任务排练而设计&#xff0c;非常注重细节&#xff0c;提高了沉浸水平。为此Dogfight Boss的首席执行官L…

C# async await 实现机制详解

一、async/await 异步编程实现机制 1.1 核心概念 async/await 是 C# 5.0 引入的语法糖&#xff0c;它基于**状态机&#xff08;State Machine&#xff09;**模式实现&#xff0c;将异步方法转换为编译器生成的状态机类。 1.2 编译器转换过程 当编译器遇到 async 方法时&#xf…

Servlet 学习笔记

本文为记录Servlet学习时的一些笔记和代码 课程参考黑马程序员 对于Java Web 学习的一个复习一 概述server applet 运行在服务器端的小程序 本质就是一个接口 定义java类被浏览器访问到&#xff08;Tomcat识别&#xff09;的规则我们会自定义这样一个类来实现复写方法实现接口二…

【maven】仓库配置

目录 一、本地仓库 二、私有仓库 三、阿里云仓库 一、本地仓库 针对无外网、无maven私服&#xff0c;只有本地仓库&#xff0c;进行maven项目开发。在maven的settings.xml中设置三项&#xff1a; 1、本地仓库地址 默认在当前系统用户下创建目录&#xff1a;.m2/repository…

信息系统架构设计的系统性解析

一、信息系统架构设计​​概念定义​​&#xff1a;信息系统架构&#xff08;ISA&#xff09;是对系统组件、交互关系及环境约束的结构化抽象&#xff0c;确保业务目标与技术实现对齐。核心要素包括业务逻辑层、数据层、应用层和基础设施层。​​设计方法​​&#xff1a;​​T…

编译旧版本的electron内核

我们的软件产品使用的electron框架&#xff0c;electron框架是不断更新的&#xff0c;但是我们的软件太过庞大复杂&#xff0c;不敢轻易升级electron框架。Electron旧版本存在一些BUG和不合理的地方&#xff0c;需要去修复BUG或者不合理的地方。修复完BUG后&#xff0c;要对ele…

Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry

作者&#xff1a;来自 Elastic Mark Doncov 今天&#xff0c;我们很高兴宣布 Elastic 9.1 和 8.19 正式发布&#xff01; 是的&#xff0c;又有好消息 —— 我们将 8.x 系列最终延长到 8.19&#xff0c;这样那些还在等待升级到 9.x 的用户也能享受到许多新功能。 Elastic 9.1…

Redis面试精讲 Day 8:Stream消息队列设计与实现

【Redis面试精讲 Day 8】Stream消息队列设计与实现 文章标签 Redis,消息队列,Stream,面试技巧,分布式系统,后端开发 文章简述 本文是"Redis面试精讲"系列第8天&#xff0c;聚焦Redis 5.0引入的Stream消息队列。文章深入解析Stream的核心概念与实现原理&#xff0…

【01】大恒相机SDK C++开发 —— 初始化相机,采集第一帧图像、回调采集、关闭相机

文章目录1 初始化相机&#xff0c;采集第一帧图像2 回调方式采集图像3 视频教程1 初始化相机&#xff0c;采集第一帧图像 #include <iostream> #include <GalaxyIncludes.h> using namespace std;int main() {//首先&#xff0c;对相机资源进行初始化IGXFactory::…

Windows下定位Mingw编译的Qt程序崩溃堆栈

一、dump和pdb是什么 在Windows系统下&#xff0c;当我们写的程序跑在客户的机器上&#xff0c;因为一个bug&#xff0c;导致程序崩溃&#xff0c;我们该如何定位并修复这个bug呢&#xff1f; 有人会说记录日志&#xff0c;即便有日志&#xff0c;也是不好定位的&#xff0c;因…

.net依赖注入框架 Autofac和MEF的对比

Autofac 默认需要显式注册每个类型&#xff0c;这是它与MEF在模块化设计上的主要区别。以下是具体对比说明&#xff1a;1. Autofac 的基本注册方式 Autofac 必须通过代码明确注册每个需要注入的类型&#xff08;除非使用特殊扫描机制&#xff09;&#xff1a; var builder new…

Python 使用 asyncio 包处理并 发(使用asyncio包编写服务器)

使用asyncio包编写服务器 演示 TCP 服务器时通常使用回显服务器。我们要构建更好玩一点的示 例服务器&#xff0c;用于查找 Unicode 字符&#xff0c;分别使用简单的 TCP 协议和 HTTP 协议实现。这两个服务器的作用是&#xff0c;让客户端使用 4.8 节讨论过的 unicodedata 模块…

Node.js (Express) + MySQL + Redis构建项目流程

以下是使用 Node.js (Express) MySQL Redis 构建完整项目的详细流程&#xff0c;涵盖环境搭建、架构设计、核心代码实现和部署优化&#xff1a;一、项目初始化 1. 创建项目目录 mkdir my-project cd my-project npm init -y2. 安装基础依赖 npm install express mysql2 redis…