EfficientNet-V1论文阅读笔记

目录

    • EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
      • 摘要
      • Introduction—简介
      • Compound Model Scaling—混合模型缩放
        • Problem Formulation—范式化问题(理论基础)
        • Scaling Dimensions—维度缩放
        • Compound Scaling—混合缩放
      • EfficientNet Architecture—EfficientNet结构
      • 性能评估
      • 总结

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

论文链接:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

摘要

(1)本文系统地研究了模型的缩放,并且研究确定通过仔细平衡网络深度、宽度和分辨率可以带来更好的性能。

(2)本文提出了一种新的缩放方法,使用一个简单而高效的复合系数统一缩放深度/宽度/分辨率的所有维度。

(3)本文使用神经结构搜索来设计一个新的基线网络,并将其扩大到获得一个模型系列,称为EfficientNets。

(4)本文在数据集上进行实验,发现均能取得最先进的准确性,而参数却少了一个数量级。

Introduction—简介

在以前的工作中,通常都是在深度,宽度,和图像大小三个维度其中之一进行缩放。任意缩放需要繁琐的人工调参,同时可能产生的是一个次优的精度和效率。

本文通过NAS同时探索深度、宽度、分辨率对性能的影响,之前一般都是对一个维度进行探索。

具体方法是使用一组固定的缩放系数来统一缩放网络的宽度、深度和分辨率

image-20240619145345114

Compound Model Scaling—混合模型缩放

Problem Formulation—范式化问题(理论基础)

假设一个卷积层i 可以被定义为一个函数:Yi = Fi ( Xi )

其中的Xi表示输入的特征图,而Yi是输出特征矩阵,Fi就表示这i层的卷积操作。其中Xi的tensor形状为<Hi ,Wi ,Ci >,其中Hi与Wi为空间维度,Ci为通道维度。

而卷积网络可以由一系列这样的层结构组成:

image-20240619150900342

在实践中,ConvNet层往往被划分为多个阶段,每个阶段的所有层都具有相同的架构。

作者回顾了目前网络设计的套路,总结为以下的公式:

image-20240619150944153

其中,Fi^(Li)为第i阶段重复了Li次的层Fi;其中Xi的tensor形状为< Hi,Wi,Ci >

之前的网络设计注重模块化的设计,也就是对Fi的设计,比如ResNet中的Basic Block和Bottleneck Block。

但分别考虑每个阶段的变化,这个搜索空间无疑太大了,因此作者对整个模型采用一种统一的缩放策略,转化为一个优化问题,如下(d,w,r表示对宽度、深度、分辨率的缩放系数):

image-20240619151103512

Scaling Dimensions—维度缩放

Depth:根据以往的经验,增加网络的深度depth能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。

缩放网络深度是一种常用的提高卷积网络精度的方法,但是由于梯度消失问题,更深层次的网络也更难训练。

Width:小型模型通常使用缩放网络宽度来提取更多的特征,增加网络的width(增加卷积核的个数)能够获得更高细粒度的特征并且也更容易训练,但对于width很大而深度较浅的网络往往很难学习到更深层次的特征。

Resolution:增加输入网络的图像分辨率能够潜在得获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量。

image-20240619151322205

本文第一个结论: 扩大网络宽度、深度或分辨率的任何维度都能提高精确度,但对于更大的模型来说,精确度的提高会减弱。

Compound Scaling—混合缩放

从下图可以看出,对于d和r,单独进行缩放均能提升精度,但是同时进行缩放精度的饱和点更高。

image-20240619151823234

本文第二个结论: 为了追求更好的精度和效率,在连续网络缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的。

基于上述验证,本文提出新的复合尺度方式

该方法利用复合系数φ来均匀尺度网络的宽度、深度和分辨率:

α,β,γ是可以通过小网格搜索确定的常数

φ是一个用户指定的系数,它控制有多少资源可用于模型缩放,而α、β、γ则指定如何将这些额外的资源分别分配给网络宽度、深度和分辨率。

image-20240619152034955

EfficientNet Architecture—EfficientNet结构

EfficientNet-B0

EfficientNet-B0各参数如下表,在 B0 中一共分为 9 个 stage,表中的卷积层都默认后面跟了BN层和Swish激活函数。Stage 1 就是一个 3×3 的卷积层。对于 stage 2 到 stage 8 就是在重复堆叠 MBConv。

Layers表示这一层重复堆叠该结构多少次,比如Stage5表示该层对MBConv6这个结构重复堆叠了三次。

stride表示每个stage中的第一个结构(第一个operator)的stride,其他的stride默认为1。

image-20240619152622471

MBConv 模块

MBConv 模块其实就是mobilenetV3的模块

image-20240619153328790

(1)首先是一个 1×1 卷积用于升维,其输出 channel 是输入 channel 的 n 倍(MBConv6就表示n = 6)。

