【MobileNet V2】MobileNet V2

news2025/1/19 14:18:07

目录

  • 1、简介
  • 2、论文创新点
    • 1)倒残差结构 -- Inverted residual block
    • 2)ReLU6
  • 3、网络结构

文献名称:MobileNetV2: Inverted Residuals and Linear Bottlenecks
发表时间:2018年
下载地址:https://openaccess.thecvf.com/content_cvpr_2018/papers/Sandler_MobileNetV2_Inverted_Residuals_CVPR_2018_paper.pdf


1、简介

Mobile Net V1 存在以下问题:

  • 没有残差结构
  • 在训练结束后,发现 depth-wise 卷积的很多参数的值都为0,原因有以下3个:
    • depth-wise 卷积 权重数量太少; 通道数处理太单薄,只能处理二维信息,没有处理到三维信息
    • ReLU 导致小于0的输出都为0,参数也为0
    • 移动设备的低精度 数据表示

Mobile Net V2 就以上的问题,做了进一步的改善。


2、论文创新点

1)倒残差结构 – Inverted residual block

ResNet 的 residual block 和 Mobile Net 的 Inverted residual block 的相似与区别:

  • 相似: 结构都是 conv 1x1 → \rightarrow conv 3x3 → \rightarrow conv 1x1, 最后做一个跨层连接 shortcut
  • 区别:
    • residual block 的通道数 是先降后升,而 Inverted residual block 的通道数 是先升后降
    • residual block 的中间一层的 conv 3x3 是标准的 3x3卷积,而 Inverted residual block 中间一层做的是 depth-wise convolution
    • residual block 的 shortcut 连接两个高维层(channel 数多的两个层),而 Inverted residual block 连接两个低维层
      (有的地方会写 Inverted residual block 跨层连接两个 bottleblock,bottleblock 指的就是通道数少的瓶颈层。)
    • residual block 每一层后面跟的都是 ReLU 激活函数,而 Inverted residual block 第一个conv 1x1 和中间的 conv 3x3 后面跟的都是 ReLU6 ,最后一个 conv 1x1 做完降维后,跟的是一个 linear 线性激活函数。也就是下图中 对角线斜纹表示的层后面跟的是 线性激活层
      在这里插入图片描述

Inverted residual block 的结构说明:

  • 先做 conv 1x1 ,将 channel 数从 k k k维 升到 t k tk tk 维, t t t是拓展因子(expansion factor)。这一层的计算量是 h × w × k × ( t k ) h \times w \times k \times (tk) h×w×k×(tk)
  • 再做 depth-wise convolution,保持 channel 数不变。这一层的计算量是 h × w × ( t k ) × 3 2 h \times w \times (tk) \times 3^2 h×w×(tk)×32
  • 最后做 conv 1x1,维度从 t k tk tk 降到 k ′ k' k 。这一层的计算量是 h × w × ( t k ) × k ′ h \times w \times (tk) \times k' h×w×(tk)×k
    在这里插入图片描述
    所以,一个 Inverted residual block 的计算量一共为: h × w × ( t k ) × ( k + 3 2 + k ′ ) h \times w \times (tk) \times (k + 3^2 + k') h×w×(tk)×(k+32+k)

为什么要使用 倒残差结构呢?

(先说结论再细讲) 因为非线性变换 (ReLU) 会造成信息丢失,所以需要先升维,创造出冗余维度,再在冗余维度中做 非线性变换 (ReLU),最后再把维度降回去,只提取有用的必要信息。

作者做了一个实验,将一个2维空间中 n个点组成的 螺旋线 X 2 × n X_{2 \times n} X2×n, 将其经矩阵 T m × 2 T_{m \times 2} Tm×2 映射到 m 维 ,并做 ReLU激活。表达式为: Y = R e L U ( T m × 2 ⋅ X 2 × n ) Y = ReLU( T_{m \times 2} \cdot X_{2 \times n}) Y=ReLU(Tm×2X2×n)。 再将 Y Y Y 通过 T − 1 T^{-1} T1 转换回 二维空间,记为 X ^ \hat X X^,对比 X X X X ^ \hat X X^,观察信息丢失情况

** m维 就对应下图中的 dim = 2 / 3 / 5 / 15 / 30
** T − 1 T^{-1} T1 T T T 的广义逆矩阵

实验结论是,如果 映射的维度 m比较低,经过ReLU变化后,就会丢失很多信息。 如果 维度m比较高,做ReLU变换后,丢失的信息就少很多。 这也就是为什么 conv 1x1 降维后,不使用 ReLU,而是使用线性激活函数了。

在这里插入图片描述


2)ReLU6

