深度学习&图像处理(深度学习相关文献学习6)

《Rethinking the Inception Architecture for Computer Vision》

1.给出了一些已经被证明有效的用于放大网络的通用准则和优化方法

  • 避免表达瓶颈,特别是在网络靠前的地方。 信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。另外输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。
  • 高维特征更易处理。 高维特征更易区分,会加快训练。
  • 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。比如在进行3x3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。
  • 并行增加宽度和深度达到恒定计算量的最佳改进

2.使用大过滤器尺寸分解卷积(降维

GoogLeNet网络的大部分初始收益来源于大量地使用降维。这可以被视为以计算有效的方式分解卷积的特例。此外,我们可以使用计算和内存节省来增加我们网络的滤波器组的大小,同时保持我们在单个计算机上训练每个模型副本的能力。

可以用2个连续的3x3卷积层(stride=1)组成的小网络来代替单个的5x5卷积层。值得注意的是:这种替代不会造成表达能力的下降;通过对比试验,表明3x3卷积之后添加非线性激活会提高性能。于是,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。实际上,作者发现在网络的前期使用这种分解效果并不好,还有在中度大小的feature map上使用效果才会更好。

3.辅助分类器的效用

GoogLeNet引入了辅助分类器,其目的是想把有效梯度传递回去,从而加快训练。作者发现辅助分类器在训练早期并未导致改善收敛:在两个模型达到高精度之前,有或没有侧头的网络的训练进展看起来几乎相同。接近训练结束时,带有辅助分支的网络开始超越网络的准确性,没有任何辅助分支,并达到略高的平台。相反认为辅助分类器充当正则化器。因为当辅助分类器使用了batch-normalized或dropout时,主分类器效果会更好。

4.使用一些池化操作来减小特征映射的网格大小

pooling层用来减小特征映射的网格大小。为了避免出现表达瓶颈,在使用pooling前常常增加feature map个数。例如k个dxd的feature map,pooling后为k个d/2*d/2。如果想要得到pooling后有2k个feature map,那么在pooling前面的卷积层卷积核就应该有2k个。后者卷积计算量是前者的四分之一。这样在representation上会有瓶颈。可以使用另一种方法,降低更多计算量:使用2个模块P和C.P表示pooling,C表示卷积;它们步长都为2。

5.Inception-V2

(见后面inception V2详解)把7x7卷积替换为3个3x3卷积。包含3个Inception部分。第一部分是35x35x288,使用了2个3x3卷积代替了传统的5x5;第二部分减小了feature map,增多了filters,为17x17x768,使用了nx1->1xn结构;第三部分增多了filter,使用了卷积池化并行结构。网络有42层,但是计算量只有GoogLeNet的2.5倍。

6.通过标签平滑进行模型正则化

ImageNet实验中,K=1000个类,使用u(K)=1/1000和ε=0.1。

7.利用TensorFlow分布式机器学习系统对我们的网络进行了随机梯度训练

batch-size=32,epoch=100。SGD+momentum,momentum=0.9。使用RMSProp,decay=0.9,ε=1.0,效果达到最好。lr=0.045,每2个epoch,衰减0.94。梯度最大阈值=2.0.

8.如何正确处理较低分辨率输入的问题

对于低分辨有图像,使用“高分辨率”receptive field。实践中:1、减小前2个卷积层的stride,2、去掉第一个pooling层。

9.Inception-v3 Inception-V2 识别性能的实验结果

目的:在扩大网络的同时又尽可能地发挥计算性能

10.2014至2016年,GoogLeNet团队发表了多篇关于GoogLeNet的经典论文《Going deeper with convolutions》、《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》、《Rethinking the Inception Architecture for Computer Vision》、《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》,在这些论文中对Inception v1、Inception v2、Inception v3、Inception v4 等思想和技术原理进行了详细的介绍,建议阅读这些论文以全面了解GoogLeNet。

《Going deeper with convolutions》:V1

作者在论文中提出了一种新的名为Inception的深度神经网络结构,并在ILSVRC 2014的classification和detection项目中取得了当时最好的结果。Inception结构主要是改进了网络内部中的计算资源的利用率,作者在固定计算资源的情况下对网络的深度和宽度都进行了增加。另外,Inception结构还遵循了Hebbian原则并增加了多尺度的处理。作者在比赛中使用的是基于这种结构的22层的深度神经网络GooLeNet并取得了非常好的结果。

文章分为两个部分:Inception结构和整体的GoogLeNet网络结构。

(1)每一个卷积层后面都跟着一个ReLUs层,图上省略掉了;

(2)在Inception(4a)和Inception(4d)的后面都跟着一个额外的Softmax层,用以减小“梯度消失”现象。这两个softmax的loss值最终以一个0.3的权重连接到最后的softmax的loss值上,也有多模型融合的意思在里面,具体的链接为:Average Pooling+1*1卷积+ReLU+FC+ReLU+

Dropout+FC+SoftmaxWithLoss,Dropout的系数为0.7,FC层据说是为了方便微调用的;

(3)在Inception(4a)和Inception(4d)后都接着一个Average Pooling层;

(4)最顶端的FC层有1024个单元;

整个网络包含22层(不算池化层),是由Inception模块堆叠而成,其中的ReLU和Dropout图中省略了。除了最顶端的softmax层以外还有两个额外的softmax层,网络中穿插着Max Pooling和Average Pooling,细节网络可参考caffe里的GoogLeNet。

《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》V2

当网络变得更深时,网络参数的微小变化也会被逐渐放大,这使得训练变得越来越复杂,收敛越来越慢。这是一个深度学习领域的接近本质的问题,已经有很多论文提出了解决方法,比如:RELU RELURELU激活函数,ResidualNetwork Residual NetworkResidualNetwork残差网络等等。BN BNBN本质上也是其中一种目前被大量使用的解决方法。BN是一个深度神经网络的训练技巧,它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散”的问题,从而使得深层网络模型的训练更加容易和稳定。

BN的作用就是在深度神经网络训练过程中使得每一层神经网络的输入均保持相同分布。BN是一个非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率可以的到大幅度提高。

BN在用于神经网络某层时,会对每一个mini-batch数据的内部进行标准化处理,使输出规范化到(0,1)的正态分布,减少了Internal Covariate Shift(内部神经元分布的改变)。BN论文指出,传统的深度神经网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用BN之后,我们可以有效的解决这个问题,学习速率可以增大很多倍,达到之间的准确率需要的迭代次数有需要1/14,训练时间大大缩短,并且在达到之间准确率后,可以继续训练。以为BN某种意义上还起到了正则化的作用,所有可以减少或取消Dropout,简化网络结构。

当然,在使用BN时,需要一些调整:

增大学习率并加快学习衰减速度以适应BN规范化后的数据;去除Dropout并减轻L2正则(BN已起到正则化的作用);去除LRN;更彻底地对训练样本进行shuffle;减少数据增强过程中对数据的光学畸变(BN训练更快,每个样本被训练的次数更少,因此真实的样本对训练更有帮助)

《Rethinking the Inception Architecture for Computer Vision》V3

同译文

《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》V4

1.在Inception-resnet层末尾都会有Conv1用来提升维度,这是很必要的,因为我们为了减少Inception的计算量会使用1x1卷积核降维。

2.batch-normalization只在传统的卷积层顶部使用,而不在Inception-ResNet层顶部使用,虽然在所有的层顶部使用效果肯定会更好,但是这样就不能把一个模型放在单GPU(NVidia Kepler)上训练了,会造成显存不够。

3.谷歌研究人员发现如果在Inception-ResNet层的卷积核数量超过1000,会造成网络训练时死亡(输出全部为0),即使使用降低学习率的方法(Resnet提出者提出的),或者添加额外的BN,也无法阻止这一情况发生。

这个问题通过按比例降低残差的方式解决了,即在卷积输出部分乘以一个0.1到0.3的缩放因子。

发布了40 篇原创文章 · 获赞 3 · 访问量 7602

猜你喜欢

转载自blog.csdn.net/OpenSceneGraph/article/details/100676369
今日推荐