• 论文题目:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

  • 论文链接:https://arxiv.org/abs/1704.04861

论文研究目标

提出了一种深度模型加速的算法,可以在基本不影响准确率的前提下大大减少计算时间和参数数量。为移动和嵌入式视觉应用提出了一种有效的解决方案。可以应用在目标检测、细粒度分类、人脸识别和大规模定位上。

创新点

  • 将普通卷积层替换成深度可分离卷积(depthwise separable convolution)

  • 提出了两个缩小超参数模型:width multiplierresolution multiplier

MobileNet简介

虽然MobileNets在结构上与VGGNet类似,属于简单的流线型架构。但其使用深度可分离卷积层替换之前的全卷积层,以达到压缩参数数量并轻量化网络这一目标。

MobileNet除了第一层为全卷积层,其余层均为深度可分离卷积。不同于Deep Compression,因为网络在定义时结构简单,因此我们可以简单地搜索网络的拓扑结构,从头直接训练出一个效果很好的轻量化网络。

而MobileNet就是用来解决参数小和计算开销大的,采用的方法叫做深度可分离卷积。

算法结构

MobileNet的结构

MobileNet结构的定义如上图所示,除了最后的全连接层直接进行softmax分类,其余所有层之后都是批量正则化(BN层)和作为非线性激活函数的线性整流函数(ReLU层)。

下图比较了全卷积和深度可分离卷积(都跟着BN层和ReLU层)。通过有步长的逐深度卷积和第一层卷积,都能对图片进行空间上的下采样。最后一个平均池化层在全连接层之前,将特征图的空间分辨率降为1x1。将逐深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)算为不同的层,MobileNet有28层。

左图是标准卷积,右图是深度可分离卷积

MobileNet(V1)的精髓其实就是深度可分离卷积。

深度可分离卷积

MobileNet模型的核心就是深度可分离卷积,它是因式分解卷积的一种。

具体地,深度可分离卷积将标准化卷积分解为逐深度卷积(depthwise convolution)和逐点1x1卷积(pointwise convolution)。对于MobileNets,逐个深度卷积将单个滤波器应用到每一个输入通道。然后,逐点卷积用1x1卷积来组合不同深度卷积的输出。在一个步骤,一个标准的卷积过程将输入滤波和组合成一组新的输出。深度可分离卷积将其分成两层,一层用于滤波,一层用于组合。这种分解过程能极大减少计算量和模型大小。下图展示了如何将一个标准卷积分解为深度卷积和1×1逐点卷积。

标准卷积的分解过程

深度可分离卷积的参数量与计算量

MobileNet使用深度可分离卷积来破坏输出通道的数量和卷积核大小的相互作用。

标准的卷积运算,每次运算在滤波的同时,都涉及了所有输入通道特征的组合,从而产生新的特征。但是,滤波和组合步骤可以通过使用因式分解卷积(包括深度可分离卷积)分为两个步骤,以显著降低计算成本。

深度可分离卷积由两层构成:

  • 逐层卷积

  • 逐点卷积

我们使用逐层卷积对每个输入通道(输入特征图的深度)执行单个滤波器卷积。逐点卷积(1x1卷积)用来创建逐深度卷积层的线性组合。MobileNet对两层卷积层都使用了批量正则化(Batch Normalization , BN)和线性整流函数(ReLU)作为非线性激活函数。

逐层卷积可以被写作以下形式(每个输入通道一个滤波器):

指的是逐层卷积的卷积核,大小是 。 中的第 个滤波器作用于输入特征图 的第 个深度的特征,从而产生输出特征 的第 个通道。逐层卷积的计算复杂度为:

逐层卷积相对于标准的卷积效率极高,但他只是给输入通道做了个滤波,而不能结合各个通道的特征图生成新的特征

所以为了生成这些新的特征,一个额外的,由1x1卷积构成的逐点卷积被运用在了MobileNet中。

深度可分离卷积,就是上述两种卷积层操作的组合。

