CNN网络--LeNet,AlexNet,VGGNet

活动地址:CSDN21天学习挑战赛

1、LeNet-5

LeNet5 这个网络虽然很小,但是它包含了深度学习的基本模块:卷积层,池化层,全链接层。
在这里插入图片描述

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

参数详解

1. Input

输入图像统一归一化为32*32。
注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。

2. C1卷积层

输入图片: 32 ∗ 32 32*32 3232

卷积核大小: 5 ∗ 5 5*5 55

卷积核种类: 6 6 6

输出featuremap大小: 28 ∗ 28 ( 32 − 5 + 1 ) = 28 28*28 (32-5+1)=28 2828325+1=28

神经元数量: 28 ∗ 28 ∗ 6 28*28*6 28286

可训练参数: ( 5 ∗ 5 + 1 ) ∗ 6 (5*5+1) * 6 (55+1)6(每个滤波器 5 ∗ 5 = 25 5*5=25 55=25个unit参数和一个bias参数,一共6个滤波器)

连接数: ( 5 ∗ 5 + 1 ) ∗ 6 ∗ 28 ∗ 28 = 122304 (5*5+1)*6*28*28=122304 55+162828=122304

详细说明:

  • 对输入图像进行第一次卷积运算(使用 6 个大小为 5*5 的卷积核),得到6个C1特征图(6个大小为 28 ∗ 28 28*28 2828的 feature maps, 32 − 5 + 1 = 28 ) 32-5+1=28) 325+1=28
  • 卷积核的大小为55,总共就有6(5*5+1)=156个参数,其中+1是表示一个核有一个bias。
  • 对于卷积层C1,C1内的每个像素都与输入图像中的 5 ∗ 5 5*5 55个像素和1个bias有连接,所以总共有 156 ∗ 28 ∗ 28 = 122304 156*28*28=122304 1562828=122304个连接(connection)。有122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。
3. S2池化层

输入: 28 ∗ 28 28*28 2828

采样区域: 2 ∗ 2 2*2 22

采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

采样种类:6

输出featureMap大小: 14 ∗ 14 ( 28 / 2 ) 14*14(28/2) 141428/2

神经元数量: 14 ∗ 14 ∗ 6 14*14*6 14146

连接数: ( 2 ∗ 2 + 1 ) ∗ 6 ∗ 14 ∗ 14 (2*2+1)*6*14*14 22+161414

S2中每个特征图的大小是C1中特征图大小的1/4。

详细说明:

  • 第一次卷积之后紧接着就是池化运算,使用 22核 进行池化,于是得到了S2,6个1414的 特征图(28/2=14)。
  • S2这个pooling层是对C1中的2*2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。同时有5x14x14x6=5880个连接。
4. C3卷积层

输入:S2中所有6个或者几个特征map组合

卷积核大小: 5 ∗ 5 5*5 55

卷积核种类: 16 16 16

输出featureMap大小: 10 ∗ 10 ( 14 − 5 + 1 ) = 10 10*10 (14-5+1)=10 1010(145+1)=10

C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合

存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。

则:可训练参数: 6 ∗ ( 3 ∗ 5 ∗ 5 + 1 ) + 6 ∗ ( 4 ∗ 5 ∗ 5 + 1 ) + 3 ∗ ( 4 ∗ 5 ∗ 5 + 1 ) + 1 ∗ ( 6 ∗ 5 ∗ 5 + 1 ) = 1516 6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516 6(355+1)+6(455+1)+3(455+1)+1(655+1)=1516

连接数: 10 ∗ 10 ∗ 1516 = 151600 10*10*1516=151600 10101516=151600

详细说明:

  • 第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个 10 ∗ 10 10*10 1010的特征图,卷积核大小是 5 ∗ 5 5*5 55. 我们知道S2 有6个 $14*14 $的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:
    在这里插入图片描述
  • 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相连。卷积核大小依然为 5 ∗ 5 5*5 55,所以总共有 6 ∗ ( 3 ∗ 5 ∗ 5 + 1 ) + 6 ∗ ( 4 ∗ 5 ∗ 5 + 1 ) + 3 ∗ ( 4 ∗ 5 ∗ 5 + 1 ) + 1 ∗ ( 6 ∗ 5 ∗ 5 + 1 ) = 1516 6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516 6(355+1)+6(455+1)+3(455+1)+1(655+1)=1516 个参数。而图像大小为 10 ∗ 10 10*10 1010,所以共有151600个连接。
    在这里插入图片描述
    C3与S2中前3个图相连的卷积结构如下图所示:
    在这里插入图片描述
    上图对应的参数为 3 ∗ 5 ∗ 5 + 1 3*5*5+1 355+1,一共进行6次卷积得到6个特征图,所以有 6 ∗ ( 3 ∗ 5 ∗ 5 + 1 ) 6*(3*5*5+1) 6355+1参数。
    为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。
