MobileNet-V2论文:Inverted Residuals and Linear Bottlenecks, MobileNet-V2网络是由google团队在2018年提出的,相比MobileNetV1网络,准确率更高,模型更小

网络中的亮点

  • Inverted Residuals (倒残差结构)
  • Linear Bottlenecks

Inverted Residuals (倒残差结构)

普通的残差结构

Resnet 网络提供的残差结构,如下图:

  • 首先对输入特征矩阵,通过1x1卷积进行压缩,降低channel的大小
  • 然后通过3x3的卷积核进行卷积处理
  • 最后通过1x1的卷积核来扩充channel

这样就形成了,两头大中间小的瓶颈结构

倒残差结构

MobileNet-V2网络采用的是倒残差结构,网络结构如下图:

  • 首先对输入特征矩阵,通过1x1卷积进行升维,增加channel的大小
  • 然后通过3x3DW卷积核进行卷积处理
  • 最后通过1x1的卷积核进行降维

可以看出:普通的残差结构先通过1x1卷积进行降维,最后通过1x1卷积升维倒残差结构刚好相反,首先通过1x1卷积进行升维,最后通过1x1卷积进行降维,所以它和我们普通的残差结构正好是相反的,因此取名(Inverted residual block)倒残差结构。


还有一个要注意的是:普通残差结构使用的激活函数是relu,但倒残差结构使用的是relu6激活函数。

ReLU6激活函数

  • 对于ReLU激活函数,当我们的输入值小于0的时候,默认都将它置0.当输入值大于0的时候,输出值跟输入值一样,不做处理
  • 对于ReLU6激活函数,同样当我们的输入值小于0的时候,默认都将它置0.在[0,6]区间内我们也同样不会改变它的输入值,但是当输入值大于6的时候,就会将输出值置为6.

Linear Bottlenecks

在原文中,倒残差解雇最后1x1卷积层,它使用了线性激活函数,而不是我们之前所说的ReLU激活函数。为什么要这么做呢,在原论文中作者进行了相关实验。

假设我们输入的是二维矩阵,channel=1.分别使用不同的矩阵 T T T将它变换到不同维度上,在使用ReLU激活函数进行输出,然后在使用逆矩阵 T − 1 T^{-1} T−1将它还原为2D的特征矩阵。当我们的矩阵 T T T的维度是2和3的时候对应的是图中output/dim=2output/dim=3,这两幅图。通过这两幅图我们可以知道当还原为2维矩阵会丢失很多信息。但随着矩阵 T T T维度不断加深丢失的信息就越来越少。

通过该实验可以了解ReL激活函数对低纬特征造成大量损失, 由于我们倒残差结构是两头细中间粗的结构,所以输出的时候是一个低纬的特征。为了避免信息的丢失我们就需要使用一个线性的激活函数替代ReLU激活函数。



对于倒残差结构,首先通过1x1卷积,它的激活函数为ReLU6;紧接着通过DW卷积,卷积核为3x3,它的激活函数为Relu6,最后在通过再通过1x1的卷积处理,使用的是Linear激活函数而不是ReLU6激活函数,也就是对应于表中所给的每一层信息。

首先对于输入特征为h x w x k(高、宽、channel), 使用1x1的卷积核对它进行升维处理,经过升维后,输出特征矩阵的channel变为tk,t表示扩充因子。紧接着第二层,它的输入对应于上一层的输出h x w x tk,使用DW卷积,卷积核为3x3步距为s,激活函数为ReLU6,经过DW卷积,它不会改变channel的大小,输出的channel和输入是一样的,同时由于我们步距为s,因此输出特征矩阵h,w变为原来的1/s倍。最后通过1x1的卷积层,使用Linear激活函数,进行降维操作,降维后输出的channel个数为 k ′ k^{'} k′.

注意: 在MobileNetV2版本中,它的倒残差结构,并不是每个倒残差结构都有shortcut分支(捷径分支),只有当stride=1且输入特征矩阵与输出特征矩阵的shape相同时才有shortcut分支。

MobileNet-V2 网络结构


网络结构图图中参数说明:

  • t是扩展因子
  • c是输出特征矩阵深度channel
  • n是bottleneck的重复次数, bottleneck这里指倒残差结构
  • s是步距

其中这里的s代表的是每个block(多个bottleneck组成)第一层bottleneck的步距其他都是为1的),比如这里表中第3行对应n=2的时候,对应的bottleneck需要重复2遍的,对它而言,它的第一层bottleneck步距是为2的,它的第二层步距s是等于1的。

另外需要注意的是,在网络结构图中第一个bottleneck,它这里的t是等于1的,也就是说扩展因子为1,就是说第一层卷积层对输入特征的深度是没有做调整的,并且这层的步距s=1tensorflowpytorch官方实现是没有使用1x1的卷积的,直接使用后面的DW卷积的,因此第一个bottleneck中的1x1卷积是可以不要的。

举例说明:只有当stride=1且输入特征矩阵与输出特征矩阵的shape相同时才有shortcut分支。

对于图中红框标出的block,总共有3个bottleneck,它的第一层肯定是没有shutcut分支的,因为输入特征channel64,输出channel为96,输入输出特征矩阵channel是不相等的,没法使用shutcuts的add操作。对于第二层,它的步距还是等于1的,我们说过这里的步距s只针对第一层,其他层s都为1.然后它的输入特征矩阵是上一层的输出特征矩阵的channel,即channel为96,然后它的输出特征也是等于96的,因此输入输出的特征矩阵尺寸和channel都一样,因此可以通过shortcuts进行相加。

