前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻量级神经网络系列——MobileNet V3

轻量级神经网络系列——MobileNet V3

作者头像
小草AI
发布2019-07-19 12:38:13
13K0
发布2019-07-19 12:38:13
举报

本文授权转载自:SIGAI

SIGAI特约作者

RJD

研究方向:物体识别,目标检测,研究轻量级网络中

前面的轻量级网络架构中,介绍了mobilenet v1和mobilenet v2,前不久,google又在其基础之上推出新的网络架构,mobilenet v3.

MobileNet V3

V1,V2都看完了,现在就来到了MobileNetV3(以下简称V3)。

Searching for MobileNetV3

论文地址:https://arxiv.org/pdf/1905.02244.pdf

MobileNetV3,是谷歌在2019年3月21日提出的网络架构。首先,引入眼帘的是这篇文章的标题,“searching”一词就把V3的论文的核心观点展示了出来——用神经结构搜索(NAS)来完成V3。虽然本人没有接触过NAS,但是我已经闻到了金钱的味道。

"抱歉,有钱真的可以为..."

由于真的没有接触过NAS,所以V3就讲讲其他的,除NAS之外的东西吧。

先上结果:

可以看到,在同一大小的计算量下,V3在ImageNet上的结果都是最好的。

我们先来看看V3做了什么?

MobileNetV3的相关技术

0.网络的架构基于NAS实现的MnasNet(效果比MobileNetV2好)

1.引入MobileNetV1的深度可分离卷积

2.引入MobileNetV2的具有线性瓶颈的倒残差结构

3.引入基于squeeze and excitation结构的轻量级注意力模型(SE)

4.使用了一种新的激活函数h-swish(x)

5.网络结构搜索中,结合两种技术:资源受限的NAS(platform-aware NAS)与NetAdapt

6.修改了MobileNetV2网络端部最后阶段

第0点,关于MnasNet也是基于NAS的,也不是很了解。大家感兴趣的话,可以参考曲晓峰老师的这个回答如何评价 Google 最新的模型 MnasNet?- 曲晓峰的回答 - 知乎,写的很棒!所以我们只要认为MnasNet是一个比MobileNet精度和实时性更高的模型就行了。

第1,2点在前面的MobileNetV1和V2上有讨论,在这里就不赘述了。

第3点引入SE模块,主要为了利用结合特征通道的关系来加强网络的学习能力。先不仔细讨论,之后在【深度回顾经典网络】系列的时候再详细讨论吧,感兴趣的同学,可以看看这一篇文章。

激活函数h-swish

swish

h-swish是基于swish的改进,swish最早是在谷歌大脑2017的论文Searching for Activation functions所提出(又是Searching for!!!)。

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

V3也利用swish当作为ReLU的替代时,它可以显著提高神经网络的精度。但是呢,作者认为这种非线性激活函数虽然提高了精度,但在嵌入式环境中,是有不少的成本的。原因就是在移动设备上计算sigmoid函数是非常明智的选择。所以提出了h-swish。

h-swish

可以用一个近似函数来逼急这个swish,让swish变得硬(hard)。作者选择的是基于ReLU6,作者认为几乎所有的软件和硬件框架上都可以使用ReLU6的优化实现。其次,它能在特定模式下消除了由于近似sigmoid的不同实现而带来的潜在的数值精度损失。

下图是Sigmoid和swish的hard、soft形式:

我们可以简单的认为,hard形式是soft形式的低精度化。作者认为swish的表现和其他非线性相比,能够将过滤器的数量减少到16个的同时保持与使用ReLU或swish的32个过滤器相同的精度,这节省了3毫秒的时间和1000万MAdds的计算量。

并且同时,作者认为随着网络的深入,应用非线性激活函数的成本会降低,能够更好的减少参数量。作者发现swish的大多数好处都是通过在更深的层中使用它们实现的。因此,在V3的架构中,只在模型的后半部分使用h-swish(HS)。

网络结构搜索NAS

由于不熟,就简单写一点吧。

主要结合两种技术:资源受限的NAS(platform-aware NAS)与NetAdapt。

资源受限的NAS,用于在计算和参数量受限的前提下搜索网络来优化各个块(block),所以称之为模块级搜索(Block-wise Search) 。

NetAdapt,用于对各个模块确定之后网络层的微调每一层的卷积核数量,所以称之为层级搜索(Layer-wise Search)。

一旦通过体系结构搜索找到模型,我们就会发现最后一些层以及一些早期层计算代价比较高昂。于是作者决定对这些架构进行一些修改,以减少这些慢层(slow layers)的延迟,同时保持准确性。这些修改显然超出了当前搜索的范围。

对V2最后阶段的修改

作者认为,当前模型是基于V2模型中的倒残差结构和相应的变体(如下图)。使用1×1卷积来构建最后层,这样可以便于拓展到更高维的特征空间。这样做的好处是,在预测时,有更多更丰富的特征来满足预测,但是同时也引入了额外的计算成本与延时。

所以,需要改进的地方就是要保留高维特征的前提下减小延时。首先,还是将1×1层放在到最终平均池之后。这样的话最后一组特征现在不是7x7(下图V2结构红框),而是以1x1计算(下图V3结构黄框)。

这样的好处是,在计算和延迟方面,特征的计算几乎是免费的。最终,重新设计完的结构如下:

在不会造成精度损失的同时,减少10ms耗时,提速15%,减小了30m的MAdd操作。

V3的block

综合以上,V3的block结构如下所示:

与V2的block相比较:

MobileNetV3的网络结构

MobileNetV3定义了两个模型: MobileNetV3-Large和MobileNetV3-Small。V3-Large是针对高资源情况下的使用,相应的,V3-small就是针对低资源情况下的使用。两者都是基于之前的简单讨论的NAS。