5. S4池化层

输入: 10 ∗ 10 10*10 1010

采样区域: 2 ∗ 2 2*2 22

采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

采样种类:16

输出featureMap大小: 5 ∗ 5 ( 10 / 2 ) 5*5(10/2) 5510/2

神经元数量: 5 ∗ 5 ∗ 16 = 400 5*5*16=400 5516=400

连接数: 16 ∗ ( 2 ∗ 2 + 1 ) ∗ 5 ∗ 5 = 2000 16*(2*2+1)*5*5=2000 1622+155=2000

S4中每个特征图的大小是C3中特征图大小的1/4

详细说明:

  • S4是pooling层,窗口大小仍然是 2 ∗ 2 2*2 22,共计16个feature map,C3层的16个 10 ∗ 10 10*10 1010 的图分别进行以 2 ∗ 2 2*2 22 为单位的池化得到16个 5 ∗ 5 5*5 55 的特征图。有 5 ∗ 5 ∗ 5 ∗ 16 = 2000 5*5*5*16=2000 55516=2000 个连接。连接的方式与S2层类似。
6.C5卷积层

输入:S4层的全部16个单元特征map(与s4全相连)

卷积核大小: 5 ∗ 5 5*5 55

卷积核种类:120

输出featureMap大小: 1 ∗ 1 ( 5 − 5 + 1 ) 1*1(5-5+1) 1155+1

可训练参数/连接: 120 ∗ ( 16 ∗ 5 ∗ 5 + 1 ) = 48120 120*(16*5*5+1)=48120 1201655+1=48120

详细说明:

  • C5层是一个卷积层。由于S4层的16个图的大小为 5 ∗ 5 5*5 55,与卷积核的大小相同,所以卷积后形成的图的大小为 1 ∗ 1 1*1 11
  • 这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有 ( 5 ∗ 5 ∗ 16 + 1 ) x 120 = 48120 (5*5*16+1)x120 = 48120 (5516+1)x120=48120 个参数,同样有48120个连接。C5层的网络结构如下:
    在这里插入图片描述
7.F6全连接层

输入:c5 120维向量

计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。

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

详细说明:

  • 6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是 ( 120 + 1 ) ∗ 84 = 10164 (120 + 1)*84=10164 (120+1)84=10164。ASCII编码图如下:
    在这里插入图片描述
    F6层的连接方式如下:

在这里插入图片描述

8.Output全连接层 。

Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
在这里插入图片描述
上式$w_ij $的值由i的比特图编码确定,i从0到9,j取值从0到 7 ∗ 12 − 1 7*12-1 7121。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有 84 ∗ 10 = 840 84*10=840 8410=840个参数和连接。
在这里插入图片描述
上图是LeNet-5识别数字3的过程。

总结

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

2、AlexNet

AlexNet由Geoffrey和他的学生Alex提出,并在2012年的ILSVRC竞赛中获得了第一名。Alexnet共有8层结构,前5层为卷积层,后三层为全连接层。

AlexNet网络结构具有如下特点:

1.AlexNet在激活函数上选取了非线性非饱和的relu函数,在训练阶段梯度衰减快慢方面,relu函数比传统神经网络所选取的非线性饱和函数(如sigmoid函数,tanh函数)要快许多。

2.AlexNet在双gpu上运行,每个gpu负责一半网络的运算

3.采用局部响应归一化(LRN)。对于非饱和函数relu来说,不需要对其输入进行标准化,但Alex等人发现,在relu层加入LRN,可形成某种形式的横向抑制,从而提高网络的泛华能力。

4.池化方式采用overlapping pooling。即池化窗口的大小大于步长,使得每次池化都有重叠的部分。(ps:这种重叠的池化方式比传统无重叠的池化方式有着更好的效果,且可以避免过拟合现象的发生)

网络结构如下:
在这里插入图片描述

参数详解

1. Input

输入图像为 224 ∗ 224 ∗ 3 224*224*3 2242243

2. Conv1

经过 ( 11 ∗ 11 ∗ 3 ) ∗ 96 (11*11*3)*96 (11113)96卷积核,stride=4, ( 224 − 11 ) / 4 + 2 = 55 (224-11)/4+2=55 (22411)/4+2=55,生成featuremap为 55 ∗ 55 ∗ 96 55*55*96 555596

3. Pool1

经过 3 ∗ 3 3*3 33 的池化核,stride=2, ( 55 − 3 ) / 2 + 1 = 27 (55-3)/2+1=27 (553)/2+1=27,生成featuremap为 27 ∗ 27 ∗ 96 27*27*96 272796

4. Norm1

local_size=5,生成featuremap为 27 ∗ 27 ∗ 96 27*27*96 272796

5.Conv2

