深度学习-卷积神经网络(CNN)

文章目录

卷积神经网络是一种前馈型神经网络, 受生物自然视觉认知机制启发而来的. 现在, CNN 已经成为众多科学领域的研究热点之一, 特别是在模式分类领域, 由于该网络避免了对图像的复杂前期预处理, 可以直接输入原始图像, 因而得到了更为广泛的应用. 可应用于图像分类, 目标识别, 目标检测, 语义分割等等. 本文介绍可用于图像分类的卷积神经网络的基本结构.

深度学习是一种特殊的机器学习,通过学习将世界使用嵌套的概念层次来表示并实现巨大的功能和灵活性,其中每个概念都定义为与简单概念相关联,而更为抽象的表示则以较不抽象的方式来计算。

一、网络构造

上面是一个简单的 CNN 结构图, 第一层输入图片, 进行卷积(Convolution)操作, 得到第二层深度为 3 的特征图(Feature Map). 对第二层的特征图进行池化(Pooling)操作, 得到第三层深度为 3 的特征图. 重复上述操作得到第五层深度为 5 的特征图, 最后将这 5 个特征图, 也就是 5 个矩阵, 按行展开连接成向量, 传入全连接(Fully Connected)层, 全连接层就是一个 BP 神经网络. 图中的每个特征图都可以看成是排列成矩阵形式的神经元, 与 BP神经网络中的神经元大同小异. 下面是卷积和池化的计算过程.

1. 卷积层(Convolutional Layer)

  • 功能:卷积层是CNN的核心,负责提取图像中的局部特征。它通过滤波器(也称为卷积核)在输入图像上滑动,进行卷积运算,从而提取出图像的边缘、纹理等低级特征。

  • 卷积运算:卷积核的每个元素与图像对应位置的元素相乘后求和,得到输出特征图上的一个像素值。不同的卷积核可以捕捉到不同的特征。

  • 参数共享:卷积核的参数在整个输入图像上共享,这大大减少了网络的参数数量,降低了计算复杂度,并有助于防止过拟合。

(1)卷积

对于一张输入图片, 将其转化为矩阵, 矩阵的元素为对应的像素值. 假设有一个 5 × 5 的图像,使用一个 3 × 3 的卷积核进行卷积,可得到一个 3 × 3的特征图. 卷积核也称为滤波器(Filter).

具体的操作过程如下图所示:

黄色的区域表示卷积核在输入矩阵中滑动, 每滑动到一个位置, 将对应数字相乘并求和, 得到一个特征图矩阵的元素. 注意到, 动图中卷积核每次滑动了一个单位, 实际上滑动的幅度可以根据需要进行调整. 如果滑动步幅大于 1, 则卷积核有可能无法恰好滑到边缘, 针对这种情况, 可在矩阵最外层补零, 补一层零后的矩阵如下图所示:

可根据需要设定补零的层数. 补零层称为 Zero Padding, 是一个可以设置的超参数, 但要根据卷积核的大小, 步幅, 输入矩阵的大小进行调整, 以使得卷积核恰好滑动到边缘.

(2)特征图计算公式

一般情况下, 输入的图片矩阵以及后面的卷积核, 特征图矩阵都是方阵, 这里设输入矩阵高宽为h、w, 卷积核大小为 k , 步长为 s, 补零层数为 p, 则卷积后产生的特征图大小计算公式为:
H = ( h + 2 p − k ) s + 1 H = \frac{(h+2p−k)}{s}+1 H=s(h+2p−k)+1
W = ( w + 2 p − k ) s + 1 W = \frac{(w+2p−k)}{s}+1 W=s(w+2p−k)+1

(3)三通道卷积

为了提取更多的特征, 可以采用多个卷积核分别进行卷积, 这样便可以得到多个特征图. 有时, 对于一张三通道彩色图片, 或者如第三层特征图所示, 输入的是一组矩阵, 这时卷积核也不再是一层的, 而要变成相应的深度。

上图中, 最左边是输入的特征图矩阵, 深度为 3, 补零(Zero Padding)层数为 1, 每次滑动的步幅为 2. 中间两列粉色的矩阵分别是两组卷积核, 一组有三个, 三个矩阵分别对应着卷积左侧三个输入矩阵, 每一次滑动卷积会得到三个数, 这三个数的和作为卷积的输出. 最右侧两个绿色的矩阵分别是两组卷积核得到的特征图.

2. 激活函数(Activation Function)

作用:激活函数用于在卷积层之后引入非线性因素,使得网络能够学习更复杂的特征。常用的激活函数包括ReLU(Rectified Linear Unit),它计算简单且能有效解决梯度消失问题。

3. 池化层(Pooling Layer)

  • 功能:池化层主要用于降低特征图的维度(即宽度和高度),从而减少计算量和防止过拟合。通过池化操作(如最大池化或平均池化),可以在保留重要特征信息的同时,减少特征图的尺寸。
  • 最大池化:取池化窗口内的最大值作为输出,有助于保留图像的显著特征。
  • 平均池化:计算池化窗口内的平均值作为输出,有助于平滑图像。

4.全连接层(Fully Connected Layer)

  • 功能:全连接层将卷积层和池化层提取的特征映射到最终的输出类别或回归值上。
  • 连接方式:全连接层的每个神经元都与前一层的所有神经元相连接。
  • 参数:全连接层包含大量的参数,这些参数通过训练过程进行学习和调整。

二、经典CNN架构

  • LeNet-5:最早的卷积神经网络之一,主要用于手写数字识别。
  • AlexNet:在2012年ImageNet竞赛中表现出色,推动了深度学习的发展。
  • VGGNet:探索了卷积神经网络的深度与其性能之间的关系,构筑了16~19层深的卷积神经网络。
  • GoogLeNet:引入了Inception模块,使用并行网络结构提高了模型的泛化能力。
  • ResNet:通过引入残差连接(shortcut connection)解决了深层网络训练中的梯度消失问题。
相关推荐
老Z先生5 分钟前
矩阵求逆的几种方法
人工智能·物联网·线性代数·算法·机器学习·matlab·矩阵
Joemt11 分钟前
u2net网络模型训练自己数据集
深度学习
newxtc19 分钟前
【知了社保-注册安全分析报告-无验证方式导致安全隐患】
人工智能·安全·web安全·网络安全·网络攻击模型·社保代缴
一只蜗牛儿23 分钟前
自动驾驶综述 | 定位、感知、规划常见算法汇总
人工智能·macos·xcode
你看不见我写的blog24 分钟前
【从0开始自动驾驶】ros2编写自定义消息 msg文件和msg文件嵌套
人工智能·机器学习·自动驾驶·ros·ros2
Eric.Lee202132 分钟前
数据集-目标检测系列-兔子检测数据集 rabbit >> DataBall
人工智能·python·深度学习·目标检测·计算机视觉·目标跟踪·兔子检测
jndingxin34 分钟前
OpenCV图像文件读写(6)将图像数据写入文件的函数imwrite()的使用
人工智能·opencv·计算机视觉
神奇夜光杯43 分钟前
Python酷库之旅-第三方库Pandas(104)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(103)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
DA树聚1 小时前
大语言模型之LlaMA系列-LlaMA 2及LlaMA_chat(下)
人工智能·深度学习·程序人生·语言模型·bert·transformer·llama