赞
踩
1.Inception结构
咱们知道当做卷积的时候,是选择1*1的卷积、3*3、5*5、MaxPooling还是Multiple1*1,到底用哪个比较好,对于Inception块来说,这几个卷积都选择了 ,要兼容并蓄,设计了不同的通道,使用不同窗口大小的卷积层,将4个路径从不同层面抽取信息,然后在输出通道维度合并。
其主要的思想是设计了一个inception模块,并通过不断复制这些inception模块来提高网络的深度和宽度,不过GooLeNet主要还是在深度上扩展这些inception模块。
左图(a)为Inception模块的初始版本,之前学过的网络架构都是卷积层串行的结构,但是Inception结构是并行结构,也就是说将我们的输入同时输入到四个分支中进行处理,处理后再将我们所得到的特征矩阵按深度进行拼接,得到我们的输出特征矩阵。即每一个inception模块中有四个并行通道,并在通道结束时进行concat。
1x1 conv在文章中主要是用来进行维度的降低以避免计算瓶颈。
其还在前面的网络层一些分支上加入了额外的softmax loss以避免梯度消失问题
通过四个分支可以得到不同尺度的特征矩阵。而且,我们每个分支所得到的特征矩阵的高和宽必须相同,否则就无法按深度进行拼接。
然后我们再看图(b),相对比加了三个1*1的卷积,意思是加了一个降维的功能。
四个并行通道:
1x1的conv:首先输入先经过1*1的卷积层;通道数是64;主要是用来融合多通道特征。借鉴了【Network in Network】,可以进行输入feature map的降维升维而不会太过损失输入的空间信息;
1x1conv followed by 3x3 conv:然后第二条路,首先通过1*1的卷积层对通道数做变换,降低通道数来控制模型的复杂度,然后再通过3*3的卷积层,pad=1,使得输入和输出的高宽一样;3x3 conv增大feature map的感受野。
1x1 conv followed by 5x5 conv:是首先经过1*1降维,然后经过5*5的卷积,pad=2,使得输入和输出等宽;5x5 conv进一步增大feature map 的感受野,并通过1x1 conv进行维度的更改;
3x3 max pooling followed by 1x1 conv:pad=1,然后再加入1*1的卷积;最大池化输出局部最强响应。作者认为pooling层虽然会损失空间信息,但是因为其已经有效的应用在很多领域,这证明了其有效性,所以加了一个并行通道,并同时通过1x1 conv来更改其输出维度。
最后在输出的通道上做合并concatenation(跟输入等同高宽)
跟单独的3*3和5*5卷积层相比,Inception块有更少的参数个数和计算复杂度。
为什么1*1卷积能降维,看下图
所以加入1*1卷积的目的就是为了减少特征矩阵的深度,从而减少参数,进而减少计算量。
2.Inception v3(改进Inception模块)
Inception V3是Inception的改进把一个5*5的卷积分成两个3*3的卷积;把一个7*7卷积分成三个3*3卷积;还可以对3*3的卷积分成1*3和3*1的卷积,进行不对称的空间可分离的分解,这种分解既可以沿深度方向分解(Inception Module B),也可以沿宽度方向分解(Inception Module C),沿宽度方向分解的话,他可以增加表示的维度,即channel数目。
Inception V3模型如图
3个A模块、4个B模块、2个C模块,这几个模块之间使用下采样连接。
3.InceptionV4模型
InceptionV4模型是在InceptionV3模型的基础上进一步的改进,同时增加Inception模块的个数。
stem部分展开就是右半部分的图;V:表示不使用padding;不加V的话就是same padding,就是使得输入和输出的feature map的大小一样;所有图中没有标记“V”的卷积使用same的填充原则,意即其输出网格与输入的尺寸正好匹配。使用“V”标记的卷积使用valid的填充原则,意即每个单元输入块全部包含在前几层中,同时输出激活图(output activation map)的网格尺寸也相应会减少。这个stem既是Inception V4的stem也是Inception ResNet的stem部分;
在stem部分输入是299*299*3,输出是35*35*384的feature value;然后将这个特征图输入到4个InceptionA模块里,它的输入和输出大小是一样的;然后再经过ReductionA模块进行降采样,得到17*17*1024的特征图;然后再输入到7个InceptionB模块组成的层里,这层输入和输出的大小都是一样的;然后经过下采样B,将feature map输出为8*8*1536;然后再经过InceptionC模块,输入和输出的大小仍然是一样的,不变;然后我们再进行平均池化,就会变成1*1*1536的特征图,即有1536个通道,我们每个通道选一个平均数来作为她们的代表,也就是Global Avarage Pooling,巧妙地取代了全连接层,从而减少大量的参数量和计算量,就得到1536个参数,经过drpoout处理,传到1000个神经元的softmax线性分类层,得到1000个线性分类的分数,然后再用softmax对这个线性分数进行归一化处理,变成0-1之间的概率,并且求和为1,就得到整个模型的分类结果。
InceptionA、B、C输入和输出的大小不变,整个过程中是通过ReductionA、B、C来降采样的(改变特征图的大小)
整体InceptionV4模块
3.InceptionV4的三种Inception模块
这里的平均池化窗口就是3*3的
A模块就是把第四个分支的5*5卷积换成了两个3*3的卷积;
B模块就是把第三个和第四个分支的7*7卷积换成了不对称的1*7和7*1卷积;
C模块是在宽度方向进行展开,第三个分支,将3*3的卷积分成宽度方向上1*3和3*1的卷积,作用是扩展通道的维度。
4.Inception-ResNet
包括Inception-ResNet-V1和Inception-ResNet-V2
将Inception模块和深度残差网络ResNet结合即将Inception模块和Residual connection联系,提出了三种包含残差连接的Inception模块,残差连接显著加快了训练收敛速度。
每个Inception模块之后使用不带激活函数的1*1卷积升维,扩展filter Bank匹配输入维度。
对于带残差的Inception模块,在相加层之后不做BN减少计算量,避免参数爆炸。
Inception-ResNet-V1总体网络结构
V:表示不使用padding;不加V的话就是same padding,就是使得输入和输出的feature map的大小一样;这个stem既是Inception V4的stem也是Inception ResNet的stem部分;
Inception-ResNet-V2总体网络结构
首先输入299*299*3的特征图,经过stem后得到35*35*256的特征图,(InceptionResNet输入和输出的特征图的高宽和通道数都一样,)经过5个InceptionResNetA模块还是得到35*35*256的特征图,然后再经过ReductionA模块,这个模块里3*3的卷积的stride是2,目的是将输入特征图的高宽降低为原来的一半,实现下采样的功能,然后输出17*17*256的特征图,以此类推将feature map输出为8*8*1782;然后我们再进行平均池化,就会变成1*1*1536的特征图,即有1536个通道,我们每个通道选一个平均数来作为她们的代表,也就是Global Avarage Pooling,巧妙地取代了全连接层,从而减少大量的参数量和计算量,就得到1782个参数,经过drpoout处理,传到1000个神经元的softmax线性分类层,得到1000个线性分类的分数,然后再用softmax对这个线性分数进行归一化处理,变成0-1之间的概率,并且求和为1,就得到整个模型的分类结果。
5.Inception-ResNet V1的三种Inception模块
就是把Inception处理后的结果和原始的输入叠加在一起,来取代了原来的concation层
在Residual-Inception网络中,我们使用比原始Inception模块计算量更低的Inception模块。每个Inception块后紧连接着滤波层(没有激活函数的1×1卷积)以进行维度变换,以实现输入的匹配。这样补偿了在Inception块中的维度降低。
6.Inception-ResNet V2的三种Inception模块
以Inception-ResNet A模块为例,分两个部分,即残差连接部分,和Inception模块部分,Inception模块部分由三个分支级联,首先第一个分支是1*1的卷积,用来执行特征压缩,减少通道数,从而降低计算量。这有助于保留低级特征。第二个分支是首先使用1x1的卷积核来减少通道数,然后接一个3x3的卷积核来捕获局部特征。第三个分支类似于第二个分支,这个分支也使用1x1的卷积核进行特征压缩,然后接两个连续的3x3的卷积核,以增加特征的非线性表示能力。最后三个分支经过没有激活函数的1×1卷积以进行维度变换,以实现输入的匹配。然后将得到的特征图与残差连接得到的特征图高宽和通道数一样。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。