经过 ( 5 ∗ 5 ∗ 96 ) ∗ 256 (5*5*96)*256 (5596)256的卷积核,pad=2,group=2, ( 27 + 2 ∗ 2 − 5 ) / 1 + 1 = 27 (27+2*2-5)/1+1=27 (27+225)/1+1=27,生成featuremap为 27 ∗ 27 ∗ 256 27*27*256 2727256

6. Pool2

经过 3 ∗ 3 3*3 33 的池化核,stride=2, ( 27 − 3 ) / 2 + 1 = 13 (27-3)/2+1=13 (273)/2+1=13,生成featuremap为 13 ∗ 13 ∗ 256 13*13*256 1313256

7. Norm2

local_size=5, 生成featuremap为 13 ∗ 13 ∗ 256 13*13*256 1313256

8. Conv3

经过(33256)*384卷积核,pad=1, ( 13 + 1 ∗ 2 − 3 ) / 1 + 1 = 13 (13+1*2-3)/1+1=13 (13+123)/1+1=13,生成featuremap为 13 ∗ 13 ∗ 384 13*13*384 1313384

9. Conv4

经过 ( 3 ∗ 3 ∗ 384 ) ∗ 384 (3*3*384)*384 (33384)384卷积核,pad=1, ( 13 + 1 ∗ 2 − 3 ) / 1 + 1 = 13 (13+1*2-3)/1+1=13 (13+123)/1+1=13,生成featuremap为 13 ∗ 13 ∗ 384 13*13*384 1313384

10. Conv5

经过 ( 3 ∗ 3 ∗ 384 ) ∗ 256 (3*3*384)*256 (33384)256卷积核,pad=1, ( 13 + 1 ∗ 2 − 3 ) / 1 + 1 = 13 (13+1*2-3)/1+1=13 (13+123)/1+1=13,生成featuremap为 13 ∗ 13 ∗ 256 13*13*256 1313256

11. Pool5

经过 ( 3 ∗ 3 ) (3*3) (33)的池化核,stride=2, ( 13 − 3 ) / 2 + 1 = 6 (13-3)/2+1=6 (133)/2+1=6,生成featuremap为 6 ∗ 6 ∗ 256 6*6*256 66256

12. Fc6

输入为 ( 6 ∗ 6 ∗ 256 ) ∗ 4096 (6*6*256)*4096 (66256)4096全连接,生成featuremap为 1 ∗ 1 ∗ 4096 1*1*4096 114096

13. Dropout6

在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,BP的时候也不更新这些节点,以下Droupout同理。

14. Fc7

输入为 1 ∗ 1 ∗ 4096 1*1*4096 114096,输出为 1 ∗ 1 ∗ 4096 1*1*4096 114096,总参数量为 4096 ∗ 4096 4096*4096 40964096

15. Dropout7

生成featuremap为 1 ∗ 1 ∗ 4096 1*1*4096 114096

16.Fc8

输入为 1 ∗ 1 ∗ 4096 1*1*4096 114096,输出为1000,总参数量为 4096 ∗ 1000 4096*1000 40961000

总结

1.网络比LeNet更深,包括5个卷积层和3个全连接层。

2.使用relu激活函数,收敛很快,解决了Sigmoid在网络较深时出现的梯度弥散问题。

3.加入了dropout层,防止过拟合。

4.使用了LRN归一化层,对局部神经元的活动创建竞争机制,抑制反馈较小的神经元放大反应大的神经元,增强了模型的泛化能力。

5.使用裁剪翻转等操作做数据增强,增强了模型的泛化能力。预测时使用提取图片四个角加中间五个位置并进行左右翻转一共十幅图片的方法求取平均值,这也是后面刷比赛的基本使用技巧。

6.分块训练,当年的GPU没有这么强大,Alexnet创新地将图像分为上下两块分别训练,然后在全连接层合并在一起。

3、VGG

VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。

简单来说,在VGG中,使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。

这里解释一下为什么使用2个3x3卷积核可以来代替5*5卷积核:

5x5卷积看做一个小的全连接网络在5x5区域滑动,我们可以先用一个3x3的卷积滤波器卷积,然后再用一个全连接层连接这个3x3卷积输出,这个全连接层我们也可以看做一个3x3卷积层。这样我们就可以用两个3x3卷积级联(叠加)起来代替一个 5x5卷积。

具体如下图所示:(2个 3 ∗ 3 3*3 33 5 ∗ 5 5*5 55 )
在这里插入图片描述
VGGNet的网络结构如下图:
在这里插入图片描述
类型从A到E。重点了解VGG16。也就是图中的类型D。如图中所示,共有13个卷积层,3个全连接层。其全部采用33卷积核,步长为1,和22最大池化核,步长为2。

参数详解

1. Input层

