首页 > 其他分享 >经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet

经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet

时间:2023-06-25 12:34:44浏览次数:54  
标签:V1 卷积 BN Resnet Module GoogleNet v1 Inception 网络


论文地址

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%)。

论文翻译

— Going Deeper with Convolutions

— Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate

— Rethinking the Inception Architecture for Computer Vision

— Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_数据

 

经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_池化_02


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_数据_03

最原始的Google-net结构


 


Inception V1

上图是论文中提出的最原始的版本,所有的卷积核都在上一层的所有输出上来做,那5×5的卷积核所需的计算量就太大了,造成了特征图厚度很大。为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低特征图厚度的作用,也就是Inception v1的网络结构。

Google Inception Net首次出现在ILSVRC 2014的比赛中(和VGGNet同年),就以较大优势取得了第一名。那届比赛中的Inception Net通常被称为Inception V1.

它最大的特点是控制了计算量和参数量的同时,获得了非常好的分类性能——top-5错误率6.67%,只有AlexNet的一半不到。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(以下简称NIN)论文。

二、Inception V1中精心设计的Inception Module提高了参数的利用效率,其结构如图1所示。这一部分也借鉴了NIN的思想,形象的解释就是Inception Module本身如同大网络中的一个小网络,其结构可以反复堆叠在一起形成大网络。不过Inception V1比NIN更进一步的是增加了分支网络,NIN则主要是级联的卷积层和MLPConv层。一般来说卷积层要提升表达能力,主要依靠增加输出通道数,但副作用是计算量增大和过拟合。每一个输出通道对应一个滤波器,同一个滤波器共享参数,只能提取一类特征,因此一个输出通道只能做一种特征处理。而NIN中的MLPConv则拥有更强大的能力,允许在输出通道之间组合信息,因此效果明显。可以说,MLPConv基本等效于普通卷积层后再连接1´1的卷积和ReLU激活函数。

Inception Module的基本结构有4个分支:

第一个分支对输入进行1´1的卷积,这其实也是NIN中提出的一个重要结构。1´1的卷积是一个非常优秀的结构,它可以跨通道组织信息提高网络的表达能力,同时可以对输出通道升维和降维。可以看到Inception Module的4个分支都用到了1´1卷积,来进行低成本(计算量比3´3小很多)的跨通道的特征变换。

第二个分支先使用了1´1卷积,然后连接3´3卷积,相当于进行了两次特征变换

第三个分支先是1´1的卷积,然后连接5´5卷积。

第四个分支则是3´3最大池化后直接使用1´1卷积。我们可以发现,有的分支只使用1´1卷积,有的分支使用了其他尺寸的卷积时也会再使用1´1卷积,这是因为1´1卷积的性价比很高,用很小的计算量就能增加一层特征变换和非线性化。Inception Module的4个分支在最后通过一个聚合操作合并(在输出通道数这个维度上聚合)。Inception Module中包含了3种不同尺寸的卷积和1个最大池化,增加了网络对不同尺度的适应性,这一部分和Multi-Scale的思想类似。早期计算机视觉的研究中,受灵长类神经视觉系统的启发,Serre使用不同尺寸的Gabor滤波器处理不同尺寸的图片,Inception V1借鉴了这种思想。Inception V1的论文中指出,Inception Module可以让网络的深度和宽度高效率地扩充,提升准确率且不致于过拟合。


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_池化_04

图1  Inception Module结构图

 

人脑神经元的连接是稀疏的,因此研究者认为大型神经网络的合理的连接方式应该也是稀疏的。稀疏结构是非常适合神经网络的一种结构,尤其是对非常大型、非常深的神经网络,可以减轻过拟合并降低计算量,例如卷积神经网络就是稀疏的连接。Inception Net的主要目标就是找到最优的稀疏结构单元(即Inception Module),论文中提到其稀疏结构基于Hebbian原理。

这里简单解释一下Hebbian原理:

神经反射活动的持续与重复会导致神经元连接稳定性的持久提升,当两个神经元细胞A和B距离很近,并且A参与了对B重复、持续的兴奋,那么某些代谢变化会导致A将作为能使B兴奋的细胞。总结一下即“一起发射的神经元会连在一起”(Cells that fire together, wire together),学习过程中的刺激会使神经元间的突触强度增加。

