含并行连接的网络(GoogLeNet)

一、模型背景

GoogLeNet,全称为GoogleNet,是谷歌工程师设计的一种深度神经网络结构,于2014年在ImageNet大规模视觉挑战赛(ILSVRC-2014)上取得了分类任务的冠军,并以6.65%的错误率力压其他模型。该模型的名字“GoogLeNet”是对早期由Yann LeCun设计的卷积神经网络LeNet的致敬。

二、Inception块

GoogLeNet是第一次做到快100层卷积层(第一个做到超过100层的卷积神经网络)
GoogLeNet模型的主要特点在于其深度和宽度的结合,以及采用了一种名为Inception的核心子网络结构。Inception模块的设计思想是通过并行使用多个卷积和池化操作来提取特征,然后将这些操作的输出进行通道维度的拼接,从而捕捉不同尺度的特征。
在这里插入图片描述

1.Inception块过程

如图,Inception块通过四条路经从不同的层面抽取信息,然后在输出通道维合并:
前三条路径使用窗口大小为1×1、3×3、5 ×5的卷积层,从不同的空间大小中提取信息。中间两条路径在输入上执行1 ×1卷积,以减少通道数,从而降低模型的复杂性。第四条路经使用3 × 3最大汇聚层,然后使用1 × 1卷积层来改变通道数。
这四条路径都使用合适的填充来使输入与输出的高和宽一致,最后我们将每条线路的输出在通道维度上连结,并构成Inception块的输出。在Inception块中,通常调整的超参数是每层输出通道数。

具体过程:
输入被复制成了四块(之前所遇到的都是一条路直接到最后):
第一条路先进入一个1×1的卷积层再输出
第二条路先通过一个1×1的卷积层对通道做变换,再通过一个pad为1的3 ×3的卷积层,使得输入和输出的高宽相同
第三条路先通过一个1 ×1的卷积层对通道数做变换,不改变高宽,但是再通过一个pad为2的5×5的卷积层提取空间信息特征,输入和输出还是等高等宽的
第四条路先通过一个pad为1的3×3的最大池化层,再通过一个1×1的卷积层
因为这四条路都没有改变高宽,最后用一个contact的操作将它们的输出合并起来(不是将四张图片放在一起形成一张更大的图片,而是在输出的通道数上做合并,最终的输出和输入等同高宽,但是输出的通道数更多,因为是四条路输出的通道数合并在一起的),因此,输出的高宽是不变的,改变的只有它的通道数
在这个结构中,基本上各种形状的卷积层和最大池化层等都有了,所以就不用过多地纠结于卷积层尺寸的选择

2.Inception块的通道数

通道数变化在Inception块中,高宽是不变的,所以上图中只标出了通道数的变化:
通过第一条路时,经过第一个卷积层直接将通道数压缩到了64
经过第二条路时,先经过一个1×1的卷积层将通道数从192压缩到了96(* ?*为什么要压缩到96?因为想要把后一层3×3的卷积层的输入数降低,通过降低输入通道数来降低模型的复杂度,因为模型复杂度可以认为是可以学习的参数的个数,卷积层可学习参数的个数是输入通道×输出通道×卷积核的大小(3 × 3),所以这里要将192压缩为96),然后再经过一个3 ×3的卷积层后,通道数增加到128
经过第三条路时,先通过一个3 ×3的卷积层将通道数压缩到16,再经过一个5 ×5的卷积层(这里分配的通道数并不多)增加到32
经过第四条路时,首先经过一个3×3的最大池化层,这里并不会改变通道数,然后经过一个1×1的卷积层之后,通道数直接由192降到了32
总的来说,上图中标记为白色的卷积层可以认为是用来改变通道数的,要么改变输入要么改变输出;标记为蓝色的卷积层可以认为是用来抽取信息的,第1条路中标记为蓝色的卷积层不抽取空间信息,只抽取通道信息,第2、3条路中标记为蓝色的卷积层是用来抽取空间信息的,第4条路中标记为蓝色的最大池化层也是用来抽取空间信息的,增强鲁棒性
经过Inception块之后,最后输出的通道数由输入的192变成64+128+32+32=256,每个通道都会识别一些特定的模型,所以应该把重要的通道数留给重要的通道(这里的意思应该是类似于:输入进来之后被复制成了四份,然后经过四条不同的路,最终进行通道数的合并,在输出通道数固定的情况下,四条路的最终输出的通道数是不一样的,所以可以将有限的输出通道数分配给不同的路径,比如上图中给第二条路分配了128个输出通道数,接近一半的通道数都留给了3 * 3的卷积层,因为3 * 3的卷积层计算量不大同时能够很好地抽取信息,剩下通道数的一半分给了1 * 1的卷积层,然后再剩下给第3、4条路平分)

3.为什么要用Inception块?

在这里插入图片描述
假设输入是64,输出是128,如果使用Inception的话,模型参数大概有0.16M
如果只用3 × 3的卷积而不用Inception块的话,模型参数大概有0.44M
如果只用5×5的卷积而不用Inception块的话,模型参数大概有1.22M(卷积窗口变大了,所以模型参数变多)
由此可以得出,Inception通过各种块的设计以及通过1 * 1的卷积层来降低通道数,从而使得参数数量和计算量大幅度减少
Inception的优点:不仅增加了网络结构的多样性(有大量不同设置的卷积层),而且参数数量和计算量都显著降低了

三、GoogleNet架构

