Lenet5和VGG16介绍

Lenet5和VGG16
Lenet5

LeNet5
LeNet-5共有7层,不包含输入,每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。
各层参数详解:

1、INPUT层-输入层
首先是数据 INPUT 层,输入图像的尺寸统一归一化为3232。
注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。
2、C1层-卷积层
输入图片:32
32
卷积核大小:55
卷积核种类:6
输出featuremap大小:28
28 (32-5+1)=28
神经元数量:28286
可训练参数:(55+1) * 6(每个滤波器55=25个unit参数和一个bias参数,一共6个滤波器)
连接数:(55+1)62828=122304
详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 55 的卷积核),得到6个C1特征图(6个大小为2828的 feature maps, 32-5+1=28)。我们再来看看需要多少个参数,卷积核的大小为55,总共就有6(55+1)=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的55个像素和1个bias有连接,所以总共有1562828=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。
3、S2层-池化层(下采样层)
输入:2828
采样区域:2
2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:6
输出featureMap大小:1414(28/2)
神经元数量:14
146
连接数:(2
2+1)61414
S2中每个特征图的大小是C1中特征图大小的1/4。
详细说明:第一次卷积之后紧接着就是池化运算,使用 2
2核 进行池化,于是得到了S2,6个1414的 特征图(28/2=14)。S2这个pooling层是对C1中的22区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。同时有5x14x14x6=5880个连接。
4、C3层-卷积层
输入:S2中所有6个或者几个特征map组合
卷积核大小:55
卷积核种类:16
输出featureMap大小:10
10 (14-5+1)=10
C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合
存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。
则:可训练参数:6*(355+1)+6*(455+1)+3*(455+1)+1*(655+1)=1516
连接数:10101516=151600
详细说明:第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个10x10的特征图,卷积核大小是 55. 我们知道S2 有6个 1414 的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:

网络解析(一):LeNet-5详解
C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为55,所以总共有6(355+1)+6*(455+1)+3*(455+1)+1*(655+1)=1516个参数。而图像大小为10*10,所以共有151600个连接。

网络解析(一):LeNet-5详解

C3与S2中前3个图相连的卷积结构如下图所示:

网络解析(一):LeNet-5详解

上图对应的参数为 355+1,一共进行6次卷积得到6个特征图,所以有6*(355+1)参数。 为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。

5、S4层-池化层(下采样层)
输入:1010
采样区域:2
2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:16
输出featureMap大小:55(10/2)
神经元数量:5
516=400
连接数:16
(22+1)55=2000
S4中每个特征图的大小是C3中特征图大小的1/4
详细说明:S4是pooling层,窗口大小仍然是2
2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。有5x5x5x16=2000个连接。连接的方式与S2层类似。

6、C5层-卷积层
输入:S4层的全部16个单元特征map(与s4全相连)
卷积核大小:55
卷积核种类:120
输出featureMap大小:1
1(5-5+1)
可训练参数/连接:120*(1655+1)=48120
**详细说明:**C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。C5层的网络结构如下:

网络解析(一):LeNet-5详解
7、F6层-全连接层
输入:c5 120维向量
计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。

可训练参数:84*(120+1)=10164

**详细说明:**6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是(120 + 1)x84=10164。ASCII编码图如下:

网络解析(一):LeNet-5详解

F6层的连接方式如下:

网络解析(一):LeNet-5详解

8、Output层-全连接层
Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
yi=j(xjwij)2y_{i}=\sum_{j}\left(x_{j}-w_{i j}\right)^{2}
上式w_ij 的值由i的比特图编码确定,i从0到9,j取值从0到7*12-1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有84x10=840个参数和连接。
网络解析(一):LeNet-5详解上图是LeNet-5识别数字3的过程。

  • LeNet-5是一种用于手写体字符识别的非常高效的卷积神经网络。
  • 卷积神经网络能够很好的利用图像的结构信息。
  • 卷积层的参数较少,这也是由卷积层的主要特性即局部连接和共享权重所决定。

vgg16
在这里插入图片描述

  1. 网络开始输入(3,224,224)的图像数据,即一张宽224,高244的彩色RGB图片,同时补了一圈0
  2. ZeroPadding2D((1,1) 这个函数是指在横向和纵向,即四周都补0
  3. 接着是卷积层。有64个(3,3)的卷积核,激活函数是relu , model.add(Convolution2D(64, 3, 3,activation=‘relu’)) 一个卷积核扫完图片,生成一个新的矩阵,64个就生成64 层。
  4. 接着是补0,接着再来一次卷积。此时图像数据是64224224, model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(64, 3, 3, activation=‘relu’))
  5. 接着是池化,小矩阵是(2,2) ,步长(2,2),指的是横向每次移动2格,纵向每次移动2格.
    model.add(MaxPooling2D((2,2), strides=(2,2)))
    按照这样池化之后,数据变成了64112112,矩阵的宽高由原来的224减半,变成了112
  6. 再往下,同理,只不过是卷积核个数依次变成128,256,512,而每次按照这样池化之后,矩阵都要缩小一半。
  7. 13层卷积和池化之后,数据变成了 51277 然后Flatten(),将数据拉平成向量,变成一维51277=25088
  8. 接着是3个全连接层

