面试宝典:从MobileNetV1到V3,一文全面梳理移动端深度学习模型

2023-11-18

面试宝典:MobileNetV1-V3

在这里插入图片描述

MobileNet的设计及实现

MobileNet是一种适用于移动设备的通用计算机视觉神经网络,可用于分类、目标检测和语义分割等多种任务。为了在移动设备上实现高效的计算和减小模型大小,我们可以采用以下小型化手段:

  1. 卷积核分解:使用 1×N 和 N×1 的卷积核代替传统的 N×N 卷积核。
  2. 使用 Pottleneck 结构,例如 SqueezeNet
  3. 低精度浮点数 保存,例如 Deep Compression
  4. 冗余卷积核剪枝及 哈弗曼编码

在对 Depthwise Separable Convolutions(DSC)进行深入研究后,我们设计出了 MobileNet。DSC 的本质是将卷积运算中的信息冗余更少,稀疏化表示。在这个基础上,我们提出了两种高效模型设计的选择,即 宽度因子(Width Multiplier)和 分辨率因子(Resolution Multiplier)。通过权衡模型大小、延迟时间和精度等因素,我们构建了规模更小、速度更快的 MobileNet。此外,Google 团队通过多样性的实验验证了 MobileNet 作为高效基础网络的有效性。

DSC 包含两个组件: **Depthwise Convolution(DWC)**和 Pointwise Convolution(PWC)。DWC 用于输入通道的过滤,不增加通道数量;PWC 将不同通道的输出连接在一起,从而增加通道数。通过这种分解方式,可以明显减少计算量。

目录

  1. 解决的问题
  2. 解决方法
  3. 效果
  4. 存在的问题

1. 解决的问题

1.1 要解决什么问题?

在现实场景下,诸如移动设备、嵌入式设备、自动驾驶等等,计算能力会受到限制,所以目标就是构建一个小且快速(small and low latency)的模型。

1.2 用了什么办法解决?

  1. 提出了MobileNet架构,使用深度可分离卷积(depthwise separable convolutions)替代传统卷积。
  2. 在MobileNet网络中还引入了两个收缩超参数(shrinking hyperparameters):宽度乘子(width multiplier)和分辨率乘子(resolution multiplier)。

2. 解决方法

为了在移动设备上实现高效的计算和减小模型大小,我们可以采用卷积核分解、Pottleneck结构、低精度浮点数保存、冗余卷积核剪枝及哈弗曼编码等小型化手段。我们还设计出了MobileNet,使用深度可分离卷积(DSC)并提出了两种高效模型设计的选择:宽度因子和分辨率因子,可以通过权衡模型大小、延迟时间和精度等因素来构建规模更小、速度更快的MobileNet。

3. 效果

在一系列视觉任务如ImageNets分类、细粒度分类、目标检测等上,显著降低模型大小的同时也取得了不错的效果。

4. 存在的问题

MobileNet v1的结构与Depthwise Convolution存在一些问题, 具体有:

  1. MobileNet v1的结构过于简单,类似于VGG的直筒结构,导致这个网络的性价比不高。
  2. Depthwise Convolution的计算量比较低,但是存在潜在的问题。具体来说,训练后部分depthwise kernel的权值变成了0,导致输出的神经元输出很容易变为0,从而导致网络学习能力的下降。
    MobileNet v2则采用了一些新的优化方法,例如Inverted residual和Linear Bottleneck以缓解特征退化,同时采用效率优先的网络结构设计,以提高计算效率。
    好的,请见下方生成的Markdown格式文本:

MobileNet v1的结构与Depthwise Convolution的问题

MobileNet v1的面临的问题

MobileNet v1的结构过于简单,类似于VGG的直筒结构,导致这个网络的性价比不高。后续一系列的ResNet、DenseNet等结构已经证明,该使用图像特征的复用以及添加shortcuts等方法,可以大幅提升网络的性能。

Depthwise Convolution存在的潜在问题

Depthwise Convolution的计算量比较低,但是存在潜在的问题。具体来说,训练后部分depthwise kernel的权值变成了0,导致输出的神经元输出很容易变为0,从而导致网络学习能力的下降。在MobileNet v2中,Google通过不同的Output/dim比值,对特征的分部空间进行可视化,以便直观解释退化问题。

