卷积神经网络(CNN)

学习目标

1、什么是卷积神经网络(CNN)?
2、卷积神经网络与普通网络有何区别?
3、卷积的工作原理?
4、卷积神经网络的神经元结构是怎么样的?
5、卷积神经网络的网络一共包含几层?
6、样本数据是以怎么样的方式喂入卷积神经网络的?
7、典型的卷积神经网络有哪几种?

一、概览

卷积神经网络(Convolutional Neural Network, CNN)是一种前馈的神经网络,通过卷积操作,它的人工神经元可以响应一部分覆盖范围内的周围单元。在实际使用中,特征有多种多样、成百上千,卷积神经网络中的卷积核参数不能通过手动赋值,需要通过不断训练可以确定每一个卷积核中的参数。因此,对于大型图像处理表现出色。
卷积神经网络以及工作原理详解:https://www.jianshu.com/p/c0215d26d20a

二、卷积神经网络与普通网络的区别

卷积神经网络(Convolutional Neural Network, CNN)与普通网络非常相似。他们的神经元都是由可学习的权重偏置常量组成。
区别:卷积神经网络默认输入的是图像。可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。

三、卷积神经网络的工作原理

1.padding填白

填白的目的是解决图像边缘信息损失的问题

2.stride步长

步长影响图片输出的大小与卷积操作的速度

3.pooling池化

为了提取一定区域的主要特征,减少参数量,防止过拟合。一般有最大值化(MaxPooling)和平均值化(AveragePooling)

4.卷积和池化后图像大小的计算

1.卷积操作

若图像为正方形:设输入图像尺寸为WxW,卷积核尺寸为FxF,步幅为S,Padding使用P,经过该卷积层后输出的图像尺寸为NxN:
在这里插入图片描述若图像为矩形:设输入图像尺寸为WxH,卷积核的尺寸为FxF,步幅为S,图像深度(通道数)为C,Padding使用P,则:
卷积后输出图像大小:
在这里插入图片描述
在这里插入图片描述
,输出图像的通道数=C
注意:卷积操作有三种模式:Vaild、Same、Full.(same模式只有步长为1时,输入和输出的尺度才相同)
(1)Vaild操作
在这里插入图片描述
(2)same操作
在这里插入图片描述
(3)full操作
在这里插入图片描述

2.池化操作

设输入图像尺寸为WxH,其中W:图像宽,H:图像高,D:图像深度(通道数),卷积核的尺寸为FxF,S:步长
池化后输出图像大小:
在这里插入图片描述
在这里插入图片描述
池化后输出图像深度为D

当进行池化操作时,步长S就等于池化核的尺寸,如输入为24x24,池化核为4x4,则输出为
在这里插入图片描述

若除不尽,则取较小的数,如池化核为7x7,则输出为
在这里插入图片描述
不是用四舍五入,就是取最小的整数,即使为3.9,也是取3

5、对多通道(channels)图片的卷积

卷积神经网络的输入输出详细请参考:https://www.jianshu.com/p/c0215d26d20a

四、卷积神经网络的神经元结构

具有三维体积的神经元(3D volumes of neurons)
卷积神经网络利用输入是图片的特点,把神经元设计成三个维度:width、height、depth(注意这个depth不是神经网络的深度,而是用来描述神经元的)。比如输入的图片大小是64X64X3(RGB),那么卷积神经网络的神经元就具有64X64X3的维度。
一个卷积神经网络由很多层组成,它们的输入是三维的,输出也是三维的,有的层有参数,有的层不需要参数。

五、卷积神经网络的构成层

卷积神经网络通常包含以下几种层:

  • 卷积层(Convolutional layer)
  • 由滤波器filters和激活函数构成。卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
  • 线性整流层(Rectified Linear Units layer, ReLU layer),这一层神经的活性化函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)f(x)=max(0,x)f(x)=max(0,x)。
  • 池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
  • 全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。

六、典型的卷积神经网络

在这里插入图片描述

1、LeNet

1、LeNet-5主要是为了解决什么问题?
2、LeNet-5的优点与缺点?
解决问题:是一种用于手写体字符识别