(2)紧接着通过一个 DW 卷积。

(3)然后通过一个 SE 模块,使用注意力机制调整特征矩阵。

(4)之后再通过 1×1 卷积进行降维。注意这里只有 BN,没有 swish 激活函数(其实就是对应线性激活函数)。

(5)最后跟一个dropout层。

注意:

EfficientNet-B0的stage2中,MBConv1由于n = 1,因此没有升维,是没有这一层的。

第一个1x1卷积、DW后面都是接BN + Swish,而最后的1x1降维卷积是没用激活函数的,要用Identity函数。

这里的Dropout用的是Drop path,而不是传统的Dropout。

关于shortcut连接,当且仅当输入MBConv结构的特征矩阵和输出的特征矩阵的shape相同且DW卷积的stride=1时才使用。

SE模块(与mobilenetV3有些许不同)

第一个全连接层的节点个数是输入该MBConv特征矩阵(上图的输入矩阵)channels的1/4(MobileNetV3中第一个全连接层的节点个数是下图feature map中的1/4),且使用Swish激活函数。

第二个全连接层的节点个数等于Depthwise Conv层输出的特征矩阵channels(执行下图中点×操作),且使用Sigmoid激活函数。

image-20240619153906614

MBConv 模块详细结构图如下

img

性能评估

之前的所有的缩放方法都是以更多的FLOPS为代价来提高准确性,但是本文的复合缩放方法可以进一步提高准确性。

image-20240619154806583

总结

  • 这篇论文是Google在2019年发布的文章,作者系统地研究ConvNet的缩放,并确定仔细平衡网络宽度、深度和分辨率的重要性。
  • 论文最主要的创新点是Model Scaling,作者提出了一种简单而高效的复合缩放方法,使我们能够以更原则(深度、宽度、分辨率,组合起来按照一定规则缩放)的方式轻松地将基线ConvNet缩放到任何目标资源约束,同时保持模型效率。

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

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

相关文章

【网络协议】精讲ARP协议工作原理!图解超赞超详细!!!

亲爱的用户&#xff0c;打开微信&#xff0c;搜索公众号&#xff1a;“风云说通信”&#xff0c;即可免费阅读该文章~~ 目录 前言 1. ARP协议介绍 1.1 ARP协议功能 1.2 ARP请求报文 1.3 ARP工作原理 2. ARP 缓存超时 2.1 RARP 3. ARP 攻击 3.1 ARP 攻击分类 前言 首先…

理解人体手臂七个自由度对应的运动

写本篇的目的在于&#xff0c;我发现很多人理不清人体手臂运动时内收/外展、屈曲/伸展等动作描述的关系&#xff0c;包括我自己也是&#xff01; 我每次要用到的时候都要去查&#xff0c;记不下来&#xff0c;比较麻烦&#xff0c;于是归纳本篇&#xff0c;包含了我本人的理解 …

Hightec编译器系列之高级调试技巧精华总结

Hightec编译器系列之高级调试技巧精华总结 小T为了便于大家理解&#xff0c;本文的思维导图大纲如下&#xff1a; 之前可能很多小伙伴没有使用过Hightec编译器&#xff0c;大家可以参考小T之前的文章《Hightec编译器系列之白嫖就是爽》可以下载一年试用版本。 小T使用过适配英…

GEOSERVER 添加 Shapefile

添加 Shapefile 是任何 GIS 工具的核心。本节介绍使用 GeoServer 添加和发布 Shapefile 的任务。 导航到 workshop 目录&#xff08;在 Windows 上&#xff09;并找到以下 shapefile&#xff1a;$TRAINING_ROOT/data/user_data/%TRAINING_ROOT%\data\user_data 主要道路. shp 主…

pyhon模块以及常用的第三方模块

import my_info as info print(info.name) info.show()from my_info import * print(name) show() pyhon中包的导入 import admin.my_admin as ad # 包名.模块名 admin是包名&#xff0c;my_admin是模块名print(ad.name) print(ad.info())from admin import my_admin as ad # …

第二证券股市资讯:“掘金”东南亚 券商出海正当时

东南亚正在成为中资券商出海的“新站点”。 随着中资企业“走出去”的步伐愈加坚决&#xff0c;为其供给金融服务的中资券商也越来越重视世界事务布局。与上一波集体“落子”香港不同&#xff0c;此次中资券商纷纷将目光投向东南亚。在中资企业产业链迁至东南亚的趋势带动下&a…

Go 语言学习笔记之字典 Map

Go 语言中的字典 Map 大家好&#xff0c;我是码农先森。 概念 在 Go 语言中&#xff0c;字典被称为 map&#xff0c;它是一种无序的集合&#xff0c;用于存储键值对。每个键在 map 中必须是唯一的&#xff0c;并且对应一个值。map 是一种非常常用的数据结构&#xff0c;用于…