MobileNets使用3x3的深度可分离卷积比标准的卷积减少了8-9倍的计算复杂度,而与此同时准确率只减少了一点点。

空间维度的因式分解不会节省大量的计算复杂度,因为相比于其他直接做因式分解的模型[3][4]深度可分离卷积计算复杂度很小。

算法效果分析

由之前的分析,若只考虑浮点数运算,则一组二维卷积核完成逐深度卷积的运算量为:

而随后的逐点1×1卷积的浮点运算量为:

综上,一次深度可分离卷积的总计算量为:

所以,深度可分离卷积与传统全卷积的总计算量之比为:

举一个例子,给定输入图像为3通道的224×224图像,VGG16网络的第三个卷积层conv2_1输入的是尺寸为112的特征图,通道数为64,卷积核尺寸为3,卷积核个数为128,传统卷积运算量就是:

如果将传统的全卷积替换为逐深度卷积加上1*1的逐点卷积,计算量为:

可见,在这一层里,MobileNet所采用的卷积方式的计算量与传统卷积计算量的比例为:

同理,我们也可以计算一个深度可分离卷积层相对于全卷积层的压缩比。传统的全卷积层由 个尺寸为 的三维卷积核组成,因此一个层的参数(不考虑偏置时)总量为 :

而对于深度可分离卷积,逐深度卷积由个的二维卷积核组成,因此参数总量为。

之后紧跟的1×1逐点卷积的参数量则为 ,因此一个深度可分离卷积的总参数量为:

所以,再输入输出通道数相同的情况下,使用深度可分离卷积替换全卷积的压缩比为:

可以发现,这个压缩比与计算量的压缩比是相同的,在深度网络中, 的取值往往远大于 ( )。因此,压缩比略小于9。在后续的实验中,确定基于深度可分离卷积MobileNet,相对于结构类似的VGG16网络的实际压缩比为8.4。

两个shrink超参数模型

width multiplier

尽管基本的MobileNet体系结构已经很小而且延迟很低,但是很多时候一个特定的用例或应用程序可能需要模型更小和更快。为了构建这些较小和较昂贵的模型计算我们介绍一个非常简单的参数α称为宽度乘数。宽度乘数α的作用是在每一层薄网络统一。对于给定的层宽度乘数α,输入通道数M变成αM,输出通道的数目N变成αN。公式如下:

α∈(0,1),其典型设置为{1,0.75,0.5和0.25}。

resolution multiplier

第二个hyper-parameter减少神经网络的计算成本是分辨率乘数ρ。这给输入图像和内部表现的每一层随后都减少了相同的乘法器。在实践中我们隐式地设置ρ通过设置输入分辨率。我们现在可以把我们的网络的核心层的计算成本换成深度可分离卷积并与width multiplierα和resolution multiplier乘数ρ相结合:

ρ∈(0,1)通常设置隐式,以便网络的输入分辨率分别为{224,192,160,128}。

MobileNet模型训练过程:

  • 使用tensorflow或pytorch

  • 与inception v3相似的异步梯度下降

  • 使用较少的正则和数据增强,因为小模型过拟合的概率不大。

  • 我们不使用侧头或标签平滑

  • 限制在inception中的小尺寸剪裁的数量。

  • 权重衰减(l2正则化)使用较少或没有使用,因为该模型参数本来就不多。

在不同task上的结果

开源代码

https://github.com/Zehaos/MobileNet

