【深度学习 | 第三篇】-卷积神经网络

前言

卷积神经网络是包含卷积层的神经网络。卷积层能够自动学习图像中的局部特征,如边缘、纹理、形状等,并逐层抽象为高级语义特征。

图像的基本知识

1. 图像的构成

  • 图像由像素点组成,每个像素取值范围 [0, 255]。

    • 0:黑色,255:白色。
  • 彩色图像通常使用 RGB 三通道,每个通道对应红、绿、蓝的亮度。

  • 在深度学习中,图像通常表示为形状 (Height, Width, Channels) 的三维数组。

2. 图像的加载与显示(使用 matplotlib)

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 创建全黑图像(200×200,3通道)
img_black = np.zeros((200, 200, 3))
plt.imshow(img_black)
plt.show()

# 创建全白图像
img_white = np.full((200, 200, 3), 255)
plt.imshow(img_white)
plt.show()

# 加载真实图像
img = plt.imread('data/img.jpg')   # 返回 numpy 数组,形状 (H, W, C)
print(img.shape)                    # 如 (640, 640, 3)
plt.imshow(img)
plt.axis('off')
plt.show()

注意plt.imread() 读取的图像像素值通常在 0~255,但转换为张量后常被归一化到 [0,1] 或 [0,1] 之间。如果图像后缀是png,则默认将像数值归一化到 [0,1]。

卷积神经网络概述

CNN的典型结构

CNN: Convolutional Neural Network)

一个经典的图像分类 CNN 由三部分组成:

模块 作用
卷积层 提取图像局部特征
池化层 降低特征图尺寸,减少计算量
全连接层 将提取的特征映射到类别输出

示意图:输入图像 → [卷积+激活+池化]×n → 全连接层 → 输出类别

卷积层

卷积层是卷积神经网络的核心组件,主要作用是从输入数据(如图像)中自动学习并提取局部特征,如边缘、纹理、形状等。

1. 卷积层主要作用

  • 特征提取

    • 卷积层通过可学习的卷积核自动提取图像特征。
    • 浅层卷积核负责边缘、颜色、纹理等低级特征;
    • 深层卷积核将这些低级特征组合成形状、物体部件等高级语义特征。
    • 这种逐层抽象的能力让网络"理解"图像内容。
  • 局部连接

    • 每个输出神经元只与输入图像上的一个局部区域(即感受野)相连 ,而不是全图。这符合图像"邻近像素关联强、远距离像素关联弱"的自然属性,使得卷积层能高效捕捉局部特征,比如一条斜线或一个角点。
  • 权重共享,减少参数量

    • 同一个卷积核在整个输入图像上滑动时,其权重是固定不变的 。这意味着一个卷积核就能检测同一类特征(如垂直边缘)出现在任何位置。权重共享极大减少了参数量,相比全连接层动辄千万级的参数,卷积层通常只有几千到几十万,训练更快且不易过拟合。
  • 平移不变性

    • 由于权重共享和局部连接,物体在图像中平移后,卷积层输出的特征图也会相应平移,但特征值本身不变。换句话说,无论猫耳朵出现在左上角还是右下角,都能被同一个卷积核检测到。这让模型对物体的位置不那么敏感,泛化能力更强。

2. 核心思想:卷积运算过程

卷积层通过一个可学习的卷积核 (也称为滤波器)在输入数据上滑动,对应位置元素相乘再求和,进行点积运算,生成特征图。这个过程模拟了生物视觉系统对局部信息的敏感度。

3. 关键参数

  • 输入 :数据、图像或特征图,形状 (H, W, C_in)
  • 输入深度:指输入特征图的通道数(例如 RGB 图像的 3)。
  • 卷积核(filter) :一个小矩阵,其上的权重是网络通过训练学到的。每个卷积核专门用于检测某一种特定特征。形状 (K, K, C_in),其中 K 为核大小(常为奇数,如3、5)
  • **多通道卷积核:**输入通道数必须等于卷积核通道数,各通道分别卷积后相加,产生一个通道的输出。
  • 填充(Padding)在输入数据周围补零 。主要作用是控制输出尺寸,并让边缘像素也能被充分计算(保持图像尺寸,防止边缘信息丢失)。
  • 步长(Stride)卷积核每次滑动的距离 。步长为2会使输出特征图的尺寸减半,常用于降维,步长越大,输出尺寸越小
  • 输出深度(通道数):等于当前卷积层中卷积核的个数。每个卷积核独立提取一种特征,产生一个输出特征图,这些特征图堆叠在一起就形成了输出深度。
  • 输出 :特征图,形状 (H_out, W_out, C_out)C_out 为卷积核个数

