当前位置: 首页 > news >正文

轻量化网络 ---- MobileNet V2:Inverted residual with linear bottleneck

目录

零:预备知识

一、MobileNet V1 回顾

二、MobileNet V2(主要创新点、与MobileNetV1/ResNet的区别)

2.1 主要创新点

2.2  与MobileNetV1/ResNet的区别

2.3 ReLU6激活函数

2.4 详细探讨MobileNetV2核心层 

2.5 标准卷积、深度可分离卷积、 带有线性bottleneck的深度可分离卷积、

 2.6 标准残差结构和逆转残差结构

2.7 各大网友绘制的MobileNetV2核心层 

三、为什么要这样设计MobileNetV2的核心层?

四、MobileNetV2网络结构 

五、MobileNetV2实验部分 

5.1 1×1降维后激活函数选择、残差连接位置的选择 

六、Inverted升维的数学原理


 

零:预备知识

卷积神经网络概述
https://www.bilibili.com/video/BV1sb411P7pO
https://www.bilibili.com/video/BV1gb411P7JD
卷积神经网络精讲
https://www.bilibili.com/video/BV1K7411W7So?p=5
https://www.bilibili.com/video/BV1K7411W7So?p=6
经典卷积神经网络结构
https://www.bilibili.com/video/BV1K7411W7So?p=11
MobileNet V1
https://www.bilibili.com/video/BV16b4y117XH

一、MobileNet V1 回顾

 MobileNet V1的局限:
没有残差连接
很多Depthwise卷积核训练出来是0。究其原因是:
1> 卷积核权重数量和通道数量太少,太“单薄”;
2> ReLU激活函数;
3> 低精度的浮点数表示;

二、MobileNet V2(主要创新点、与MobileNetV1/ResNet的区别)

2.1 主要创新点

Inverted residual & linear bottleneck

2.2  与MobileNetV1/ResNet的区别

在MobileNet V1中,先depthwise 后pointwise,在这个过程中都使用ReLU6激活函数。
在MobileNet V2中,先pointwise升维,在depthwise,然后在pointwise降维。第二个pointwise后使用 Linear 激活函数。 如下图所示:

 

MobileNetV2基本单元

ResNet基本单元和MobileNet V2基本单元对比:
ResNet中的bottleneck残差模块,先pointwise降维,然后3×3标准卷积,然后再pointwise升维。
MobileNet V2 中的基本单元,先pointwise升维,然后depthwise,然后再pointwise降维。
如下图所示:

 区别:
1. ResNet中的 Bottleneck 先降维后升维度,而MobileNetV2中是先升维后降维;
2.ResNet中的bottleneck用到的是标准卷积,而MobileNetV2中用到的是depthwise卷积。
3. ResNet中使用的全部是ReLU激活函数,而MobileNetV2中使用的是ReLU6激活函数以及Linear激活函数。
4.ResNet中的所使用的激活函数均为非线性激活函数,而MobileNetV2中既使用了非线性激活函数,也使用了线性激活函数。
5. 残差连接的位置:在ResNet中shortcut连接的是两个低维的张量,而在MobileNetV2中shortcut连接的是两个高维的张量。

2.3 ReLU6激活函数

标准的ReLU激活函数如下图所示:

ReLU激活函数

ReLU6激活函数如下所示:

ReLU6激活函数( https://machinethink.net/blog/mobilenet-v2/)

 使用ReLU6激活函数的作用:使用ReLU6激活函数使得低精度浮点数能够更好的表示。

2.4 详细探讨MobileNetV2核心层 

https://yinguobing.com/bottlenecks-block-in-mobilenetv2/ 

MobileNetV1核心层

 

MobileNetV2核心层

MobileNetV2 核心层输入输出关系表如下所示: 


2.5 标准卷积、深度可分离卷积、 带有线性bottleneck的深度可分离卷积、

 2.6 标准残差结构和逆转残差结构

 

2.7 各大网友绘制的MobileNetV2核心层 

MobileNetV2核心层图例(来源:https://www.researchgate.net/figure/MobileNetV2-with-inverted-residuals-Process-for-making-linear-bottlenecks-with-the fig2 346607345)
注:图例中的ReLU表示的是ReLU6激活函数

 

MobileNetV2核心层,来源于: 
https://ai.googleblog.com/2018/04/mobilenetv2-next-generation-of-on.html 

 

MobileNetV2核心层,来源于:https://machinethink.net/blog/mobilenet-v2

三、为什么要这样设计MobileNetV2的核心层?

 原论文中给出了这样的解释:

四、MobileNetV2网络结构 

 

五、MobileNetV2实验部分 

5.1 1×1降维后激活函数选择、残差连接位置的选择 

      首先,在MobileNetV2中验证了在经过1×1降维后是否使用线性激活函数,如下图(a)所示。图(a)表明,使用线性激活函数时网络的top-1准确率比使用其他激活函数的情况要高。
      其次,探索出残差连接连在哪里比较好?如图(b)所示。图(b)表明,残差连接连在bottlenecks上网络的top-1准确率要高于连在expansions上时的情况。并且这两者均高于没有残差连接的情况。

 

六、Inverted升维的数学原理

也可以借助神经网络模型来理解上述过程,如下所示: 

 

内容未完,后续待更新!! 


http://www.mrgr.cn/news/33423.html

相关文章:

  • 机器学习(贝叶斯算法,决策树)
  • 创新培养:汽车零部件图像分割
  • 基于微信小程序的乡村研学游平台设计与实现,LW+源码+讲解
  • Linux软件包管理与Vim编辑器使用指南
  • Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)
  • 解决msvcr100.dll丢失的方法,5个实测可靠的解决方法
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(3)文件共享与标准IO
  • 二进制和位运算
  • C++模版初阶
  • 初识APC机制实现APC注入
  • 有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳
  • NLP 序列标注任务核心梳理
  • Linux —— 网络基础(一)
  • MySQL锁机制
  • 计算机毕业设计 基于Python的荣誉证书管理系统 Django+Vue 前后端分离 附源码 讲解 文档
  • 详解ps用法
  • 求10000以内n的阶乘(高精度运算)
  • golang学习笔记5-基本数据类型的转换
  • Transcipher:从对称加密到同态加密
  • 部署林风社交论坛/社交论坛linfeng-community遇到问题集合
  • 大数据:驱动企业变革的引擎
  • C++如何进阶? -- 整理一些学习资料
  • Mixamo动画使用技巧
  • 充电桩小程序系统开发源码
  • 黑马十天精通MySQL知识点
  • ollama设置开机启动服务