点上方蓝字计算机视觉联盟获取更多干货

在右上方 ··· 设为星标 ★,与你不见不散

编辑:Sophia
计算机视觉联盟  报道  | 公众号 CVLianMeng

转载于 :AI源创评论

AI博士笔记系列推荐:

博士笔记 | 周志华《机器学习》手推笔记“神经网络”

原标题 | EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

作 者 | Aakash Nain

翻 译 | 天字一号、桑塔利安

审 校 | 鸢尾、唐里、Pita

自 AlexNet 赢得 2012 年 ImageNet 的竞赛以来,CNN(卷积神经网络的缩写)已成为深度学习中各种任务(尤其是计算机视觉)的实用算法。从2012年至今,研究人员一直在试验并试图提出更好的架构,以提高模型对不同任务的准确性。今天,我们将深入探讨最新的研究论文"高效网络(EfficientNet,https://arxiv.org/pdf/1905.11946.pdf)",它不仅注重提高模型的准确性,而且注重提高模型的效率。

  为什么尺度很重要?


在讨论"尺度意味着什么" 之前,相关的问题是:为什么尺度至关重要?通常进行缩放是为了提高模型对特定任务(例如 ImageNet 分类)的准确性。尽管有时研究人员不太关心模型的高效性,因为打败对手是从精度方面来说的,但如果操作得当,缩放也有助于提高模型的效率。

  什么是卷积神经网络的尺度?


卷积神经网络里涉及到三种尺度:深度、宽度、分辨率深度指的就是网络有多深,或者说有多少层。宽度指的是网络有多宽,比如卷积层的通道数。而分辨率就是输入卷积层的图像、特征图的空间分辨率。下图直观地显示出三种尺度的区别,我们后面也会详细地讨论。

模型尺度。(a) 是一个基本的网络模型;(b)-(d) 分别单独在宽度、深度、分辨率的维度上增加尺度;(e) 是论文提出的混合尺度变换,用统一固定的比例放缩三个不同维度的尺度。

  • 深度的变换(记为 d):

改变网络深度是最常见的尺度变换方式,通过增加、减少层数可以使网络深度增减。比如 ResNet 可以从 50 层增加到 200 层,也可以缩小到 18 层。那么为什么要调整网络深度呢?从直觉上来看,越深的网络越能够捕捉丰富而复杂的特征,同时对于新任务的泛化性能更强。

“听上去好有道理,那我们搞一个 1000 层的网络好了?只要效果好,计算资源都不是事儿。”

话虽这么说,理论上讲越深的网络越厉害,但是实验发现并非总是如此。梯度消失是网络变深带来的最常见的问题。即使我们避免了梯度消失,又通过一顿操作使训练过程足够平滑,添加网络层也并不总是管用。比如 ResNet-1000 的准确率就和 ResNet-101 差不多。

  • 宽度的变换(记为 w):

当我们想保持网络模型不要太大的时候,通常要限制深度而在宽度上做文章。更宽的网络可以捕捉到更多的细粒度特征,更小的网络也更容易训练。

“这不是我们梦寐以求的吗?模型小,精度高?那就继续拓宽啊,又有什么问题吗?”

问题在于,如果深度上不够而是一味增加宽度,网络的精度仍然会很快到达天花板。

“好吧,你说的都对。你说我们既不能把网络设计得非常深,又不能设计得非常宽,那不能组合一下吗?这都想不到你还能干啥?搞机器学习吗?”

这个问题提的非常好,我们的确可以这么做。不过在讨论这个问题之前,我们聊一下第三种尺度,这三种尺度也是可以组合的对吧。

  • 分辨率(记为 r):

直觉上来说,高分辨率的图片包含更精细的特征,所以应该效果更好。这也是为什么对于例如目标检测的复杂任务,输入图片会用到 300x300,512x512 或者 600x600 这样的大分辨率。不过分辨率调大带来的指标提升并不是线性的,精度提升很快就趋于饱和了。比如输入图片的分辨率从 500x500 提高到 560x560 并没有带来明显提升。

以上三点给我们的第一个现在任何一个维度上(宽度、深度、分辨率)提升网络的尺度,能够提高精度,但是当模型大到一定程度时,带来的精度提升就不明显了。

左、中、右图在同一个网络的基础上,分别增加宽度 (w)、深度 (d)、分辨率 (r) 的系数。尺度大的网络可以达到更高的精度,但是到 80% 都基本达到了饱和,可见只改变单一维度的尺度带来的提升是有限的。

  各种尺度组合变换


的确,我们可以对不同的尺度进行组合变换,但是论文作者提到了这样两点:

  • 虽然可以凭经验对每个维度设置一个固定的尺度值,但是寻找这个值的过程是很枯燥的。

  • 大多数时候,手动确定这个尺度得到的精度和性能都不一定是全局最优的。

