EfficientNet简述

2023-11-11 22:41
文章标签 简述 efficientnet

本文主要是介绍EfficientNet简述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

  目前提升卷积神经网络的准确性方法大多是扩大其规模,比如从网络深度、网络宽度或者图像分辨率中选择,通常是缩放中一个方面进行提高,比如ResNet-18到ResNet-200就是使用了更多层,尽管可以任意缩放两个或三个维度,但是任意缩放都需要繁琐的手动调整,并且仍然能产生次优的精度和效率。
  因此本文研究并重新思考扩展网络的过程,研究表明,平衡网络宽度、深度和分辨率的所有维度是至关重要的,这种平衡可以通过简单的固定比例缩放来实现。在此基础上,本文提出了一种简单而有效的复合模型扩张方法(compound scaling method),有别于传统的任意标度方法,本文均匀地缩放网络的宽度、深度以及一组固定尺度系数的分辨率。例如,如果想使用2N倍的计算资源,那么可以简单地将网络深度增加a的N次方,宽度增加B的N次方,图像大小增加γ的N次方,其中a, B,γ是由在原始小模型上进行小网格搜索所确定的常系数。下图就说明了本文方法与传统方法区别:
在这里插入图片描述
  它从三个维度均扩大了,但是扩大多少,就是通过作者提出来的复合模型扩张方法结合神经结构搜索技术获得的。
  实际效果如下图:
在这里插入图片描述

相关工作

  (1)精度上:自从AlexNet赢得了2012年ImageNet竞赛的冠军,ConvNets开始通过更大的模型来增加准确率,GoogleNet赢得了2014年ImageNet的冠军,达到了74.8%的top-1准确率,模型大约6.8M参数量,SENet获得了2017年ImageNet的冠军达到了82.7%的top-1准确率使用了145M参数量。最近GPipe进一步把ImageNet最好的top-1验证集合的准确率推到了84.3%,使用了557M的参数量:这模型太大了,只有通过把网络分开并将每个部分扩展到不同的加速器,才能使用专门的管道并行库进行训练。而这些模型主要是为了ImageNet设计的,最近的研究表明更好的ImageNet模型在一系列迁移学习的数据集合以及其他计算机视觉任务比如目标检测.上表现更好,虽然更高的准确率对于许多应用来说是决定性的,但是目前已经碰到了硬件内存的限制,所以进一步提升准确率需要更好的效率。
  (2)效率上:深的ConvNets经常参数过量。模型压缩是一个普遍的方法来降低模型的大小,通过准确率来换取效率。随着移动电话变得普及,手工制作有效率的移动大小的ConvNets也很普遍,比如SqueezeNets ,MobileNets和 ShuffleNets。最近神经网络结构搜索在设计高效的移动端大小的ConvNets上越来越流行,通过调节网络的宽度,深度,卷积核的类型和尺寸达到了甚至比手工制作的移动端ConvNets更好的效率。而如何把这些技术应用到更大的模型上是不清楚的,因为更大的模型有更大的设计空间和更昂贵的调节成本。这篇文章的目的是研究超过最高水平准确率的超级大ConvNets的效率。为了达到这个目标,我们继续模型的缩放。
  (3)模型缩放:对于不同的资源限制下,有很多种方式去缩放一个ConvNet:ResNet可以通过调整网络的深度来缩小或放大,而WideResNet和 MobileNets能通过网络的宽度来缩放。公认的更大的输入图像尺寸带来更多运算量的同时能够帮助提升准确率。尽管之前的研究已经表明了网络的深度和宽度对于ConvNets的表达力都是重要的,但是仍遗留了一个开放性的问题怎样有效的去放缩一个ConvNet来达到更好的效率和准确率呢。本文系统地实验并且经验性的研究了ConvNet全部不到三个维度(网络的宽度,深度和图像分辨率)的缩放。

方法

  整个卷积网络由 k 个卷积层组成,可以表示为:
在这里插入图片描述
  但是在实际中,通常会将多个结构相同的卷积层称为一个stage,例如ResNet有5个 stage,每个stage中的卷积层结构相同(除了第一层为降采样层),以stage为单位可以将卷积网络 N 表示为:
在这里插入图片描述
  优化目标就是在资源有限的情况下,要最大化 Accuracy, 优化目标的公式表达如下:
在这里插入图片描述
  作者发现,更大的网络具有更大的宽度、深度或分辨率,往往可以获得更高的精度,但精度增益在达到80%后会迅速饱和,这表明了只对单一维度进行扩张的局限性,实验结果如下图:
在这里插入图片描述
  作者指出,模型扩张的各个维度之间并不是完全独立的,比如说,对于更大的分辨率图像,应该使用更深、更宽的网络,这就意味着需要平衡各个扩张维度,而不是在单一维度张扩张。
  如下图所示,直线上的每个点表示具有不同宽度系数(w)的模型。第一个基线网络(d=1.0,r=1.0)有18个卷积层,分辨率224x224,而最后一个基线(d=2.0,r=1.3)有36个卷积层,分辨率299x299。这个图说明了一个问题,为了追求更好的精度和效率,在ConvNet缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的。
在这里插入图片描述
  所以本文提出了复合扩张方法,这也是文章核心的地方,(α,β,γ)是我们需要求解的一组参数,如下图公式,带约束的最优参数求解。(α,β,γ)分别衡量着depth, width和 resolution的比重,其中 β和γ在约束上会有平方,是因为如果增加宽度或分辨率两倍,其计算量是增加四倍,但是增加深度两倍,其计算量只会增加两倍。
