EfficientNet(2019):基于复合缩放的自动化架构搜索高效网络!

news2024/11/16 19:41:24

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 也在不断地进化和改进。

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

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

相关文章

在C#中实现WebSocket的单聊和分频道聊天

在C#中实现WebSocket的单聊和分频道聊天,可以利用System.Net.WebSockets库。以下是如何实现这个功能的具体方案和代码。 方案概述: WebSocket Server: 通过HttpListener或ASP.NET Core来承载WebSocket服务。维护每个客户端的连接&#xff0c…

基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络(CNN) 4.2 GRU网络 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 优化前: 优化后: 2.算法运行软件版…

Java网络编程、正则表达式、单例设计模式与Lombok

目录 Java网络编程、正则表达式、单例设计模式与Lombok Java网络编程 软件结构 网络基础知识 相关概念 IP地址 TCP协议和UDP协议介绍 TCP协议的三次握手和四次挥手 UDP协议编程 创建客户端 创建服务端 运行 TCP协议编程 创建客户端 创建服务端 运行 文件上传案例 创建客户端 创…

windows C++-同步数据结构与 Windows API

将并发运行时提供的同步数据结构的行为与 Windows API 提供的同步数据结构的行为进行比较。 并发运行时提供的同步数据结构遵循协作线程模型。 在协作线程模型中,同步基元显式将其处理资源传递给其他线程。 这与抢占式线程模型不同,其中处理资源由控制调…

Python | Leetcode Python题解之第434题字符串中的单词数

题目: 题解: class Solution:def countSegments(self, s):segment_count 0for i in range(len(s)):if (i 0 or s[i - 1] ) and s[i] ! :segment_count 1return segment_count

教授【优青】团队亲自指导-图解表观遗传学 | 组蛋白修饰!专业实验设计、数据分析、SCI论文辅助等全方位服务。精准高效,为农植物科研保驾护航!

教授【优青】团队亲自指导!提供专业实验设计、数据分析、SCI论文辅助等全方位服务。精准高效,为医学科研保驾护航! 专业实验外包服务,一站式解决您的所有需求; 还在犹豫?别让您的科研和论文停滞不前&#…

C# Socket 服务端

WPF 项目 引入 Socket using System.Net.Sockets; 声明 Socket 并创建对象等待客户端连接 开启线程等待客户端连接并接收消息 接收消息并解析 发送消息 完整代码

目标检测DOTA数据集

前言 ​ 之前对于xml格式的YOLO数据集,之前记录过如何用imgaug对其进行数据增强。不过DOTA数据集采用的是txt格式的旋转框标注,因此不能直接套用,只能另辟蹊径。 DOTA数据集简介 DOTA数据集全称:Dataset for Object deTection i…

Redis6 多线程模型

优质博文:IT-BLOG-CN 一、单线程的优缺点 对于一个请求操作Redis主要做3件事情:从客户端读取数据/解析、执行Redis命令、回写数据给客户端。所以主线程其实就是把所有操作的这3件事情串行一起执行,因为是基于内存,所以执行速度非…

区间合并算法

区间合并 区间合并就是有两个区间我们把两个区间合并成一个区间 我们来看一道题 Acwing 803 区间合并 1.题目 给定 n nn 个区间 [ l i , r i ] [li,ri][li,ri],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个…

C语言 | Leetcode C语言题解之第434题字符串中的单词数

题目&#xff1a; 题解&#xff1a; int countSegments(char * s){int count 0; //count用来记录单词个数for(int i0; i < strlen(s); i){ //遍历字符串 if((i 0 || s[i-1] ) && s[i] ! ) //一个…

C语言_指针(2)

1.指针与数组的关系 1.1 数组名 先看代码&#xff1a; #include <stdio.h> int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("&arr[0] %p\n", &arr[0]);printf("arr %p\n", arr);return 0;}运行结果是这样的&#xff1a; 我…

数据结构 ——— 数组 nums 包含了从 0 到 n 的所有整数,但是其中缺失了一个,请编写代码找出缺失的整数,并且在O(N)时间内完成

目录 题目要求 代码实现 方法1&#xff08;异或法&#xff09;&#xff1a; 异或算法的时间复杂度&#xff1a; 方法2&#xff08;等差数列公式&#xff09;&#xff1a; 等差数列公式的时间复杂度&#xff1a; 题目要求 整型数组 nums 包含了从 0 到 n 的所有整数&…

【有啥问啥】 Self-Play技术:强化学习中的自我进化之道

Self-Play技术&#xff1a;强化学习中的自我进化之道 在人工智能的快速发展中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;已成为推动智能体自主学习与优化的关键力量。Self-Play技术&#xff0c;作为强化学习领域的一项前沿创新&#xff0c;通过…

Java语法-类和对象(上)

1. 面向对象的初步认识 1.1 什么是面向对象 概念: Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。 1.2 面向对象VS面向过程 如:洗衣服 面向过程: 注重的是洗衣服的过程,少了一个环节也不…

SPSS26统计分析笔记——3 假设检验

1 假设检验原理 假设检验的基本原理源于“小概率事件”原理&#xff0c;是一种基于概率性质的反证法。其核心思想是小概率事件在一次试验中几乎不会发生。检验的过程首先假设原假设 H 0 {H_0} H0​成立&#xff0c;然后通过统计方法分析样本数据。如果样本数据引发了“小概率事…

《数据压缩入门》笔记-Part 2

一篇文章显得略长&#xff0c;本文对应原书6-10章。序言、前言、第1-5章&#xff0c;请参考Part 1&#xff0c;第11-15章&#xff0c;请参考Part 3。 自适应统计编码 位置对熵的重要性 统计编码有一个问题&#xff1a;在编码开始之前都需要遍历一次数据&#xff0c;以计算出…

Linux:八种重定向详解(万字长文警告)

相关阅读Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 本文将讨论Linux中的重定向相关问题&#xff0c;在阅读本文前&#xff0c;强烈建议先学习文件描述符的相关内容Linux&#xff1a;文件描述符详解。 重定向分为两类&#x…

智能感知,主动防御:移动云态势感知为政企安全护航

数字化时代&#xff0c;网络安全已成为企业持续运营和发展的重要基石。随着业务扩展&#xff0c;企业资产的数量急剧增加&#xff0c;且分布日益分散&#xff0c;如何全面、准确地掌握和管理资产成为众多政企单位的难题。同时&#xff0c;传统安全手段又难以有效应对新型、隐蔽…

【unity进阶知识1】最详细的单例模式的设计和应用,继承和不继承MonoBehaviour的单例模式,及泛型单例基类的编写

文章目录 前言一、不使用单例二、普通单例模式1、单例模式介绍实现步骤&#xff1a;单例模式分为饿汉式和懒汉式两种。 2、不继承MonoBehaviour的单例模式2.1、基本实现2.2、防止外部实例化对象2.3、最终代码 3、继承MonoBehaviour的单例模式3.1、基本实现3.2、自动创建和挂载单…