基础网络之EfficientNet

摘要:

一般情况下,我们都会根据当前的硬件资源来设计相应的卷积神经网络,如果资源升级,可以将模型结构放大以获取更好精度。我们系统地研究模型缩放并验证网络深度,宽度和分辨率之间的平衡以得到更好的性能表现。基于此思路,提出了一种新的缩放方法:利用复合系数来统一缩放模型的所有维度,达到精度最高效率最高。复合系数有:w卷积核大小,d神经网络深度,r分辨率大小。在之前的MobileNet和ResNet上已展示了这种缩放方法的高效性。

使用神经架构搜索设计了一个主干网络,并且将模型放大获取一系列模型,我们称之为Efficient,它的精度和效率比之前所有的卷积网络都好。尤其是我们的EfficientNet-B7在ImageNet上获得了最先进的 84.4%的top-1精度 和 97.1%的top-5精度,同时比之前最好的卷积网络大小缩小了8.4倍、速度提高了6.1倍。我们的EfficientNets也可以很好的迁移,并且实现了最先进的精度——CIFAR-100(91.7%)、Flowers(98.8%)、其他3个迁移学习数据集。

谷歌最新论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks ICML 2019

相应源码地址:EfficientNet

1、不同的网络调节方法:增大感受野,增大网络深度,增大分辨率,如下图:

其中,(a)为基线网络,也可以理解为小网络;(b)为增大感受野的方式扩展网络;(c)为增大网络深度d的方式扩展网络;(d)为增大分辨率r的方式扩展网络;(e)为本文所提出的混合参数扩展方式;模型缩放的高效性严重地依赖于baseline网络,为了进一步研究,我们使用网络结构搜索发展了一种新的baseline网络,然后将它缩放来获得一系列模型,称之为EfficientNets。

2、测试效果,在w,r,d各种情况下的准确率和效率的相互关系曲线

一般卷积的数学模型如下:

H,W为卷积核大小,C为通道数,X为输入tensor;

复合系数的确定转为如下的优化问题:

调节d,w,r使得满足内存Memory和浮点数量都小于阈值要求;

为了达到这个目标,文中提出了如下的方法:

对于这个方法,我们可以通过一下两步来确定d,w,r参数:

第一步我们可以通过基线网络来调节确定最佳的,然后,用这个参数将基准网络扩展或放大到大的网络,这样就可以使大网络也具有较高的准确率和效率。同样,我们也可以将基线网络扩展到其他网络,使用同样的方法来放大;

基线模型使用的是 mobile inverted bottleneck convolution(MBConv),类似于 MobileNetV2 和 MnasNet,但是由于 FLOP 预算增加,该模型较大。于是,研究人员缩放该基线模型,得到了EfficientNets模型,它的网络示意图如下:

EfficientNet效率测试:

对比EfficientNets和已有的CNN模型,EfficientNet 模型要比已有CNN模型准确率更高、效率更高,其参数量和 FLOPS 都下降了一个数量级,EfficientNet-B7 在 ImageNet 上获得了当前最优的 84.4% top-1 / 97.1% top-5 准确率,而且CPU 推断速度是 Gpipe 的 6.1 倍,但是模型大小方面,EfficientNet-B7却比其他模型要小得多,同时,还对比了ResNet-50,准确率也是胜出一筹(ResNet-50 76.3%,EfficientNet-B4 82.6%)。

3、相关工作:

ConvNet精度:自从AlexNet赢得2012的ImageNet竞赛,ConvNets随着变得更大获得了更高的精度,同时GoogleNet使用6.8M的参数获得了74.8%的top-1精度,SENet使145M参数获得了82.7%的top-1精度。最近,GPipe进一步提高了精度——使用了557M的参数获得了84.3%的top-1验证精度:它如此的大以至于需要将网络划分使用特定的并行化手段训练,然后将每一部分传递到一个不同的加速器。然而这些模型主要是为ImageNet设计,但是将其迁移到其他应用上时效果也很好。

ConvNet效率:深度网络的参数过多,模型压缩是一种通用的方法减小模型大小——平衡精度和效率。当移动网络变得无处不在时,我们也通常要手动设计高效的ConvNets,比如SqueezeNets、MobileNets、ShuffleNets。最近,神经网络结构搜索在设计高效的ConvNets变得越来越流行,并且通过广泛搜索网络宽度、深度、卷积核类型和大小得到了比手动设计的模型更高的精度。然而,目前还不清楚怎么将这些技术应用到更大的模型中,通常要更大的设计空间和更贵的微调成本,在本篇论文中,我们旨在研究效率设计更大规模的ConvNets,为了实现这个目标,我们采用模型缩放。