在这里插入图片描述
  求解方式:
  1.固定公式中的φ=1,然后通过网格搜索(grid search)得出最优的α、β、γ,得出最基本的模型EfficientNet-B0.
  2.固定α、β、γ的值,使用不同的φ,得到EfficientNet-B1, …, EfficientNet-B7
  φ的大小对应着消耗资源的大小,相当于:
  ①当φ=1时,得出了一个最小的最优基础模型;
  ②增大φ时,相当于对基模型三个维度同时扩展,模型变大,性能也会提升,资源消耗也变大。
  作者指明,由于模型缩放不会改变基线网络中的层,但是拥有一个良好的基线网络也是至关重要的。作者使用现有的基础网络来评估缩放方法,但是为了更好地证明缩放方法的有效性,还开发了一种新的mobile-size baseline,称为 EfficientNet,EfficientNet-B0的网络结构如下 (类似于 MobileNetV2和MnasNet):
在这里插入图片描述

实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

  这篇论文针对目前卷积神经网络的优化的普遍方法提出结合的思想,认为目前常用的加宽网络、加深网络和增加分辨率这3种常用的提升网络性能的方法之间不应该是相互独立的,可以对三个方面同时进行缩放处理,通过简单的固定比例缩放来实现平衡以达到性能的提升。因此提出了复合模型扩张算法,通过综合优化网络宽度、网络深度和分辨率达到指标提升的目的,能够达到准确率指标和现有分类网络相似的情况下,大大减少模型参数量和计算量。从实验来看,EfficientNet模型要比已有 CNN 模型准确率更高、效率更高,其参数量和FLOPS都下降了一个数量级。

这篇关于EfficientNet简述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393316

相关文章

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

【Java String】简述String类比较和常量池内存分析

一、引出正题 String 类型对象进行比较时,我们一般使用 equals() 的方式进行值比较,但是有时候可能会出现 == 对象比较的方式。 在使用 == 比较的时候,往往是和String在JVM内存存储结构有关,这也引起了部分同学使用时的错误,那么接下来我们来详细分析一下此问题。 二、举例说明 1、new String("xx")都是在堆上创建字符串对象。当调用 intern() 方

轻量级模型解读——EfficientNet系列

EfficientNet自2019年谷歌提出以来,经历了三个版本,2019EfficientNet ——> 2020EfficientNet-Lite——> 2021EfficientNetv2 文章目录 1、EfficientNet2、EfficientNetv23、EfficientNet-Lite 对于EfficientNet和EfficientNetv2的解读可

手动依赖注入;AutowireCapableBeanFactory简述

概述 spring boot虽然帮我们把bean的依赖注入基本都默认配置好了;但有些时候,业务场景中一些对象实例不在spring生命周期中,但是对象中的属性又需要被spring依赖注入(属性在spring容器管理中); 比如一些servle的filter类,其中的一些属性又需要依赖一些spring的bean 我遇到的情况是这样的,实现FactoryBean接口获取到的自定义bean因为没有参

MQTT.js 简述

MQTT.js 简述 简介 MQTT 是一种轻量级的消息传输协议,常用于物联网(IoT)设备间的通信。mqtt.js 是一个 JavaScript 库,支持在 Node.js 和浏览器中使用,用于通过 MQTT 协议与 MQTT Broker 进行通信。 安装 在 Node.js 中,可以通过以下命令安装: npm install mqtt --save 在浏览器中使用: <s

简述Struts2中Redirect和Dispatcher的区别

Redirect 把一个 HTTP 返回码(譬如 SUCCESS)以及返回的页面位置一起重新发给 Web  服务器,然后由 Web 服务器产生一个新的 HTTP 请求,就会产生一个新的线程, 保存在原来 Action 执行的线程中的数据,就无法访问,所以无法显示出“hello  world!” ; 而 Dispatcher 则不同,它只是发出内部的资源请求,只需要一个 HTTP 请求, 就

简述CCS平面线性光源

光源在机器视觉系统中起着重要作用,不同环境、场景及应用合适光源都不一样,今天我们来看看LFX3-PT系列平面线性光源。它是最适合检测镜面物体的凹凸,外壳小巧的光源。备有根据检测条件可选的2种线间距。1mm型(型号末尾:A)、2mm型(型号末尾:B)。 特点: 1、将导光板表面的印刷图案从点状更改为线状,可对同轴光源难以检测出的镜面物体上,“不明显的凹凸”进行提取并实现成像。

解释 JVM 的内存模型(堆、栈、方法区等),并简述如何通过调整 JVM 参数来优化应用程序的性能?

JVM(Java Virtual Machine)的内存模型是 Java 程序运行的基础,理解它的各个组成部分对于优化应用程序的性能至关重要。 JVM 的内存模型主要包括以下几个部分: 堆(Heap)栈(Stack)方法区(Method Area)程序计数器(Program Counter Register)本地方法栈(Native Method Stack) 1. 堆(Heap) 堆是

自制efficientnet网络

用到的技术cnn,残差连接,全局池化注意力机制,点卷积切换通道,深度卷积提取空间特征 import os os.environ["KERAS_BACKEND"] = "tensorflow"  # @param ["tensorflow", "jax", "torch"] os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import matplotlib.pyp

【5G PHY】5G循环前缀(CP)设计思路简述

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕:        5G/6G协议讲解        高级C语言讲解        Rust语言讲解 文章目录 5G循环前缀设计一、CP的作用二、如何确