EfficientNet:对模型深度、宽度和分辨率的混合缩放策略

论文:https://arxiv.org/abs/1905.11946

项目:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

Pytorch实现:EfficientNet模型Pytorch版本具体实现-CSDN博客

一、概况

1、概述:

这张图可以清晰明了的显示EfficientNet 的卓越表现,一句话总结:更小的模型、更快的速度、更好的效果。

2、模型发展脉络:

卷积神经网络(ConvNets)通常在固定的资源预算下开发,然后在有更多资源可用的情况下进行扩展以获得更好的准确性。对于模型的扩展,通常来说有三条思路:模型的深度、模型的宽度、模型处理图像的分辨率。在以前的工作中,通常只扩展三个维度中的一个——深度、宽度和图像大小。尽管可以任意扩展两个或三个维度,但任意扩展需要繁琐的手动调整,并且通常会产生次优的准确性和效率。扩展的主要困难在于最优的三个维度相互依赖,并且在不同的资源约束下值会变化。

扩展模型的深度:模型扩展最先想到扩展深度,直觉是更深的卷积网络可以捕获更丰富和更复杂的特征,并且在新任务上泛化良好。然而,更深的网络也更难训练,因为梯度消失问题(可以通过批量归一化和残差连接缓解,但非常深的网络的准确性增益减少)。

扩展模型的宽度:扩展网络宽度通常用于小型模型,更宽的网络倾向于能够捕获更细粒度的特征,并且更容易训练。然而,极宽但浅的网络在捕获高级特征方面存在困难。

提高模型处理的图像分辨率:有了更高分辨率的输入图像,卷积网络可以潜在地捕获更细粒度的模式。

单独提高上述三个方面中的一个会出现上图的结果:可以发现不管是提高深度、宽度、还是分辨率都可以提高模型的性能,这一点已经在实际中有了ResNet就是扩展模型深度的代表,MobileNet就是扩展模型宽度的代表。

但是从上图我们可以发现单独提高 深度、宽度、还是分辨率中的一个存在边界递减效应,精度增益在达到80%后迅速饱和,这表明了单维缩放的局限性。直观上,复合扩展方法有道理,因为如果输入图像更大,那么网络需要更多的层来增加接收场,更多的通道来捕捉更大图像上的更细粒度的模式。

研究表明,平衡网络宽度/深度/分辨率的所有维度至关重要,而且令人惊讶的是,这种平衡可以通过简单地以恒定比例扩展它们来实现。本文方法以一组固定的扩展系数均匀地扩展网络宽度、深度和分辨率。

二、技术细节

1、传统卷积架构: 

一个传统的卷积层可以这样表示:Y_{i}=F_{i}(X_{i}),F是卷积操作、Y是输出张量、X是输入张量。

那么一个卷积模型可以表示为:N=F_{k}\bigodot ...F_{2}\bigodot F_{1}(X_{1}),实际上,ConvNet层通常被划分为多个阶段,每个阶段中的所有层共享相同的架构:N=\bigodot F_{i}^{L_{i}} (X),使用F来表示每个阶段的操作,Li是每个阶段该操作要重复的次数。

与传统的卷积网络设计主要关注寻找最佳的层架构Fi不同,EfficientNet模型扩展试图在不改变基线网络中预定义的Fi的情况下扩展网络长度(Li)、宽度(Ci)和分辨率(Hi; Wi)。

那么问题就变成了一个优化问题:我在任何给定的资源约束下最大限度地提高模型精度:

其中w, d,r是用于扩展网络宽度、深度和分辨率的系数,H、W、C是给定的参数。

如上图所示, 在固定深度和分辨率的情况下改变宽度:每一条线都是基准模型的性能情况,横坐标不同表示改变的宽度,在更深(d=2.0)和更高分辨率(r=2.0)的情况下,宽度扩展在相同的FLOPS成本下实现了更好的准确性。所以怎么找到一组合适的权重w, d,r呢?

2、混合缩放:

缩放系数:

α; β; γ是可以通过小网格搜索确定的常数。由于常规卷积操作的FLOPS与d、w^{2}r^{2}成正比,因此我们限制\alpha ·\beta ^{2}·\gamma ^{2}\approx 2,以便对于任何新的φ,总FLOPS将大致增加2^{\phi },以确保在缩放过程中,计算复杂度(FLOPS)的增加保持在一个合理的范围内。

在确定了α、β、γ的最佳值之后,作者使用一个复合系数φ来统一控制网络宽度、深度和分辨率的缩放。φ是一个用户指定的系数,用于控制模型扩展有多少额外资源可用,而α、β、 γ分别指定如何将这些额外资源分配给网络宽度、深度和分辨率。

3、模型结构:

后续的模型参数:

 # (width, depth, resolution, dropout)        
