EfficientNet,EfficientNetV2
EfficientNet
概括:
在论文中提到,本文提出的EfficientNet-B7在 Imagenet top-1上达到了当年最高准确率84.3%, 与之前准确率最高的GPipe相比,参数数量仅 为其1/8.4,推理速度提升了6.1倍。
下图: 同时探索输入分 辨率,网络的深 度、宽度的影响
图 2:模型缩放,(a) 是一个基础网络示例;(b)-(d) 是传统的缩放方法,只增加一个维度的
宽度、深度或分辨率,(e)是我们提出的复合缩放方法,可统一缩放所有三个维度
四种缩放比较
根据以往的经验,增加网络的深度depth能够得到更加丰 富、复杂的特征并且能够很好的应用到其它任务中。但 网络的深度过深会面临梯度消失,训练困难的问题。
增加网络的width能够获得更高细粒度的特征并且也更容 易训练,但对于width很大而深度较浅的网络往往很难学 习到更深层次的特征。
增加输入网络的图像分辨率能够潜在得获得更高细粒度 的特征模板,但对于非常高的输入分辨率,准确率的增 益也会减小。并且大分辨率图像会增加计算量。
EfficientNet-B0 参数:
这里的output_channel,input-channel对应的都是stage第一层MBConv,剩下的输入和输出都等于#channels
MBConv
在源码中只有使用shortcut连接的MBConv模块才有Dropout层
SE模块如图所示,由一个全局平均池化,两个全连接层组成。第一个全 连接层的节点个数是输入该MBConv特征矩阵channels的1/4,且使用 Swish激活函数。第二个全连接层的节点个数等于Depthwise Conv层输出 的特征矩阵channels,且使用Sigmoid激活函数。
EfficientNet
模块,输入宽度的倍率因子,深度倍率因子,Droupout失活比例(它是从0慢慢增加的),对应最后全连接层前面的dropout层的失活比例
调整宽度就是调整我们卷积核的个数,输出的特征矩阵channel会发生变化
性能
虽然准确率提高了但是非常占CPU因为他的分辨率很大,输入特征矩阵的高和宽都要相应的增加。
EfficientNetV2
概述:
引入Fused-MBConv模块
引入渐进式学习策略(训练更快)
性能:
在EfficientNetV1中作者关注的是准确率,参数数量以及FLOPs(理论计算量小不代表推理速度快),在EfficientNetV2中作者进一步关注模型的训练速度。
EfficientNetV1中存在的问题:
训练图像的尺寸很大时,训练速度非常慢
在网络浅层中使用Depthwise convolutions速度会很慢
同等的放大每个stage是次优的
训练图像的尺寸很大时,训练速度非常慢。针对这个问题一个比较好想到的办法就是降低训练图像的尺寸,之前也有一些文章这么干过。降低训练图像的尺寸不仅能够加快训练速度,还能使用更大的batch_size.
在网络浅层中使用Depthwise convolutions速度会很慢。无法充分利用现有的一些加速器(虽然理论上计算量很小,但实际使用起来并没有想象中那么快)。故引入Fused-MBConv结构。
同等的放大每个stage是次优的。 在EfficientNetV1中,每个stage的深度和宽度都是同等放大的。但每个stage对网络的训练速度以及参数数量的贡献并不相同,所以直接使用同等缩放的策略并不合理。在这篇文章中,作者采用了非均匀的缩放策略来缩放模型。
EfficientNetV2中做出的贡献:
在之前的一些研究中,主要关注的是准确率以及参数数量(注意,参数数量少并不代表推理速度更快)。但在近些年的研究中,开始关注网络的训练速度以及推理速度。
引入新的网络(EfficientNetV2),该网络在训练速度以及参数数量上都优于先前的一些网络。
提出了改进的渐进学习方法,该方法会根据训练图像的尺寸动态调节正则方法(提升训练速度、准确率)
通过实验与先前的一些网络相比,训练速度提升11倍,参数数量减少为1/6.8(这里主要说的是stage6)
EfficientNetV2网络框架:
与EfficientNetV1的不同点:
除了使用MBConv模块,还使用Fused-MBConv模块
会使用较小的expansion ratio
偏向使用更小的kernel_size(3x3)
移除了EfficientNetV1中最后一个步距为1的stage(V1中的stage8)
在每个stage中我们要重复我们的operator N(layers)次将模块重复堆叠几次,stride对应第一层,其他均为1,channels对应stage输出特征矩阵的channel。
这里的dropout层仅指Fused-MBConv模块以及MBConv模块中的dropout层,不包括最后全连接前的dropout层。(减少了过拟合,正则化了,所以准确率提高了)
回顾:
EfficientNetV2其他训练参数:
最大训练尺寸是300,但是采用了渐进式,不会只有300,测试采用固定的384*384,dropout对应的是最后全连接前的dropout层.
注意baseline config并不是V2-S,V2-S在它的基础上生成得到的。
这个只针对有Fused和MB模块的即1-6stage
Progressive Learning渐进学习策略:
训练早期使用较小的训练尺寸以及较弱的正则方法weak regularization,这样网络能够快速的学习到一些简单的表达能力。接着逐渐提升图像尺寸,同时增强正则方法adding stronger regularization。这里所说的regularization包括Dropout,RandAugment以及Mixup。
ps:
Deep Networks with Stochastic Depth(随机深度)
在具有随机深度的 ResNet 上,pr 的线性衰减说明了 po =1 和 pr =0.5 时的线性衰减。概念上,我们将第一个 ResBlock 的输入视为 Ho,它始终处于活动状态。
效果
提升训练速度小幅提升准确率
在EfficientNetV2中drop_prob: 从0-0.2