这就是神经网络 5:轻量化神经网络--MobileNet V1、MobileNet V2、ShuffleNet V1、ShuffleNet V2

概述

深度神经网络模型被广泛应用在图像分类、物体检测等机器视觉任务中,并取得了巨大成功。然而,由于存储空间和功耗的限制,神经网络模型在嵌入式设备上的存储与计算仍然是一个巨大的挑战。

本文介绍几个经典的人工设计的轻量化神经网络模型。(当然也有其它方法对已有的网络模型进行压缩,甚至自动学习设计紧凑的网络模型,本文不涉及这部分)

轻量化神经网络牵涉到的基础知识(如分组卷积、1x1点卷积、深度卷积(depth-wise convolution)、Channel Shuffle)请移步到参考资料的《轻量化神经网络综述》观看,作者的讲解和配图非常通俗易懂。本文很多文字就摘抄自这篇文章。

MobileNet V1 (2017)

MobileNet V1是Google第一个提出的体积小,计算量少,适用于移动设备的卷积神经网络。MobileNet V1之所以如此轻量,背后的思想是用深度可分离卷积(Depthwise separable convolution)代替标准的卷积,并使用宽度因子(width multiply)减少参数量。

深度可分离卷积(Depthwise separable convolution)思想是把一个卷积操作分为深度卷积核1x1卷积两步,也就是channel相关性和spatial相关性解耦:

在这里插入图片描述

一般情况下深度可分离卷积计算量可显著降低到标准卷积计算量的1/8–1/9。

上图右侧在空间及通道维度上的相关性示意图:

在这里插入图片描述

可以看到深度卷积只在空间维度上做了信息融合,通道之间是独立的,而紧跟的1x1卷积则在空间上没有融合,只在通道间进行信息融合。

MobileNet V1的整体结构如下(其中dw表示深度卷积):

在这里插入图片描述

在这里插入图片描述

注意网络最后面使用了全局平均池化,这样就可以适配不同的分辨率图片了,后面会有不同尺寸上对比的。

为了进一步降低Mobilenet v1计算量,对输入输出特征通道数M和N乘以宽度因子α(α∈(0,1),d典型值0.25,0.5和0.75)。当α为0.5的时候,所有层的宽度变为原来的一半,其他值依次类推。论文里使用beta字母表示图片尺寸的缩放比例,范围0-1。

在这里插入图片描述

在这里插入图片描述
上图table4对比了使用和不使用深度可分离卷积的效果,可以看到计算量和参数量都大幅下降了,但是准确率下降很少。

table5比较了在标准Mobilenet分别变窄和变浅之后的效果,发现变窄性能损失小。

table6测试了不同的宽度因子,可以看到0.75是个性价比不错的值。

table7测试了分辨率对Mobilenet的影响。

在这里插入图片描述

table8表明,Mobilenet以少的多的参数和计算量实现了比GoogleNet更好的结果。table9表明了Mobilenet对AlexNet的巨大优势。

作者在论文里还列举了Mobilenet在人脸属性和目标检测上的应用,也取得了很好的成绩。

在这里插入图片描述

MobileNet V2 (2018)

MobileNet V1设计时参考传统的VGGNet等链式架构,既传统的“提拉米苏”式卷积神经网络模型,都以层叠卷积层的方式提高网络深度,从而提高识别精度。但层叠过多的卷积层会出现一个问题,就是梯度弥散(Vanishing)。

MobileNet V2是Google继V1之后提出的下一代轻量化网络,主要解决了V1在训练过程中非常容易梯度弥散(Vanishing)的问题,V2相比V1效果有一定提升。

V2和V1 building block的对比:

在这里插入图片描述

在这里插入图片描述

首先说明一下ReLU6,卷积之后通常会接一个ReLU非线性激活,在Mobile v1里面使用ReLU6,ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。

V2相对V1有以下改进:

  1. 借鉴ResNet的思想增加skip connection。ResNet结构使信息更容易在各层之间流动,包括在前向传播时提供特征重用,在反向传播时缓解梯度信号消失。
  2. 去掉building block最后面1x1之后的ReLu6。作者用了很多篇幅说明ReLU造成的低维度数据坍塌(collapses),channel少的feature map后不应接ReLU,否则会破坏feature map。
  3. 采用Inverted residual block结构。原始的ResNet是先用1x1降维,做完卷积再升维。但是MobileNet V2是先升维(主要为了减少ReLU对特征的破坏,原因见上一条),然后做组卷积,然后降维,和ResNet刚好相反。虽然升维会增加计算量,但是由于中间采用的是组卷积,所以影响不大。

在这里插入图片描述

网络整体配置:

在这里插入图片描述
在这里插入图片描述
其中:

  • t是输入通道的倍增系数(即中间部分的通道数是输入通道数的多少倍)
  • n是该模块重复次数
  • c是输出通道数
  • s是该模块第一次重复时的stride(后面重复都是stride 1)

说了这么多,效果呢?

在这里插入图片描述

注意上图中的1.4是宽度因子。

ShuffleNet V1 (2017)

从论文的引用来看, ShuffleNet V1发布时间介于MobileNet V1和MobileNet V2之间。

ShuffleNet是Face++提出的一种轻量化网络结构,主要思路是使用Group convolution和Channel shuffle改进ResNet,可以看作是ResNet的压缩版本。

组卷积可以降低计算量,但是组卷积有个问题(如下图a),那就是不同组的通道间没有信息交换。channel shuffle的作用就是打乱通道顺序,让不同的组间进行信息交换。下图b和c是两种等价的画法。

