经典网络解读——Efficientnet

2024-04-30 22:20

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

论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(2019.5)
作者:Mingxing Tan, Quoc V. Le
链接:https://arxiv.org/abs/1905.11946
代码:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

Efficientnet升级版本EfficientnetV2解读

最近项目上用到,由于之前模型采用IResnet50做识别,在rv1126上量化成int16时间上不满足要求,量化成int8推理造成的精度下降又太大,不能接受,遂想到替换更高效的网络,网上一搜就看到下面这张图,很直观。
在这里插入图片描述
efficientnet-B0比ResNet-50的精度更高且flops更少,且一直扩充到efficientnet-B3都是如此,类比IResnet50,估计efficientnet也比它快;由于efficientnet是分类网络,但我们是识别任务,需要提取feature,所以需做修改,下面是量化成int16后的具体推理时间,与我的猜想基本一致。

网络结构转int16的rknn模型大小(M)input_sizerv1126上用NPU推理时间(ms)
iResnet-50112x11270
efficientnet-b0(仿照iresnet改造,卷积最后一层,直接flatten)25.8112x11217
efficientnet-b0(直接将最后类别数改成num_features数量,精度不行)9.3112x11213
efficientnet-b1(仿照iresnet改造,卷积最后一层,直接flatten)33112x11225
efficientnet-b2(仿照iresnet改造,卷积最后一层,直接flatten)39.7112x11228
efficientnet-b3(仿照iresnet改造,卷积最后一层,直接flatten)47.3112x11235

虽然之前经常用这个网络,但是由于没涉及到量化,很少留意到这些细节,所以仔细解读一下efficientnet这个经典网络。


文章目录

  • 1、算法概述
  • 2、Efficientnet细节
    • 2.1 单个维度模型缩放
    • 2.2 混合缩放
    • 2.3 Efficientnet结构
  • 3、实验
    • 3.1 Scaling up MobileNets and ResNets
    • 3.2 Efficientnet在ImageNet上分类精度
    • 3.3 Efficientnet在CPU上的延迟
    • 3.4 Efficientnet的迁移学习能力


1、算法概述

Efficientnet是谷歌针对于模型缩放相关的探索提出的分类网络;在这之前的卷积神经网络(ConvNets)通常是在固定受限的资源下开发的,如果有更多的资源可用,则可以根据扩展以获得更好的准确性。该篇论文通过仔细平衡网络深度,宽度和分辨率之间的关系来获得更好的性能,并且在MobileNet和ResNet上验证了其有效性。论文作者通过神经架构搜索获得一个baseline模型(Efficientnet-B0),然后通过论文所提的模型缩放技术获得一系列缩放模型。这一系列模型在ImageNet分类数据集上的精度和参数量都比现如今最先进的卷积网络有了不小的提升。如下图,左图是精度和模型大小,右图是精度和flops。
在这里插入图片描述


2、Efficientnet细节

在这之前也有模型缩放相关的研究,例如将网络放大可以得到更好的性能,比如Resnet系列,通常来说Resnet200比Resnet18得到的分类精度好得多;但是之前的模型缩放通常只缩放三个维度(深度、宽度和图像大小)中的一个。虽然可以任意缩放两个或三个维度,但任意缩放需要繁琐的手动调优,并且仍然经常产生次优的精度和效率。虽然更大的网络能带来更高的精度,但是我们时常受到硬件内存限制,所以需要探索更高效的网络结构;如今“高效”网络结构有:SqueezeNets、MobileNets、ShuffleNets以及通过神经网络搜索得到的NASNet,但这些高效网络设计技巧目前尚不清楚如何推广应用到大规模网络。
本论文通过实验验证得到结论:平衡模型缩放过程中的深度、宽度和分辨率是非常重要的,而且只是简单的通过模型缩放公式就可以得到它们之间的关系。关于网络宽度缩放、深度缩放、和输入图像分辨率缩放及综合缩放的示例图如下图所示:
在这里插入图片描述

2.1 单个维度模型缩放

网络深度用d表示,直觉上更深的卷积神经网络可以捕获更丰富、更复杂的特征,并能很好地泛化新任务。然而,由于梯度的消失,更深的网络也更难以训练;虽然现在的跳转连接(skip connection)和batch normalization技术一定程度上缓和了梯度消失问题,但是随着深度增加,精度提升的收益还是会递减,如下图(中);
网络宽度用w表示,缩放网络宽度通常用于小尺度网络结构,通道数“更宽”的网络往往能够捕获更细粒度的特征,并且更容易训练;极宽但较浅的网络往往难以捕捉更高级的特征。而且当网络变得更宽即w更大时,准确性很快会饱和,如下图(左)所示;
网络输入分辨率用r表示,网络接收更高的分辨率,可以捕获更细粒度的特征。但随着分辨率不断提高,其精度收益率也会递减最终达到饱和。如下图(右)所示;
在这里插入图片描述

2.2 混合缩放

作者通过实验得出:对于更高分辨率的图像,我们应该增加网络深度,这样有利用在更大图像上用更大的感知域捕获更多像素的特征。相应的也应该同时增加网络宽度,以便于在高分辨率图像中捕获更多像素的更细粒度的特征。如下图所示:
在这里插入图片描述
所以我们需要协调和平衡不同的缩放维度,而不是传统的单一维度缩放。
作者通过以下公式设置三个维度的限制,利用网络结构搜索搜出最佳的d,w,r匹配。
在这里插入图片描述

2.3 Efficientnet结构

和设计MnasNet一样,作者也是通过网络搜索得到最佳的基线模型efficientnet-B0,与它不同的是设置的搜索最优目标不一样,efficientnet-B0是以最佳flops为目标,而前者是最小推理速度。搜出来的efficientnet-B0结构与MnasNet结构相似,主要组成部分为mobile inverted bottleneck MBConv,其结构如下表所示:
在这里插入图片描述
得到efficientnet-B0后,应用本文所提的模型缩放技术,分以下两步得到B1至B7。
在这里插入图片描述
论文中说,也可以直接通过网络搜索得到更大规模的网络结构,但这样做太耗费资源,作者提出的规则模型缩放技术,可以通过先搜索小规模网络结构,然后通过模型缩放得到一系列更大规模的网络结构,这样做解决了这个难题。


3、实验

3.1 Scaling up MobileNets and ResNets

作者首先在已有的分类算法网络结构上验证提出的模型缩放方法,评估其在ImageNet上的Top-1及Top-5准确率,实验结果如下:
在这里插入图片描述
从实验结果可以看出,相对于Baseline模型,单纯扩充w、d或者r,模型的Top-1准确率是有一定提升的,但相对于采用本论文所提的组合扩充方式,组合扩充方式还是有精度方面的优势。

3.2 Efficientnet在ImageNet上分类精度

在这里插入图片描述

3.3 Efficientnet在CPU上的延迟

在这里插入图片描述

3.4 Efficientnet的迁移学习能力

在这里插入图片描述

这篇关于经典网络解读——Efficientnet的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3