Hebbian原理启发,另一篇文章Provable Bounds for Learning Some Deep Representations提出,如果数据集的概率分布可以被一个很大很稀疏的神经网络所表达,那么构筑这个网络的最佳方法是逐层构筑网络:将上一层高度相关(correlated)的节点聚类,并将聚类出来的每一个小簇(cluster)连接到一起,如图11所示。这个相关性高的节点应该被连接在一起的结论,即是从神经网络的角度对Hebbian原理有效性的证明。


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_卷积_05

图11  将高度相关的节点连接在一起,形成稀疏网络

 

因此一个“好”的稀疏结构,应该是符合Hebbian原理的,我们应该把相关性高的一簇神经元节点连接在一起。在普通的数据集中,这可能需要对神经元节点聚类,但是在图片数据中,天然的就是临近区域的数据相关性高,因此相邻的像素点被卷积操作连接在一起。而我们可能有多个卷积核,在同一空间位置但在不同通道的卷积核的输出结果相关性极高。因此,一个1´1的卷积就可以很自然地把这些相关性很高的、在同一个空间位置但是不同通道的特征连接在一起,这就是为什么1´1卷积这么频繁地被应用到Inception Net中的原因。1´1卷积所连接的节点的相关性是最高的,而稍微大一点尺寸的卷积,比如3´3、5´5的卷积所连接的节点相关性也很高,因此也可以适当地使用一些大尺寸的卷积,增加多样性(diversity)。最后Inception Module通过4个分支中不同尺寸的1´1、3´3、5´5等小型卷积将相关性很高的节点连接在一起,就完成了其设计初衷,构建出了很高效的符合Hebbian原理的稀疏结构。

在Inception Module中,通常1´1卷积的比例(输出通道数占比)最高,3´3卷积和5´5卷积稍低。而在整个网络中,会有多个堆叠的Inception Module,我们希望靠后的Inception Module可以捕捉更高阶的抽象特征,因此靠后的Inception Module的卷积的空间集中度应该逐渐降低,这样可以捕获更大面积的特征。因此,越靠后的Inception Module中,3´3和5´5这两个大面积的卷积核的占比(输出通道数)应该更多。

Inception Net有22层深,除了最后一层的输出,其中间节点的分类效果也很好。因此在Inception Net中,还使用到了辅助分类节点(auxiliary classifiers),即将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中。这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个Inception Net的训练很有裨益。

当年的Inception V1还是跑在TensorFlow的前辈DistBelief上的,并且只运行在CPU上。当时使用了异步的SGD训练,学习速率每迭代8个epoch降低4%。同时,Inception V1也使用了Multi-Scale、Multi-Crop等数据增强方法,并在不同的采样数据上训练了7个模型进行融合,得到了最后的ILSVRC 2014的比赛成绩——top-5错误率6.67%。


Inception V2:

加入了BN层,减少了Internal Covariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯; 学习VGG用2个3x3的conv替代inception模块中的5x5,既降低了参数数量,也加速计算;使用3×3的已经很小了,那么更小的2×2呢?2×2虽然能使得参数进一步降低,但是不如另一种方式更加有效,那就是Asymmetric方式,即使用1×3和3×1两种来代替3×3的卷积核。这种结构在前几层效果不太好,但对特征图大小为12~20的中间层效果明显。

 

Christian 和他的团队都是非常高产的研究人员。2015 年 2 月,Batch-normalized Inception 被引入作为 Inception V2

Batch-normalization 在一层的输出上计算所有特征映射的均值和标准差,并且使用这些值规范化它们的响应。这相当于数据「增白(whitening)」,因此使得所有神经图(neural maps)在同样范围有响应,而且是零均值。在下一层不需要从输入数据中学习 offset 时,这有助于训练,还能重点关注如何最好的结合这些特征。

 

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,训练时间大大缩短。而达到之前的准确率后,可以继续训练,并最终取得远超于Inception V1模型的性能——top-5错误率4.8%,已经优于人眼水平。因为BN某种意义上还起到了正则化的作用,所以可以减少或者取消Dropout,简化网络结构。