示例:

4. 输出尺寸计算

给定输入尺寸 W,卷积核大小 K,填充 P,步长 S,输出尺寸 O 的计算公式为:


注释:

  • 分子 W - K + 2P:表示卷积核在输入上能滑动的有效距离(考虑了填充后输入的有效边长)。
  • 2P:是因为填充后,行列数是2倍增长
  • 除以 S:确定在这个距离上能放下多少个步长间隔。
  • 加 1:因为初始位置(第一个输出点)不计入滑动步数,所以总输出点数 = 滑动步数 + 1。

示例:

  • 输入 32×32,核 3×3,填充 1,步长 1

    O=(32−3+2×1)/1+1=32,输出尺寸不变(Same 填充)。

  • 输入 32×32,核 5×5,填充 0,步长 2

    O=(32−5+0)/2+1=14.5 → 向下取整 → 14

向下取整,是因为滑动步长必须完整覆盖。公式通常期望结果能整除,否则取 floor。

5. 卷积层的参数数量计算

对于一个卷积层,其可训练参数由两部分组成:卷积核的权重 和 偏置(如果使用)。

注释:

其中:

  • Kh,Kw:卷积核的高和宽(通常 Kh=Kw=K)
  • Cin:输入特征图的通道数(即上一层输出的深度)
  • Cout:本层卷积核的数量(即输出特征图的通道数)

**权重:**每个卷积核是一个Kh × Kw × Cin 的三维张量,它有 Cout 个这样的独立卷积核,因此权重数为 Kh × Kw × Cin × Cout

**偏置:**每个卷积核对应一个偏置项(一个标量),多通道卷积核共用一个偏置,所以偏置数为 Cout。

示例:

简单灰度图像

  • 输入:单通道灰度图,Cin=1

  • 卷积层:3×33×3 卷积核,输出 32 个通道,有偏置

    • 参数=(3×3×1×32)+32=288+32=320

彩色图像,常用卷积层

  • 输入:RGB三通道,Cin=3

  • 卷积层:3×33×3 卷积核,输出 64 个通道,有偏置

    • 参数=(3×3×3×64)+64=1728+64=1792

6. PyTorch 卷积层 API

python 复制代码
import torch.nn as nn

conv = nn.Conv2d(
    in_channels = 3, # 输入通道数
    out_channels = 3, # 输出通道数
    kernel_size = 3, # 卷积核大小
    stride = 1, # 步长
    padding = 1, # 填充
    # dilation = 1, # 膨胀
    # groups = 1, # 分组卷积
    # bias = True, # 是否有偏置
    padding_mode = 'zeros' # 填充模式
)

# 

# 正向传播
out = conv(input)

池化层

1. 作用

  • 降低特征图尺寸,减少计算量和内存占用。
  • 提高模型鲁棒性,对微小平移不敏感。
  • 无参数(无需学习),仅计算固定窗口内的统计量。

2. 常见池化方式

  • 最大池化(Max Pooling):取窗口内最大值。
  • 平均池化(Average Pooling):取窗口内平均值。

3. 多通道处理

池化层对每个通道独立操作,不进行合并,输出通道数 = 输入通道数。

相关推荐
vkv55883 小时前
我做了一个自媒体多平台发布工具:支持 AI 生成、账号管理、自动登录与批量发布
人工智能·媒体
IT_陈寒3 小时前
React hooks依赖数组这个坑差点把我埋了
前端·人工智能·后端
我科绝伦(Huanhuan Zhou)3 小时前
分享一个服务故障自愈系统
运维·人工智能·自动化
做个文艺程序员3 小时前
Spring AI + Qwen3.5 实现多步 Agent:从工具调用到自主任务拆解的踩坑全记录
java·人工智能·spring
光电的一只菜鸡3 小时前
《PyTorch深度学习建模与应用(参考用书)》(三)——深度神经网络
pytorch·深度学习·dnn
波动几何3 小时前
极简万能通用AI Agent:universal-agent
人工智能
行者-全栈开发4 小时前
腾讯地图 Map Skills 快速入门:从零搭建 AI 智能行程规划应用
人工智能·typescript·腾讯地图·ai agent·mcp 协议·map skills·智能行程规划
彩虹编程4 小时前
通俗讲解LTN中的非逻辑符号、连接词、量词
人工智能·神经符号
DoUfp0bgq4 小时前
解决RDK X5(ARM64架构)板卡Remote-SSH运行Antigravity AI崩溃(SIGILL):Samba网络盘本地挂载方案
人工智能·架构·ssh