在这里插入图片描述
GoogLeNet一共使用了9个Inception块和全局平均汇聚层(避免在最后使用全连接层)的堆叠来生成估计值,第一个模块类似于AlexNet和LeNet,Inception块的组合从VGG继承
Inception块之间的最大汇聚层可以降低维度
GoogLeNet由大量的Inception块组成,如上图所示,总共分成了5个stage(有点类似于VGG,高宽减半一次为1个stage)
GoogLeNet中总共有9个Inception块,主要集中在stage 3(2个)、stage 4(5个)和stage 5(2个)
GoogLeNet中大量地使用了1 × 1的卷积,把它当成全连接来使用,来做通道数的变换(受到NiN的影响)
GoogLeNet中也使用了全局平均池化层
因为最后没有设置Inception块使得最后的输出通道数等于标签的类别数,所以在倒数第二步做完全局平均池化之后会拿到一个长为通道数的向量,最后再通过一个全连接层映射到标号所要的类别数(这里并没有强求最后的输出通道数一定要等于标签类别数,做了简化,更加灵活)

1、Stage 1

第一个模块使用了一个卷积层和一个最大池化层:
第一个模块先使用了一个64通道7×7的卷积层(stride = 2,padding = 3)
然后使用了一个3 × 3的最大池化层(stride = 2,padding = 1)

2、Stage 2

第二个模块使用了两个卷积层和一个最大池化层:
第一个卷积层是64通道1 × 1的卷积层
第二个卷积层是192通道的3×3的卷积层(stride = 3,padding = 1)
最大池化层的窗口大小为3 × 3(stride = 2,padding = 1)
在这里插入图片描述

3.Stage 3

第三个模块串联了两个完整的Inception块和一个最大池化层:
第一个Inception块的输出通道数为:64 + 128 + 32 + 32 = 256,四条路经之间的输出通道数量比是:64 :128 :32 :32 = 2 :4 :1 :1。第二条和第三条路径首先将输入通道的数量分别由192减少到96和16,然后连接第二个卷积层(Inception(192,64,(96,128),(16,32),32))
第二个Inception块的输出通道数增加到128 + 192 + 96 + 64 = 480,四条路经之间的输出通道数量比为128 :192 :96 :64 = 4 :6 :3 :2,第二条和第三条路径首先将输入通道数量分别由256减少到128和32,然后连接第二个卷积层(Inception(256,128,(128,192),(32,96),64))
最大池化层的窗口大小为3 × 3(stride = 2,padding = 1)
在这里插入图片描述

4.Stage 4与Stage 5

第四个模块串联了5个Inception块和一个最大池化层
第五个模块中有两个Inception块和一个输出层

四、Inception的变种

1.Inception-V3:修改了Inception块
替换5×5为多个3×3卷积层
替换5 × 5为多个1 × 7和7 × 1卷积层
替换3 × 3为多个1 × 3和3×1卷积层
右图为原始的Inception块,左边为Inception V3块
右图为原始的Inception块,左边为Inception V3块
右图为原始的Inception块,左边为Inception V3块
Inception V3的模型效果如上图所示
图中X轴表示处理的速度(log分布,越往右越快),从图中可以看出Inception V3还算是比较慢,每秒钟大概能够跑800个样本(仅仅是预测,训练的话会更慢)
图中Y轴表示精度,可以看出Inception V3的精度还是比较高的,在ImageNet上的精度达到了0.8左右,虽然它所占用的内存比较多(图中园区那的大小表示所占用的内存的大小),运算比较慢,但是它的精度是完胜VGG的(和现在的一些网络比较起来其实没有太大的优势,但是当年的效果还是很好的)
Inception V3的模型效果如上图所示
图中X轴表示处理的速度(log分布,越往右越快),从图中可以看出Inception V3还算是比较慢,每秒钟大概能够跑800个样本(仅仅是预测,训练的话会更慢)
图中Y轴表示精度,可以看出Inception V3的精度还是比较高的,在ImageNet上的精度达到了0.8左右,虽然它所占用的内存比较多(图中园区那的大小表示所占用的内存的大小),运算比较慢,但是它的精度是完胜VGG的(和现在的一些网络比较起来其实没有太大的优势,但是当年的效果还是很好的)

五、GoogLeNet模型的优缺点

1.Inception块有四条不同超参数的卷积层和池化层的路来抽取不同的信息(等价于一个有4条路径的子网络,通过不同窗口形状的卷积层和最大汇聚层来并行抽取信息,并使用1 * 1卷积层减少每像素级别上的通道维数从而降低模型的复杂度),它的一个主要优点是模型参数小,计算复杂度低
深度增加:GoogLeNet模型将网络深度增加到了22层,相比于之前的模型如AlexNet,这种更深的网络结构有助于提升模型的非线性表达能力,从而可能提高模型的性能。
轻量化:尽管深度增加,但GoogLeNet通过引入Inception模块和采用稀疏连接的策略,有效地减少了模型的参数量和计算量,使得模型在保持高性能的同时,更加轻量化。
2.GoogLeNet的问题是特别复杂,通道数的设置没有一定的选择依据,以及内部构造比较奇怪,这也是GoogLeNet不那么受欢迎的原因所在
较高的计算复杂度:虽然GoogLeNet通过Inception模块和稀疏连接的策略有效减少了参数量和计算量,但其整体结构仍然相对复杂。这意味着在训练和推理过程中,相比一些更简单的模型,GoogLeNet可能需要更多的计算资源,包括GPU或TPU等高性能硬件。
内存占用大:由于模型深度较深且包含多个Inception模块,GoogLeNet在运行时可能会占用较大的内存空间。这可能对硬件资源有限的设备造成挑战,限制了模型在某些场景下的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值