在这里插入图片描述

最终作者设计出了自己的building block:ShuffleNet block。如下图(b和c):

在这里插入图片描述

注意上图中没有普通卷积,都是组卷机和深度卷积。如果进行了降采样,为了保证参数数量不骤减,往往需要加倍通道数量。上图©中使用的是拼接(Concat)操作用于加倍通道数

网络整体结构如下:

在这里插入图片描述

table2中ShuffleNet后面的小数表示宽度因子,这个和MobileNet V1里的概念是一样的。

下图是在相似计算量下比精度:

在这里插入图片描述

下图是在类似精度下比计算量:

在这里插入图片描述

作者还在移动设备下作了测试:

在这里插入图片描述

ShuffleNet V2 (2018)

度量计算复杂度的常用指标是浮点运算数,即 FLOPs。然而,FLOPs 是一种间接指标, FLOPs 近似的网络也会有不同的速度。间接指标 (FLOPs) 和直接指标(速度)之间存在差异的原因可以归结为两点:

  • 首先是因为内存访问成本(memory access cost,MAC)和网络的并行化程度这两个影响速度的因素与FLOPS无关
  • 其次是因为相同 FLOPs 的不同网络在在不同平台下的运行时间也是不一样的。

在这里插入图片描述

上图显示对于像 GPU 这样具备强大计算能力的设备而言,IO占很大时间,而在ARM上计算卷积占比更大。

作者通过分析两个代表性的当前最优网络ShuffleNet v1和MobileNet v2,精心设计了一系列可控实验,以专用的代码优化在两个不同的硬件平台(GPU 和 ARM)上验证其性能然后推导出高效网络设计的四个准则(它们扬弃了仅考虑 FLOPs 所带来的局限性):

  • Guideline 1(G1): 输入通道数与输出通道数保持相等可以最小化内存访问成本(memory access cost,MAC)。
  • Guideline 2(G2): 分组卷积中使用过多的分组数会增加内存访问成本(MAC)
  • Guideline 3(G3): 网络结构太复杂(分支和基本单元过多)会降低网络的并行程度
  • Guideline 4(G4): Element-wise 的操作消耗也不可忽略(包括ReLU,Tensor的相加,偏置的相加等等操作)

ShuffleNet V1严重依赖组卷积(违反 G2)和瓶颈形态的构造块(违反 G1)。MobileNet V2使用一种倒置的瓶颈结构,违反了 G1。它在「厚」特征图上使用了深度卷积和 ReLU 激活函数,违反了 G4。自动生成结构的碎片化程度很高,违反了 G3。

作者根据这些准则设计了一种新的网络架构。它是 ShuffleNet V1 的改进版,因此被称为 ShuffleNet V2。

下图是ShuffleNet V1和ShuffleNet V2基础单元

在这里插入图片描述

上图(a) ShuffleNet v1 ,(b)ShuffleNet v1 降采样, ©ShuffleNet v2,(d)ShuffleNet v2 降采样

仔细观察©,(d)对网络的改进我们发现了以下几点:

  1. 在©中ShuffleNet v2使用了一个通道分割(Channel Split)操作。这个操作非常简单,即将 c 个输入Feature分成 c-c’ 和 c’ 两组,一般情况下 c’ = c/2 。
  2. 分割之后的两个分支。为了满足G3, 左侧是一个恒等映射,通道数量保持不变(我感觉也满足G1)。右侧是一个输入通道数和输出通道数均相同的卷积,满足G1。
  3. 在右侧的卷积中, 1x1 卷积并没有使用分组卷积,这部分是为了遵循 G2,部分是因为分割操作已经产生了两个组。
  4. 最后在合并的时候均是使用拼接(Concat)操作,拼接后整个模块的通道数量保持不变,是为了满足G1。使用concat 代替原来的 elementy-wise add,并且后面不加 ReLU,满足G4。
  5. 拼接后接一个和ShuffleNet v1中一样的Channel Shuffle操作。在堆叠ShuffleNet v2的时候,通道拼接、通道洗牌和通道分割可以合并成1个element-wise操作,也是为了满足G4。(理论上是这样,但是实现这一条需要自己定制深度学习框架吧?否则只能一步步来了)

ShuffleNet v2的完整框架配置:

在这里插入图片描述

注意上图右侧不同的宽度因子对应的FLOPS量,后面将会用到这4个等级的网络。

和state-of-the-art的网络比,效果也不差:

在这里插入图片描述

从上图还可以看到,SE单元对ShuffleNet v2有不少的正向作用。

用于目标检测和其他精简网络在相同的计算量下比,准确率和速度都有优势(说明了本文提出的几个原则确实有效):

在这里插入图片描述

注意,上图带*的网络,是在每个标准构建块中的1x1之前增加了一个3x3的深度卷积来增加视野的。只增加的很少的计算量,效果却不差。

参考资料

轻量化神经网络综述

MobileNet tensorflow slim 源码

纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception

MobileNet-V1论文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

MobileNet-V2论文:MobileNetV2: Inverted Residuals and Linear Bottlenecks

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
Devices

ShuffleNet V2: Practical Guidelines for Efficient
CNN Architecture Design

官方解读:为移动 AI 而生——旷视(Face++)最新成果 ShuffleNet 全面解读

旷视科技提出新型轻量架构ShuffleNet V2

ShuffleNet V2 论文阅读笔记

深度学习——分类之MobileNet v2移动端神经网络新选择

轻量化网络ShuffleNet MobileNet v1/v2 解析

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值