当然,只是单纯地使用BN获得的增益还不明显,还需要一些相应的调整:增大学习速率并加快学习衰减速度以适用BN规范化后的数据去除Dropout并减轻L2正则(因BN已起到正则化的作用);去除LRN;更彻底地对训练样本进行shuffle;减少数据增强过程中对数据的光学畸变(因为BN训练更快,每个样本被训练的次数更少,因此更真实的样本对训练更有帮助)。在使用了这些措施后,Inception V2在训练达到Inception V1的准确率时快了14倍,并且模型在收敛时的准确率上限更高。

 


Inception-V3:

 v3一个最重要的改进是分解(Factorization),将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,还有值得注意的地方是网络输入从224x224变为了299x299,更加精细设计了35x35/17x17/8x8的模块。

2015 年 12 月,该团队发布 Inception 模块和类似架构的一个新版本V3。该论文更好地解释了原始的 GoogLeNet 架构,在设计选择上给出了更多的细节。原始思路如下

  • 通过谨慎建筑网络,平衡深度与宽度,从而最大化进入网络的信息流。在每次池化之前,增加特征映射。
  • 当深度增加时,网络层的深度或者特征的数量也系统性的增加。
  • 使用每一层深度增加在下一层之前增加特征的结合。

而Inception V3网络则主要有两方面的改造:

一、引入了Factorization into small convolutions的思想,将一个较大的二维卷积拆成两个较小的一维卷积,比如将7´7卷积拆成1´7卷积和7´1卷积,或者将3´3卷积拆成1´3卷积和3´1卷积,如图2所示。

  • 一方面节约了大量参数,加速运算并减轻了过拟合(比将7´7卷积拆成1´7卷积和7´1卷积,比拆成3个3´3卷积更节约参数),
  • 一方面增加了一层非线性扩展模型表达能力。论文中指出,这种非对称的卷积结构拆分,其结果比对称地拆为几个相同的小卷积核效果更明显,可以处理更多、更丰富的空间特征,增加特征多样性。


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_池化_06

图 2  将一个3´3卷积拆成1´3卷积和3´1卷积

 

只使用 3×3 的卷积,可能的情况下给定的 5×5 和 7×7 过滤器能分成多个 3×3。

二、Inception V3优化了Inception Module的结构,现在Inception Module有35´35、17´17和8´8三种不同结构,如图3所示。这些Inception Module只在网络的后部出现,前部还是普通的卷积层。并且Inception V3除了在Inception Module中使用分支,还在分支中使用了分支(8´8的结构中),可以说是Network In Network In Network。


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_数据_07

图3  Inception V3中三种结构的Inception Module

 

在进行 inception 计算的同时,Inception 模块也能通过提供池化降低数据的大小。这基本类似于在运行一个卷积的时候并行一个简单的池化层:


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_数据_08


Inception 也使用一个池化层和 softmax 作为最后的分类器。


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_卷积_09

表1  Inception V3网络结构


Inception V4:

v4研究了Inception模块结合Residual Connection能不能有改进?发现ResNet的结构可以极大地加速训练,同时性能也有提升,得到一个Inception-ResNet v2网络,同时还设计了一个更深更优化的Inception v4模型,能达到与Inception-ResNet v2相媲美的性能。 

Inception V4相比V3主要是结合了微软的ResNet.


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_数据_10

图1 inception v4 网络结构图

 


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_卷积_11

图2 Inception-resnet-v1的结构图

 


经典网络结构GoogleNet之Inception-v1 v2 v3 v4 Resnet_卷积_12

图3 Inception-resnet-v2的结构图

 

 

作者们在训练的过程中发现,如果通道数超过1000,那么Inception-resnet等网络都会开始变得不稳定,并且过早的就“死掉了”,即在迭代几万次之后,平均池化的前面一层就会生成很多的0值。作者们通过调低学习率,增加BN都没有任何改善。

 

不过他们发现如果在将残差汇入之前,对残差进行缩小,可以让模型稳定训练,值通常选择[0,1.0.3]。作者们认为如果通道数特别多的话,即使以特别低的学习率(0.00001)训练也无法让模型收敛,如果之后再用大学习率,那么就会轻松的破坏掉之前的成果。然而简单的缩小残差的输出值有助于学习的稳定,即使进行了简单的缩小,那么对最终结果也造成不了多大的损失,反而有助于稳定训练。

 

标签:V1,卷积,BN,Resnet,Module,GoogleNet,v1,Inception,网络
From: https://blog.51cto.com/u_12667998/6544793

