Searching for MobileNetV3笔记

Searching for MobileNetV3笔记

hexo?:https://licharyuan.github.io/2019/05/13/MobileNetV3/

arxiv

本笔记将回顾V1,V2的知识以及介绍V3的特点。

  • 知识回顾
    • MobileNet V1
    • MobileNet V2
  • MobileNetV3
    • 相关技术
    • 文章

知识回顾

MobileNet V1

提出了depthwise的卷积结构加速CNN的训练,depthwise的操作就是将通道全部独立开做卷积期间通道数不变,可以理解为Group=In_channels的Group Conv;然后再用1x1的卷积实现通道之间的融合。这种方式会比直接卷积省去很多参数。

MobileNet V2

为了解决v1一些卷积核训废的问题,原因为当通道数比较少的时候,ReLU激活函数会造成较多信息的丢失(具体去看文章的论证)。于是提出了linear bottleneck layer和inverted residual block,[Input]->[1x1 conv 增加通道]-> [ReLU6]->[depthwise conv]->[ReLU6]->[1x1 conv降低通道数]->[Linear]+[Input]不再接ReLU层,这里作者应该做了很多对比实验才得出了比较优的结构。

MobileNet V3

相关技术

SENet?

SENet中的Squeeze-and-Excite模块被加入到mobileNetV2中。 Squeeze-and-Excite模块结合特征通道的关系来加强网络的学习能力。除了这种方式外,常见的方法有Incepetion,结合不同尺度的特征信息,融合不同感受野的特征得到网络增益;ResNet的shortcut结构,结合不同level的特征图来增强网络。

SE是在特征单独这一层做一个“门”的结构,让网络自动学习到每个特征通道的重要程度。而剩下的两种方法是在不同的特征上进行处理。

画个简单的示意图来表示他们的差异: 对比MobileNetV3 基于 MobileNetV2 的 Inverted Resdiual and Linear Bottleneck中加入SE的模块。下图所示 V3_SE

MnasNet?

用RL的方法进行网络搜索,加上了准确率和实时延迟的tradeoff,并不是搜索出一个或几个cell然后重复堆叠成一个网络,而是简化每个cell的搜索空间但允许各个单元不同。代码原文中有链接,谷歌用TPU进行训练的,家里没矿也就不搜了吧。

在MobileNetV3上,MnasNet的Reward没有对移动端的小型模型做优化。随着延时改变,小模型的精度改变会更加剧烈。所以需要调整MnasNet的参数设定(e.g. ACC(m) × [LAT(m)/TAR]w 中w,就是让延时的reward减少 其他参数没说要改)。搜索完成以后,然后再用一个NetAdapt算法来搜索每层的滤波数(或卷积核个数)以及其他优化方法(之后会讲)得到最终的MobileNetV3。

NetAdapt?

这篇文章主要涉及了一个平台算法,可以把一些非直接的变量整合进来,比如延时和能源消耗。做法就是直接把模型放到目标平台上训练然后反馈回数据,再对网络进行调整,直到满足设定的条件,优化结束。原文中有算法流程图,给定一个K conv and FC layers的网络Net0,在每一步的结构更改中,需要减少一个给定个值deltaR,然后调整每层的卷积核数,生成一个Net_simp集合,在这个集合中找到最高准确率的网络。保持循环,直到资源消耗满足给定条件,然后finetune网络。文章中有一些快速资源消耗估计的方法,如果有需要可以去仔细看看。

V3借鉴这篇文章的网络调整方法,对初始模型进行 “第一步的瘦身”。在MobileNetV3中,基本用一样的方法得到符合latency下,精度最好的网络。有一些变动的地方在于,在符合latency衰减的Net集合中并不是选取精度最优的网络,而是选取 (精度变化/延时变化)大的网络,即希望拿到精度变化提升大延时变化小的网络(延时还是满足所给条件的)。得到最后的网络之后,再train from scratch。

对MobileNetV2,(觉得是笔误,应该是V3)减少latency的方法用了两种,也就是说是基于这两种方法来产生网络。一种是减少expansion layer(就是用1x1 conv对通道数扩大的那一层)的size,或者减少所有共享相同bottleneck size模块的bottleneck(就是resiudal链接的那一个模块),仍然保持residual链接模式。也就是下图中红色和橙色对应的那两层,改变他们的大小。

文章

当然也有原创的一些方法,下面就是V3做的特定的优化。

重新设计计算密集层

  • 在基于MobileNet V2的模型中inverted bottleneck structure and variants 是用1x1 conv来拓展到更高维的特征空间,这层带来了往外的latency。为了减少latency且保留高维特征,V3把1x1移动到平均池化之后。现在计算的分辨率由7x7变成了1x1,那么之前为了减少计算建立的瓶颈层也不需要了。改变前后的比较图:V3_redesign
  • 原先用的是32个3x3的卷积来构建初始滤波器的边缘检测。很多特征图都是彼此的镜像,所以V3砍掉了一半,用16个,参数少了也不用使用激活层了。

激活函数的设定

  • 改进了swish的激活函数,swish虽然可以用来提高精度,但是带来的计算量太大的。V3提出了h-wish,来作为V3激活函数的一种。

文章中对比这两种激活函数的曲线,两个是相近的。 swish_vs_hswish实验发现,这种激活函数的改变在网络的深层能够更有效的减少网络的参数量。表格1和表格2列出了两种MobileNetV3所采用的结构。MobileNetV3的large和small分别对应高低资源消耗。

MobileNetV3

实验结果

这一段就大概提一下吧,因为比较detail,仔细看原文的一些改动还有参数的设定会比较好。

  • 对比了不同width-multipliers的试验结果,在不同机器下测试了large和small的延时。
  • 对比了不同激活函数的结果(精度和延时)
  • 各个组成部分的消融学习(有没有NetAdapt/SE/h-wish等)
  • 目标检测
    • 把MobileNet V3作为 SSD-Lit的backbone feature extractor,对比其他网络作为backbone feature extractor,效果不错,延时下降了很多
  • 语义分割
    • 提出了Lite R-ASPP,相比R-ASPP有一些结构上的调整。比如用了更大的stride,空洞卷积,加入了skip connection之类的小改动。文章由结构图。

参考链接

1.知乎相关讨论?

2.机器之心?

3.SENet Zhihu

4.mobileNet v1

5.mobileNet v2

5.MnasNet Zhihu

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值