网络宽度扩充--Inception v1-v4,xception变式学习记录

Inception v1

问题:

(图片来自网络,侵删)

从左到右:狗占据了图片的大部分,狗占据了图片的一部分,狗仅占据了图片的很小一部分 。

由于信息位置的巨大差异,为卷积操作选择合适的卷积核大小就比较困难;

信息分布更全局性的图像偏好较大的卷积核,信息分布比较局部的图像偏好较小的卷积核

非常深的网络更容易过拟合。将梯度更新传输到整个网络是很困难的;

简单地堆叠较大的卷积层非常消耗计算资源。

为什么不能在同一层上采用多个尺寸的过滤器呢?网络本质上会变得更宽(即输入输出特征图channel更大)一些,而不是更深(网络层数)。

解决:

Inception模块,它的目的是设计一种具有优良局部拓扑结构的网络,即对输入图像并行地执行多个卷积运算或池化操作,并将所有输出结果拼接为一个非常深的特征图。因为 1*1、3*3 或 5*5 等不同的卷积运算与池化操作可以获得输入图像的不同信息,增加了特征的多样性,并行处理这些运算并结合所有结果将获得更好的图像表征。

左图为原始图,右图增加了1*1卷积:深度神经网络需要耗费大量计算资源。为了降低算力成本,作者在 3x3 和 5x5 卷积层之前添加额外的 1x1 卷积层,来限制输入信道的数量。尽管添加额外的卷积操作似乎是反直觉的,但是 1x1 卷积比 5x5 卷积要廉价很多,而且输入channel数量减少也有利于降低算力成本。不过注意,1x1 卷积是在最大池化层之后,而不是之前(先提取高层特征在进行降维)。

总结:

卷积层共有的一个功能,可以实现通道方向的降维和增维,至于是降还是增,取决于卷积层的通道数(滤波器个数),在Inception v1中1*1卷积用于降维,减少weights大小和feature map维度;

1*1卷积只有一个参数,相当于对原始feature map做了一个scale,并且这个scale还是训练学出来的,对识别精度有提升;

增加了网络的深度、宽度;

同时使用了1*1,3*3,5*5的卷积,增加了网络对尺度的适应性。

Inception v2

目的:

提升准确度同时降低计算复杂度

降低 特征的representational bottleneck(表征性瓶颈)。其思路是,当卷积不会大幅改变输入尺寸,神经网络的性能会更好。减少维度会造成信息大量损失;

使用更优秀的因子分解方法,卷积才能在计算复杂度上更加高效

亮点:

  1. 在v1的基础上在卷积层与激活函数之间插入BN层:Conv-BN-ReLU,BN层的目的就是使我们的feature map满足均值为0,方差为1的分布规律;
  2. 将v1结构中的5 × 5卷积核替换为2个3 × 3卷积核,这样的连接方式在保持感受野范围的同时又减少了参数量,并且可以避免表达瓶颈,加深非线性表达能力。

网络block:

将 1 个 5x5 卷积分解为 2 个 3x3 卷积操作以提升速度,假设输入和输出通道数都是C,那么5*5的卷积核参数量为25C^2,但是两个3*3的卷积核参数量为18C^2,同时因为使用两个3*3,使得网络层次加深,增加了非线性,提高了模型的表达能力;同时Inception V2 开始引入了BN层。

 Inception v3

主要在v2的基础上,提出了非对称卷积分解(Factorization)。

亮点:

  1. 将7*7分解成两个一维的卷积(1*7,7*1),3*3分解为(1*3,3*1),好处在于既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,即Inception V3就是使用两个1*n和n*1的卷积核取代n*n的卷积核;
  2. 增加网络宽度,网络输入从224*224变为了299*299。

网络block:

一个 3×3 的卷积等价于首先执行一个 1×3 的卷积再执行一个 3×1 的卷积,最左边 5x5 的卷积可以表示为 2 个 3x3 卷积,然后进一步表示为 1x3、3x1 卷积组合。这种非对称的卷积结构拆分,其结果比对称地拆为几个相同的小卷积核效果更明显,可以处理更多、更丰富的空间特征,增加特征多样性。

论文提出的原则:

(一)深度网络的通用设计原则

  1. 避免表达瓶颈,特别是在网络靠前的地方。 信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。比如你上来就来个kernel = 7, stride = 5 ,这样显然不合适。
  2. 另外输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)。
  3. 高维特征更易处理。 高维特征更易区分,会加快训练。
  4. 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。 比如在进行3x3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。
  5. 平衡网络的宽度与深度。

(二)非对称卷积分解