MobileNetV3-Large

MobileNetV3-Small

就像之前所说的:只有在更深层次使用h-swish才能得到比较大的好处。所以在上面的网络模型中,不论大小,作者只在模型的后半部分使用h-swish。

用谷歌pixel 1/2/3来对大小V3进行测试的结果。

实验结果

Image Classification

Detection

Semantic Segmentation

感觉实验结果没什么好说的。

对了,有一点值得说一下,训练V3用的是4x4 TPU Pod,batch size 409...(留下了贫穷的泪水)

为什么MobileNet会这么快?

在写这篇文章的时候看到了一篇文章Why MobileNet and Its Variants (e.g. ShuffleNet) Are Fast?,这也让我有了一样的一个问题,这篇文章主要是从结构方面进行了讨论,从深度可分离卷积到组卷积的参数计算量等,因为之前的文章都有写过,在这里就不赘述了,感兴趣的同学可以翻阅下之前的文章。

在这里换一个的角度。我们直接从用时多少的角度去讨论下这个问题。

下图来自Caffe作者贾扬清的博士论文:

该图是AlexNet网络中不同层的GPU和CPU的时间消耗,我们可以清晰的看到,不管是在GPU还是在CPU运行,最重要的“耗时杀手”就是conv,卷积层。也就是说,想要提高网络的运行速度,就得到提高卷积层的计算效率。

我们以MobileNetV1为主,看看MobileNet的资源分布情况:

可以看到,MobileNet的95%的计算都花费在了1×1的卷积上,那1×1卷积有什么好处吗?

我们都知道,卷积操作就是如下图所示的乘加运算:

在计算机操作时,需要将其存入内存当中再操作(按照“行先序”):

这样一来,特征图y11,y12,y21,y22的计算如下所示:

按照卷积计算,实线标注出卷积计算中的访存过程(对应数据相乘),我们可以看到这一过程是非常散乱和混乱的。直接用卷积的计算方式是比较愚蠢的。

这时候就要用到im2col操作。

im2col

一句话来介绍im2col操作的话,就是通过牺牲空间的手段(约扩增K×K倍),将特征图转换成庞大的矩阵来进行卷积计算。

其实思路非常简单:

把每一次循环所需要的数据都排列成列向量,然后逐一堆叠起来形成矩阵(按通道顺序在列方向上拼接矩阵)。

比如Ci×Wi×Hi大小的输入特征图,K×K大小的卷积核,输出大小为Co×Wo×Ho,

输入特征图将按需求被转换成(K∗K)×(Ci∗Wo∗Ho)的矩阵,卷积核将被转换成Co×(K∗K)的矩阵,

然后调用GEMM(矩阵乘矩阵)库加速两矩阵相乘也就完成了卷积计算。由于按照计算需求排布了数据顺序,每次计算过程中总是能够依次访问特征图数据,极大地提高了计算卷积的速度。(不光有GEMM,还有FFt(快速傅氏变换))

换一种表示方法能更好地理解,图片来自High Performance Convolutional Neural Networks for Document Processing:

这样可以更清楚的看到卷积的定义进行卷积操作(上图上半部分),内存访问会非常不规律,以至于性能会非常糟糕。而Im2col()以一种内存访问规则的方式排列数据,虽然Im2col操作增加了很多数据冗余,但使用Gemm的性能优势超过了这个数据冗余的劣势。

所以标准卷积运算大概就是这样的一个过程:

那我们现在回到1×1的卷积上来,有点特殊。按照我们之前所说的,1×1的卷积的原始储存结构和进行im2col的结构如下图所示:

可以看到矩阵是完全相同的。标准卷积运算和1×1卷积运算对比如下图:

也就是说,1x1卷积不需要im2col的过程,所以底层可以有更快的实现,拿起来就能直接算,大大节省了数据重排列的时间和空间。

当然,这些也不是那么绝对的,因为毕竟MobileNet速度快不快,与CONV1x1运算的优化程度密切相关。如果使用了定制化的硬件(比如用FPGA直接实现3x3的卷积运算单元),那么im2col就失去了意义而且反而增加了开销。

回到之前的MobileNet的资源分布,95%的1×1卷积和优化的网络结构就是MobileNet能如此快的原因了。

Reference

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

MobileNetV2: Inverted Residuals and Linear Bottlenecks

Searching for MobileNetV3

Xception: Deep Learning with Depthwise Separable Convolutions

Simplifying ConvNets for Fast Learning

a-basic-introduction-to-separable-convolution

CNN模型之MobileNet

网络解析(二):MoblieNets详解

轻量级网络--MobileNet论文解读

https://mp.weixin.qq.com/s/O2Bhn66cWCN_87P52jj8hQ

http://machinethink.net/blog/mobilenet-v2/

如何评价 Google 最新的模型 MnasNet?- 曲晓峰的回答 - 知乎

Learning Semantic Image Representations at a Large Scale 贾扬清博士论文

im2col的原理和实现

在 Caffe 中如何计算卷积?- 贾扬清的回答 - 知乎

漫谈卷积层

High Performance Convolutional Neural Networks for Document Processing

Why MobileNet and Its Variants (e.g. ShuffleNet) Are Fast

猜您喜欢

往期精选▼

1. pythonturtle绘图 绘制奥运五环 绘制18*18棋盘

2. 轻量级神经网络系列——MobileNet V1

3.深度学习中常用的损失函数loss有哪些?

4.当python遇上杨辉三角——生成器与迭代器

5. 使用python+tkinter开发一个简单的学生管理系统

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与python集中营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档