相关文章

  • TensorFlow10.4 卷积神经网络-ResNet与DenseNet及ResNet实战
    1ResNet我们是实验发现在我们堆叠更多的网络结构的时候,我们并不能又一个很好的结果,就是它网络层次变多了之后他会产生一个多层的loss的堆叠,使得梯度爆炸,或者梯度弥散。然后我们想了一个办法,就是我们比如说设置了一个30层的神经网络,我们在差也不能比22层的差。就是我们设置了一......
  • TensorFlow10.3 卷积神经网络-经典卷积网络(VGG,GoogLeNet)
    LeNet-5这个是5层的,3个c+s,然后有两个全连接层。AlexNet这里有8(5+3)层。就是之前的技术没有现在的好,所以它用了两块GTX580,然后让你它的模型分成两块,然后在两块显卡中跑。很好的把显存给分开来了。VGG之前都是用\(11*11\)的窗口,然后它用了\(3*3\)的窗口,这个\(3*3\)的窗......
  • 高压(3000V)IXBH10N300HV、IXYN50N170CV1离散式超轻穿通型(XPT™)高电压IGBT器件
    IXBH10N300HV是一款3000V高压反向导通(BiMOSFET™)IGBT器件,它将MOSFET和IGBT的优势相结合。这些高压器件的饱和电压和内置二极管的正向电压降均具有正电压温度系数,因此非常适合用于并联运行。“自由”内置体二极管用作保护二极管,为器件关断期间的感性负载电流提供替代路径,防止......
  • 从实验中学习ResNet模型:在视频处理任务中取得显著进展
    目录引言技术原理及概念实现步骤与流程示例与应用优化与改进结论与展望"从实验中学习ResNet模型:在视频处理任务中取得显著进展"在视频处理任务中,ResNet模型已经取得了显著进展。ResNet模型是一种深度残差块神经网络,它是由ResNet系列模型发展而来的,被广泛用于图像和视频处理领域。在......
  • 西门子1200与变频器Modbus RTU通讯(博途V16)西门子1200与变频器通讯(博图V16):
    西门子1200与变频器ModbusRTU通讯(博途V16)西门子1200与变频器通讯(博图V16):4台ABBS510的写频率,读输出频率、电流、报警;1台施耐德ATV12的写启停、复位、频率;读状态、输出频率;1台三菱FRD700写启停、频率,读状态、输出频率、电压、电流;1台台达MS300的写启停、频率,读状态、输出频率、......
  • 恒压供水仿真/1200plc/博途v15可直接仿真运行,包含离散被控对象,手动干扰,随机干扰,pid参
    恒压供水仿真/1200plc/博途v15可直接仿真运行,包含离散被控对象,手动干扰,随机干扰,pid参数可调。ID:6966596086480080......
  • 小宾短视频监控宝v1.21发布,支持抖音作者的实时监控和自动下载
     随着互联网的发展,短视频已经成为了人们生活中不可或缺的一部分。无论是个人还是企业,都可以通过短视频来展示自己的才华和产品。然而,随之而来的是短视频内容的监管问题。为了帮助工会组织和个人主播更好地管理和监控短视频内容,我们推出了一款名为小宾短视频监控宝的软件工具。......
  • 云原生周刊:Dapr v1.11 发布
    开源项目推荐KamajiKamaji可以大规模地部署和运行Kubernetes控制平面,而只需承担一小部分操作负担。Kamaji的特别之处在于,控制平面组件是在一个单一的pod中运行,而不是在专用机器中运行。这种解决方案使运行多个控制平面的成本更低,更容易部署和操作。RobustaKRRRobustaK......
  • Turndown 源码分析:二、规则`commonmark-ruiles.js` REV1
    import{repeat}from'./utilities'varrules={}//段落rules.paragraph={filter:'p',replacement:function(content){//前后加两个换行return'\n\n'+content+'\n\n'}}//换行rules.lineBrea......
  • 《面试1v1》Redis持久化
    《面试1v1》连载中...面试官:Redis是内存数据库,数据存放在内存中,当Redis服务重启数据会丢失,那么Redis如何保证数据的持久化?候选人:Redis提供两种持久化方案:RDB(RedisDataBase)和AOF(AppendOnlyFile)。面试官:说说RDB吧,它的工作原理是什么?候选人:RDB的工作原理很简单,就......