卷积神经网络CNN
卷积神经网络CNN(Convolutional Neural Networks)
一、图像原理
图像在计算机中是一堆按顺序排列的数字,数值为0到255。0表示最暗,255表示最亮。
上图是只有黑白颜色的灰度图,而更普遍的图片表达方式是RGB颜色模型,即红、绿、蓝三原色的色光以不同的比例相加,以产生多种多样的色光。RGB颜色模型中,单个矩阵就扩展成了有序排列的三个矩阵,也可以用三维张量去理解。 其中的每一个矩阵又叫这个图片的一个channel(通道),宽, 高, 深来描述。
二、图像识别
知道一个物体不管在画面左侧还是右侧,都会被识别为同一物体,这一特点就是不变性
希望所建立的网络可以尽可能的满足这些不变性特点
之前我们学习的各个算法模型都没法识别在不规则位置的同一类图形
传统神经网络
解决办法是:用大量物体位于不同位置的数据训练,同时增加网络的隐藏层个数从而扩大网络学习这些变体的能力。
三、卷积神经网络的组成
卷积层
1、什么是卷积
对图像(不同的窗口数据)和卷积核(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
原理:
a、步长stride:每次滑动的位置步长。
b. 卷积核的个数:决定输出的depth厚度。同时代表卷积核的个数。
c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。
a. 数据窗口每次移动两个步长取3*3的局部数据,即stride=2。
b. 两组神经元(卷积核),即depth=2,意味着有两个滤波器。
c. zero-padding=1。
图片精通卷积核处理后的样子
卷积层的计算结果
例如输入数据为32*32*3的图像,用10个5*5*3的卷积核来进行操作,步长为1,边界0填充为2,最终输出结果为?
(32-5+2*2)/1 +1 =32,输出规模为32*32*10的特征图
注意:512这个组合,卷积核宽度,步长,边界填充的比例为5:1:2,那么输出的结果大小不变,但一般边界填充不会很大,所以适用的场景不多
池化层(Pooling Layer)
池化层的作用
一种降采样,减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。
常见的池化层:
最大池化、平均池化、全局平均池化、全局最大池化。
平均池化(average pooling):计算图像区域的平均值作为该区域池化后的值。
最大池化(max pooling):选图像区域的最大值作为该区域池化后的值。是最为常见的。 通常来说,CNN的卷积层之间都会周期性地插入池化层。
池化层操作方法:
与卷积层类似,池化层运算符由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,为固定形状窗口(有时称为 池化窗口)遍历的每个位置计算一个输出。 然而,不同于卷积层中的输入与卷积核之间的互相关计算,池化层不包含参数。
最大池化的原理分析
Max pooling的主要功能是压缩,却不会损坏识别结果。 这意味着卷积后的Feature Map中有对于识别物体不必要的冗余信息。 那么我们就反过来思考,这些“冗余”信息是如何产生的。
全连接层(Fully Connected Layer)
当抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 全连接层(也叫前馈层)就可以用来将最后的输出映射到线性可分的空间。 通常卷积网络的最后会将末端得到的长方体平摊(flatten)成一个长长的向量,并送入全连接层配合输出层进行分类。
感受野
例如图片是3通道:
卷积核为7*7的,则卷积核所需要的参数个数为:7*7=49个
卷积核为3个3*3的,则卷积核所需要的参数个数为:(3*3*3) =27
一张250*250的图片和一张500*500的图片,卷积层的权重参数数谁多?
答案:一样多
三个层次示意图
四、常见的卷积神经网络结构
ResNet(残差网络)(最常用)
- 简介:由何恺明等人在 2015 年提出,在当年的 ILSVRC 竞赛中取得了图像分类、目标检测等多个任务的冠军,解决了深度神经网络中梯度消失和梯度爆炸,以及网络退化等问题,使得训练超深的神经网络成为可能。
- 结构特点:
- 残差块:引入了跨层连接(skip connection),也叫 shortcut connection。假设我们希望拟合的目标函数是 H (x),传统网络直接学习这个函数,而 ResNet 将目标函数转化为 F (x) = H (x) - x ,然后学习残差函数 F (x)。这样做的好处是,当网络层数增加导致性能退化时,网络可以直接学习恒等映射(即 F (x)=0,H (x)=x),避免了因网络过深而导致的性能下降。
- 批量归一化(Batch Normalization,BN):在网络中使用了 BN 层,对每个 mini-batch 的数据进行归一化处理,使得数据分布更加稳定,加快了网络的收敛速度,并且一定程度上缓解了梯度消失问题。
LeNet
- 简介:LeNet 是第一个成功的卷积神经网络应用,由 Yann LeCun 等人在 1998 年提出,主要用于手写数字识别。它开创了 CNN 的基本架构,为后续的深度学习发展奠定了基础。
- 结构特点:使用了多层的卷积层来抓取特征,通常是一个卷积层马上跟一个 max pooling(最大池化)层。通过卷积操作提取图像的局部特征,池化操作则用于降低数据维度、减少计算量并防止过拟合。
AlexNet
- 简介:在 2012 年由 Alex Krizhevsky 等人提出,在 ImageNet 大规模视觉识别挑战赛(ILSVRC)中取得了突破性的成绩,重新引起了人们对深度学习的关注。
- 结构特点:类似于 LeNet,但更深,网络层数增加使得它能够学习到更复杂的图像特征。同时使用了一些新的技术,如 ReLU 激活函数来缓解梯度消失问题,以及 Dropout 技术来防止过拟合。
ZF Net
- 简介:2013 年的 ILSVRC 竞赛冠军,是对 AlexNet 的改进。
- 结构特点:调整了 AlexNet 中第一层的 stride(步长)和 filter size(滤波器大小),让网络可以更好地提取图像特征,在目标分类和定位等任务上取得了不错的效果。
GoogleNet(Inception Net)
- 简介:由谷歌团队提出,在 2014 年 ILSVRC 竞赛中夺冠。其最大的特点是采用了 Inception 模块,大大减少了模型的参数数量。
- 结构特点:减少 parameters 数量,最后一层用 max pooling 层代替了全连接层,以降低计算量。Inception-v4 模块的使用,通过并行的不同尺度的卷积核和池化操作,能够在不同尺度上捕捉图像特征,提高了网络的表达能力。
VGGNet
- 简介:由牛津大学 VGG 组在 2014 年提出,结构简洁且具有很好的扩展性,在图像分类、目标检测等任务上表现出色。
- 结构特点:只使用 3x3 卷积层和 2x2 pooling 层从头到尾堆叠。通过不断堆叠小尺寸的卷积核(3x3)来加深网络深度,在保持感受野大小的同时,减少参数数量,并且增加了网络的非线性表达能力。
- 应用领域:
- 图像分类:是图像分类任务中的经典模型,在各种图像分类数据集上都取得了优异的成绩。
- 目标检测:很多目标检测算法(如 Faster R-CNN、Mask R-CNN 等)会使用 ResNet 作为骨干网络,提取图像的特征用于目标检测和分割。
- 语义分割:在语义分割任务中,ResNet 也常被用作特征提取网络,结合后续的上采样和分割模块,实现对图像中不同语义区域的分割。