好久不见~我又回来了

这一节我们来讲一讲图像在计算机中的本质,以及全连接神经网络的缺陷,进而引出卷积神经网络


一、图像在计算机中的本质

不知道你有没有学过数据结构,在讲这一部分的时候对数组进行了扩展,讲到了广义表和压缩矩阵,其中压缩矩阵用来压缩图像信息进行传递。

在计算机中,图像本质上是一个数字矩阵。每个像素点对应一个数值,表示颜色或亮度信息。
具体来说:

  • 对于灰度图像,它是一个二维矩阵 I∈RH×WI \in \mathbb{R}^{H \times W}IRH×W,其中 HHH 是高度(行数),WWW 是宽度(列数),每个元素 I(i,j)I(i,j)I(i,j) 表示像素在位置 (i,j)(i,j)(i,j) 的灰度值(范围通常为 000255255255)。

  • 例如下面这两张图

  • 在这里插入图片描述 在这里插入图片描述

  • 对于彩色图像(如 RGB 格式),它是一个三维张量 I∈RH×W×CI \in \mathbb{R}^{H \times W \times C}IRH×W×C,其中 CCC 是通道数(通常 C=3C=3C=3,对应红、绿、蓝三个通道)。每个元素 I(i,j,k)I(i,j,k)I(i,j,k) 表示位置 (i,j)(i,j)(i,j) 在通道 kkk 的颜色强度。

例如,一个 32×3232 \times 3232×32 的 RGB 图像可表示为:
I=[[I11R,I11G,I11B]⋯[I1WR,I1WG,I1WB]⋮⋱⋮[IH1R,IH1G,IH1B]⋯[IHWR,IHWG,IHWB]] I = \begin{bmatrix} [I_{11}^R, I_{11}^G, I_{11}^B] & \cdots & [I_{1W}^R, I_{1W}^G, I_{1W}^B] \\ \vdots & \ddots & \vdots \\ [I_{H1}^R, I_{H1}^G, I_{H1}^B] & \cdots & [I_{HW}^R, I_{HW}^G, I_{HW}^B] \end{bmatrix} I=[I11R,I11G,I11B][IH1R,IH1G,IH1B][I1WR,I1WG,I1WB][IHWR,IHWG,IHWB]
这种表示方式便于计算机处理,但图像数据通常维度很高(尤其是彩色图片,如 1000×10001000 \times 10001000×1000 像素的图像有 10610^6106 个元素),这给数据存储和神经网络处理带来了挑战。

二、压缩矩阵

针对复杂的彩色图片,图像压缩是必要的
原始图像矩阵通常包含大量冗余数据(如相邻像素相似),导致文件大小过大,不利于存储或传输。压缩的目标是减少数据量,同时保持视觉质量。
压缩分为两类:

  • 无损压缩:保留所有原始数据,如PNG格式,使用矩阵操作(如游程编码)。
  • 有损压缩:牺牲少量细节以换取更高压缩率,如JPEG格式,基于矩阵变换(如离散余弦变换)

压缩过程直接操作图像矩阵:
变换编码:将图像矩阵转换为频域表示,减少空间冗余。例如,在JPEG压缩中,图像被分成8×8块,每个块通过离散余弦变换(DCT)转换为系数矩阵。DCT公式为: F(u,v)=2NC(u)C(v)∑i=0N−1∑j=0N−1f(i,j)cos⁡((2i+1)uπ2N)cos⁡((2j+1)vπ2N) F(u,v) = \frac{2}{N} C(u) C(v) \sum_{i=0}^{N-1} \sum_{j=0}^{N-1} f(i,j) \cos\left(\frac{(2i+1)u\pi}{2N}\right) \cos\left(\frac{(2j+1)v\pi}{2N}\right) F(u,v)=N2C(u)C(v)i=0N1j=0N1f(i,j)cos(2N(2i+1)uπ)cos(2N(2j+1)vπ) 其中N=8N=8N=8f(i,j)f(i,j)f(i,j)是原始像素矩阵元素,F(u,v)F(u,v)F(u,v)是变换后的系数矩阵元素。
量化:压缩矩阵通过量化表(另一个矩阵)缩放DCT系数,丢弃高频细节(人眼不敏感部分),实现数据压缩。量化公式为: Q(u,v)=round(F(u,v)Qtable(u,v)) Q(u,v) = \text{round}\left(\frac{F(u,v)}{Q_{\text{table}}(u,v)}\right) Q(u,v)=round(Qtable(u,v)F(u,v)) 其中QtableQ_{\text{table}}Qtable是预定义的量化矩阵。
编码:量化后的矩阵通过熵编码(如Huffman编码)进一步压缩为二进制流。
关系总结:图像矩阵是压缩的起点,压缩算法生成新的“压缩矩阵”(如DCT系数矩阵),最终输出为压缩文件。解压时,逆过程重建近似原矩阵。
当然这一部分要求线代基础知识,看不懂没有关系,了解即可