LeNet-5是比较简单完整的卷积神经网络,有卷积层、池化层和全连接层。网络流程是:输入32x32的二维图像,先经过第一次卷积层到第一次池化层,再经过第二次卷积层到第二次池化层,再经过全连接层,最后使用softmax分类作为输出层。如下图所示:
在这里插入图片描述
LeNet-5共有7层:
三层卷积、两层池化、两层全连接。
1.1 Input层-输入层

数据输入(INPUT)层,输入的图像尺寸统一为32x32

1.2 C1层-卷积层

输入图片:32x32
卷积核大小:5x5
卷积核种类:6
输出featuremap大小:28X28 (32-5+1)=28
神经元数量:28x28x6
可训练参数:(5x5+1) x6(每个滤波器5x5=25个unit参数和一个bias参数,一共6个滤波器)
连接数:(5x5+1)x6x28x28=122304 这里是引用

详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 55 的卷积核),得到6个C1特征图(6个大小为28x28的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为55,总共就有6x(5x5+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5*5个像素和1个bias有连接,所以总共有15x28x28=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。

1.3 S2层-池化层

输入:28x28
采样区域:2x2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:6
输出featureMap大小:14x14(28/2)
神经元数量:14x14x6
可训练参数:2x6(和的权+偏置)
连接数:(2x2+1)x6x14x14
S2中每个特征图的大小是C1中特征图大小的1/4

详细说明:第一次卷积之后紧接着就是池化运算,使用 2x2核 进行池化,于是得到了S2,6个14*14的 特征图(28/2=14)。S2这个pooling层是对C1中的2x2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。于是每个池化核有两个训练参数,所以共有2x6=12个训练参数,但是有5x14x14x6=5880个连接。

1.4 C3层-卷积层

输入:S2中所有6个或者几个特征map组合
卷积核大小:5x5
卷积核种类:16
输出featureMap大小:10x10 (14-5+1)=10
C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层 提取到的特征map的不同组合。
存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入,同时需要3个卷积核。接下来6个特征图以S2中4个相邻特征图子集为输入,同时需要4个卷积核。然后的3个特征图以不相邻的4个特征图子集为输入,同时需要4个卷积核。最后一个特征图将S2中所有特征图为输入,同时需要6个卷积核。总共16个卷积核。
则:可训练参数:6x(3x5x5+1)+6x(4x5x5+1)+3x(4x5x5+1)+1x(6x5x5+1)=1516
连接数:10x10x1516=151600

具体的16个特征图如下:
在这里插入图片描述

1.5 S4层-池化层

输入:10x10
采样区域:2x2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:16
输出featureMap大小:5x5(10/2)
神经元数量:5x5x16=400
可训练参数:2x16=32(和的权+偏置)
连接数:16x(2x2+1)x5x5=2000
S4中每个特征图的大小是C3中特征图大小的1/4

详细说明:S4是pooling层,窗口大小仍然是2*2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。这一层有2x16共32个训练参数,5x5x5x16=2000个连接。连接的方式与S2层类似。

1.6 C5层-卷积层

输入:S4层的全部16个单元特征map(与s4全相连)
卷积核大小:5x5
卷积核种类:120
输出featureMap大小:1x1(5-5+1)
可训练参数/连接:120x(16x5x5+1)=48120

详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。

1.7 F6-全连接层

输入:c5 120维向量
计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。
可训练参数:84(120+1)=10164*

1.8 Output层-全连接层

Output层也是全连接层,共有10个节点,分别代表数字0到9

LeNet-5的优点与缺点:

  • LeNet-5是一种用于手写体字符识别的非常高效的卷积神经网络。
  • 卷积神经网络能够很好的利用图像的结构信息。
  • 卷积层的参数较少,这也是由卷积层的主要特性即局部连接和共享权重所决定。
  • 只用于手写字符识别,网络深度和宽度少,对于处理其他大型分类图像表达能力弱。
    参考:https://blog.csdn.net/qq_42570457/article/details/81460807

2、AlexNet

1、AlexNet是在什么基础上产生的?
AlexNet的网络模型结构如下:
在这里插入图片描述
采用两台GPU服务器,模型解读如下图所示:
在这里插入图片描述
AlexNet该模型一共分为八层,5个卷积层,以及3个全连接层。

第一层:卷积层1,输入为 224×224×3 224 \times 224 \times 3224×224×3的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11×11×3 11 \times 11 \times 311×11×3; stride = 4, stride表示的是步长, pad = 0, 表示不扩充边缘;
卷积后的图形大小是怎样的呢?
wide = (224 + 2 * padding - kernel_size) / stride + 1 = 54
height = (224 + 2 * padding - kernel_size) / stride + 1 = 54
dimention = 96
然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最终获得第一层卷积的feature map
最终第一层卷积的输出为
第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为:5×5×48 5 \times 5 \times 485×5×48; pad = 2, stride = 1; 然后做 LRN, 最后 max_pooling, pool_size = (3, 3), stride = 2;
第三层:卷积3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3×3×256 3 \times 3 \times 2563×3×256), padding = 1, 第三层没有做LRN和Pool
第四层:卷积4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3×3 3 \times 33×3), padding = 1, 和第三层一样,没有LRN和Pool
第五层:卷积5, 输入为第四层的输出,卷积核个数为256, kernel_size = (3×3 3 \times 33×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;
第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,ImageNet这个比赛的分类个数为1000。全连接层中使用了RELU和Dropout。

3、VGGNet

VGGnet是在AlexNet的基础上对网络的深度和宽度进行了修改,使得网络表达能力变得更强。VGG基本上只采用3x3的卷积核,减少了训练时所需要的参数个数。具体网络结构如下:
在这里插入图片描述
VGGnet的改进总结:

一、使用了更小的33卷积核,和更深的网络。两个33卷积核的堆叠相对于55卷积核的视野,三个33卷积核的堆叠相当于77卷积核的视野。这样一方面可以有更少的参数(3个堆叠的33结构只有77结构参数数量的(333)/(77)=55%);另一方面拥有更多的非线性变换,增加了CNN对特征的学习能力。
二、在VGGNet的卷积结构中,引入1*1的卷积核,在不影响输入输出维度的情况下,引入非线性变换,增加网络的表达能力,降低计算量。
三、训练时,先训练级别简单(层数较浅)的VGGNet的A级网络,然后使用A网络的权重来初始化后面的复杂模型,加快训练的收敛速度。
四、采用了Multi-Scale的方法来训练和预测。可以增加训练的数据量,防止模型过拟合,提升预测准确率

VGG19 基本网络结构图:
在这里插入图片描述

4、GoogleNet

详细参考1:https://blog.csdn.net/weixin_39953502/article/details/80966046?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
参考2:https://blog.csdn.net/qq_14845119/article/details/73648100

在GoogleNet出现之前,为了是模型具有更强的表达能力。
主流的思想是:
加大网络深度(层数)和网络宽度(神经元个数)
主流思想的缺点:
1、导致参数太多,容易过拟合,若训练数据集有限;
2、网络越大计算复杂度越大,难以应用;
3、网络越深,梯度越往后穿越容易消失(梯度弥散),难以优化模型
GoogleNet主要解决的问题:
在利用计算资源不变的情况下,提高网络计算资源的利用率,从网络结构入手,加深网络和神经元个数的同时减少训练参数。

GoogleNet主要经历了四个演变阶段:Inception V1、Inception V2、Inception V3、Inception V4、Inception-Resnet。
4.1 Inception v1模型

Inception v1网络的Block原始模型与改进模型:
在这里插入图片描述
首先看第一个结构,有四个通道,有11、33、5*5卷积核,该结构有几个特点:

  • 使用这些大小卷积核,没有什么特殊含义,主要方便对齐,只要padding = 0、1、2,就可以得到相同大小的特征图,可以顺利concat。
  • 采用大小不同的卷积核,意味着感受野的大小不同,就可以得到不同尺度的特征。
  • 采用比较大的卷积核即5*5,因为有些相关性可能隔的比较远,用大的卷积核才能学到此特征。
  • 但是这个结构有个缺点,55的卷积核的计算量太大。那么作者想到了第二个结构,用11的卷积核进行降维。

这个1*1的卷积核,它的作用就是:

  • 降低维度,减少计算瓶颈
  • 增加网络层数,提高网络的表达能力

最后的GoogleNet 结构图:
在这里插入图片描述
4.2 Inception v2模型
Inception v2的改进:提出了Batch Normalization,稍微改进了一下Inception。

  • 加入了BN层,减少了Internal Covariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯。加速网络训练,防止梯度消失;
  • BN层找到一个线性和非线性的平衡点,既能享受非线性较强的表达能力,有可以避免非线性饱和导致网络收敛变慢问题
  • 学习VGG用2个3x3的conv替代inception模块中的5x5,既降低了参数数量,也加速计算;
    在这里插入图片描述
    Inception v2模型的改进:例如,用1×3和3×1两种来代替3×3的卷积核。
    在这里插入图片描述
    Inception v2模型的优点:
  • 把Inception-v1中5x5的卷积用2个3x3的卷积替换,保持相同感受野的同时减少参数
  • 加强非线性的表达能力

4.3 Inception v3模型

  • 提出神经网络结构的设计和优化思路
  • 改进Inception
    设计准则
    1、避免网络表达瓶颈,尤其在网络的前端。feature map急剧减小,这样对层的压缩过大,会损失大量信息,模型训练困难。
    2、高维特征的局部处理更困难。
    3、特征内部相关性越高,子特征之间越独立,网络收敛越快;
    4、在较低维度空间聚合,不会损失表达能力。
    5、平衡网络的宽度和深度。
    改进Inception
  • 分解卷积核心尺寸:分解为对称的小的卷积核&分解为不对称的的卷积核
  • 使用辅助分类器。防止梯度消失,加快训练
  • 改变降低特征图尺寸的方式
    设计准则的第一条,就是避免表达瓶颈。那么传统的卷积神经网络的做法,当有pooling时(pooling层会大量的损失信息),会在之前增加特征图的厚度(就是双倍增加滤波器的个数),通过这种方式来保持网络的表达能力,但是计算量会大大增加
    在这里插入图片描述
    上图就是作者的改进方式。有两个通道,一个是卷积层,一个是pooling层,两个通道生成的特征图大小一样,concat在一起即可

4.4 Inception v4模型
这篇论文,没有公式,全篇都是画图,就是网络结构。
主要思想很简单:Inception表现很好,很火的ResNet表现也很好,把他们结合起来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、ResNet

  • ResNet解决什么问题?

  • ResNet单元模块(block)的设计

  • ResNet的网络结构

  • 解决网络退化问题,是属于模型优化的问题,不属于模型表达能力的问题
    退化:在通过标准初始化中间层正规化方法有效的控制了梯度消失/梯度爆炸导致网络难以收敛的问题的前提下。然而,给网络叠加更多的层后,性能却快速下降的情况。
    随着网络深度增加,网络的表现先是逐渐增加至饱和,然后迅速下降,如下图所示:
    在这里插入图片描述
    ResNet单元模块(block)的设计
    按正常情况来说,深层网络的性能不应该比浅层网络的性能差。深层网络的性能应该是在浅层网络的基础上,进一步的优化达到更好的效果。因此,需要恒等映射来保证性能,再进一步优化。
    F(x)+x构成的block称之为Residual Block,即残差块,如下图所示,多个相似的Residual Block串联构成ResNet。
    在这里插入图片描述
    由上图可知,一个残差块的设计是由残差路径恒等映射组成。
    残差块的结构分两种:一种是basic block,由两个3x3的卷积构成。另一种是bottleneck结构,由1x1的卷积构成。如下图所示:
    在这里插入图片描述
    恒等映射的路径也分两种:取决于残差路径是否改变了feature map数量和尺寸,一种是将输入x原封不动地输出,另一种则需要经过1×1卷积来升维 or/and 降采样,主要作用是将输出与F(x)路径的输出保持shape一致。
    在这里插入图片描述
    ResNet 网络结构
    在这里插入图片描述

  1. 与vgg相比,其参数少得多,因为vgg有3个全连接层,这需要大量的参数,而resnet用 avg pool 代替全连接,节省大量参数。
  2. 参数少,残差学习,所以训练效率高

Resnet常用见的网络结构:
在这里插入图片描述Resnet50和Resnet101是其中最常用的网络结构。
所有的网络都分成5部分,分别是:conv1,conv2_x,conv3_x,conv4_x,conv5_x
其结构是相对固定的,只是通道数根据输入确定。
注意:Resnet 最后的 avg_pool 是把每个 feature map 转换成 1 个特征,故池化野 size 为 feature map size,如 最后输出位 512x7x7,那么池化野size 为 7

总结

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值