目录

一、背景

二、MobileNet v1

1. 网络创新点

2. 网络结构

三、MobileNet v2

1. 网络创新点

2. 网络结构

四、MobileNet v3

1. 网络创新点

2. 网络结构


一、背景

MobileNet v1是由google团队在2017年提出的, 专注于移动端或者嵌入式设备中的轻量级CNN网络。 相比传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量。相比VGG16准确率减少了0.9%,但模型参数只有VGG的1/32。

论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

MobileNet v2是由google团队在2018年提出的。

论文地址:MobileNetV2: Inverted Residuals and Linear Bottlenecks

MobileNet v3是由google团队在2019年提出的。

论文地址:Searching for MobileNetV3

二、MobileNet v1

1. 网络创新点

  • Depthwise Coinvolution,大大减少运算量和参数数量
  • 增加超参数α、β,便于调节网络模型

1.1. Depthwise Coinvolution

基本思想:将标准卷积拆分为两个分卷积,构成深度可分离卷积(Depthwise Separable Convolution):第一层称为深度卷积(depthwise convolution),对每个输入通道应用单通道的轻量级滤波器;第二层称为逐点卷积(pointwise convolution),负责计算输入通道的线性组合构建新的特征。

传统卷积:

  • 卷积核通道数 = 输入特征图通道数
  • 输出特征图通道数 = 卷积核个数

​​​​​​DW卷积(Depthwise Coinvolution):  

  • 卷积核通道数 = 1
  • 输入特征图通道数 = 卷积核个数 = 输出特征图通道数

PW卷积(Pointwise Convolution):

  • 与普通卷积一样,但是卷积核大小为1

深度可分离卷积(Depthwise Separable Convolution):

  • 我们通常所使用的是3×3的卷积核,将DW卷积和PW卷积一起使用,理论上普通卷积核计算量是DW+PW的8~9倍。两者计算量比较结果如下:

K:卷积核尺寸,C_out:输出通道数

1.2. 超参数α、β

  • α(Width Multiplier):卷积核个数倍率,控制卷积过程中采用卷积核个数
  • β(Resolution Multiplier):输入图像分辨率参数,控制处理图像的大小

2. 网络结构

2.1. 标准卷积层 vs 深度可分离卷积卷积层

2.2. MobileNet v1整体结构

三、MobileNet v2

1. 网络创新点

  • Inverted Residuals
  • Linear Bottlenecks

1.1. Inverted Residuals

深度卷积本身没有改变通道的能力,如果输入通道很少,DW深度卷积只能在低维度上工作,这样效果并不会很好。而逐点卷积也就是1×1卷积可以用来升维和降维,那就可以在DW深度卷积之前使用PW卷积进行升维(升维倍数为t,t=6),再在一个更高维的空间中进行卷积操作来提取特征。

ResNet的残差结构:对于输入特征矩阵采用1x1卷积进行压缩,再通过3x3卷积核进行卷积处理,最后再采用1x1卷积核扩充通道数
倒残差结构:对于输入特征矩阵采用1x1卷积核将通道数变得更深,再通过3x3的卷积核进行DW卷积,最后再采用1x1卷积核进行降维处理

1.2. Linear Bottlenecks

在MobileNet v1网络的实际使用中会发现DW卷积的部分卷积核容易废掉(即卷积核参数为0),针对这个问题,原论文中作者通过实验得出:ReLU激活函数会对低维特征信息造成大量损失,对高维造成损失比较小,而在倒残差结构中的输出是一个低维特征向量,因此使用线性激活函数避免特征信息损失。因此倒残差结构的最后一个1x1卷积层,使用了线性激活函数,而不是ReLU激活函数。

2. 网络结构

2.1. 倒残差结构图

在普通残差结构中采用的是ReLU激活函数,在倒残差结构中采用的是ReLU6激活函数。当stride=1且输入特征矩阵与输出特征矩阵shape相同时才有shortcut连接。

2.2. MobileNet v2整体结构

