CNN 核心知识点详解:从图像基础到卷积与池化

CNN 核心知识点详解:从图像基础到卷积与池化 在深度学习领域卷积神经网络CNN是处理图像、视频等网格状数据的基石。本文将从最基础的图像知识开始逐步讲解 CNN 的核心组件——卷积层和池化层为后续实战打好坚实的理论基础。一、图像基础知识1.1 图像基本概念图像是人类视觉的基础是自然景物的客观反映是人类认识世界和人类本身的重要源泉。“图”是物体反射或透射光的分布“像”是人的视觉系统所接受的图在人脑中所形成的印象或认识。在计算机中按照颜色和灰度的多少可以将图像分为四种基本类型。二值图像一幅二值图像的二维矩阵仅由 0、1 两个值构成“0”代表黑色“1”代表白色。由于每一像素矩阵中每一元素取值仅有 0、1 两种可能所以计算机中二值图像的数据类型通常为 1 个二进制位。二值图像通常用于文字、线条图的扫描识别OCR和掩膜图像的存储。灰度图像灰度图像矩阵元素的取值范围通常为 [0, 255]。因此其数据类型一般为8 位无符号整数uint8这就是人们经常提到的 256 灰度图像。“0”表示纯黑色“255”表示纯白色中间的数字从小到大表示由黑到白的过渡色。二值图像可以看成是灰度图像的一个特例。索引图像索引图像的文件结构比较复杂除了存放图像的二维矩阵外还包括一个称之为颜色索引矩阵 MAP 的二维数组。MAP 的大小由存放图像的矩阵元素值域决定如矩阵元素值域为 [0, 255]则 MAP 矩阵的大小为 256×3用 MAP[RGB] 表示。MAP 中每一行的三个元素分别指定该行对应颜色的红、绿、蓝单色值MAP 中每一行对应图像矩阵像素的一个灰度值如某一像素的灰度值为 64则该像素就与 MAP 中的第 64 行建立了映射关系该像素在屏幕上的实际颜色由第 64 行的 [RGB] 组合决定。也就是说图像在屏幕上显示时每一像素的颜色由存放在矩阵中该像素的灰度值作为索引通过检索颜色索引矩阵 MAP 得到。真彩色 RGB 图像RGB 图像与索引图像一样都可以用来表示彩色图像。与索引图像一样它分别用红R、绿G、蓝B三原色的组合来表示每个像素的颜色。但与索引图像不同的是RGB 图像每一个像素的颜色值由 RGB 三原色表示直接存放在图像矩阵中由于每一像素的颜色需由 R、G、B 三个分量来表示M、N 分别表示图像的行列数三个 M×N 的二维矩阵分别表示各个像素的 R、G、B 三个颜色分量。RGB 图像的数据类型一般为 8 位无符号整型。注意在 OpenCV 等库中通道的顺序通常是 BGR 而不是 RGB。图像类型通道数像素值范围主要特点常见用途二值图像1 通道0 或 1每个像素只有黑与白两种值形态学操作、二值化、轮廓检测灰度图像1 通道0 到 255每个像素表示灰度亮度图像预处理、物体检测、人脸识别索引图像1 通道0 到 255索引像素值为颜色表的索引颜色表决定实际颜色存储压缩、较少颜色的图像表示RGB 图像3 通道R、G、B0 到 255每个像素由红、绿、蓝三个通道组成普通彩色图像显示、图像处理与分析简单总结图像是由像素点组成的每个像素点的取值范围为 [0, 255]。像素值越接近于 0颜色越暗接近于黑色像素值越接近于 255颜色越亮接近于白色。在深度学习中我们使用的图像大多是彩色图彩色图由 RGB 3 个通道组成如下图所示二、卷积神经网络CNN概述2.1 什么是卷积神经网络卷积神经网络是深度学习在计算机视觉领域的突破性成果专门用于处理图像、视频、语音等数据的神经网络。在计算机视觉领域往往输入的图像尺寸很大使用全连接网络的计算代价太高且难以保留图像原有的空间特征导致准确率不高。卷积神经网络Convolutional Neural Network是含有卷积层的神经网络。卷积层的作用就是用来自动学习、提取图像的特征。CNN 网络主要由三部分构成卷积层、池化层和全连接层构成卷积层负责提取图像中的局部特征池化层用来大幅降低参数量级降维全连接层类似人工神经网络的部分用来输出想要的结果。下图展示了 CNN 处理图像的基本流程以分类任务为例上图中 CNN 要做的事情是给定一张图片是车还是马未知是什么车也未知现在需要模型判断这张图片里具体是一个什么东西总之输出一个结果如果是车那是什么车。最左边是数据输入层对数据做一些处理比如去均值各维度都减对应维度的均值使得输入数据各个维度都中心化为 0避免数据过多偏差影响训练效果、归一化把所有的数据都归一到同样的范围、PCA 等。CNN 只对训练集做“去均值”这一步。中间是卷积层CONV线性乘积求和提取图像中的局部特征激励层RELUReLU 激活函数将输入数据转换成输出数据池化层POOL取区域平均值或最大值大幅降低参数量级降维。最右边是全连接层FC接收二维数据集输出 CNN 模型预测结果。2.2 卷积神经网络的应用图像分类最常见的应用例如识别图片中的物体类别。目标检测检测图像中物体的位置和类别。图像分割将图像分成多个区域用于语义分割。人脸识别识别图像中的人脸。医学图像分析用于检测医学图像中的异常如癌症检测、骨折检测等。自动驾驶用于识别交通标志、车辆、行人。2.3 CNN 中的经典网络架构LeNet-5最早的 CNN 架构之一证明了 CNN 在图像识别任务上的有效性。包含卷积层、池化层子采样层、全连接层。AlexNet显著提升了 ImageNet 图像分类的准确率引入 ReLU 激活函数、Dropout 层使用更大的卷积核和更多卷积核。VGGNet探索了网络深度对性能的影响使用更小的卷积核3×3堆叠增加网络深度。GoogLeNet (Inception)提出 Inception 模块并行使用不同大小的卷积核和池化操作提高了网络效率。ResNet通过残差块Residual Block引入跳跃连接解决了深度网络的梯度消失问题使得训练非常深的网络成为可能。DenseNet通过密集连接Dense Connectivity每一层都接收前面所有层的输出作为输入增强了特征传递和梯度流动。三、卷积层详解卷积层是 CNN 的核心它通过卷积核也称滤波器在输入图像上滑动提取局部特征。卷积层的主要作用特征提取从输入图像中提取低级特征如边缘、角点、纹理等。通过多个卷积层的堆叠网络能够逐渐从低级特征到高级特征如物体的形状、区域等进行学习。权重共享同一个卷积核在整个输入图像上共享权重使得卷积层的参数数量大大减少减少了计算量并提高了训练效率。局部连接每个神经元仅与输入图像的一个小局部区域相连称为局部感受野这种局部连接方式更符合图像的空间结构有助于捕捉图像中的局部特征。空间不变性由于卷积操作是局部的并且采用权重共享卷积层在处理图像时具有平移不变性。不论物体出现在图像的哪个位置卷积层都能有效地检测到这些物体的特征。3.1 卷积计算下图展示了单通道卷积的基本过程input 表示输入的图像filter 表示卷积核也叫做滤波器或滤波矩阵它是一组固定的权重。一个卷积核就是一个神经元input 经过 filter 得到右侧的特征图feature map。卷积运算本质上就是在滤波器和输入数据的局部区域间做点积对应元素相乘后求和。下面以一个具体例子说明计算过程。假设输入图像为 5×5卷积核为 3×3步长为 1无填充更直观地图像上的卷积可以理解为输入是一定区域大小的数据和滤波器带着一组固定权重的神经元做内积后得到新的二维数据。图中左边是图像输入中间是滤波器带着一组固定权重的神经元不同的滤波器会得到不同的输出数据比如颜色深浅、轮廓。如果想提取图像的不同特征则用不同的滤波器提取想要的关于图像的特定信息颜色深浅或轮廓。3.2 Padding填充通过上面的卷积计算过程最终的特征图比原始图像小很多。如果想要保持经过卷积后的图像大小不变可以在原图周围添加 Padding来实现。Padding填充操作是一种在输入特征图的边界周围添加额外像素通常是零的方法。Padding 的主要作用保持空间维度如果不使用 padding每次卷积操作后特征图的尺寸都会缩小。多次卷积后特征图会变得非常小可能会丢失重要的边缘信息。Padding 可以帮助维持输出特征图的尺寸与输入相同或接近相同。保留边缘信息图像边缘的像素在卷积过程中参与的计算次数较少这意味着边缘信息在特征提取过程中容易丢失。Padding 通过在边缘添加额外的像素增加了边缘像素的参与度从而更好地保留了边缘信息。提高性能Padding 有助于避免由于特征图尺寸快速缩小而导致的信息丢失从而提高模型的性能尤其是在处理较小的图像或需要进行多层卷积时。Padding 的类型Valid Padding (No Padding)不进行任何填充。卷积核只在输入图像的有效区域内滑动。输出尺寸会缩小。Same Padding添加足够的填充使得输出特征图的尺寸与输入相同。Full Padding尽可能多地添加填充使得卷积核的每个元素都至少在输入图像上滑动一次。输出尺寸会增大。3.3 Stride步长Stride步长指的是卷积核在图像上滑动时的步伐大小即每次卷积时卷积核在图像中向右或向下移动的像素数。步长直接影响卷积操作后输出特征图的尺寸以及计算量和模型的特征提取能力。Stride 的作用降低计算复杂度更大的步长意味着卷积核移动的次数更少从而减少了计算量并加快了训练和推理速度。减小输出尺寸步长越大生成的特征图尺寸越小。这类似于池化的降维效果。增大感受野虽然更大的步长会减小特征图的尺寸但它同时也会增大每个神经元在输入数据上的感受野。这意味着每个神经元能够捕捉到更大范围的输入信息。Stride 的选择Stride 1最常见的设置尤其是在网络的早期层。它允许保留更多的空间细节。Stride 1通常用于减小特征图的尺寸和增大感受野例如在网络的后期层或需要进行快速降维时。常见的设置包括 stride2 或 stride4。3.4 多通道卷积计算实际中的图像往往是多通道的例如 RGB 三个通道。多通道卷积的计算方法如下当输入有多个通道Channel时卷积核需要拥有相同的通道数。即图像有多少通道每个卷积核就有多少通道。每个卷积核通道与对应的输入图像的各个通道进行卷积。将每个通道的卷积结果按位相加得到最终的特征图单通道。如下图所示输入 3 通道卷积核也是 3 通道3.5 多卷积核卷积计算实际对图像进行特征提取时我们需要使用多个卷积核从不同角度、不同视角提取特征。当使用多个卷积核时每个卷积核独立进行上述多通道卷积产生一个特征图。最终输出通道数等于卷积核个数。下图展示了两个卷积核的情况3.6 特征图尺寸计算公式输出特征图的大小与以下参数息息相关:size: 卷积核/过滤器大小一般会选择为奇数比如有1*1,3*35*5Padding: 零填充的方式Stride: 步长那计算方法如下图所示:输入图像大小: W x W卷积核大小: F x FStride: SPadding: P输出图像大小: N x N公式图示如下例如当图像大小为 5×5卷积核大小为 3×3步长 S1填充 P1 时计算得N5−32×1115N15−32×1​15输出特征图尺寸为 5×5。四、池化层详解池化层通常位于卷积层之后它通过对卷积层输出的特征图进行下采样保留最重要的特征信息同时丢弃一些不重要的细节。池化层的主要作用降维和计算量减少通过减少特征图的尺寸降低计算量特别是在多层网络中池化能够显著减少计算资源的消耗。提高鲁棒性池化操作可以使得特征对小的变换、平移和旋转变得更加不敏感模型在面对噪声或图像的轻微变化时依然能够稳定工作。防止过拟合通过池化减少了特征图的大小减少了模型的复杂度有助于防止过拟合。抽象特征提取更为抽象和高层次的特征使得网络能够学习到更具泛化能力的表示。4.1 池化计算最常见的池化操作是最大池化和平均池化。最大池化Max Pooling在池化窗口内取最大值作为输出。它能够保留局部区域最显著的特征常用于卷积层之后。平均池化Avg Pooling在池化窗口内取平均值作为输出。它能够保留整体信息常用于网络较深的位置或全连接层之前。下图演示了最大池化上和平均池化下的过程窗口大小 2×2步长 2无填充4.2 Padding 与 Stride 在池化中的应用池化层同样可以设置 Padding 和 Stride其作用与卷积层类似用于控制输出尺寸。Padding在输入特征图周围填充零值通常很少使用因为池化本身就会缩小尺寸。填充后边缘区域也能参与池化计算。Stride池化窗口每次移动的步长。步长越大输出尺寸越小。4.3 多通道池化计算在处理多通道输入数据时池化层对每个输入通道分别进行池化而不是像卷积层那样将各个通道的输入相加。这意味着池化层的输出通道数与输入通道数相等。池化只在宽高维度上进行通道维度不进行任何融合。五、总结本文系统地讲解了卷积神经网络CNN的基础知识包括图像基础像素、颜色通道、图像类型及加载方式。CNN 概述为什么需要 CNN、CNN 的构成卷积层、池化层、全连接层及其经典架构。卷积层卷积计算过程、Padding 与 Stride 的作用、多通道与多卷积核的处理、特征图尺寸计算公式。池化层池化的作用、最大池化与平均池化的区别、Padding 与 Stride 的应用、多通道池化的独立性。这些理论是理解 CNN 后续实战的基础。在接下来的文章中我们将使用 PyTorch 实际演示卷积层和池化层的代码实现并通过可视化特征图加深理解。最后我们将构建一个完整的 CNN 模型在 CIFAR-10 数据集上完成图像分类任务并尝试优化模型以提升性能。下一篇预告PyTorch 卷积与池化实战——从代码到特征图可视化。