PyTorch 中的卷积神经网络

17 Mar 2025 | 4 分钟阅读

卷积神经网络是神经网络中进行图像分类和图像识别的主要类别之一。场景标注、物体检测和人脸识别等是卷积神经网络广泛应用的领域。

CNN 将图像作为输入,图像在某个类别下进行分类和处理,例如狗、猫、狮子、老虎等。计算机将图像视为像素数组,并取决于图像的分辨率。根据图像分辨率,它将被视为 h * w * d,其中 h= 高度,w= 宽度,d= 维度。 例如,RGB 图像是 6 * 6 * 3 的矩阵数组,灰度图像是 4 * 4 * 1 的矩阵数组。

在 CNN 中,每个输入图像都将通过一系列卷积层以及池化层、全连接层和过滤器(也称为内核)。 之后,我们将应用 Soft-max 函数以概率值 0 和 1 对对象进行分类。

Convolutional Neural Network

卷积层

卷积层是从输入图像中提取特征的第一层。 通过使用一小块输入数据学习图像特征,卷积层保留了像素之间的关系。 它是一种数学运算,它接受两个输入,例如图像矩阵和一个内核或过滤器。

  • 图像矩阵的维度是 h×w×d
  • 滤波器的维度是 fh×fw×d
  • 输出的维度是 (h-fh+1)×(w-fw+1)×1
Convolutional Neural Network

让我们从一个 5*5 的图像开始,其像素值为 0、1,以及一个 3*3 的过滤矩阵,如下所示

Convolutional Neural Network

5*5 图像矩阵与 3*3 过滤矩阵的卷积称为“特征图”,并显示为输出。

Convolutional Neural Network

通过应用不同的过滤器,图像的卷积可以执行模糊、锐化和边缘检测等操作。

步长

步长是在输入矩阵上移动的像素数。 当步长等于 1 时,我们一次将过滤器移动 1 个像素,类似地,如果步长等于 2,那么我们一次将过滤器移动 2 个像素。 下图显示了卷积如何以步长 2 工作。

Convolutional Neural Network

填充 (Padding)

填充在构建卷积神经网络中起着至关重要的作用。 如果图像会缩小,并且我们将在其上采用具有数百层的神经网络,则最终它将给我们一个在最后过滤后的小图像。

如果我们在灰度图像的顶部采用一个三乘三的滤波器并进行卷积会发生什么?

Convolutional Neural Network

从上图中可以清楚地看出,角落中的像素只会覆盖一次,但中间像素将被覆盖多次。 这意味着我们有更多关于该中间像素的信息,因此存在两个缺点

  • 缩小输出
  • 丢失图像角落的信息。

为了克服这个问题,我们引入了图像填充。 “填充是可以添加到图像边框的附加层。”

池化层

池化层在图像的预处理中起着重要作用。 当图像太大时,池化层会减少参数的数量。 池化是“缩小”从前几层获得的图像。 它可以与缩小图像以降低其像素密度相提并论。 空间池化也称为下采样或子采样,它可以降低每个映射的维度,但保留重要的信息。 有以下类型的空间池化

最大池化

最大池化是基于样本的离散化过程。 其主要目的是缩小输入表示,降低其维度,并允许对子区域中包含的特征进行假设。

最大池化是通过将最大过滤器应用于初始表示的非重叠子区域来完成的。

Convolutional Neural Network

Convolutional Neural Network

平均池化

下采样将通过平均池化来执行,即将输入分成矩形池化区域并计算每个区域的平均值。

语法

layer = averagePooling2dLayer(poolSize)
layer = averagePooling2dLayer(poolSize,Name,Value)

求和池化

求和池化均值池化的子区域的设置与最大池化完全相同,但我们不使用 max 函数,而是使用 sum 或 mean。

全连接层

全连接层是指其他层的输入将被展平为向量并发送的层。 它将通过网络将输出转换为所需数量的类。

Convolutional Neural Network

在上图中,特征图矩阵将借助全连接层转换为向量,例如 x1、x2、x3... xn。 我们将组合特征以创建一个模型,并应用激活函数,例如 softmaxsigmoid,以将输出分类为汽车、狗、卡车等。

Convolutional Neural Network
下一个主题CNN 中的图像转换