Searching for MobileNetV3

论文:http://xxx.itp.ac.cn/abs/1905.02244?context=cs
pyTorch代码:https://github.com/xiaolai-sqlai/mobilenetv3

1 核心思想

轻量化的网络结构设计,有squeezenet、shufflenet、mobilenet,以前经常用FLOPs来衡量模型的计算量,但shuffnetv2中提出了还要考虑MAC和并行化程度,建议用实际运行速度这一直接指标衡量模型的推理速度。最近关于轻量化网络的设计,衡量标准的确从减少参数量变成了减少计算量(MAdds)和实际的延迟时间(atency)。本文是谷歌在19年3月份提出的最新的轻量化网络,其核心的修改可以认为是 搜索网络结构 + SE模块 + 修改后的swish激活函数 + 网络第一层和最后层的重构 的结果。

先看效果对比:
在这里插入图片描述总体看,效果是延迟小,准确率高。

1.1 网络搜索

网络搜索,金钱的味道,不太了解这个领域,这里简单罗列下文章中提到的处理过程。

Platform-Aware NAS搜索网络块的结构,NetAdapt搜索网络层的结构。

1.2 重新设计计算量大的开头结尾网络层

网络搜索过程中一般都是搜索设计中间的网络块结构,网络的开头层和结尾层还是人为设计的。使用1.1的方法完成中间部分的网络搜索之后,作者发现网络的开头和结尾层计算量大,延迟高。因此,对这两部分进行了人为调整。

网络结尾层的修改
对于网络的后面几层,如MobileNetV2使用了一个1 * 1的卷积层作为最后一层,为了能够输出丰富的特征用于预测,一般这一层都设计了较大的channel。如,MobileNetV2中使用的就是一个1 * 1 * 1280的网络层。但是,这里作者认为这一层会带来很大的计算延迟。

作者提出的解决方案是,将最后的1 * 1卷积层移动到平均池化层之后。如果这个1 * 1的卷积在平均池化层之前,那么输入feature map的空间维度为7 * 7,将其移动到平均池化层之后,输入的feature map的空间维度就变成了1 * 1,大大减少了计算量。因为这里减少了计算量,所以和其相邻的最后一个bottleneck模块也就不再需要对输出进行通道缩减了,从而进一步减少了计算量。修改前后的网络结构如下图所示:

在这里插入图片描述按照图5这样修改,在不损失准确率的情况下,MAdds的数量减少了30 million,减少了11%的延迟时间(约7ms)。

网络起始层的修改
原始网络起始层用32个3 * 3的全卷积进行边缘检测,作者将这一层改成使用16个滤波器,使用ReLU/Swish激活函数,和原来相比,在准确率不变的情况下,节省了10 million的MAdds,推理时间缩短了2ms。

1.3 h-swish激活函数

h-swish是hard swish的缩写,是作者提出的swish激活函数的近似版本。

swish激活函数
f ( x ) = x ∗ s i g m o i d ( β x ) f(x) = x * sigmoid(\beta x) f(x)=xsigmoid(βx)
β \beta β是一个人为调整/参与网络训练的超参数。

Swish 具备无上界、有下界、平滑、非单调的特性。Swish 在深层模型上的效果优于 ReLU。例如,仅仅使用 Swish 单元替换 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分类准确率提高 0.9%,Inception-ResNet-v 的分类准确率提高 0.6%。

在这里插入图片描述导数图像:
在这里插入图片描述 β = 0 \beta = 0 β=0时,swish变为 f ( x ) = x 2 f(x) = \frac{x}{2} f(x)=2x;当 β − > ∞ \beta -> \infty β>时,swish变成ReLU。因此,swish可以认为是介于线性函数和ReLU之间的过渡函数。

h-swish
但是,在嵌入式设备上,sigmoid函数的计算量很大,因此作者提出了h-swish近似实现swish,并且不使用sigmoid函数。

h s w i s h [ x ] = x R e L U 6 ( x + 3 ) 6 hswish[x] = x \frac{ReLU6(x+3)}{6} hswish[x]=x6ReLU6(x+3)
在这里插入图片描述从图6中可以看出,swish和h-swish基本上一致。作者的实验表明,h-swish和swish的准确度基本一致,但有三个好处,一是在所有的软硬件平台上都可以使用ReLU6,二是量化模式下,消除了不同版本的sigmoid的精度差异,三是逐点操作的h-swish减少了内存访问,降低了延迟。

作者对h-swish的使用是只在网络的后半段才使用,前半段仍然使用ReLU

1.4 大的SE块

作者固定在SE块中,将channel缩减为输入的1/4,这相比于MnasNet来说,使用了更多的channel,实验证明,这样做提升了准确率。

1.5 网络结构

作者依据计算平台的计算能力,设计了两个版本的网络,分别是MobileNetV3-Large和MobileNetV3-Small。

MobileNetV3-Large
在这里插入图片描述MobileNetV3-Small
在这里插入图片描述exp size是指bottleneck中间层的channel的数量。

2 实验

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值