t是扩张倍数,即倒残差结构第一层1x1卷积核个数的扩张系数;c是输出的通道数;n是倒残差结构的重复次数;s是步长,代表每一个block所对应的第一层bottleneck的步长,其他的为1。

四、MobileNet v3

1. 网络创新点

  • 新版Block
  • 使用NAS搜索参数
  • 重新设计耗时层结构

1.1. 新版Block

与MobileNetv2相比,Mobilenetv3的block中加入了SE模块,更换了激活函数 。更新的激活函数在图中用NL表示非线性激活函数统一表示,用到的激活函数主要有hards-wish、relu两种。最后那个1x1降维投影层用的是线性激活(f(x)=x),也可以理解为没用激活。MobileNetv3的倒残差结构:

SE模块理解

SE(Squeeze-and-Excitation) 模块类似于一个轻量级的注意力模块,注意力机制的作用方式是调整每个通道的权重,以在Mobilenetv3中的应用为例进行理解,如下图所示。

hards-wish

作者发现一种新出的激活函数swish x(如下) ,但认为这种非线性激活函数虽然提高了精度,但在嵌入式环境中,计算量太大,所以提出了h-swish。

可以用一个近似函数来逼急这个swish。作者选择的是基于ReLU6,作者认为几乎所有的软件和硬件框架上都可以使用ReLU6的优化实现。其次,它能在特定模式下消除了由于近似sigmoid的不同实现而带来的潜在的数值精度损失,在量化模式下会提高大约15%的效率。

作者认为随着网络的深入,应用非线性激活函数的成本会降低,能够更好的减少参数量。作者发现swish的大多数好处都是通过在更深的层中使用它们实现的。因此,在V3的架构中,只在模型的后半部分使用h-swish。

1.2. 使用NAS搜索参数(Neural Architecture Search)

主要结合两种技术:资源受限的NAS(platform-aware NAS)NetAdapt资源受限的NAS,用于在计算和参数量受限的前提下搜索网络来优化各个块(block),所以称之为模块级搜索(Block-wise Search) 。NetAdapt,用于对各个模块确定之后网络层的微调每一层的卷积核数量,所以称之为层级搜索(Layer-wise Search)。一旦通过体系结构搜索找到模型,我们就会发现最后一些层以及一些早期层计算代价比较高昂。于是作者决定对这些架构进行一些修改,以减少这些慢层(slow layers)的延迟,同时保持准确性。这些修改显然超出了当前搜索的范围。

1.3. 重新设计耗时层结构

精简早期层

减少第一个卷积层的卷积核个数(32减为16),原论文中作者说减少卷积核后准确率不变且能够减少计算量,节省2毫秒时间。

精简最后阶段

使用NAS搜索出来的网络结构的最后一部分为Original Last Stage,发现这一部分比较耗时,因此对其进行精简为Efficient Last Stage,精简后准确率不变,并减少10ms耗时,提速15%。

2. 网络结构

MobileNetV3定义了两个模型: MobileNet V3-LargeMobileNet V3-Small。V3-Large是针对高资源情况下的使用,相应的,V3-small就是针对低资源情况下的使用。主要的区别是通道数的变化与bneck的次数。

2.1. V3-Large

  • 第一列:每个特征层的输入变化
  • 第二列:特征层的倒残差结构,NBN为不用BN层
  • 第三列:倒残差结构中的第一层1x1卷积升维后的通道数,第一个块没有1x1卷积升维操作
  • 第四列:倒残差结构输出的通道数
  • 第五列:SE是否使用SE模块
  • 第六列:使用激活函数的种类,HS代表h-swish,RE代表RELU。
  • 第七列:倒残差结构所用的步长

2.2. V3-Small

参考

轻量级神经网络“巡礼”(二)—— MobileNet,从V1到V3https://zhuanlan.zhihu.com/p/70703846