最后一层是一个卷积层1x1x1280,这里的卷积层就是一个全连接层。这里的k对应于我们的分类个数

网络的性能对比

MobileNet-V2 论文中给出了网络性能对比

分类任务


对于MobieNet V2 Top1准确率为72.0,相对于MobieNet V1准确率为70.6,准确率提升了。同时参数,运算量和运算时间都明显比MobieNet V1更加优秀。在cpu上MobieNet V2 运算时间只有75ml,基本上可以实现在移动设备上实时推理效果。

当卷积核倍率因子为1.4时,MobieNet V2 TOP1准确率达到74.7,比论文中其他网络的准确率高

目标检测论文


在论文中,将MobileNet V2与我们的SSD进行联合使用的,也就是说将我们MobileNet当作我们的backbone,并将SSD当中的一些卷积层也换成了我们深度可分(DW+PW卷积,相比于最原始的 SSD300、SSD512,YOLOV2,以及MobileNet V1+SSD,它的准确率为22.1%比YOLO V2要好,其中参数,运算量,运算时间都是最优的,在CPU中检测时间达到了200ms.随着MobieNet网络的提出,实现了在移动识别、嵌入式设备中跑我们的模型了。

MobileNet系列(2):MobileNet-V2 网络详解相关推荐

  1. MobileNetv1、v2网络详解、使用pytorch搭建模型MobileNetv2并基于迁移学习训练

    1.MobileNetv1网络详解 传统卷积神经网络专注于移动端或者嵌入式设备中的轻量级CNN网络,相比于传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量.(相比VGG16准确率减少 ...

  2. mobileNet v2网络详解

    转载博文:https://blog.csdn.net/u011995719/article/details/79135818

  3. 【YOLO系列】YOLOv5超详细解读(网络详解)

    前言 吼吼!终于来到了YOLOv5啦! 首先,一个热知识:YOLOv5没有发表正式论文哦~ 为什么呢?可能YOLOv5项目的作者Glenn Jocher还在吃帽子吧,hh 目录 前言 一.YOLOv5 ...

  4. 第十六章 ConvNeXt网络详解

    系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网 ...

  5. kubernetes系列11—PV和PVC详解

    kubernetes系列11-PV和PVC详解 原文:kubernetes系列11-PV和PVC详解 本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 ...

  6. GoogleNet网络详解与keras实现

    GoogleNet网络详解与keras实现 GoogleNet网络详解与keras实现 GoogleNet系列网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 Incepti ...

  7. EfficientNetV2网络详解

    原论文名称:EfficientNetV2: Smaller Models and Faster Training 论文下载地址:https://arxiv.org/abs/2104.00298 原论文 ...

  8. Mask RCNN(1): 网络详解

    1.Mask RCNN介绍 Mask R-CNN论文地址:https://arxiv.org/abs/1703.06870,论文于2017年发表在ICCV上,获得了2017年ICCV的最佳论文奖. 我 ...

  9. Keras深度学习实战(22)——生成对抗网络详解与实现

    Keras深度学习实战(22)--生成对抗网络详解与实现 0. 前言 1. 生成对抗网络原理 2. 模型分析 3. 利用生成对抗网络生成手写数字图像 小结 系列链接 0. 前言 生成对抗网络 (Gen ...

最新文章

  1. MHA高可用主从复制实现
  2. DAY4-打卡第四天-2018-1-12
  3. 2020年联通软件研究院校招笔试第一题
  4. Python基础——PyCharm版本——第四章、基础语法-分支语句(条件判断if语句)
  5. 【转】VTK修炼之道1_初识VTK
  6. Linux死锁检测-Lockdep
  7. 界面开发用qt还是java,做windows界面,用QT还是MFC?
  8. 快速启动工具入门——以Launchy为例(一)
  9. 计算机联锁的应用领域,全电子计算机联锁系统优缺点
  10. iShot--免费Mac截图工具
  11. 软件项目管理EAC、ETC的计算
  12. 2021年西式面点师(中级)考试题库及西式面点师(中级)考试试题
  13. ShapeShift、DAOs和工作的未来
  14. intuitionistic fuzzy set 运算规则python实现
  15. 恒生期货交易时间(恒生指数期货交割日期)
  16. 精细化运营店铺,引导店铺走向正轨,带你玩转淘宝
  17. 算术编码的一些关键性理解
  18. 计算机一级设置项目符号,重推计算机等级考试题库:一级MS Office第三章“项目符号和段落编号”...
  19. Chipmunk物理引擎
  20. PYTHON笔记第十一章之pygame.mixer

热门文章

  1. 计算机按键mu,计算器的使用
  2. 平板电脑进化论:从玩具到工具
  3. Python面向对象编程-面向对象
  4. php导入excel 分页读取数据,[求助]Txt文件大量数据导入excel,如何分页?
  5. AI中基本工具介绍太原UI设计师分享给你【平面设计、logo设计】
  6. 古月居深度评测Transbot ROS机器人,快来看看古月老师怎么说的吧
  7. 【第137期】游戏策划:不用编程,在游戏里做一个双开门
  8. 威联通 TS-464C 安装 QTS 5.1.0
  9. Unity发布Android版本
  10. python能输出 10000 以内所有素数