输入图片为 224 ∗ 224 ∗ 3 224*224*3 2242243

2. CONV3-64

经过 ( 3 ∗ 3 ∗ 3 ) ∗ 64 (3*3*3)*64 33364卷积核,生成featuremap为 224 ∗ 224 ∗ 64 224*224*64 22422464

3. CONV3-64

经过 ( 3 ∗ 3 ∗ 64 ) ∗ 64 (3*3*64)*64 336464卷积核,生成featuremap为 224 ∗ 224 ∗ 64 224*224*64 22422464

4. Max pool

经过 ( 2 ∗ 2 ) (2*2) 22max pool核,生成featuremap为 112 ∗ 112 ∗ 64 112*112*64 11211264

5. CONV3-128。

经过 ( 3 ∗ 3 ∗ 64 ) ∗ 128 (3*3*64)*128 3364128卷积核,生成featuremap为 112 ∗ 112 ∗ 128 112*112*128 112112128

6. CONV3-128

经过 ( 3 ∗ 3 ∗ 128 ) ∗ 128 (3*3*128)*128 33128128 卷积,生成featuremap为 112 ∗ 112 ∗ 128 112*112*128 112112128

7. Max pool

经过 ( 2 ∗ 2 ) (2*2) 22 maxpool,生成featuremap为 56 ∗ 56 ∗ 128 56*56*128 5656128

8. CONV3-256

经过 ( 3 ∗ 3 ∗ 128 ) ∗ 256 (3*3*128)*256 33128256卷积核,生成featuremap为 56 ∗ 56 ∗ 256 56*56*256 5656256

9. CONV3-256

经过 ( 3 ∗ 3 ∗ 256 ) ∗ 256 (3*3*256)*256 33256256 卷积核,生成featuremap为 56 ∗ 56 ∗ 256 56*56*256 5656256

10. CONV3-256

经过 ( 3 ∗ 3 ∗ 256 ) ∗ 256 (3*3*256)*256 33256256卷积核,生成featuremap为 56 ∗ 56 ∗ 256 56*56*256 5656256

11. Max pool

经过 ( 2 ∗ 2 ) (2*2) 22maxpool,生成featuremap为 28 ∗ 28 ∗ 256 28*28*256 2828256

12. CONV3-512

经过 ( 3 ∗ 3 ∗ 256 ) ∗ 512 (3*3*256)*512 33256512卷积核,生成featuremap为 28 ∗ 28 ∗ 512 28*28*512 2828512

13. CONV3-512

经过 ( 3 ∗ 3 ∗ 512 ) ∗ 512 (3*3*512)*512 33512512卷积核,生成featuremap为 28 ∗ 28 ∗ 512 28*28*512 2828512

14. CONV3-512

经过 ( 3 ∗ 3 ∗ 512 ) ∗ 512 (3*3*512)*512 33512512 卷积核,生成featuremap为 28 ∗ 28 ∗ 512 28*28*512 2828512

15. Max pool

经过 ( 2 ∗ 2 ) (2*2) 22maxpool,生成featuremap为 14 ∗ 14 ∗ 512 14*14*512 1414512

16. CONV3-512

经过 ( 3 ∗ 3 ∗ 512 ) ∗ 512 (3*3*512)*512 33512512卷积核,生成featuremap为 14 ∗ 14 ∗ 512 14*14*512 1414512

17. CONV3-512

经过 ( 3 ∗ 3 ∗ 512 ) ∗ 512 (3*3*512)*512 33512512卷积核,生成featuremap为 14 ∗ 14 ∗ 512 14*14*512 1414512

18. CONV3-512

经过 ( 3 ∗ 3 ∗ 512 ) ∗ 512 (3*3*512)*512 33512512卷积核,生成featuremap为 14 ∗ 14 ∗ 512 14*14*512 1414512

19. Max pool

经过 2 ∗ 2 2*2 22卷积,生成featuremap为 7 ∗ 7 ∗ 512 7*7*512 77512

20. FC-4096

输入为 7 ∗ 7 ∗ 512 7*7*512 77512,输出为 1 ∗ 1 ∗ 4096 1*1*4096 114096,总参数量为 7 ∗ 7 ∗ 512 ∗ 4096 7*7*512*4096 775124096

21. FC-4096

输入为 1 ∗ 1 ∗ 4096 1*1*4096 114096,输出为 1 ∗ 1 ∗ 4096 1*1*4096 114096,总参数量为 4096 ∗ 4096 4096*4096 40964096

22. FC-1000

输入为 1 ∗ 1 ∗ 4096 1*1*4096 114096,输出为1000,总参数量为 4096 ∗ 1000 4096*1000 40961000

总结
  1. 共包含参数约为550M。

  2. 全部使用33的卷积核和22的最大池化核。

  3. 简化了卷积神经网络的结构。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值