【深度学习】轻量级神经网络之MobileNet

前言:
本文为MobileNet的简单介绍,尝试最少的废话进行介绍,适合快速入门。
更简介的内容参考【笔试面试】MobileNet v1v2v3 简介,只有要点,适合记忆

背景

移动设备硬件资源和算力有限,不适合复杂深度学习模型。

轻量级神经网络

业内提出了SqueezeNet、ShuffleNet、NasNet、MnasNet、MobileNet以及EfficientNet等轻量级网络模型。本文主要介绍MobileNet。

MobileNet

MobileNet V1
核心

采用了深度可分离卷积降低计算量。
在这里插入图片描述

图1 深度可分离卷积

普通卷积:
对于输入 W × H × C W\times{H}\times{C} W×H×C C {C} C为输入通道数),以 K × K K\times{K} K×K卷积核为例,卷积核实际大小为 K × K × C {K}\times{K}\times{C} K×K×C。那么 N N N个卷积核进行卷积操作
计算量 = W × H × K × K × C × N W\times{H}\times{K}\times{K}\times{C}\times{N} W×H×K×K×C×N
参数量 = K × K × C × N {K}\times{K}\times{C}\times{N} K×K×C×N
MobileNet的深度可分离卷积:
在这里插入图片描述

图2 深度可分离卷积操作示意图

将普通卷积拆分为一个dw (depthwise convolution)和一个1*1的卷积(文中叫pw (pointwise convolution))操作。
dw可理解为 K × K × C {K}\times{K}\times{C} K×K×C的卷积核变成 C {C} C K × K {K}\times{K} K×K卷积核,分别对每个通道进行卷积操作,再进行拼接得到 W × H × C W\times{H}\times{C} W×H×C的中间特征。pw则是采用 N N N 1 × 1 × C 1\times{1}\times{C} 1×1×C卷积核再次进行卷积操作,得到最终的输出。
计算量 = W × H × K × K × C + W × H × 1 × 1 × C × N W\times{H}\times{K}\times{K}\times{C}+W\times{H}\times{1}\times{1}\times{C}\times{N} W×H×K×K×C+W×H×1×1×C×N
参数量 = K × K × C + 1 × 1 × C × N {K}\times{K}\times{C}+{1}\times{1}\times{C}\times{N} K×K×C+1×1×C×N
比较:
参数量比值(速度可分离卷积/普通卷积) =
K × K × C + 1 × 1 × C × N K × K × C × N = 1 N + 1 K 2 \frac{{K}\times{K}\times{C}+{1}\times{1}\times{C}\times{N}}{{K}\times{K}\times{C}\times{N}}={\frac{1}{N}+{\frac{1}{K^2}}} K×K×C×NK×K×C+1×1×C×N=N1+K21
计算量比值(速度可分离卷积/普通卷积) =
W × H × K × K × C + W × H × 1 × 1 × C × N W × H × K × C × K × N = 1 N + 1 K 2 \frac{W\times{H}\times{K}\times{K}\times{C}+W\times{H}\times{1}\times{1}\times{C}\times{N}}{W\times{H}\times{K}\times{C}\times{K}\times{N}} ={\frac{1}{N}+{\frac{1}{K^2}}} W×H×K×C×K×NW×H×K×K×C+W×H×1×1×C×N=N1+K21
所以 K = 3 K=3 K=3的时候(卷积核数 N N N一般比较大),参数量和计算量都降低到了原来的 1 8 \frac{1}{8} 81 1 9 \frac{1}{9} 91之间。

其他

  • 网络结构中步长为2的卷积较有特点,卷积的同时充当下采样的功能。这种形式也正在逐渐代替池化层。

  • 此外作者提出了ReLU6激活函数: R e L U 6 = m i n ( m a x ( 0 , x ) , 6 ) ReLU6=min(max(0,x),6) ReLU6=min(max(0,x),6)ReLU6将小数点后的信息限制为3位,这意味着我们可以保证小数点后的精度(为在移动端设备float16的低精度的时候,也能有很好的数值分辨率)。

MobileNet V2

v1中出现的问题:ReLU导致信息损耗,且通道数越少,这种损耗越严重。

核心

提出了Inverted Residuals(倒残差) and Linear Bottlenecks (线性瓶颈)

Linear Bottlenecks (线性瓶颈)

在这里插入图片描述

图3 Linear Bottlenecks (线性瓶颈)结构示意图

简单的说就是,为了降低计算成本MobileNet在输出Feature Map时采用了较小的模型宽度,即通道数。而通道数较少时使用ReLU激活函数导致信息严重损耗,所以当通道数较少的时候采用线性激活函数,Linear Bottlenecks (线性瓶颈)由此得名。

我们当然不能把ReLU全部换成线性激活函数,不然网络将会退化为单层神经网络,一个折中方案是在输出Feature Map的通道数较少的时候也就是bottleneck部分使用线性激活函数,其它时候使用ReLU。

Inverted Residuals(倒残差)

在这里插入图片描述

图4 传统残差结构(左图)和Inverted Residuals(倒残差,右图)

在ResNet的残差结构中,先降低通道数再卷积(减少计算量),再调整通道数后同输入合并。(两头大中间小)
而在Inverted Residual Block中,为了避免过少的通道数导致信息损失,先将通道数进行了扩增(速度可分离卷积已经实现了较小的计算量,增大通道数可以有效避免信息损失),再减少。(两头小中间大)

总结,相较于V1,V2模型更深,体积更小,速度更快!

MobileNet V3

将关注点从减少参数转移到减少操作的数量(MAdds)和实际测量的延迟。分为Large和Small两个版本,Large版本适用于计算和存储性能较高的平台,Small版本适用于硬件性能较低的平台。
使用神经架构搜索(NAS)技术生成的网络结构。

  • 引入了5×5大小的深度卷积代替部分3×3的深度卷积;

  • 引入Squeeze-and-excitation(SE)模块,参考图5~8;

  • 引入 h-swish(HS)激活函数;
    在这里插入图片描述

  • 结尾两层逐点卷积不使用批规范化(Batch Norm),MobileNetV3结构图中使用NBN标识。
    在这里插入图片描述

图5 SE模块结构示意图

在这里插入图片描述

图6 SE模块的Squeeze部分结构示意图

在这里插入图片描述

图7 SE模块的Excitation部分结构示意图

在这里插入图片描述

图8 ResNet和MobileNet中所用的SE模块结构对比
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值