convolution backbone network——EfficientNet解读

本文系统研究卷积神经网络模型缩放,提出新的复合缩放方法,使用复合系数均匀缩放网络深度、宽度和分辨率。先搜索基准网络,再平衡三者参数自动调整模型。实验表明,该方法在相同精度下参数量更少,速度更快,迁移学习效果也很好。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

单位: 谷歌
摘要: 卷积神经网络(ConvNets)通常是在固定资源预算下开发的,如果有更多可用资源,则可以按比例放大以获得更高的准确性。在本文中,我们系统地研究模型缩放并确定仔细平衡网络深度,宽度和分辨率可以带来更好的性能。基于这一观察,我们提出了一种新的缩放方法,该方法使用简单但高效的复合系数均匀地缩放深度/宽度/分辨率的所有尺寸。我们证明了这种方法在扩展MobileNets和ResNet方面的有效性。

整体框架: 首先使用NAS搜索了一个基准网络,然后再在基准网络的基础上进行深度,宽度和分辨率的平衡。谷歌最近的mobilenetV3,autoargument(自动图像增强)都是使用自动搜索策略。因为在深度学习中有太多技巧性,或者太多的组合。如何组合起来使模型在任务中最优是现在bone net设计的方向。而这个过程中搜索的算法应该是最关键的。(谷歌并未开源)

EfficientNet-B7(参数最多的模型)比现在最优的convnet参数少了8.4x,速度快了6.1x提升还是很明显的。
在这里插入图片描述

在这里插入图片描述
主要思路就是在基准网络的基础上通过a,b,c,三个参数,控制宽度,深度和分辨率进行网络模型的自动调整。

复合模型缩放

CNN网络的每层中的width,depth,分辨率都是可以调整的。比如resnet中其中大部分模块都是相同的。所以对网络每层的三个参数都可以随意调整,则整个搜索优化空间太大。同时,在网络训练的过程中不好统一feature map的尺寸。于是作者限定三个参数同时等比例的缩放
注意: 这里有计算资源的限制。因为很多论文从单一方面进行宽度,深度和分辨率的增大就能得到精度的提高。所以要有计算资源的限制。
在这里插入图片描述
上面的r就是缩放参数。个人觉得三个参数同时缩放就是为了控制feature map的尺寸不规则变化的问题。

为啥要同时同方向的缩放三个参数。从下图可以得到结论。所以是实验探究出来的。
在这里插入图片描述
在本文中,我们提出了一种新的复合缩放方法,它使用复合系数φ以原则方式统一地缩放网络宽度,深度和分辨率。
在这里插入图片描述
其中α,β,γ是可以通过小网格搜索确定的常数,就是网格搜索确定的。在本文中,我们约束α·β2·γ2≈2使得对于任何新的φ,总FLOPS将大约3增加2φ,就是以2为底的指数方式增加参数量。

基准网络

利用多目标神经架构搜索来优化准确性和FLOPS,从而开发基线网络。架构搜索应该是最关键的。 基准网络很像MnasNet(有机会好好看看)。EfficientNet-B0的参数量更多。
在这里插入图片描述

参数搜索

  • 步骤1:我们首先确定φ= 1,假设有两倍的可用源,并根据公式2和3进行α,β,γ的小网格搜索。特别是,我们发现EfficientNet-B0的最佳值是α= 1.2,β= 1.1,γ= 1.15,受α·β2·γ2≈2的约束。
  • 步骤2:然后我们将α,β,γ固定为常数,并使用公式3扩展具有不同φ的基线网络,以获得EfficientNet-B1至B7(表2中的细节)。
    总结: 就是有GPU任性,不知道所有这些工作需要多少GPU的计算时间。

结果

在这里插入图片描述
确实在相同精度下,模型的参数量更少了。

  • 将宽度,深度,分辨率提高用于已有网络。
    在这里插入图片描述
    发现随着宽度,深度,分辨率的提高。模型的精度会提高,同时模型的参数量也提高了。
    后面就是各种实验正面模型的好了。我们重点看一下迁移学习的部分。论文中也将EfficientNet用于其他数据集,并和现有的SOT算法的结果进行了比较。
    在这里插入图片描述
    一句话: 效果很好,放心的用吧。
    在这里插入图片描述
    这幅图就是要说我缩放的策略牛逼,比那些在现有模型上随机缩放的效果好。

总结

效果好,精度高,速度快。放心迁移学习呗。

### EfficientNet 为深度学习模型主干的相关信息 EfficientNet 是一种基于复合缩放方法设计的卷积神经网络架构,旨在通过平衡网络宽度、深度以及分辨率来实现更高的计算效率和精度[^1]。具体而言,EfficientNet 使用了一种称为 **compound scaling method** 的技术,这种方法允许在增加模型容量的同时保持资源的有效利用。 #### 架构特点 EfficientNet 的核心思想在于其扩展策略不同于传统的单一维度扩展(如仅增加层数或通道数)。它引入了一个新的参数 \( \phi \),用于协调地调整网络的宽度、深度和输入图像大小。这种多维扩展方式使得 EfficientNet 能够在相同的 FLOPs 下达到更好的性能表现。 以下是 EfficientNet 的一些主要特性: - **可变规模版本**: EfficientNet 提供了一系列预定义的变体(B0 至 B7),每种变体对应不同的复杂度级别。 - **MBConv 块**: 它的基础构建模块是 MBConv(Mobile Inverted Bottleneck Convolution),这是一种轻量级且高效的卷积操形式。 ```python import timm model = timm.create_model('efficientnet_b0', pretrained=True) print(model) ``` 上述代码展示了如何使用 `timm` 库快速加载一个预训练的 EfficientNet-B0 模型实例[^2]。 #### 在 Fast-ReID 中的应用 Fast-ReID 是一个人重识别框架,其中可以灵活替换不同类型的骨干网络。如果希望将 EfficientNet 集成到该框架中,则可以通过修改配置文件或者直接编辑源码完成此过程。例如,在默认实现路径 `fast-reid/fastreid/engine/defaults.py` 中提到的方法 `build_model()` 可被覆盖以支持自定义模型结构: ```python from fastreid.modeling import build_model from efficientnet_pytorch import EfficientNet class CustomModelBuilder: @classmethod def build_efficientnet_backbone(cls, cfg): base_model = EfficientNet.from_pretrained('efficientnet-b0') return base_model cfg.MODEL.BACKBONE.NAME = 'efficientnet' cfg.MODEL.BACKBONE.PRETRAIN = True custom_model = CustomModelBuilder.build_efficientnet_backbone(cfg) logger.info("Custom Model:\n{}".format(custom_model)) ``` 这里展示的是如何创建一个新的类并定义静态方法来自动生成带有 EfficientNet 主干的新模型对象。 #### 性能优势 相比其他主流 CNN 结构(如 ResNet 或 DenseNet),EfficientNet 展现出更优的权衡关系——即能够在较低硬件需求下获得更高准确率的结果。这得益于它的创新设计理念及其自动化调参机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值