卷积神经网络基础CNN
00 min
2024-4-23

1. 图像基础知识

1.1 图像构成

图像是由像素点组成的,每个像素点的取值范围为: [0, 255] 。像素值越接近于0,颜色越暗,接近于黑色;像素值越接近于255,颜色越亮,接近于白色。
在深度学习中,我们使用的图像大多是彩色图,彩色图由RGB3个通道组成,每个通道包括图片的高和宽(H, W),则形状为(H, W, C),如下图所示
notion image

1.2 图像绘制

  • plt.imread()
  • plt.show()

2. CNN网络概述

卷积神经网络(Convolutional Neural Network)是含有卷积层的神经网络. 卷积层的作用就是用来自动学习、提取图像的特征.
CNN网络主要由三部分构成:卷积层、池化层和全连接层构成:
  1. 卷积层负责提取图像中的局部特征;
  1. 池化层用来大幅降低参数量级(降维);
  1. 全连接层用来输出想要的结果。

2.1 卷积层

2.1.1 卷积层计算过程

卷积运算本质上就是在卷积核和输入数据的局部区域间做点积。
  • input:输入的图像
  • filter:卷积核(滤波矩阵)
  • Output:input 经过 filter 得到输出为最右侧的图像,该图叫做特征图
notion image

2.1.2 Padding

通过卷积计算过程,最终的特征图比原始图像小很多,如果想要保持经过卷积后的图像大小不变, 可以在原图周围添加 padding 来实现,即在原始图片上加N圈0.
notion image

2.1.3 Stride

Stride表示步长,为卷积核提取一次特征后向后移动的大小,默认为1,下图表示按步长为2提取特征图
notion image

2.1.4 多通道卷积核计算

对于三通道的彩色图片来说,滤波矩阵也是三通道的,获得的特征图是一维的
notion image
其计算过程如下图所示:
notion image
那么为了获取多通道的特征图片,就需要添加多个卷积核。

2.1.4 特征图大小计算

输出特征图的大小与以下参数息息相关:
1. size: 卷积核/过滤器大小,一般会选择为奇数,比如有 1*1 、3*3、5*5
2. Padding: 零填充的方式
3. Stride: 步长
计算公式:
1. 输入图像大小: W x W
2. 卷积核大小: F x F
3. Stride: S
4. Padding: P
5. 输出图像大小: N x N
notion image

2.1.5 卷积层API

2.2 池化层

池化层 (Pooling) 降低维度, 缩减模型大小,提高计算速度.

2.2.1 池化层计算

  • 最大池化(首选)
  • 平均池化
notion image

2.2.2 Stride和Padding

notion image
notion image

2.2.3 多通道池化层计算

对于多通道输入,输出的通道数与输入的通道数是一致的
notion image

2.2.4 池化层API

3. 图像分类案例

  • 了解 CIFAR10 数据集
  • 搭建卷积神经网络
  • 编写训练函数
  • 编写预测函数

3.1 CIFAR10 数据集

CIFAR-10数据集5万张训练图像、1万张测试图像、10个类别、每个类别有6k个图像,图像大小32×32×3。下图列举了10个类,每一类随机展示了10张图片:
notion image
PyTorch 中的 torchvision.datasets 计算机视觉模块封装了 CIFAR10 数据集, 使用方法如下

3.2 构建卷积神经网络

我们要构建的神经网络结构如下:
notion image
  1. 输入形状: 32x32
  1. 第一个卷积层输入 3 个 Channel, 输出 6 个 Channel, Kernel Size 为: 3x3
  1. 第一个池化层输入 30x30, 输出 15x15, Kernel Size 为: 2x2, Stride 为: 2
  1. 第二个卷积层输入 6 个 Channel, 输出 16 个 Channel, Kernel Size 为 3x3
  1. 第二个池化层输入 13x13, 输出 6x6, Kernel Size 为: 2x2, Stride 为: 2
  1. 第一个全连接层输入 576 维, 输出 120 维
  1. 第二个全连接层输入 120 维, 输出 84 维
  1. 最后的输出层输入 84 维, 输出 10 维
我们在每个卷积计算之后应用 relu 激活函数来给网络增加非线性因素。

3.3 训练和预测