任意n × n的卷积都可以通过1 × n卷积后接n × 1卷积来替代,作者发现在网络的前期使用这种分解效果并不好,还有在中度大小的feature map上使用效果才会更好。(对于mxm大小的feature map,建议m在12到20之间)

(三)降低特征图大小

一般情况下,如果想降低特征图的通道数:

  1. 先池化再作Inception卷积,会导致特征表示遇到瓶颈(特征缺失)
  2. 先Inception卷积再作池化。,正常的缩小,但计算量很大。

为了同时保持特征表示且降低计算量,使用两个并行化的模块来降低计算量(卷积、池化并行执行,再进行合并),即用卷积得到一半的特征图,池化得到一半的特征图,再进行拼接。

Inception v4

随着神经网络的加深,参数越来越多,模型越来越难以训练,训练时间大大增加,容易出现梯度消散问题。

亮点:

  1. Inception模块与残差连接(Residual)的结合来改进V3结构,提出了Inception-ResNet-v1,Inception-ResNet-v2,使得训练加速收敛更快,精度更高;
  2. 设计了更深的Inception-v4版本,效果和Inception-ResNet-v2相当。
  3. 使模块更加一致。作者注意到某些模块有不必要的复杂性,可以通过添加更多一致的模块来提高性能。

Inception Block:

从左到右,在 Inception v4 中使用的 Inception 模块 A、B、C:

 

Inception v4 采用专门的[Reduction Blocks]用于更改网格的宽度和高度 :

 

Inception-ResNet v1 and v2 :

引入残差连接,它将 inception 模块的卷积运算输出添加到输入上。

为了使残差加(shortcut)运算可行,卷积之后的输入和输出必须有相同的维度。

如下图Inception ResNet 中的 Inception 模块 A、B、C(左到右)。注意池化层被残差连接所替代,并在残差加运算之前有额外的 1x1 卷积。

 

 主要 inception 模块的池化运算由残差连接替代。可以在[Reduction Blocks]中找到这些运算。

 Reduction Block A (35x35 尺寸缩小至 17x17 )     Reduction Block B (17x17 尺寸缩小至 8x8 ),Reduction Blocks A 和 Inception v4 中的缩减块相同。

网络结构:

下图是 Inception-ResNet v1 的 stem,底部图像是 Inception v4 和 Inception-ResNet v2 的 stem (即在介绍 Inception 块之前执行的最初一组操作)

Inception v4 和 Inception-ResNet 的网络完整架构如下图所示:

顶部图像是 Inception v4 的布局,底部图像是 Inception-ResNet 的布局。 

Xception (极致的Inception)

通道之间的相关性(1*1卷积)与空间相关性(3*3卷积)最好分开处理。采用Separable Convolution(可分离卷积)来替换原来 Inception-v3中的卷积操作。

发展过程:

Inception V3结构中传统Inception模块:

对 Inception v3 进行简化,去除 Inception v3 的 avg pool 后,输入的下一步操作就都是1×1卷积:

 提取1×1卷积:

先进行普通卷积操作,再对1×1卷积后的每个channel分别进行3×3卷积操作,最后将结果 concat:

Depthwise Separable Convolution 与 Xception 区别:

Xception:

  1. 普通1×1卷积。
  2. 对1×1卷积结果的每个channel,分别进行 3×3卷积操作,并将结果 concat。

Depthwise Separable Convolution(深度可分离卷积):

  1. Depthwise 卷积,对输入的每个channel,分别进行3×3卷积操作,并将结果concat。
  2. Pointwise 卷积,对 Depthwise 卷积中的 concat 结果,进行1×1卷积操作。
     

区别:Xception 先进行1×1卷积,再进行3×3卷积;Depthwise Separable Convolution先进行3×3卷积,再进行1×1卷积。

网络结构:

Xception 的结构基于 ResNet,但是将其中的卷积层换成了Separable Convolution,整个网络被分为了三个部分:Entry,Middle和Exit。

 总结:

Inception v1主要采用了多尺度卷积核、1x1卷积操作。

Inception v2在v1的基础上增加了BN层,使用2个3 × 3小卷积核堆叠替换5 × 5大卷积核;

inception v3进行了卷积分解(将7 × 7分解成两个一维的卷积1 × 7和1 × 7,3 × 3也是一样1 × 3和3 × 1))和特征图降维。

inception v4在v3的基础上融合了Residual模块。

xception在v3的基础上使用了Separable Convolution(可分离卷积)。

参考:

从Inception V1 到 Inception V4 网络结构的变化

Inception Network 各版本演进史 

Xception 

仅为学习记录,侵删! 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎记录学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值