File文件转Blob文件,临时路径浏览器可查看

fileToBlob (file) { var reader new FileReader(); reader.readAsArrayBuffer(file); reader.onload function (event) { let blob new Blob([event.target.result], { type: file.type }); //{ type: file.type } 预览blob发现乱码可能是type不对 要获取file文件的type …

Python统计实战:3D散点图绘制

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能&#xff0c;从而更快地掌握解决问题所需的能力。 &#xff08;以下练习题来源于《统计学—基于Python》。联系获取完整数据和Python源代码文件。&#xff09; 练习题 用以下数…

17.RedHat认证-Ansible自动化运维(下)

17.RedHat认证-Ansible自动化运维(下) 这个章节讲ansible的变量&#xff0c;包括变量的定义、变量的规则、变量范围、变量优先级、变量练习等。 以及对于tasks的控制&#xff0c;主要有loop循环作业、条件判断等 变量 介绍 Ansible支持变量功能&#xff0c;能将value存储到…

MOE学习笔记

MOE网络结构 和传统的 transformer 网络结构相比&#xff0c;我们将 Transformer 模型的每个 FFN 层替换为 MoE 层&#xff0c;MoE 层由门网络&#xff08;Router&#xff09;和一定数量的专家&#xff08;Expert&#xff09;组成。 这些 Expert 其实也是 FFN 层&#xff0c;…

刷代码随想录有感(116):动态规划——单词拆分

题干&#xff1a; 代码&#xff1a; class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string>set(wordDict.begin(), wordDict.end());vector<bool>dp(s.size() 1, false);dp[0] true;for(int j 0; j &…

SAPUI5基础知识9 - JSON Module与数据绑定

1. 背景 在前面的博客中&#xff0c;我们已经学习了SAPUI5中视图和控制器的使用&#xff0c;在本篇博客中&#xff0c;让我们学习下MVC架构中的M-模型了。 SAPUI5中的JSON Model是一个客户端模型&#xff0c;可以用于在SAPUI5应用程序中处理和操作JSON数据。SAPUI5提供了绑定…

【服务器05】之【登录/注册账号成功转至游戏场景】

Unity登录注册数据库 打开【服务器01】的文章项目 导入新UI系统 点击2D 双击输入栏位置 修改输入框尺寸及位置 放大字体 修改默认输入文字 发现中文字变成了口口口口 原因是新UI系统不支持中文&#xff0c;解决这个问题需要更换字体 并且修改输入时字体大小 我们取电脑中找Fon…

2k240hz显示器推荐 - 精选10款 - 高能评测

今天给大家精选了10款2k240hz显示屏&#xff0c;欢迎大家了解。 1.HKC G25H4 - 2k240hz显示器推荐 售价&#xff1a;1999 &#x1f440; 今天我要跟大家分享一款让我彻底被种草的显示器——HKC G25H4&#xff01;&#x1f389; 如果你跟我一样&#xff0c;对游戏和视觉体验有…

存储无界限:MK米客方德SD NAND系列,小容量到大容量的全方位覆盖

在这个数字化飞速前进的时代&#xff0c;数据存储的需求日益增长&#xff0c;不同的应用场景对存储容量的要求也各不相同。MK米客方德公司以其SD NAND系列产品&#xff0c;凭借其广泛的容量覆盖&#xff0c;从1Gb到512Gb&#xff0c;为各种应用场景提供了完美的存储解决方案。今…

代码随想录算法训练营第四十一天| 416. 分割等和子集

416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean canPartition(int[] nums) {int sum 0;for (int i0;i<nums.length;i){sum nums[i];}if(sum%2!0){return false;}int weight sum /2;// int[][] dp new int[nums.length][weig…

React的生命周期函数详解

import React,{Component} from "react";import SonApp from ./sonAppclass App extends Component{state{hobby:爱吃很多好吃的}// 是否要更新数据&#xff0c;这里返回true才会更新数据shouldComponentUpdate(nextProps,nextState){console.log("app.js第一步…

【计算机视觉】人脸算法之图像处理基础知识(六)

图像直方图 图像直方图是描述图像中像素强度分布的一种统计图表&#xff0c;它是图像处理和计算机视觉领域中一个非常基础且重要的概念。图像直方图通常用于分析图像的亮度、对比度特性&#xff0c;以及在图像增强、阈值分割、特征提取等多种图像处理任务。 import cv2 impor…

【C++】二叉搜索树|Key模型|key_value模型|基本操作

目录 ​编辑 二叉搜索树的定义&#xff0c;创建&#xff08;Key模型&#xff09; 定义 创建 基本操作 插入 查找 删除 Key模型和Key_Value模型 二叉搜索树&#xff08;Key_Value模型&#xff09; 定义 创建 基本操作 插入 应用 二叉搜索树的定义&#xff0c;创建&…