卷积
卷积操作相当于特征提取,卷积核相当于一个过滤器,提取我们需要的特征。
Padding
卷积操作之后维度变少,得到的矩阵比原来矩阵小,这样不好计算,而我们只是希望作卷积,所以我们需要Padding,在每次卷积操作之前,在原矩阵外边补包一层0,可以只在横向补,或只在纵向补,或者四周都补0,从而使得卷积后输出的图像跟输入图像在尺寸上一致。
pooling
卷积操作后我们提取了很多特征信息,相邻区域有相似特征信息,可以相互替代的,如果全部保留这些特征信息就会有信息冗余,增加了计算难度,这时候池化就相当于降维操作。池化是在一个小矩阵区域内,取该区域的最大值或平均值来代替该区域,该小矩阵的大小可以在搭建网络的时候自己设置。
Flatten
Flatten 是指将多维的矩阵拉开,变成一维向量来表示。
全连接层
对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权。像下面的中间层就是全连接方式。
学习速率
学习速率是指导我们该如何通过损失函数的梯度调整网络权重的超参数。学习率越低,损失函数的变化速度就越慢。虽然使用低学习率可以确保我们不会错过任何局部极小值,但也意味着我们将花费更长的时间来进行收敛,特别是在被困在高原区域的情况下。
学习速率对模型收敛到局部极小值(也就是达到最好的精度)的速度也是有影响的。因此,从正确的方向做出正确的选择意味着我们可以用更短的时间来训练模型。
优化函数
每个最优化问题都包含一组限定条件(constraint)和一个优化函数 (optimization function),符合限制条件的问题求解方案成为可行解(feasible solution),使优化函数取得最佳值的可行解称为最优解(optimal solution)
epoch
简单说,epochs指的就是训练过程中数据将被“轮询”多少次。
Dropout
为输入数据施加Dropout。Dropout将在训练过程中每次更新参数时随机断开一定百分比(rate)的输入神经元,Dropout层用于防止过拟合。
激活函数
激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。
imagenet的发展历程
Mnist数据集将初学者领进了深度学习领域,Imagenet数据集在深度学习中尤其是计算机视觉领域掀起了巨大的浪潮。ImageNet项目于2007年由斯坦福大学华人教授李飞飞创办,目标是收集大量带有标注信息的图片数据供计算机视觉模型训练。ImageNet拥有1500万张标注过的高清图片,总共拥有22000类,其中约有100万张标注了图片中主要物体的定位边框。Imagenet数据集是目前深度学习图像领域应用得非常多的一个数据,关于图像分类、定位、检测等研究工作大多基于此数据集展开。ImageNet国际计算机视觉挑战赛(ILSVRC)就是基于该数据集子集(120万张图片,以及1000类的标注),吸引了中美英等7个国家的25支顶尖人工智能团队参赛,该比赛每年举办一次。比赛采用top-5和top-1分类错误率作为模型性能的评测指标。
1、AlexNet(2012年冠军)
在这里插入图片描述
AlexNet特点:

  • 卷积层:5层 ,当时用的还是55,33的大卷积层。
  • 全连接层:3层
  • 深度:8层
    AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。奠定了深度卷积神经网络在机器视觉领域的地位。
    2、InceptionNet(2014年冠军)
    在这里插入图片描述
    Inception V1的特点:
  • 22层,比AlexNet 的 8 层或者 VGGNet 的 19 层还要更深;
  • 全局平均池化层(将图片尺寸变为1×11×1)取代全连接层;
  • 小卷积核(11,33,55),最大池化层(33)

3、VGGnet(2014年亚军)
在这里插入图片描述
VGG19网络结构:

  • 卷积层:16层
  • 全连接层:3层
  • 连续使用多层小卷积核(33M)

4、ResNet(2015年冠军)
在这里插入图片描述
ResNet的结构特点:

  • 152层
  • 层之间用到了ShortCutting,减少了训练的难度。

在ImageNet图像识别项目中,几乎所有网络结构都是基于卷积神经网络的改进,改进方向一般是网络的深度(也就是卷积层的个数)、卷积核的个数,卷积核的大小,激活函数以及各层之间的连接方式(跳层连接)等等。在机器视觉的领域基本离不开卷积神经网络,并且随着语音识别的,自然语言的发展,卷积神经网络也在序列处理当中发挥了很强的特征提取的功能。
参考卷积神经网络在ImageNet项目中的演进过程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章