卷积神经网络(CNN)
本文主要介绍了卷积神经网络的原理
什么是 CNN?
卷积神经网络(Convolutional Neural Network, CNN) 是深度学习中处理图像数据的核心结构,它利用“局部感知 + 权重共享”的机制,有效提取图像中的空间特征,被广泛应用于图像分类、目标检测、图像分割、人脸识别等任务中。
CNN 的基本结构
CNN 通常由以下几类层堆叠而成:
- 卷积层(Convolutional Layer)
- 激活函数(Activation Function, 如 ReLU)
- 池化层(Pooling Layer)
- 全连接层(Fully Connected Layer)
- 输出层(用于分类或回归)
1. 卷积层(Conv)
卷积操作的本质是:使用小窗口滑动输入图像,对每个局部区域计算加权求和。
数学表达为:
$$
y(i, j) = \sum_m \sum_n x(i+m, j+n) \cdot k(m, n)
$$
其中:
- ( x ):输入图像区域
- ( k ):卷积核(滤波器)
- ( y(i, j) ):输出特征图上的一个像素
卷积层的作用是从图像中提取边缘、纹理、形状等局部特征。
2. 激活函数(ReLU)
每次卷积输出后,需通过非线性激活函数,使网络能学习非线性模式。
常用激活函数:
- ReLU:$$( f(x) = \max(0, x) )$$
- Leaky ReLU
- Sigmoid / Tanh(较少用于 CNN)
3. 池化层(Pooling)
池化层用于降低特征图空间维度、减少计算量、增强鲁棒性,防止过拟合。
常见池化方式:
- 最大池化(Max Pooling):选局部最大值
- 平均池化(Average Pooling):选局部平均值
例如 $$( 2 \times 2 ) $$ 最大池化:
1 | 输入: |
卷积和池化操作的区别
卷积:
提取特征(边缘、纹理、形状等),构建深层语义
$$
y(i, j) = \sum_m \sum_n x(i + m, j + n) \cdot w(m, n) + b
$$
通过加权求和来进行计算
权重是可训练的参数
池化:
压缩特征图,降低尺寸,增强模型鲁棒性,减少过拟合
通过 固定规则(对特定局部区域max()或者avg()) 来进行计算
无可训练参数
4. 全连接层(Fully Connected Layer)
在卷积和池化提取出图像特征后,最终的表示会展平(flatten)成向量输入到全连接层,进行分类或回归任务。
每一个神经元与上一层所有输出相连接,类似传统神经网络的结构。
通常是网络中的“决策层”。
5. 输出层(用于分类或回归)
根据任务类型,输出层设置为:
分类任务:使用 softmax 激活函数输出类别概率:
$$
P(y_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}
$$回归任务:直接输出连续数值(不加激活函数,或用线性)
CNN 的整体流程
1 | 输入图像 → 卷积层 → ReLU → 池化层 → 卷积层 → ReLU → 池化层 → Flatten → 全连接层 → Softmax |
多组卷积核的意义:
我们之所以使用多组卷积核,是因为每个卷积核只能提取图像中某一种类型的局部特征,如边缘、纹理或方向变化等,而图像中的信息是多样且复杂的。通过使用多组卷积核,模型可以从不同角度、多种尺度上提取丰富的特征,增强对图像的理解能力。同时,对于彩色图像,每组卷积核会分别作用于多个通道(如RGB),并整合它们的特征,从而构建更有表现力的特征图,为后续的分类、检测等任务提供更强的信息基础。
CNN代码展示:
1 | import torch.nn as nn |
卷积通用计算公式
设输入特征图大小为:
$$
H_{in} \times W_{in}
$$
卷积核大小为 $$( K \times K )$$ $$步长为 ( S )$$ 填充为 $$( P )$$ 则输出特征图大小为:
$$
H_{out} = \left\lfloor \frac{H_{in} - K + 2P}{S} \right\rfloor + 1
$$
$$
W_{out} = \left\lfloor \frac{W_{in} - K + 2P}{S} \right\rfloor + 1
$$
卷积神经网络(CNN)
1.BP神经网络
2.Transformer基础
3.YOLO原理
4.机器学习一些进阶知识
5.tensorRT基础操作
6.Cuda基础操作
7.MQTT 与 HTTP 通信协议对比及项目应用场景选择
8.机器学习基础知识总结