三、全连接神经网络的缺陷

全连接神经网络(FCNN)在处理图像时存在严重缺陷,主要源于其结构:

  • 参数爆炸问题:在 FCNN 中,每个输入节点(像素)都连接到隐藏层所有节点。设输入大小为 nnn(如图像展平为向量 x∈Rnx \in \mathbb{R}^nxRn),隐藏层大小为 mmm,则权重矩阵 W∈Rm×nW \in \mathbb{R}^{m \times n}WRm×n 的参数数量为 m×nm \times nm×n。对于 H×WH \times WH×W 的图像,n=H×Wn = H \times Wn=H×W(灰度)或 n=H×W×Cn = H \times W \times Cn=H×W×C(彩色)。例如,1000×10001000 \times 10001000×1000 的 RGB 图像输入,n≈3×106n \approx 3 \times 10^6n3×106,若隐藏层 m=1000m=1000m=1000,参数量高达 3×1093 \times 10^93×109,导致训练困难、内存不足。
  • 计算效率低下:前向传播的计算复杂度为 O(m×n)O(m \times n)O(m×n),在图像任务中计算量巨大,难以实时处理。
  • 缺乏局部性:FCNN 忽略图像的空间结构。每个像素独立处理,无法有效捕捉局部特征(如边缘、纹理),因为相邻像素在计算中不共享权重。
  • 过拟合风险高:高参数量使模型容易过拟合小数据集,泛化能力差。
  • 无平移不变性:图像中物体位置变化(如猫在左或右)会导致输出剧烈变化,因为权重与绝对位置绑定。

这些缺陷使 FCNN 不适合图像任务,需要更高效的架构。

四、卷积神经网络

为解决 FCNN 的缺陷,卷积神经网络(CNN)被引入。它利用图像的空间局部性和平移不变性:

  • 卷积层:使用卷积核(filter)在图像上滑动,计算局部区域的内积。设输入图像 X∈RH×W×CX \in \mathbb{R}^{H \times W \times C}XRH×W×C,卷积核 K∈RFh×Fw×C×DK \in \mathbb{R}^{F_h \times F_w \times C \times D}KRFh×Fw×C×DFh,FwF_h, F_wFh,Fw 为核大小,DDD 为输出通道数),输出特征图 YYY 的元素为:
    Y(i,j,d)=∑m=0Fh−1∑n=0Fw−1∑c=0C−1K(m,n,c,d)⋅X(i+m,j+n,c) Y(i,j,d) = \sum_{m=0}^{F_h-1} \sum_{n=0}^{F_w-1} \sum_{c=0}^{C-1} K(m,n,c,d) \cdot X(i+m,j+n,c) Y(i,j,d)=m=0Fh1n=0Fw1c=0C1K(m,n,c,d)X(i+m,j+n,c)
    这实现了权重共享和稀疏连接,大幅减少参数(如 3×33 \times 33×3 核仅需 9×C×D9 \times C \times D9×C×D 参数)。
  • 优势
    • 参数高效:卷积核在整张图像共享权重,避免参数爆炸。
    • 局部特征提取:捕捉边缘、角点等局部模式。
    • 平移不变性:物体位置变化不影响特征检测。
    • 层次结构:通过多层卷积和池化,逐步抽象特征(从低级纹理到高级语义)。

CNN 的典型结构包括卷积层、激活函数(如 ReLU)、池化层和全连接层。以下是一个简单 CNN 的 PyTorch 实现示例:

