轻量级网络之MobileNet v3

轻量级网络之MobileNet v3

  • 前言
  • 手工改进部分
  • 网络结构
  • 实验对比
  • h-σ、h-swish


欢迎交流,禁止转载!!

前言

《Searching for MobileNetV3》
论文地址:https://arxiv.org/abs/1905.02244
2019年谷歌提出的,MobileNet V3本质上是对MnasNet的手工改进,下图是整个改进的过程:
轻量级网络之MobileNet v3_第1张图片
性能还是不错:
轻量级网络之MobileNet v3_第2张图片

以MnasNet-A1作为起点,使用NetAdapt对其进行优化(NetAdapt是一种算法,可自动简化预训练模型,直到达到给定的延迟,同时保持较高的准确性)。 除此以外,作者还手工进行了许多改进。感觉也就看看这些手工改进的部分吧,暴力的搜索网络也不适合大众这样做。

手工改进部分

建议先了解MobileNet v1 、MobileNet v2。
1)更换Block
加入了SE模块,更新了激活函数。NL表示非线性激活函数,这里用了很多个不同的激活函数。同样也是当stride=1且input_c=output_c时,才有shortcut。
轻量级网络之MobileNet v3_第3张图片
轻量级网络之MobileNet v3_第4张图片
不过这里的SE模块不是使用的sigmoid作为最后的gating机制,用的是Hard-sigmoid。Squeeze之后的通道数固定为Excitation通道数的1/4。“增加的复杂性并不能单调地提高性能,而较小的比率则会显著增加模型的参数大小。—SENet”
轻量级网络之MobileNet v3_第5张图片

2)重新设计耗时的层结构

  1. 减少了第一个卷积层的卷积核个数,作者实验发现减少之后性能并没有什么变化,所以从32减为16
  2. 精简了最后一个Stage,撤掉了后面计算量和参数量大的层,同时性能也没有下降:
    轻量级网络之MobileNet v3_第6张图片

3)重新设计激活函数
原有的sigmoid函数计算和求导都相对比较复杂,对量化也不友好。重新设计的激活函数计算更加简单,并且在量化模式下,它消除了由于近似s形的不同实现可能造成的数值精度损失。
在这里插入图片描述
作者使用一个新的函数h-sigmoid去逼近:
轻量级网络之MobileNet v3_第7张图片
轻量级网络之MobileNet v3_第8张图片
swish函数也就得到了近似:用h-swish能够节省6ms(6ms占总体运行时间的10%),仅比relu多1ms。
在这里插入图片描述
ReLU6(x + 3) / 6,在Mul层中,做了乘以0.16667的乘法,这就相当于除以6;ReLU6则融合在了卷积层之中;另外,对于x+3,这里的3被加在了卷积层的偏置层中了。
轻量级网络之MobileNet v3_第9张图片

网络结构

bneck就是前面提到的block,不过SE和shortcut还有NL可能有些差别。为什么这里NL不用一样的激活函数?后面的对比实验说明了原因,请往下看。
MobileNetV3-Large:
轻量级网络之MobileNet v3_第10张图片
MobileNetV3-Small:
轻量级网络之MobileNet v3_第11张图片

实验对比

不同分辨率和通道扩张因子:
轻量级网络之MobileNet v3_第12张图片
轻量级网络之MobileNet v3_第13张图片
不同激活函数,以及所放置的位置
@N,表示从哪一层开始使用h-swish,比如@16表示从通道数为16的卷积层开始使用h-swish。
轻量级网络之MobileNet v3_第14张图片在整个网络中添加h-swish性能要好一些,在拥有80个或更多通道(V3)的所有层上放置h-swish可以提供最佳的权衡因为随着网络的深入,应用非线性的成本会降低,因为每一层激活的内存访问数量(h*w*c)通常会随着分辨率的下降而减半。顺便说一句,作者发现swish的大多数好处都是通过在更深的层中使用它们来实现的。因此,在我们的体系结构中,我们只在模型的后半部分使用h-swish。这里的optimized h-swish是采用了分段的优化,速度更快。

ImageNet图像分类任务:
轻量级网络之MobileNet v3_第15张图片

目标检测任务: 同V2 一如既往的,参数更少,效果比上一版更差。
轻量级网络之MobileNet v3_第16张图片

h-σ、h-swish

pytorch官方代码

import torch.nn as nn
import torch.nn.functional as F

activation_layer1 =nn.Hardsigmoid()
activation_layer2 =nn.Hardswish()
# or
F.hardsigmoid(x)

上一篇:轻量级网络之MobileNet v2
下一篇:轻量级网络之GhostNet

你可能感兴趣的:(CNN卷积神经网络,计算机视觉,神经网络,人工智能,深度学习,轻量级网络)