GoogleNet系列笔记

GoogLeNet系列笔记包括:

  1. Inception v1
  2. Batch Normalization
  3. Inception v2,Inception v3
  4. Inception v4,Inception resnet v1,Inception resnet v2

总结

网络 架构 参数 特点1 特点2 特点3 特点4 特点5
VGG 架构简洁高效 计算成本高,是v1的数十倍
Inception v1 架构复杂,更宽更深 参数少,计算成本低 1* 1降维减少计算量,在concate前用大卷积核汇总特征 并行pool 多尺度卷积 分支分类器,防止梯度消失
Inception v2 提出三个新的架构 图3:两个小卷积替换大卷积(3x3代替5x5) ; 图5:小卷积再分解(先1x3再3x1代替3x3); 图6:并行非对称卷积(1x3,3x1并行),仅用在最后 证明 Relu 比起 linear激活函数效果好一点
Inception v3 42层网络,计算量是v1的2.5倍 inception-v2结构中的分支分类器上加上BN
Inception v4
Inception resnet v1
Inception resnet v2

1.Inception v1

2014年提出Inception 结构 ,这个架构的主要特点是提高了网络内部计算资源的利用率,其中在ILSVRC14提交中应用的一个特例被称为GoogLeNet,一个22层(加池化层27层)的深度网络。
作者采用一系列不同大小的滤波器来处理多尺度,但Inception结构中所有的滤波器是学习到的,且Inception结构重复了很多次,得到了一个22层的深度模型,即GoogLeNet,如表1所示。
作者主要借鉴了以下两个网络的方法:

  1. NIN中添加额外的1* 1的卷积层(每个1* 1卷积后都紧跟Relu激活函数),增加网络深度的方法,目的主要是用它们来作为降维模块来移除 computational bottlenecks(即使前后网络通道数一致)。这不仅允许了深度的增加,而且允许网络的宽度增加但没有明显的性能损失。
  2. 借鉴了R-CNN,分两阶段,第一阶段利用分割边框检测,第二阶段结合边框利用CNN分类。
表1:

表1中,

  • #3x3 reduce和#5x5 reduce分别表示3x3和5x5的卷积前,缩减层中1x1滤波器的个数;
  • pool proj表示嵌入的max-pooling之后的投影层中1x1滤波器的个数;
  • 缩减层和投影层都要用ReLU;

Inception架构

Inception架构主要是想通过设计一个稀疏的网络结构,利用稀疏矩阵聚类为较为密集的子矩阵来提高计算性能。既有优秀的网络性能,又能节约计算资源。
随着Inception架构的堆叠,特征越到后来越集中,所以感受野的尺寸也应增大才能获得较全面的特征,所以网络后面会使用3×3和5×5卷积汇总特征。
在具有大量滤波器的卷积层上,即使加适量的5* 5卷积也可能造成几个阶段内计算量爆炸,所以Inception架构一直使用1×1卷积用来降维,以减少计算量的增加,保持信息的稀疏,只有在concate之前,才会使用大的卷积压缩信息,获取更完整的图像特征的信息。
1* 1的卷积用处:降维,引入非线性(非线性激活函数ReLu)

图1:

所有的卷积都使用了ReLu作为激活函数,
作者发现平均池化比全连接,提高了大约top-1 %0.6的准确率,作者使用平均池化时保留了dropout的使用。

图2:

作者添加了辅助分类器(图2)
目的:提高初始阶段分类器的判别能力,同时克服梯度消失的问题。
实验证实:影响较小,约0.5,只需一个辅助分类器就可以出同样效果,多了没用
结构如下:

  • 一个滤波器大小5×5,步长为3的平均池化层,具有128个滤波器的1×1卷积。
  • 一个全连接层,具有1024个单元和修正线性激活。
  • dropout70%。
  • 使用softmax损失的线性层作为分类器。

同时Inception中提出新的图像裁剪方式,虽然效果稍好,但实际应用中不必要使用这个方法。

2. Batch Normalization

李宏毅课程

batch normalization 的目的是,原先如这个图所示,网络训练就如几个小人传话筒,只有三个话筒都接起来才能传声,起初左边的小人告诉中间的小人手放低点,右边的小人告诉中间的手放高些,一次迭代后,小人照做了,还是无法连接。所以batch normalization的目的就是不让整个数据集一起变化学习,而一个batch一个batch的学习,防止整体学习出错,无法拟合的情况。