import torch
import torch.nn as nnclass SimpleCNN(nn.Module):def __init__(self, num_classes=10):super(SimpleCNN, self).__init__()# 卷积层: 输入通道3 (RGB), 输出通道16, 核大小3x3self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)# 池化层: 2x2 最大池化self.pool = nn.MaxPool2d(kernel_size=2, stride=2)# 全连接层: 输入尺寸基于图像大小 (假设输入32x32)self.fc = nn.Linear(16 * 16 * 16, num_classes)  # 池化后尺寸减半: 32/2=16def forward(self, x):x = self.pool(torch.relu(self.conv1(x)))  # 卷积 + ReLU + 池化x = x.view(x.size(0), -1)  # 展平x = self.fc(x)return x# 示例用法
model = SimpleCNN()
input_image = torch.randn(1, 3, 32, 32)  # 批大小1, 通道3, 高度32, 宽度32
output = model(input_image)
print(output.shape)  # 输出: torch.Size([1, 10])

此代码展示了 CNN 如何高效处理图像:卷积层提取特征,池化层降维,全连接层分类。CNN 已成为计算机视觉的基石,广泛应用于图像识别、目标检测等任务。


总结一下:图像在计算机中是矩阵方式进行存储的,而CNN卷积神经网络能够高效处理图像,下一节我们来详细分析CNN的整体架构

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

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

相关文章

http性能测试命令ab

在 Linux系统中, ab( ApacheBench)是一个用于 测试HTTP服务器性能的 工具。它是 Apache HTTP服务器项目的 一部分,专门设计用来模拟 多个用户对 服务器发起 并发请求,从而 评估服务器的 负载能力和 响应时间其中&#…

从0开始学习R语言--Day50--ROC曲线

对于已经拟合好的生存模型,我们一般会直接用ROC去评判一下整体的水平,因为很多时候阈值都是我们人为根据实际情况去设定的,这种微调的细节都是在整体模型的拟合程度确定下来后再做的工作。ROC曲线可以提供给我们模型对于二分类变量的区分能力…

从Hyperliquid到AILiquid:一场从极致性能到策略智能的迭代

在Hyperliquid以极致性能引爆链上衍生品交易热潮之后,DeFi市场正迎来新一轮的范式转变。作为AI原生的下一代交易平台,AILiquid正式上线并引发市场广泛关注。该平台不仅保留了高频低延迟的交易体验,更通过AI撮合引擎与链上风险控制系统&#x…

磁悬浮轴承转子不平衡质量控制:陷波滤波器深度解析

在磁悬浮轴承高速旋转的世界里,不平衡质量如同一个无形的幽灵,引发危险的同步振动,而陷波滤波器,正是精准捕获并消除这个幽灵的“电磁猎手”。本文将深入剖析其核心原理与实战设计。引言:同步振动的致命诱惑磁悬浮轴承…

Oracle 数据库常见等待事件参数详解

在 Oracle 数据库的性能诊断与优化中,等待事件是重要的分析依据,而理解等待事件的参数则是深入排查问题的基础。本文将结合 Oracle 官方文档,对数据库中常见的等待事件参数进行详细解析,帮助数据库管理员和开发人员更好地解读等待…

STM32中的CAN总线详解:从原理到实战

前言:为什么CAN总线是嵌入式通信的"硬通货"? 在嵌入式通信领域,CAN(Controller Area Network)总线凭借其高可靠性、实时性和多节点通信能力,成为汽车电子、工业控制、智能设备等领域的"标配…

【鸿蒙HarmonyOS】鸿蒙app开发入门到实战教程(二):封装自定义可复用组件

