EfficientNet(2019):基于复合缩放的自动化架构搜索高效网络!
EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
EfficientNet:重新思考卷积神经网络的模型扩展
论文下载地址: https://arxiv.org/abs/1905.11946
学习笔记参考了这位大佬:https://blog.csdn.net/qq_37541097/article/details/114434046
1、前言
EfficientNet 由谷歌研究人员在 2019 年提出。它是一种基于 AutoAugment、AutoML 和 MobileNet 的架构,旨在提高模型的效率和性能。EfficientNet 的主要特点是它采用了一种新的缩放方法,即“复合缩放方法”,这种方法同时考虑了模型的深度、宽度和分辨率。
作者主要是用NAS(Neural Architecture Search)技术来搜索网络参数的合理化配置,分别是:输入图像分辨率resolution,网络深度depth以及通道宽度width。此外,NAS技术非常昂贵,没有庞大的算力是搜索不了的。
在以往提出的一些新型网络结构,基本都是通过改变上述3个参数中的一个来提升网络的性能,比如ResNet 将层数从18堆叠到200层,GPipe 将 CNN baseline扩展4倍,而这篇论文是同时探索这三个参数之间的组合对网络性能的影响(可见谷歌有多么有钱有算力了)。
作者提出, EfficientNet-B7 在 ImageNet 上实现了最先进的 84.3% top-1 准确率,同时比现有最好的卷积网络小 8.4 倍,推理速度快 6.1 倍。 EfficientNet 也能很好地进行迁移,并在 CIFAR-100 (91.7%)、Flowers (98.8%) 和其他 3 个迁移学习数据集上实现了最先进的准确度,参数数量也少了一个数量级。EfficientNet-B7 超越了现有最好的 GPipe 精度(2018),并且使用的参数减少了 8.4 倍,推理运行速度提高了 6.1 倍。 与广泛使用的 ResNet-50 (2016) 相比,两者的 FLOPS 相似,EfficientNet-B4 将 top-1 准确率从 76.3% 提高到 83.0% (+6.7%)。 源代码位于https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet。
EfficientNet使用了MobileNetv2的MBConv作为模型主干网络,同时还用了SENet的squeeze and excitationt通道注意力对网络结构进行优化。EfficientNet-B0网络框架如下表所示(B1-B7是在B0的基础上修改Resolution,Channels以及Layers)
网络被分成了9个Stage,Stage1是一个kernel_size=为3x3,stride=2的普通卷积层(包含BN和激活函数Swish),Stage2~Stage8都是在重复堆叠MBConv结构(最后一列的Layers表示该Stage重复MBConv结构多少次),Stage9由一个普通的1x1的卷积层(包含BN和激活函数Swish)一个平均池化层和一个全连接层组成。表格中每个MBConv后会跟一个数字1或6,这里的1或6是倍率因子n,即MBConv中第一个1x1的卷积层会将输入特征矩阵的channels扩充为n倍,其中k3x3或k5x5表示MBConv中Depthwise Conv所采用的卷积核大小。Channels表示通过该Stage后的输出通道数。
2、MBConv结构
MBConv其实就是MobileNetV3中的InvertedResidualBlock(倒置残差结构),但也有些许区别。一个是采用的激活函数不一样(EfficientNet的MBConv中使用的都是Swish激活函数),另一个是在每个MBConv中都加入了SE(Squeeze-and-Excitation)模块。
如上图所示,MBConv结构主要由一个1x1的Conv(升维作用,包含BN和Swish),一个 kernel_size=kxk 的Depthwise Conv卷积(包含BN和Swish),一个SE模块,一个1x1的普通卷积(降维作用,包含BN),一个Droupout层构成。其中第一个升维的1x1卷积层的卷积核个数是输入通道数channel的n倍,n ∈ { 1,6 } 。
当n = 1 时,表示不需要升维,所以Stage2中的MBConv结构没有1x1卷积层。
3、复合缩放
在本文中,作者提出了一种新的复合缩放方法,该方法使用复合系数 φ 以原则性的方式统一缩放网络宽度w、深度d和分辨率r:
depth: d = αφ
width: w = βφ
resolution: r = γφ
s.t. α · β2 · γ2 ≈ 2 α ≥ 1, β ≥ 1, γ ≥ 1
其中α、β、γ是通过小网格搜索确定的常数。 直观上,φ是用户指定的系数,控制有多少资源可用于模型缩放,而α、β、γ分别指定如何将这些额外资源分配给网络宽度、深度和分辨率。
图 2. 模型缩放。 (a) 是基线网络示例; (b)-(d) 是传统的缩放,仅增加网络宽度、深度或分辨率三者中的一个。 (e) 是作者提出的复合缩放方法,它以固定比率均匀缩放所有三个维度。
例如,如果想要使用 2N 倍的计算资源,那么可以简单地将网络深度增加 αN,宽度增加 βN,图像大小增加 γN,其中 α、β、γ 是由网格搜索在原来的小模型上确定的常数系数。
4、EfficientNet在ImageNet 上的性能结果
5、EfficientNet 发展历程
1. EfficientNet-B0 (2019): 这是最初的 EfficientNet 模型,它通过系统的模型缩放方法,展示了在图像分类任务上的性能提升。
2. EfficientNet-B1 到 B7 (2019): 随着 B0 的成功,研究人员继续扩展 EfficientNet 家族,推出了 B1 到 B7 版本。这些模型通过复合缩放方法,逐渐增加模型的规模,以适应不同的计算预算和性能需求。
3. EfficientNet-EdgeTPU (2019): 针对边缘设备优化的版本,专为在资源受限的设备上运行而设计。
4. EfficientNetV2 (2021): 在 2021 年,谷歌研究人员提出了 EfficientNetV2,这是对原始 EfficientNet 的改进。EfficientNetV2 采用了一种新的缩放方法,并且通过改进的网络结构和训练策略,进一步提高了模型的效率和性能。
5. EfficientNet 其他变体: 随着时间的推移,社区和研究人员还开发了 EfficientNet 的许多其他变体,以适应不同的任务和应用场景,如目标检测、语义分割等。
EfficientNet 系列模型因其在保持高性能的同时显著降低计算成本而受到广泛关注,它们在各种视觉任务中都取得了优异的性能。随着深度学习领域的不断发展,EfficientNet 也在不断地进化和改进。