一个batch作为一个整体输入到网络中去训练,它的均值和方差会迭代的,是其中某一层的输出,网络训练的时候,输出也会改变,进而改变均值方差,再进而影响Zi的值。Zi与均值方差相关。
batch normalization 的使用前提是这个batch要够大,如果batch很小的话,它不能代表一个整体的均值和方差,使用这个值做Normalization就会有很大偏差

3. Inception v2-v3

作者将v2的版本的修改的集大成者的模型称为v3

提出修改Inception 网络的通用设计原则:
  1. 避免出现特征bottlenecks,尤其是在网络的早期,即早期卷积核的尺寸不要有太夸张的变化,Pooling也是一种,会导致很多特征丢失。
  2. 更多相互独立的特征聚集在一起收敛的越快。
  3. Inception模块在concate之前先利用卷积降维,各分支是高度相关的,所以降维可以在减少计算量的同时保证图像特征不会有很多损失。
  4. 平衡网络的宽度和深度。通过平衡每个阶段的滤波器数量和网络的深度可以达到网络的最佳性能。网络的宽度和深度并行增加,则可以达到恒定计算量的最佳改进。
后续作者根据上述原则改进网络的到下列网络框架,也证实了上述原则的合理性。

图3即将 Inception v1 按照原则3,将5* 5卷积用两个3* 3代替。

图3:

使用并行结构优化pooling ,解决规则1中提到的特征瓶颈的问题,解决方法是在pooling前用1x1卷积把特征数加倍(见图8右侧),这种加倍可以理解加入了冗余的特征,然后再作Pooling就只是把冗余的信息重新去掉????, 没有减少信息量。这种方法有很好的效果但因为加入了1x1卷积会极大的增大计算量。替代的方法是使用两个并行的支路,一路1x1卷积,由于特征维度没有加倍计算量相比之前减少了一倍,一路是Pooling,最后再在特征维度拼合到一起(见图9)。这种方法有很好的效果,又没有增大计算量。

图8:
图9:
图4,图5使用非对称卷积

通过1×n卷积和后面接一个n×1卷积可以替换任何n×n卷积,并且随着n增长,节省更多计算成本,作者通过测试发现非对称卷积用在网络中靠中间的层级才有较好的效果(特别是feature map的大小在12x12~20x20之间时)
作者发现将大卷积分解为非对称卷积比2* 2 卷积效果更好。如图4所示,使用3×1卷积后接一个1×3卷积,相当于以与3×3卷积相同的感受野滑动两层网络,但计算量少很多。

图4:
图5:

图6这种架构被用于最粗糙的(8×8)网格,以提升高维表示,如原则2所建议的那样。我们仅在最粗糙的网格上使用了此解决方案,因为这是产生高维度的地方,稀疏表示是最重要的,因为与空间聚合相比,局部处理(1×1 卷积)的比率增加。?????

图6:

提出Inception v2 架构,证明只要遵照那四个原则修改网络,变化网络的质量就相对稳定。Inception v2 结构(图7)就是将图3,图5,图6组合在一个网络架构中。inception-v2的结构中如果Auxiliary Classifier上加上BN,就成了inception-v3

图7:
辅助分类器

辅助分类网络最初的动机是将有用的梯度推向较低层,使其立即有用,并通过抵抗非常深的网络中的消失梯度问题来提高训练过程中的收敛,事实上它对训练前期无任何改善,在接近训练结束的时候开始超越没有辅助分支的网络,推翻Inception v1中的说法,证明这些辅助分类器对低级特征的演变可能没有什么作用,而是起着正则化的作用,正则化作用的原因没说。

使用Label Smoothing来对网络输出进行正则化。

整个训练过程收敛时Softmax的正确分类的输入是无穷大,这是一种极其理想的情况,如果让所有的输入都产生这种极其理想的输出,就会造成overfit。为了克服overfit,防止最终出来的正确分类p(k)=1,在输出p(k)时加了个参数delta,生成新的q’(k),再用它替换原本的q(k)来计算loss。

4. Inception v4-ResNet-v1-ResNet-v2

待补充。。。

5. 说明

bottleneck :瓶颈,表征瓶颈个人理解为卷积核突然变很大,导致图像信息损失很多。

参考文献

  1. GoogLeNet论文翻译——中英文对照
  2. Inception-V3论文翻译——中英文对照
  3. Inception-v2/v3结构解析(原创)

猜你喜欢

转载自blog.csdn.net/duanmuji/article/details/83587170
今日推荐