'efficientnet-b0': (1.0, 1.0, 224, 0.2),       
'efficientnet-b1': (1.0, 1.1, 240, 0.2),       
'efficientnet-b2': (1.1, 1.2, 260, 0.3),        
'efficientnet-b3': (1.2, 1.4, 300, 0.3),       
'efficientnet-b4': (1.4, 1.8, 380, 0.4),        
'efficientnet-b5': (1.6, 2.2, 456, 0.4),        
'efficientnet-b6': (1.8, 2.6, 528, 0.5),       
'efficientnet-b7': (2.0, 3.1, 600, 0.5)

怎么得到的?

  1. 步骤1:确定缩放系数(α、β、γ)

    • 在这一步中,作者首先设定φ=1,这意味着假设有双倍的资源可用。然后,他们通过一个小规模的网格搜索来确定最佳的缩放系数α、β和γ。这些系数分别对应于网络深度、宽度和分辨率的缩放比例。
    • 通过这个搜索,作者找到了EfficientNet-B0的最佳缩放系数:α=1.2(深度),β=1.1(宽度),γ=1.15(分辨率),这些系数满足约束条件α·β^2·γ^2≈2,这个约束条件确保了在扩展模型时,计算复杂度(FLOPS)的增加是可控的。
  2. 步骤2:使用不同的φ值进行扩展

    • 在确定了α、β、γ的最优值之后,作者将这些值固定,并使用不同的φ值来扩展基线网络,从而得到EfficientNet-B1到B7系列模型。
    • φ值是一个复合系数,它决定了模型扩展的程度。通过改变φ的值,可以在不同的资源约束下获得不同规模的模型。例如,当φ=1时,模型的深度、宽度和分辨率分别按照α、β、γ的比例扩展,从而得到EfficientNet-B1。随着φ值的增加,模型会进一步扩展,从而得到更大的EfficientNet模型。

三、模型效果

1、模型性能、参数量、计算复杂度比较:

 

2、模型迁移能力:

3、缩放策略比较: 

类激活图效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建分布式Hive集群