MobileNet1.0的遗留问题

结构问题

MobileNet1.0的结构类似于VGG一样的直筒结构,使用concat/eltwise+等操作进行融合,性价比较低。后续的结构,如ResNet、DenseNet等结构已经证明,通过复用图像特征,可以极大地提高网络的性价比。

Depthwise Convolution的潜在问题

Depthwise Convolution虽然大大降低了计算量,但我们发现Depthwise部分的kernel比较容易训废掉,这是因为depthwise每个kernel dim相对于vanilla conv要小得多,过小的kernel dim加上ReLU的激活影响下,使得神经元输出很容易变为0,所以就训废了。在MobileNetV2中Google对此做出了解释,并采用不同的Output/dim比值来缓解特征/神经元退化问题。

Inverted residual以及Linear Bottlenecks的影响

MobileNetV2采用了Inverted residual和Linear Bottlenecks以缓解特征退化。Linear Bottleneck通过去掉Eltwise+的特征去掉ReLU,减少ReLU对特征的破坏。Inverted residual则有两个好处:1.复用特征,2.旁支block内先通过1x1升维,再接depthwise conv和ReLU,通过增加ReLU的InputDim,来缓解特征的退化情况。

效率优先的网络结构设计

MobileNetV2采用了效率优先的网络结构设计,利用时空局部性,减少对DDR的访问,从而提高计算效率。

缩放因子

在这里插入图片描述

1.2 网络结构

在这里插入图片描述

MobileNetV2

2.1 Inverted Residual Blocks

MobileNetV2的改进

MobileNetV2引入了两个主要的改进:

  • Linear Bottleneck
  • Inverted Residual Blocks

MobileNetV2的结构基于Inverted Residual Blocks。它本质上是一个残差网络设计,传统Residual Block将通道数从少到多进行连接,而此处设计的Inverted Residual Block则将通道数从多到少进行连接,类似于沙漏和梭子形态的区别。此外,保留了Depthwise Separable Convolutions,进一步优化了模型的结构,提高了计算效率。

2.2 Linear Bottlenecks

  • 感兴趣区域在ReLU之后保持非零,近似认为是线性变换
  • ReLU能够保持输入信息的完整性,但仅限于输入特征位于输入空间的低维子空间中。
  • 对于低维度空间处理,论文中把ReLU近似为线性转换。

2.3 对比

2.3.1 对比 MobileNet V1 与 V2 的微结构

在这里插入图片描述
相同点:

都采用Depth-wise(DW)卷积搭配Point-wise(PW)卷积的方式来提特征。这两个操作合起来也被称为Depth-wise Separable Convolution,之前在Xception中被广泛使用。这么做的好处是理论上可以成倍的减少卷积层的时间复杂度和空间复杂度。

不同点:Linear Bottleneck

V2在DW卷积之前新加了一个PW卷积。这么做的原因,是因为DW卷积由于本身的计算特性决定
它自己没有改变通道数的能力,上一层给它多少通道,它就只能输出多少通道。所以如果上一层给的通道数本身很少的话,DW也只能很委屈的在低维空间提特征,因此效果不够好。现在V2为了改善这个问题,给每个DW之前都配备了一个PW,专门用来升维,定义升维系数t=6,这样不管输入通道数是多是少,经过第一个PW升维之后,DW都是在相对的更高维进行着辛勤工作的。

V2去掉了第二个PW的激活函数。论文作者祢其为Linear Bottleneck。这么做的原因,是因为作者认为激活函数在高维空间能够有效的增加非线性,而在低维空间时则会破坏特征,不如线性的效果好。由于第二个PW的主要功能就是降维,因此按照上面的理论,降维之后就不宜再使用RLU6了。

2.3.2 对比 ResNet 与 MobileNet V2 的微结构

在这里插入图片描述
相同点:

MobileNet V2借鉴ResNet,都采用了1x1>3x3>1x1的模式。
MobileNet V2借鉴ResNet,同样使用Shortcut将输出与输入相加(未在上式画出)

不同点:Inverted Residual Block