为什么采用 ReLU6 呢?
因为 Mobile Net 的设计就是为了应用于 移动设备 或者 内嵌式设备 这种内存比较小的设备上,一般要求低精度表示,比如 使用 8 bit 表示一个数(应该是没有 float8 这种通用数据类型的,这种数据类型用于完全特定目的)。

(以下这句话是个人理解,如有不对请指出)
所以,使用 ReLU6 就可以将数值限制在6之内,整数部分只占3位,剩下的 bit 位 用于表示小数部分,也只能表达较低精度了。 (相关浮点数精度解释 看这里)

那为什么是 6,不是5, 7, 8 呢 ?
作者说 : the value 6 that fits best in 8 bits, which probably is the most use-case.
移动端大多数使用场景采用的是 float8 ,使用 6 是最合适的。


3、网络结构

在这里插入图片描述
t :expansion rate
c : 输出的维度数
n : bottleneck 重复的次数
s : (重复的n个模块中)首个模块的步长,剩下的模块步长都为1

其中,block 有的需要跨层连接,有的不要,判断标准是 是否下采样了,下采样的block因为输入和输出尺寸不一样,不能shortcut。只有没有下采样的block(stride=1的block)才有 shorcut。 如下图:

在这里插入图片描述
代码地址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue基础入门讲义(四)-组件化

文章目录1.引言2.定义全局组件3.组件的复用4.局部注册5.组件通信5.1.父向子传递props5.2.传递复杂数据5.3.子向父的通信1.引言 在大型应用开发的时候,页面可以划分成很多部分。往往不同的页面,也会有相同的部分。例如可能会有相同的头部导航。 但是如果…

第二章SpringBoot基础学习

文章目录SpringBoot依赖管理特性依赖管理开发导入starter场景启动器SpringBoot自动配置特性自动配好Tomcat自动配好SpringMVC默认的包结构各种配置拥有默认值按需加载所有自动配置项SpringBoot注解底层注解ConfigurationImport导入组件Conditional条件装配ImportResource导入Sp…

Python入门自学进阶-Web框架——33、瀑布流布局与组合查询

一、瀑布流,是指页面布局中,在显示很多图片时,图片及文字大小不相同,导致页面排版不美观如上图,右边的布局,因为第一行第一张图片过长,第二行的第一张被挤到第二列了。示例:def flow…

大数据框架之Hadoop:MapReduce(八)常见错误及解决方案

1、导包容易出错。尤其Text和CombineTextInputFormat。 2、Mapper中第一个输入的参数必须是LongWritable或者NullWritable,不可以是IntWritable. 报的错误是类型转换异常。 3、java.lang.Exception: java.io.IOException: Illegal partition for 13926435656 (4)&…

51单片机LCD1602的使用

文章目录前言一、LCD1602简单介绍二、LCD1602中各个引脚的作用四、LCD1602命令解析1.写命令2.写数据3.清屏指令4.光标归位指令5.进入模式设置指令6.显示开关控制指令7.设定显示屏或光标移动方向指令三、LCD1602代码编写四、代码测试总结前言 本篇文章将为大家讲解LCD1602的使用…

CPU扫盲-CPU如何执行指令以及流水线技术

在CPU扫盲-CPU与指令集中阐述了CPU与指令集之间的关系,并在CPU扫盲-自研指令集中以创造者的身份深入讲解了指令集,这篇文章则是针对CPU的专场,以x86架构下的CPU为例具体分析一下CPU如何执行指令。 计算机基本硬件由控制器、储存器、运算器、输…

基于java的五子棋游戏设计

技术:Java、JSP等摘要:随着互联网迅速的发展,网络游戏已经成为人们普遍生活中不可或缺的一部分,它不仅能使人娱乐,也能够开发人的智力,就像本文所主要讲的五子棋游戏一样能挖掘人们聪明的才干与脑袋的机灵程…

【大数据 AI 人工智能】数据科学家必学的 9 个核心机器学习算法

如今,机器学习正改变着我们的世界。借助机器学习(ML),谷歌在为我们推荐搜索结果,奈飞在为我们推荐观看影片,脸书在为我们推荐可能认识的朋友。 机器学习从未像在今天这样重要。但与此同时,机器学习这一领域也充斥着各种术语,晦涩难懂,各种机器学习的算法每年层出不穷…