title: 搭建分布式Hive集群 date: 2024-11-29 23:39:00 categories: - 服务器 tags: - Hive - 大数据搭建分布式Hive集群 本次实验环境:Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3、Mysql-5.7.38、Hive-3.1.2 功能规划 方案一(本地运行模…

实现路由懒加载的方式有哪些?

1函数式懒加载 使用vue的异步组件和webpack的代码分割功能,通过()>import()这种函数形式来定义路由组件,示例如下: const Home () > import(/views/Home.vue); const router new VueRouter({routes: [{ path…

【QT实战の心情笔记】

文章目录 界面布局主要界面分为三部分:1. 笔记列表区域2. 笔记内容编辑区域3. 操作按钮区域 Qt Designer 界面设计步骤完整界面布局图各控件设置和属性Qt Designer 文件 (.ui) 数据库表结构SQL 表结构: 逻辑代码1. 项目结构2. Note 类 (Note.h 和 Note.c…

大模型学习笔记------SAM模型详解与思考

大模型学习笔记------SAM模型详解与思考 1、SAM框架概述2、Segment Anything Task3、Segment Anything Model SAM模型是Meta 提出的分割一切模型(Segment Anything Model,SAM)突破了分割界限,极大地促进了计算机视觉基础模型的发展…

【嵌入式软件】跑开发板的前置服务配置

在嵌入式开发中,通常需要在 开发板和主机之间共享、传输和挂载文件。 这篇文章是关于如何在 Ubuntu 中配置 Samba、TFTP 和 NFS 协议的详细步骤。这些协议分别用于远程文件共享、文件传输和内核挂载文件系统。 如何安装协议: 参考:ubuntu18配置:详细的内容我手写了一份文档。…

2024最新qrcode.min.js生成二维码Demo

找了一堆代码一堆GPT&#xff0c;终于给写对了&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

【Spring】Spring的模块架构与生态圈—核心容器(Beans、Core、Context、Expression)

Spring框架因其强大的功能和灵活性而成为企业级应用开发的首选&#xff0c;它的模块化设计使得开发者可以根据需求选择合适的模块&#xff0c;降低了系统的复杂性。核心容器模块是Spring框架的基础&#xff0c;它为整个框架提供了核心功能&#xff0c;包括Bean的管理、上下文的…

CRC校验例题详解

CRC校验例题详解 示例题目 给定数据帧1101001和生成多项式G(x)x4x3x21&#xff0c;求该数据帧的CRC校验码&#xff0c;并验证传输过程中是否会出现错误。 解题步骤 第一步转换生成多项式&#xff1a; 接下来是对这一步骤的详细解答&#xff1a; 生成多项式的二进制表示 当我们…

02、服务器的分类和开发项目流程

硬件介绍 1、服务器分类2.开发流程 1、服务器分类 1.1 服务器分类 1u服务器&#xff08;u表示服务器的厚度&#xff09; 1U4.45cm&#xff1b; 4u服务器&#xff08;u表示服务器的厚度&#xff09; &#xff0c; 服务器有两个电源模块&#xff0c;接在不同的电源&#xff0c;…

GIT命令使用手册(详细实用版)

一、git常用操作参考 第一次提交完整步骤&#xff1a; 1.git init; 2.git add . 3.git commit -m "初始化" 4.git remote add origin https://github.com/githubusername/demo.git 5.git pull origin master 6.git push -u origin master&#xff08;使用-u选项可以将…

图像生成工具WebUI

介绍 Stable Diffusion WebUI&#xff08;AUTOMATIC1111&#xff0c;简称A1111&#xff09;是一个为高级用户设计的图形用户界面&#xff08;GUI&#xff09;&#xff0c;它提供了丰富的功能和灵活性&#xff0c;以满足复杂和高级的图像生成需求。如今各种人工智能满天飞&…

9 OOM和JVM退出。OOM后JVM一定会退出吗?

首先我们把两个概念讲清楚 OOM是线程在申请堆内存&#xff0c;发现堆内存空间不足时候抛出的异常。 JVM退出的条件如下&#xff1a; java虚拟机在没有守护线程的时候会退出。守护线程是启动JVM的线程&#xff0c;服务于用户线程。 我们简单说下守护线程的功能: 1.日志的记录…

面试经典题目:LeetCode274_H指数

leetcode274——H指数 暴力循环代码分析性能分析 方法1&#xff1a;排序加线性扫描算法步骤&#xff1a; 方法2&#xff1a;计数排序&#xff08;适用于引用次数有上限&#xff09;算法步骤&#xff1a; 题目链接&#xff1a;leetcode274_H指数 暴力循环 class Solution { publ…

【前端爬虫】关于如何获取自己的请求头信息(user-agent和cookie)

注意&#xff1a;由于user-agent和cookie中保存了部分账户信息&#xff0c;所以一定不要随意泄露给他人&#xff01;&#xff01;&#xff01; 1.首先打开某个页面&#xff0c;点击键盘的F12键进入控制台&#xff0c;或者鼠标右键页面选择打开控制台 2.然后点击控制台上方的网…

爬虫抓取的数据如何有效存储和管理?

在现代数据驱动的世界中&#xff0c;爬虫技术已成为获取网络数据的重要手段。然而&#xff0c;如何有效地存储和管理这些数据是一个关键问题。本文将详细介绍几种有效的数据存储和管理方法&#xff0c;并提供相应的Java代码示例。 1. 数据存储方式 1.1 文件存储 文件存储是最…

将java项目部署到linux

命令解析 Dockerfile: Dockerfile 是一个文本文件&#xff0c;包含了所有必要的指令来组装&#xff08;build&#xff09;一个 Docker 镜像。 docker build: 根据 Dockerfile 或标准指令来构建一个新的镜像。 docker save: 将本地镜像保存为一个 tar 文件。 docker load: 从…

Next.js 13 App Router实战踩坑与性能优化指南

去年年底&#xff0c;我接了一个海外客户的项目&#xff0c;要求使用 Next.js 13 的 App Router 开发一个数据分析平台。说实话&#xff0c;当时虽然对 Next.js 已经很熟悉了&#xff0c;但对 App Router 这个相对较新的特性还是有些忐忑。现在项目已经成功上线&#xff0c;我想…

MySQL 中快速插入大量数据

在 MySQL 中快速插入大量数据&#xff08;例如 20 万条记录&#xff09;可以通过多种方法实现。以下是一些优化技巧和步骤&#xff0c;可以帮助你高效地插入大量数据&#xff1a; 1. 禁用索引和约束&#xff08;如果可能&#xff09; 在插入大量数据之前&#xff0c;禁用索引和…

Chrome 浏览器原生功能截长屏

我偶尔需要截取一些网页内容作为素材&#xff0c;但偶尔内容很长无法截全&#xff0c;需要多次截屏再拼接&#xff0c;过于麻烦。所以记录下这个通过浏览器原生功能截长屏的方案。 注意 这种方案并不是百分百完美&#xff0c;如果涉及到一些需要滚动加载的数据或者悬浮区块&am…

Python+OpenCV系列:AI看图识人、识车、识万物

在人工智能风靡全球的今天&#xff0c;用 Python 和 OpenCV 结合机器学习实现物体识别&#xff0c;不仅是酷炫技能&#xff0c;更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入&#xff0c;识别人、动物、车辆及其他物品&#xff0c;让你的程序瞬间具备 AI …