轻量化网络MobileNet解析相关推荐

  1. 浅析轻量化网络mobilenet

    论文地址:https://arxiv.org/abs/1704.04861:https://arxiv.org/abs/1704.04861 1.背景 MobileNet是轻量化网络的代表之作,与VG ...

  2. 【神经网络】(11) 轻量化网络MobileNetV1代码复现、解析,附Tensorflow完整代码

    各位同学好,今天和大家分享一下如何使用 Tensorflow 复现轻量化神经网络模型 MobileNetV1.为了能将神经网络模型用于移动端(手机)和终端(安防监控.无人驾驶)的实时计算,通常这些设备 ...

  3. 经典网络结构 (八):轻量化网络 (SqueezeNet, MobileNet, ShuffleNet)

    目录 SqueezeNet Fire Module: Squeeze and Expand SqueezeNet SqueezeNet 总结 MobileNet 深度可分离卷积 (Depthwise ...

  4. 突破置换模块计算瓶颈,MSRA开源轻量版HRNet,超越主流轻量化网络!|CVPR2021...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨happy 审稿丨邓富城 编辑丨极市平台 极市导读 本文从HRNet与轻量化网络ShuffleN ...

  5. 【论文解读】突破置换模块计算瓶颈,MSRA开源轻量版HRNet,超越主流轻量化网络!|CVPR2021...

    作者丨happy 审稿丨邓富城 编辑丨极市平台 极市导读 本文从HRNet与轻量化网络ShuffleNet的组合出发,针对置换模块存在的计算瓶颈问题,提出了一种高效条件通道加权单元替换1x1卷积,并得 ...

  6. 轻量化网络:ShuffleNet V2

    Guideline 1-4: ShuffleNet V2 疑问: ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture ...

  7. 轻量化网络—ShuffleNet V1 V2理解

    轻量化网络-ShuffleNetV2理解 ShuffleNetV2原始论文:https://openaccess.thecvf.com/content_ECCV_2018/html/Ningning_ ...

  8. 模型加速之轻量化网络

    模型加速之轻量化网络 当前物体检测结构大都依赖使用卷积网络进行特征提取,即 Backbone,通常使用 VGGNet.ResNet 等优秀的基础网络,但是这些网络往往计算量巨大,依赖这些基础网络的检测 ...

  9. 实时互动下视频 QoE 端到端轻量化网络建模

    在实时视频互动中,影响观众对视频体验的有较多且复杂的因素,包括:画质.流畅度以及与其耦合的观看设备等.传统客观算法会利用网络传输或编解码参数拟合接收端人的感知体验,或者使用图像质量结合其他相关参数拟合 ...

最新文章

  1. PHP关于curl_setopt几个参数设置的说明
  2. chrome中F12工具说明
  3. 《计算机组成与设计(ARM版)》读书笔记-第二章指令2
  4. matlab读int16读文件_Matlab文件操作及读txt文件(fopen,fseek,fread,fclose)
  5. 分数怎么在计算机上关,电脑如何在注册表上关闭AutoRun功能
  6. UNDO Tablespace
  7. 为什么没有普及128位操纵系统的计算机?
  8. 斯威夫特山地车_斯威夫特字典
  9. 马斯克宣布退出OpenAI,全身心投入特斯拉与SpaceX
  10. 卸载计算机系统,卸载完360安全卫士及其安装的补丁之后电脑各种系统问题
  11. fd抓包数据类型_终端抓包神器 | tcpdump参数解析及使用
  12. SSM项目转Springboot项目
  13. 解决MATLAB不能设置为.m .slx .mat等文件默认打开方式
  14. 互联网早报20220720
  15. 文章标题 execution(* cn.sxt.dao.impl.*.*(..))解释
  16. STM32学习笔记1:STM32ZET6配置蓝牙模块
  17. 通过线程八锁问题融会贯通synchronized关键字的使用
  18. 2023年大学毕业生,我有话想对你说
  19. 运维人员必会的系统安全
  20. [转] 人生“三重境界”和“四种大智慧”

热门文章

  1. 鬼题Ghost [manacher]
  2. 业务 T+1 T+2
  3. 使用火狐的restclient发送http接口post及get请求
  4. leetcode 76 python
  5. 线性表—顺序表-顺序表基本运算的实现
  6. java 标识符命名规则_java语言基础之标识符和命名规则详解
  7. java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...
  8. ubuntu 16卸载mysql_ubuntu16.04 彻底卸载MySQL
  9. kafka监听topic消费_Kafka消费者-从Kafka读取数据
  10. windows睡眠(休眠)唤醒助手_Windows快速启动背后的功臣:休眠