作者:1234 | 来源:互联网 | 2023-09-11 21:11
这里不对GoogleInceptionNet网络进行详细的原理阐述,只是卷积网络的由来以及网络结构和网络参数进行叙述,然后通过tensorflow进行代码实现,参看《tensorf
这里不对Google Inception Net网络进行详细的原理阐述,只是卷积网络的由来以及网络结构和网络参数进行叙述,然后通过tensorflow进行代码实现,参看《tensorflow实战》。
1.Google Inception Net网络叙述
(1)Inception V1
获得2014年ILSVRC比赛分类项目的冠军,top-5错误率6.7%,22层神经网络。与VGGNet同年出现,以较大优势赢得第一名,Inception V1有22层,比alexnet的8层或者vggnet的19层深,但是计算量只有15亿次浮点运算,同时只有500万参数量,仅为alexnet(6000万)的1/12,却可以达到远剩余alexnet的准确率,非常优秀且实用的。Inception V1降低参数量的目的有两点:
①参数越多,模型越庞大,需要提供的数据就越多
②参数越多,耗费的计算资源就越大
Inception V1参数少但是效果好的原因除了模型层数更深、表达能力更强外,还有两点原因:
①去除了最后的全连接层,用全局平均池化层(即将图片尺寸变为1*1)来取代它。全连接层几乎是占据了alexnet和vggnet的90%的参数量,而且会引起过拟合,去除全连接层可以使模型训练加快,并且减轻了过拟合。用全局平均池化来取代全连接的做法借鉴了network in network论文。
②Inception V1精心设计的Inception model提高了参数利用率,这一部分也借鉴了network in network的思想,Inception model类似一个大网络中的小网络,其结构可以反复堆叠在一起形成大网络。不过Inception V1比NIN更增加了分支网络,NIN主要是级联的卷积层和MLPConv层。一般来说,卷积层要提升表达能力的方法就是增加输出通道数,副作用就是计算量增大和过拟合现象。每一个输出通道对应一个滤波器,共享参数,只能提取一类特征,而NIN的MLPConv则允许输出通道之间组合信息,MLPConv等同于普通卷积再连接一个1*1的卷积和ReLU**函数。
(2)Inception model
图1 inception moudle结构图
如图1所示,inception moudle共四个分支,四个分支都用到了1*1,来进行低成本跨通道组织信息:
①第一个分支采用了1*1的卷积,这也是NIN提出的一个重要结构。1*1的卷积是一个非常好的结构,它可以跨通道组织信息,提高网络的表达能力,同时可以对输出通道升维和降维。
②第二个分支先使用了1*1卷积,然后连接3*3卷积,相当于进行了两次特征变换。
③第三个分支类似,先是1*1卷积,然后连接5*5卷积。
④第四个分支先是一个3*3最大池化,1*1卷积。
inception moudle的4个分支在最后通过聚合操作合并(在输出通道数这个维度上聚合),包含了3种不同尺寸的卷积和1个最大池化,增加网络对不同尺度的适应性,这一部分和multi-scale的思想类似。
人的神经元的连接是稀疏的,稀疏结构是非常适合神经网络的结构,尤其是对非常大型、非常深的神经网络,可以减轻过拟合并降低计算量,例如卷积神经网络就是稀疏的连接。inception net的主要目标就是找到最优的稀疏结构单元(inception module),论文中提到其稀疏结构基于hebbian原理。
hebbian原理:神经反射活动的池化与重复会导致神经元连接稳定性的持久性,当两个A和B距离很近,并且A参与了对B重复、持续的兴奋,那么某些代谢变化会导致A将作为能使B兴奋的细胞。总结一下即‘一起发射的神经元会在一起’,学习过程中的刺激会使神经元间的突触强度强度增加。
在整个网络中,会有多个堆叠的inception module,我们希望靠后的inception module可以捕捉到更高阶的抽象特征,因此靠后的inception module的卷积的空间集中度应该逐渐降低,这样可以捕捉到更大面积的特征。因此,越靠后的inception module中,3*3和5*5这两个大面积的卷积核的占比(输出通道)应该更多。
(3)Google Inception Net家族
①2014.9的论文 going deeper with convolutions提出了Inception V1,top-5错误率6.67%。
②2015.2的论文 batch normalization:accelerating deep network training by reducing internal covariate提出了Inception V2,top-5错误率4.8%。
③2015.12的论文 rethinking the inception architecture for computer vision提出的Inception V3,top-5错误率3.5%。
④2016.2的论文 inception-v4,inception-resnet and the impact of residual connections on learning 提出的Inception V4,top-5错误率3.08%。
(4)Inception V2
Inception V2
学习了VGGNet,用两个3*3的卷积代替5*5的大卷积,用来降低参数量和减轻过拟合,还提出了batch normalization(BN)。BN是一个有效的正则化方法,可以让大型卷积网络的训练速度加快多倍,同时收敛后的分类正确率也可以提高很多。BN用于神经网络的某层时,会对每一个mini-batch数据的内部进行(normalization)标准化处理,使输出规范到N(0,1)的正态分布,减少了internal covariate shift(内部神经元分布的改变)。BN的论文指出,传统的深度网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习率解决这个问题。而对于每一层使用BN之后,可有效解决这个问题,学习速率可以增加很多倍,达到之前的准确率的迭代次数只有1/14.训练时间缩短,然后继续训练,达到更高准确率。因为BN某种意义上起到了正则化作用,故可减少或者取消dropout,简化网络结构。同时可去除LRN,彻底对训练样本进行shuffle,减少数据增强过程中对数据的光学畸变。
(5)Inception V3
Inception V3的改进主要有两方面:
①引入了factorization into small convolutions的思想,将一个较大的二维卷积拆分成两个较小的以为卷积,比如将7*7拆分成1*7和7*1卷积,一方面节约参数,加速运算,减少过拟合,同时增加了一层非线性扩展模型表达能力,这种非对称拆分比拆分成几个相同的卷积效果更明显,可以获得更多更丰富的空间特征,增加特征多样性。
图2 将3*3拆分为1*3和3*1卷积
②Inception V3又花了inception module结构,现在inception module有35*35、17*17和8*8三种不同结构,这些只在网络的后部分出现,前部还是普通的卷积层。Inception V3不仅在inception module中使用分支,还在分支中使用分支(8*8结构中),可以说是network in network in network。
](https://img-blog.csdn.net/20170929215931271?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVhbl96aXppemk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图3 inception V3中的三种结构的inception moudle
下面对于inception V3的网络结构参数进行分析:
layer type |
conv size/strides |
input size |
filter number |
output size |
filter type |
conv1 |
3*3*3/2 |
299*299*3 |
32 |
149*149*32 |
valid |
conv2 |
3*3*32/1 |
149*149*32 |
32 |
147*147*32 |
valid |
conv3 |
3*3*32/1 |
147*147*32 |
64 |
147*147*64 |
same |
max pooling1 |
3*3*32/2 |
147*147*64 |
64 |
73*73*64 |
valid |
conv4 |
3*3*64/1 |
73*73*64 |
64 |
71*71*64 |
valid |
conv5 |
3*3*80/2 |
|
80 |
71*71*80 |
192 |
conv6 |
3*3*192/1 |
35*35*192 |
288 |
35*35*288 |
same |
inception modules1 |
3个inception module |
35*35*288 |
|
|
|
inception modules2 |
5个inception module |
17*17*768 |
|
|
|
inception modules3 |
3个inception module |
8*8*1280 |
|
|
|
max pooling2 |
8*8*2048 |
8*8*2048 |
|
2048 |
1*1*2048 |
线性 |
logits |
1*1*2048 |
|
|
|
softmax |
分类输出 |
1*1*1000 |
|
|
|
(4)inception V4
相比V3结合了为微软的ResNet,在下一篇文章将主要讲解ResNet。
2.Google Inception Net网络tensorflow实现
啦啦啦~后续待进啦啦啦~