思科2.7.6 Packet Tracer - Implement Basic Connectivity(作业)

Packet Tracer - 实施基本连接地址分配表目标第 1 部分:对 S1 和 S2 执行基本配置第 2 部分:配置 PC第 3 部分:配置交换机管理界面背景信息在这个练习中,您会首先执行基本的交换机 配置。然后您会通过在交换机和 PC 上配置 IP 编址…

【C++】string

【C修炼秘籍】string 目录 【C修炼秘籍】string 文章目录 前言 一、标准库里的string 二、string常用接口功能简介(具体使用和底层转到模拟实现) 1、string类的常见构造函数 2、string类对象的容量操作 3、string类对象的访问及遍历操作 4、 string类对象…

数影周报:LastPass数据泄露事件最新细节

本周看点:LastPass:关键运维员工遭定向攻击;Waymo今年第二轮裁掉137名员工;国家网信办发布《个人信息出境标准合同办法》;京麦商家“取消订单页面”升级;“智研汇”获千万级天使轮投资......数据安全那些事…

ubuntu-8-安装nfs服务共享目录

Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器及使用教程 ubuntu16.04挂载_如何在Ubuntu 20.04上设置NFS挂载 Ubuntu 20.04 设置时区、配置NTP同步 timesyncd 代替 ntpd 服务器 10.0.2.11 客户端 10.0.2.121 NFS简介 (1)什么是NFS NFS就是Network File System的缩写&#xf…

W800系列||STM32最小版|CKLINK|待完善|学习(3-2):自制cklink调试工具测试(win11系统识别错误待解决)

续前文: W800系列|ST-LINK|STM32最小版|HEX文件|CKLINK|DebugServer|学习(3-1):自制cklink调试工具_打酱油的工程师的博客-CSDN博客 硬件接线 CK-LINK W806 3V3 3V3 RST RST(复位脚) TCK CLK&…

MySQL日志管理

日志管理在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这种时候,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了数据库中数据丢失或被破坏可能原因:误删除数据库数据库工作时&a…

openpnp - error - 回位精度差的问题

文章目录openpnp - error - 回位精度差的问题概述齿隙矫正方法不能用openpnp默认的, 要自己选合适的方法ENDopenpnp - error - 回位精度差的问题 概述 用openpnp向导进行完x/y齿隙校正后, 进行回位精度测试. 在设备上挑选2个点: 主基准点次基准点 都是固定位置(将带mark点的…

Go中sync 包的 Once 使用

文章目录背景One 简介示例注意源码解读背景 在系统初始化的时候,某些代码只想被执行一次,这时应该怎么做呢,没有学习 Once 前,大家可能想到 声明一个标识,表示是否初始化过,然后初始化这个标识加锁&#x…

Lazada(来赞达)箱包什么产品好卖?东南亚热销国家选品分析

东南亚市场:存在巨大的跨境电商出口机遇 和2021年前对比,2022年越南、马来西亚等东南亚国家普遍实现了贸易正增长,欧美国家则多仍处于负增长状态。 同时2022年欧美等发达经济体通胀压力迅速抬升,这直接影响到国家间货币汇率&…

微信小程序如何配置并使用less?

微信小程序如何配置并使用less?1、在VScode中下载Less插件2、在微信小程序中依次点击如下按钮3、选中刚在vscode中下载安装的插件文件4、在设置中选中编辑器设置5、找到less进行json配置6、在json文件中的less.compile添加如下配置7、如何使用1、在VScode中下载Less…

深圳大学计软《面向对象的程序设计》实验7 拷贝构造函数与复合类

A. Point&Circle(复合类与构造) 题目描述 类Point是我们写过的一个类,类Circle是一个新的类,Point作为其成员对象,请完成类Circle的成员函数的实现。 在主函数中生成一个圆和若干个点,判断这些点与圆的位置关系,…

最佳iOS设备管理器imazing 2.16.9官网Mac/Windows下载电脑版怎么下载安装

imazing 2.16.9官网Mac/Windows下载电脑版是款针对苹果设备所打造的管理工具。iMazing为用户提供多种设备管理功能,每一位用户都能以自己的形式管理苹果设备。iMazing与苹果设备连接后,用户就可以轻松传输文件,浏览保存信息等。 应用介绍 iM…