MobileNet v1v2v3 创新点及结构简述相关推荐

  1. “创新驱动的结构化思维”培训

    目前中国产业政策正在由需求侧向供给侧转移,其特点是用创新来驱动需求,这对有创新精神的企业是个机会,但创新没那么简单,其关键之处并不是技术上的,而是思维上的.如何提升员工的思维能力,这是摆在所有企业面前 ...

  2. J2ME手机游戏引擎程序结构简述

    游戏引擎的结构很多,不过基本上都是在一个游戏主循环内实现.程序里面的主循环包含了程序框架的最主要的结构体.J2me的程序一般都包含两个class文件,一个是MIDlet,一个是Displayable. ...

  3. Vue Cli 项目结构简述

    webnode_modules --Vue Cli 项目以来的js模块全放到这里public --存放静态资源 存放自己的js cssfavicon.ico -- 浏览器小图标index.html - ...

  4. linux学习笔记:四、Linux系统目录结构简述,一级目录

    Linux系统的目录结构: " /  "表示根目录,根目录是系统目录结构的最顶级目录. 一级目录: /boot目录:存放系统的启动配置文件和内核文件 /dev目录:存放的是系统的设 ...

  5. Java中的项目结构简述(项目、模块、包、类)

    如上图所示,这些结构的划分是为了方便管理项目技术与代码文件. 上图中最小的单元是类.类相当于一个模板,来描述某个对象的行为与状态 类中则包含了一系列的"方法",一个方法由花括号括起 ...

  6. ubuntu目录结构简述

    ubuntu软件管理跟windows不同!ubuntu安装的程序都是标准路径,也就是并不是在一个位置,而是分散在系统各个文件夹中,重要文件夹解析如下: / ;linux系统的根目录,是系统的最顶层. ...

  7. 简述 Linux 文件系统的目录结构

    Linux文件系统结的结构是树形结构,其入口从/开始,了解Linux文件系统的结构,对于我们需要掌握的基础知识点之一. 1.什么是文件系统: 请参见:<Linux 文件系统概述> 2.文件 ...

  8. 轻量化网络MobileNet解析

    论文题目:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文链接:https:/ ...

  9. 吴恩达《深度学习专项》笔记(十一): CNN示例学习:VGG, ResNet, MobileNet

    学习提示 上周,我们学完了CNN的基础组成模块.而从这周开始,我们要换一种学习方式:我们会认识一些经典的CNN架构,从示例中学习.一方面来说,通过了解他人的网络,阅读他人的代码,我们能够更快地掌握如何 ...

最新文章

  1. 炙手可热的前端资源大集合
  2. 新JEP将简化Java类型变异
  3. c++17(28)-Makefile(1)
  4. VMware搭建Android x86
  5. 透明度百分比换算十六进制
  6. muduo网络库学习(七)用于创建服务器的类TcpServer
  7. hdu 4539(状压dp)
  8. 阿里云发布ECS磁盘加密,一键加密,业务0改动 1
  9. Python提取 Gprmax 3.0 的out文件数据
  10. hdu 1907John博弈
  11. 写代码常用英文及缩写
  12. 用GoEasy实现websocket
  13. 空气中弥漫着『病毒』的味道
  14. 利用 echarts 绘制江苏省的地图之三
  15. 回调地址没备案_回调地址常见问题及修改方法
  16. phpmywind最新版sql注入以及后台目录遍历和文件读取
  17. 通过软件架构来达到易用性-易用性的好处
  18. java 实现对数据表的备份与还原(备份与还原 到服务器中)
  19. SwiftTips之LanguageAPI
  20. 应急灯电源驱动方案:OC5205 30V/1.5A ,可完美替代PT4205/PT4115

热门文章

  1. 1.1计算机和编成语言
  2. Java类变量(静态变量)
  3. 中间件学习——技术平台三步曲
  4. 亚马逊广告投放指南:实现精准营销的关键步骤?
  5. Python中如何选择Web开发框架?
  6. 一个完整的python文件即是一个模块_用python玩转数据|基本语法
  7. 华为eNSP vlan综合实验
  8. Java Map按value值的大小进行排序
  9. 通过SSH 解压缩 .tar.gz .gz .zip 文件的方法
  10. 【影像三维地形图制作(附练习数据)