组件的可复用性,对我们开发的app质量影响很大,看看鸿蒙中如何封装这种组件 实现效果代码实现 局部封装 Builder titleBuilder(title:string 默认标题) {// Builder装饰此函数,使其能以链式调用的方式配置并构建Text组件Row(){Text(title).fo…

Volo-HTTP 0.4.0发布:正式支持 HTTP/2,客户端易用性大幅提升!

🤖 VOLO简介 Volo 是由字节跳动服务框架团队开源的一款高性能、易用的 Rust RPC 框架。 Volo 框架自身开销极低,并提供了命令行工具与灵活的中间件设计,让开发者可以轻松上手,享受 Rust 带来的开发乐趣。 本文介绍自 Volo-HTTP 0…

HTTP相关知识

文章目录一、基础特性与规范二、页面元素与布局三、交互与表单四、网络通信基础流程(以浏览器访问网页为例)五、配套技术与工具六、知识关联图(简化版)一、基础特性与规范 技术定位:HTML 是前端技术栈的核心标记语言&…

机器人-组成结构

目录 一、发展历程 二、软件硬件算法深读耦合 感知 - 决策 - 执行 1.机械系统: 2.驱动系统: 3.感知系统: 4.控制系统: 5.决策/智能系统: 6.电源系统: 7.总结 一、发展历程 国际标准化组织(ISO)对…

pycharm结构查看器

v表示整个文件中定义的变量,c是类灰色部分是继承的父类的,明亮的是定义的,其中m表示定义的函数,f表示

AdsPower 功能详解 | 应用中心使用指南:插件统一管理更高效、更安全!

当你使用 AdsPower 管理多个浏览器环境时,插件的统一配置就变得尤为重要。而「应用中心」正是帮助你集中管理浏览器插件的功能入口,搭配浏览器环境使用,可以让账号操作更便捷、团队协作更高效。这篇教程将带你快速上手 AdsPower 应用中心的核…

回归预测 | MATLAB实现DBO-BP蜣螂算法优化BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现DBO-BP蜣螂算法优化BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现DBO-BP蜣螂算法优化BP神经网络多输入单输出回归预测 预测效果 基本介绍 主要功能 逻辑关联与算法流程 1. 数据准备 2. DBO优化BP参数 3. BP神经网络构建 4. 预测与评估 运行…

Lsposed/Xposed

1.环境 1.1 xposed: 安卓8以下使用 下载并安装xposed installer,模拟器需勾选设置-共享磁盘。 若提示未激活,需要下载sdk sdk下载地址 放置目录 /sdcard/Android/data/de.robv.android.xposed.installer/cache/downloads/framework/文件权限设置 777 …

3D工业相机是什么?如何选择和使用它?

工业自动化越来越深入,3D成像技术(3D工业相机)在工业生产中越来越重要。这篇文章就来说说3D工业相机的技术原理、具体能应用在哪以及怎么选3D相机,给大家做个参考。一、 技术定义与核心特点3D工业相机,简单说就是一种特…

有哪些好用的原型设计软件?墨刀、Axure等测评对比

下面是几款常用原型设计软件的简介和对比,重点对墨刀和Axure进行了测评分析,帮助你根据需求做出选择。💡常见原型设计软件一览工具名称适合人群平台支持是否协作是否支持交互墨刀(MockingBot)产品经理/团队协作Web、Wi…

二叉树思想草稿

二叉树解体两种思路 是否可以通过遍历一遍二叉树得到答案? 用一个traverse函数配合外部变量实现遍历的思维模式 是否可以定义一个递归函数,通过子树的答案推导出原问题的答案? 递归三部曲: 函数定义,参数,返…

如何区分Bug是前端问题还是后端问题?

在软件测试中,精准定位Bug的归属(前端 or 后端)是高效协作的关键。以下是系统化的排查方法,结合技术细节和实战技巧: 1. 核心判断逻辑 「数据 vs 展示」二分法: 后端问题:数据本身错误(API返回错误数据/逻辑错误/数据库问题) 前端问题:数据正确但展示异常(UI渲染错…

深入解析操作系统中的文件控制块(FCB):从原理到现代实现演进

一、FCB的核心概念与基础结构文件控制块(File Control Block, FCB)是操作系统管理文件的核心元数据结构,充当文件系统与物理存储间的桥梁。FCB本质上是文件在内存中的映射,包含文件的所有管理信息。传统FCB通常占据32-44字节空间&…

python原生处理properties文件

这个工具类使用 Python 的 configparser 模块操作 .properties 文件,核心是将 .properties 格式适配为 configparser 支持的 .ini 格式。 核心代码解释 1. 类初始化与配置解析 class Properties:def __init__(self, file_path: str, encoding: str utf-8):self.fil…