直觉上,随着输入图片分辨率的增加,网络深度和宽度应该随之增加。深度增加,特征图的感受野会增加。宽度增加,可以捕捉更多的细粒度特征。为了验证这个直觉,作者做了大量实验,在每一个维度上使用不同尺度。比如下面这幅论文中的插图所看到的,当使用较深的网络和较大的分辨率时,对宽度进行调整,相同运算量下可以达到更高的精度。

基于不同基准模型改变网络宽度。每个点表示不同宽度的模型。所有的基线模型来自于表格 1。第一个基线模型 (d=1.0, r=1.0) 有 18 个卷积层,224x224 分辨率输入,最后一个 (d=2.0, r=1.3) 有 36 个卷积层,299x299 分辨率输入。

这个结果给了我们第二个现象:平衡各个维度(宽度、深度、分辨率)的尺度,有助于提高精度与性能。

  • 论文提出的混合尺度变换

作者提出了一种简单但有效的尺度变换方法,借助混合系数 ɸ 来对网络的宽度、深度和分辨率进行如下缩放:

论文提出的混合尺度变换

ɸ 是一个人为设定的系数,用来依据计算资源控制模型的规模。α, β 和 γ 用来表示如何把这些资源分配给深度、宽度和分辨率。

“好吧,研究员!那么回答我两个问题:一,为什么 alpha 不用平方?二,为什么限制三个系数的乘积约等于 2 ?”

这个问题问得非常好。在卷积神经网络中,卷积层是计算量最大的部分。而一个常规的卷积层的计算量,通常与 d, w², r² 近似成正比。也就是说,深度加倍会使得计算量加倍,而宽度或分辨率加倍会使得计算量增加近似四倍。所以,为了保证总的计算量不超过 2 的 ϕ 次方,我们限制 (α * β² * γ²) ≈ 2。

  EfficientNet 架构


尺度变换不会改变网络层的运算,所以最好先得到一个不错的基线网络,然后在此基础上对不同尺度进行混合放缩。作者先用神经网络架构搜索(NAS)同时优化精度和运算量得到一个基本的网络。这个网络结构与 M-NasNet 类似,因为使用了相似的搜索空间。网络模块如下表所示:

EfficientNet-B0 基线网络

MBConv 模块是指的 Inverted Residual Block 模块(在 MobileNet V2 中用到的),部分还包含了Squeeze and Excite Block 模块。

现在有了基线网络,我们可以搜索尺度变换的最优值。如果我们再看刚才的方程,会发现总共有四个参数要搜索:α, β, γ 和 ϕ。为了能让搜索空间更小,搜索计算量更低,都做可以通过两步完成:

  1. 固定 ϕ=1,假设还有两倍的计算资源可用,对 α, β, γ 做一个小规模的网格搜索。基于 B0 网络,发现最优值是 α=1.2, β=1.1, γ=1.5,同时满足 (α * β² * γ²) ≈ 2

  2. 固定  α, β 和 γ 为上一步搜索的结果,用不同的 ϕ 做实验,得到 EfficientNet B1- B7

  结语


这可能是 2019 年以来我读过的最好的一篇论文之一。这篇文章不仅为搜索更精确的网络,打开了新世界的大门,而且同时强调了搜索高效的网络。

虽然之前不乏这个方向的研究,例如 MobileNet,ShuffleNet,M-NasNet 等,通过降低参数量和计算量来压缩模型,从而应用在移动设备和边缘设备上,但这是我们第一次看到,在参数量和计算量显著降低的同时,模型精度获得了巨大提升。

  References


EfficientNet 论文:

https://arxiv.org/abs/1905.11946

官方代码:

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

END

声明:本文来源于网络

如有侵权,联系删除

联盟学术交流群

扫码添加联盟小编,可与相关学者研究人员共同交流学习:目前开设有人工智能、机器学习、计算机视觉、自动驾驶(含SLAM)、Python、求职面经、综合交流群扫描添加CV联盟微信拉你进群,备注:CV联盟  

最新热文荐读

GitHub | 计算机视觉最全资料集锦

Github | 标星1W+清华大学计算机系课程攻略!

Github | 吴恩达新书《Machine Learning Yearning》

收藏 | 2020年AI、CV、NLP顶会最全时间表!

收藏 | 博士大佬总结的Pycharm 常用快捷键思维导图!

收藏 | 深度学习专项课程精炼图笔记!

笔记 | 手把手教你使用PyTorch从零实现YOLOv3

笔记 | 如何深入理解计算机视觉?(附思维导图)

笔记 | 深度学习综述思维导图(可下载)

笔记 | 深度神经网络综述思维导图(可下载)

总结 | 2019年人工智能+深度学习笔记思维导图汇总