ResNet使用标准卷积提特征,MobileNet始终使用DW卷积提特征。
ResNet:先降维(0.25倍)、卷积、再升维,而MobileNet V2则是先升维(6倍)、卷积、再降维。直观的形象上来看,ResNet的微结构是沙漏形,而MobileNet V2则是纺锤形,刚好相反。因比论文作者将MobileNet V2的结构称为Inverted Residual Block。这么做也是因为使用DW卷积而作的适配,希望特征提取能够在高维进行。
在这里插入图片描述

2.4 总结

MobileNetV2最难理解的其实是Linear Bottlenecks,论文中用很多公式表达这个思想,但是实现上非常简单,就是在MobileNetV2微结构中第二个PW后无ReLU6。对于低维空间而言,进行线性映射会保存特征,而非线性映射会破坏特征。

MobileNetV3

3.1 高效的网络构建模块

MobileNetV3是神经架构搜索得到的模型,其内部使用的模块继承自:

  1. MobileNetV1模型引入的深度可分离卷积(depthwise separable convolutions);
  2. MobileNetV2模型引入的具有线性瓶颈的倒残差结构(the inverted residual with linear bottleneck);
  3. MnasNet模型引入的基于squeeze and excitation?结构的轻量级注意力模型。

这些被证明行之有效的用于移动端网络设计的模块是搭建MobileNetV3的积木。

3.2 互补搜索

在网络结构搜索中,作者结合了两种技术:资源受限的NAS (platform-aware NAS)和NetAdapt。前者用于在计算和参数量受限的前提下搜索网络的各个模块,因此称之为模块级的搜索 (Block-wise Search),后者用于对各个模块确定之后进行网络层的微调。前者相当于整体结构搜索,后者相当于局部搜索,两者互为补充。

3.3 网络改进

在这里插入图片描述

3.4 MobileNetV3 网络结构!

在这里插入图片描述

总结(神经架构搜索火了)

MobileNetV3-Large在ImageNet分类上的准确度与MobileNetV2相比提高了3.2%,同时延迟降低了15%。MobileNetV3-Large用于目标检测,在COCO数据集上的检测精度与MobileNetV2大致相同,但速度提高了25%。在Cityscapes语义分割任务中,新设计的模型MobileNetV3-Large LR-ASPP与MobileNetV2-RASPP分割精度相近,但速度快了30%。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试宝典:从MobileNetV1到V3,一文全面梳理移动端深度学习模型 的相关文章