模型缩放:有很多的方法因不同的资源限制对ConvNet进行缩放:ResNet可以通过调整深度(缩小到ResNet-18,放大到ResNet-200),WideResNet和MobileNets可以通过对宽度(#channels)缩放。公认的是更大的输入图像尺寸有利于提高精度,同时需要更多的计算量。尽管之前的研究展示了网络深度和宽度对ConvNets的表现力很重要,它仍然是一个开放的问题来高效缩放ConvNet获得更好的效率和精度。我们的工作系统地研究了ConvNet对网络深度、宽度和分辨率这三个维度进行了缩放。

参考链接:

1、https://blog.csdn.net/Trent1985/article/details/91126085

2、https://blog.csdn.net/h__ang/article/details/92801712

原文地址:https://www.cnblogs.com/jimchen1218/p/12010204.html

时间: 2024-11-10 14:50:06

基础网络之EfficientNet的相关文章

Day3: Python学习笔记之计算机基础——网络片

Day3: Python学习笔记之计算机基础--网络片 什么是互联网协议以及为何要有互联网协议? ?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准. osi五层模型 计算机之间要实现数据传输必须要经过以下五层协议: ? 模型 ,协议 ,硬件 ? 应用层, http协议.用户自定义协议 ? 传输层, TCP/UPD协议 ,四层交换机.四层路由器 ? 网络层, IP协议, 三层交换机.路由器 ? 数据链路层, 以太网.电信号分组, 网桥.以太网交换机.网卡 ? 物理层, 传递电信号

openstack(liberty):部署实验平台(一,基础网络环境搭建)

openstack项目的研究,到今天,算是要进入真实环境了,要部署实验平台了.不再用devstack了.也就是说,要独立controller,compute,storage和network了.要做这个的第一步,就是要将各个服务器的软件环境(操作系统是否满足liberty的要求,centos最好是7以上),以及服务器之间的网络连接通路打通,方便后续的软件安装需要. 下面看看我的节点拓扑图,有5台机器,其中参与这个openstack的节点有4个,计划中的controller,network,stor

linux入门基础——网络基础

linux网络基础 网络原理 网络编址 IP编址 IP编址是一个双层编址方案,一个IP地址标识一个主机(或者一个网卡接口) 现在应用最为广泛的Ipv4编址,已经开始逐渐向Ipv6编址切换 Ipv4地址为32位长,Ipv6地址为128位长 一个Ipv4地址分为两个部分:网络部分和主机部分 网络部分用来标识所属区域.主机部分用来标识该区域中的哪个主机 IP地址 Ipv4地址分为32位长度,通常使用点分十进制方式表示 整个IP地址分为4个部分,每个部分8位 例如: 192.168.1.1 110000

(转)Linux系统基础网络配置老鸟精华篇

Linux系统基础网络配置老鸟精华篇 原文:http://blog.51cto.com/oldboy/784625 对于linux高手看似简单的网络配置问题,也许要说出所以然来也并不轻松,因此仍然有太多的初学者徘徊在门外就不奇怪了,这里,老男孩老师花了一些时间总结了这个文档小结,也还不够完善,欢迎大家补充,交流.谢谢大家!20120827补充:http://oldboy.blog.51cto.com/2561410/974194 深入浅出route命令小结目录:1)配置修改主机名hostname

Linux常用命令(十三)基础网络设置

Linux常用命令(十三)基础网络设置 本篇内容实验环境为Redhat 6.5系统 一.查看及测试网络 查看及测试网络配置时管理Linux网络服务的第一步.其中本篇中大多数命令以普通用户权限就可以完成操作.   1.查看网络配置 1.1).使用ifconfig命令查看网络接口地址 主机的网络接口卡(网卡)通常称为"网络接口".在Linux系统中,使用ifconfig命令可以查看网络接口的地址配置信息. 查看活动的网络接口设备 当ifconfig命令不带任何选项和参数时,将显示当前主机中

运维小白的成长日记第四天-基础网络构建OSI七层模型-物理层基础知识

运维小白的成长日记第四天- 基础网络构建OSI七层模型-物理层基础知识 网络运维的小白和想要加入网络运维的小伙伴们值得一看哦~ 今天是初识网络运维的第四天.希望能有志同道合的小伙伴一起讨论和学习,也希望有网络运维的大神能够帮忙在网络运维这条路上帮忙指点,能够多提意见使我进步. 今天和大家分享一下OSI七层模型中的物理层基础知识. 一.物理介质 1.传输数据的物理介质有:双绞线.光纤.同轴电缆(有线电视).无线.电力线.红外.蓝牙.微波 2.信号 (1)模拟信号:比如声波(水波纹) (2)数字信号

# 运维小白的成长日记第五天-# 基础网络构建OSI七层模型-数据链路层基础知识

运维小白的成长日记第五天- 基础网络构建OSI七层模型-数据链路层基础知识 网络运维的小白和想要加入网络运维的小伙伴们值得一看哦~今天是初识网络运维的第五天.希望能有志同道合的小伙伴一起讨论和学习,也希望有网络运维的大神能够帮忙在网络运维这条路上帮忙指点,能够多提意见使我进步. 今天和大家分享一下OSI七层模型中的数据链路层基础知识. 数据链路层1.以太网:我们平时接触的物理网络都是以太网.以CSMA/CD这种工作方式运行的网络.2.以太网工作原理:CSMA/CD,载波侦听多路访问/冲突检测.在

Java基础——网络编程(一)

本文主要记录网络编程的一些基础知识,学了前班部分,对专业术语有些蒙,但是,收货也是很多很多的.观察了自己计算机的进程,查找其他网络地址的IP,对互联网的层次关系有了更深一步的了解.下面多是概念的摘录,有时间我还要回来再看看,加深理解. 目录: 1.网络编程的基础知识 1.1 网络协议 1.2 tcp /ip 1.3 IP地址 1.4 Port(端口号) 2 UDP/Tcp 3 OSI参考模型 1 网络编程的基础知识 1.1  网络协议 规定了计算机之间连接的物理机械,电器等特性,及计算机间的相互

Java基础——网络编程

一.网络编程概述 概述: Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序. Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制.并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境. 基础: 网络编程的目的: 网络编程的目的就是指直接或间接地通过网络协议与其它计算机进行通讯. 主要存在的问题: 如何准确地定位网络上一台或多台主机