点个在看支持一下吧

EfficientNet 解析:卷积神经网络模型尺度变换的反思相关推荐

  1. 卷积神经网络模型解读汇总——LeNet5,AlexNet、ZFNet、VGG16、GoogLeNet和ResNet

      在我的个人博客上一篇博文中分析了卷积神经网络的结构与相关算法,知道了这些基本原理之后.这篇博文主要介绍在卷积神经网络的发展历程中一些经典的网络模型. LeNet5   LeCun等将BP算法应用到 ...

  2. 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型

    一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...

  3. Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别

    Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 # -*- codin ...

  4. 第05章 深度卷积神经网络模型

    序言 1. 内容介绍   本章介绍深度学习算法-卷积神经网络用于 图片分类 的应用,主要介绍主流深度卷积神经网络 (CNN) 模型,包括 ResNet DenseNet SeNet 的算法模型.数学推 ...

  5. 图片2分类卷积神经网络模型训练、分类预测案例全过程(2)

    上一篇博客内容讲述了卷积神经网络模型构建.训练以及模型的保存,包括训练样本数据的预处理和喂给网络. 本篇博客内容讲述训练好的模型的应用和实际图片数据的分类预测. 图片2分类卷积神经网络模型训练.分类预 ...

  6. 图片2分类卷积神经网络模型训练、分类预测案例全过程(1)

    图片2分类卷积神经网络模型训练.分类预测案例全过程(1) 前言 (1)尽管目前有关卷积神经网络深度学习的相关材料较多,但深度学习牵涉到数据预处理.模型构建.模型调用等环节,我也是一个初学者,中间有很多 ...

  7. unet是残差网络吗_深度学习系列(三)卷积神经网络模型(ResNet、ResNeXt、DenseNet、DenceUnet)...

    深度学习系列(三)卷积神经网络模型(ResNet.ResNeXt.DenseNet.Dence Unet) 内容目录 1.ResNet2.ResNeXt3.DenseNet4.Dence Unet 1 ...

  8. 卷积神经网络模型解读及数学原理 ——翻拍图片识别

    目录 一.需求背景 二.知识储备 1.深度学习 2.卷积神经网络 3.PyTorch框架 4.张量 5.梯度下降法 三.模型解读 1.输入层 2.隐藏层 1)卷积层 2)激活函数 3)池化层 4)流向 ...

  9. 如何提高卷积神经网络模型的泛化能力

    如何提高卷积神经网络模型的泛化能力 在做工程的时候如何提高自己训练出来的模型的泛化能力是一项具有挑战性同时也是一件充满"玄学"的事情.回想我这一年半载训练的那么几个任务的调参来讲, ...

最新文章

  1. DiscuzNT 商品交易插件设计之[线下交易流程]
  2. 心动警告!你有一份礼包待领取→
  3. 乖离性暗机器人_乖离性百万亚瑟王国服超弩暗机器人如何打|乖离性百万亚瑟王国服超弩暗机器人平民打法攻略分享_好特教程...
  4. 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联
  5. linux 与信号集操作相关的函数
  6. outofmemory异常如何解决?
  7. webUI自动化一元素定位
  8. 2.6 特殊的矩阵和向量
  9. ubuntu如何调出python_ubuntu|linux下 如何用python 模拟按键
  10. bz2解压命令_Linux下的tar压缩解压缩命令
  11. 一个真实的实例: Java程序员的成长经历
  12. loadrunner error 27796 Failed to connect to server
  13. lr并发量和迭代的区别
  14. Python让繁琐工作自动化——chapter10 日志模块
  15. linux数组fortran,Fortran77-90-95入门(十)--数组
  16. dbm和db的关系、区别
  17. 第一章-第一题(小学生四则运算)--By郭青云
  18. Unity 3D游戏十一:坦克大战
  19. vue+Element表单验证+数字英文密码和手机号验证(详细)
  20. 教育培训机构屡遭投诉?湖南中创教育给出三点建议

热门文章

  1. linq to sql 行转列_SQL进阶:SQL高级编程语法实例
  2. php如何按日期统计,关于按日获取统计信息:按日期获取统计信息 – 日期时间列 – mysql / php...
  3. 字典推导式_Python基础-推导式
  4. python获取网页元素坐标_Python实战爬虫系统学习笔记一:解析网页中的元素
  5. 【linux】RedHat 7.x 升级 openssh 为 8.x 版本
  6. 【debug】使用lambda在循环中传参时,参数总为同一个值
  7. php中now()的用法,PHP中的NOW()函数
  8. 面板php,自己的路面板添加php扩展
  9. oracle将原表数据加入新建表,Oracle新建用户并将原有表结构数据迁移,修改密码...
  10. USACO12FEB Nearby Cows