随机推荐

  • Python pass 语句

    Python pass 是空语句 是为了保持程序结构的完整性 pass 不做任何事情 一般用做占位语句 Python 语言 pass 语句语法格式如下 pass 测试实例 usr bin python coding UTF 8 输出 Pyt
  • Spring boot实现Rest风格请求及底层原理

    Rest风格的介绍 如今各大公司都是使用restful风格来定义接口 restful也是一套接口的规范 restful可以使我们的接口更加简洁 快捷高效 透明 常见的Rest风格 CRUD 请求方式 对应属性 使用方式 GET 查询 表单请
  • 使用markedjs预览md文件

  • 神经网络时间序列预测PyTorch-Forecastin!

    来源 数据STUDIO 深度学习初学者 本文约5200字 建议阅读8分钟 本文为你介绍了神经网络时间序列预测PyTorch Forecastin PyTorch Forecasting 1 使用神经网络的时间序列预测对数据科学工作者和研究人
  • 地推里的t1结算啥意思

    T1结算 通常是指在地推活动中 结算员工提成的时间点 在这种情况下 T1代表第一天或第一周期的结算时间 即在活动结束后的第一天或第一周进行结算 例如 如果地推活动是在一个星期内进行的 那么T1结算可能是指在活动结束后的第一周内结算员工提成
  • 二叉树的创建和遍历实现

    1 前言 提到 树 Tree 结构 很容易联想到 大树 想到这是 一对多关系 特性的数据结构 其相关的名词 概念很多 子树 SubTree 结点 Node 根结点 Root 叶子 Leaf 终端结点 分支结点 非终端结点 内部结点 孩子 C
  • 在Windows2012下配置Mercurial

    所需的安装文件 xampp win32 1 8 3 4 VC11 installer exe python 2 7 7 amd64 msi tortoisehg 3 0 1 x64 msi mercurial 3 0 1 win amd64
  • windows下使用FFmpeg生成PCM音频文件并播放(通过命令的方式)

    一 PCM文件的定义 PCM文件 模拟音频信号经模数转换 A D变换 直接形成的二进制序列 该文件没有附加的文件头和文件结束标志 Windows的Convert工具能够把PCM音频格式的文件转换成Microsoft的WAV格式的文件 将音频
  • python 历险记(五)— python 中的模块

    目录 前言 基础 模块化程序设计 模块化有哪些好处 什么是 python 中的模块 引入模块有几种方式 模块的查找顺序 模块中包含执行语句的情况 用 dir 函数来窥探模块 python 的内置模块有哪些 结语 参考文档 系列文章列表 前言
  • 大千世界无奇不有,设计师又遇一无赖暴击!

    黑客技术 点击右侧关注 了解黑客的世界 Java开发进阶 点击右侧关注 掌握进阶之路 Linux编程 点击右侧关注 免费入门到精通 有网友发文感叹道 大千世界无奇不有 设计师又遇一无赖暴击 你们的设计我很满意 但是我不会付款的 为什么 你们
  • kylin: build cube Hbase: Region Server 意外退出

    背景 跑kylin 的 build cube 任务 总是在跑任务 数据量200M 的时候挂掉 各种调节yarn的参数都不行 关键跑的时候还没涉及到hbase 因为我跑的是kylin on druid 但是总是跑着跑着 直接ERROR 查看h
  • C++顺序检索、二分检索,并统计比较次数,体现最好、最差、平均三种情况

    实验四 include
  • vscode自动化写代码插件 自动生成代码插件

    直接在vscode中搜索chatGPT中文版安装即可 在代码仓中右侧 就去搜索你想要的代码啦 比如想搜索一个深拷贝
  • COW奶牛!Copy On Write机制了解一下

    前言 只有光头才能变强 在读 Redis设计与实现 关于哈希表扩容的时候 发现这么一段话 执行BGSAVE命令或者BGREWRITEAOF命令的过程中 Redis需要创建当前服务器进程的子进程 而大多数操作系统都采用写时复制 copy on
  • 分布式记账的意义

    今天正式开始 区块链方法论 的第二部分 寻根溯源 的第一章节 说到区块链 大多数的人说的最多的就是分布式记账 没错 分布式记账是区块链技术中最广为人知的特征之一 但几乎没有多少人知道为什么要采用分布式记账 所以 今天我们就来说一说分布式记账
  • 记录一下Popmenu的使用以及一些坑:自定义Popupmenu、Menu、Popupmenu添加icon

    今天就记录一下昨天写bug的时候使用Popupmenu的时候遇到的一些问题吧 尝试使用Popupmenu 避免不必要的坑 我贴的代码都是我最后的代码 记录自己看一下 后来参考的人就看看步骤就行 先看看我最后的效果图 壹 Popupmenu的
  • nginx系统学习5--常用配置6--网络限速配置

    6 6 网络限速配置 6 6 1 操作 01 修改配置文件 worker processes 1 events worker connections 1024 http include mime types default type app
  • SpringBoot自动配置原理,一文搞懂

    阅读收获 1 type 1 2 理解SpringBoot自动配置原理 SpringBoot是什么 SpringBoot 的诞生就是为了简化 Spring 中繁琐的 XML 配置 其本质依然还是Spring框架 使用SpringBoot之后可
  • Win11的Linux子系统WSL2安装Ubuntu的关键步骤

    安装Ubuntu 主要参考 官网教程 注意WSL2的重启时机与WSL有所不同 在Ubuntu 22中 配置用户名和子系统分区的界面已经与官网教程有所不同 用户名不能有大写 分区可以采用默认设置 若卡在Ubuntu安装页面 在Windows设
  • 面试宝典:从MobileNetV1到V3,一文全面梳理移动端深度学习模型

    面试宝典 MobileNetV1 V3 MobileNet的设计及实现 MobileNet是一种适用于移动设备的通用计算机视觉神经网络 可用于分类 目标检测和语义分割等多种任务 为了在移动设备上实现高效的计算和减小模型大小 我们可以采用以下