轻量化CNN网络MobileNet系列详解

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: MobileNet系列作为轻量级网络的代表,使得CNN轻量化和移动端的部署成为可能。MobileNet系列目前总共有三个版本, 分别是MobileNet v1、MobileNet v2和MobileNet v3。作为学习轻量化网络的必经之路,本文重点对MobileNet系列网络进行阐述。

来源丨机器学习实验室


MobileNet系列作为轻量级网络的代表,使得CNN轻量化和移动端的部署成为可能。MobileNet系列目前总共有三个版本, 分别是MobileNet v1、MobileNet v2和MobileNet v3。作为学习轻量化网络的必经之路,本文重点对MobileNet系列网络进行阐述。


MobileNet v1


MobileNet v1论文为MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications,2017年由谷歌提出,主要专注于CNN的移动端使用和部署。


image.png


简单来说,MobileNet v1就是将常规卷积替换为深度可分离卷积的VGG网络。下图分别是VGG和MobileNet v1 一个卷积块所包含的网络层。


v2-cc1f3f3ad29bd1974a24424d9b072786_720w.jpg


可以看到,VGG的卷积块就是一个常规3*3卷积和一个BN、一个ReLU激活层。MobileNet v1则是一个3*3深度可分离卷积和一个1*1卷积,后面分别跟着一个BN和ReLU层。MobileNet v1的ReLU指的是ReLU6,区别于ReLU的是对激活输出做了一个clip,使得最大最输出值不超过6,这么做的目的是为了防止过大的激活输出值带来较大的精度损失。


那么,什么是深度可分离卷积呢?


从维度的角度看,卷积核可以看成是一个空间维(宽和高)和通道维的组合,而卷积操作则可以视为空间相关性和通道相关性的联合映射。从inception的1*1卷积来看,卷积中的空间相关性和通道相关性是可以解耦的,将它们分开进行映射,可能会达到更好的效果。


深度可分离卷积是在1*1卷积基础上的一种创新。主要包括两个部分:深度卷积和1*1卷积。深度卷积的目的在于对输入的每一个通道都单独使用一个卷积核对其进行卷积,也就是通道分离后再组合。1*1卷积的目的则在于加强深度。下面以一个例子来看一下深度可分离卷积。


假设我们用128个3*3*3的滤波器对一个7*7*3的输入进行卷积,可得到5*5*128的输出。如下图所示:


image.png


其计算量为5*5*128*3*3*3=86400。


现在看如何使用深度可分离卷积来实现同样的结果。深度可分离卷积的第一步是深度卷积(Depth-Wise)。这里的深度卷积,就是分别用3个3*3*1的滤波器对输入的3个通道分别做卷积,也就是说要做3次卷积,每次卷积都有一个5*5*1的输出,组合在一起便是5*5*3的输出。


现在为了拓展深度达到128,我们需要执行深度可分离卷积的第二步:1x1卷积(Point-Wise)。现在我们用128个1*1*3的滤波器对5*5*3进行卷积,就可以得到5*5*128的输出。完整过程如下图所示:


image.png


那么我们来看一下深度可分离卷积的计算量如何。第一步深度卷积的计算量:5*5*1*3*3*1*3=675。第二步1x1卷积的计算量:5*5*128*1*1*3=9600,合计计算量为10275次。可见,相同的卷积计算输出,深度可分离卷积要比常规卷积节省12倍的计算成本。所以深度可分离卷积是MobileNet v1能够轻量化的关键原因。


MobileNet v1完整网络结构如下图所示。


image.png


MobileNet v1与GoogleNet和VGG 16在ImageNet上的效果对比,如下表所示:


v2-c7d6138754adce60ac1bbbb392cc44cd_720w.jpg


可以看到,MobileNet v1相比与VGG 16精度损失不超过一个点的情况下,参数量小了32倍之多!MobileNet v1在速度和大小上的优势是显而易见的。


MobileNet v2


MobileNet v2是在v1基础上的改进与优化版本。MobileNet v2论文题目为MobileNetV2: Inverted Residuals and Linear Bottlenecks,由谷歌发表于2018年CVPR上。


v2-b0e9725257ba0bac9eac89d0424ed990_720w.jpg


MobileNet v1的特色就是深度可分离卷积,但研究人员发现深度可分离卷积中有大量卷积核为0,即有很多卷积核没有参与实际计算。是什么原因造成的呢?v2的作者发现是ReLU激活函数的问题,认为ReLU这个激活函数,在低维空间运算中会损失很多信息,而在高维空间中会保留较多有用信息。


既然如此,v2的解决方案也很简单,就是直接将ReLU6激活换成线性激活函数,当然也不是全都换,只是将最后一层的ReLU换成线性函数。具体到v2网络中就是将最后的Point-Wise卷积的ReLU6都换成线性函数。v2给这个操作命名为linear bottleneck,这也是v2网络的第一个关键点。


v2-9b9f2501cf0c68abd776a2eccdbdea33_720w.jpg


深度卷积(Depth-Wise)本身没有改变通道的作用,比如本文前例中的深度可分离卷积的例子,在前一半的深度卷积操作中,输入是3个通道,输出还是3个通道。所以为了能让深度卷积能在高维上工作,v2提出在深度卷积之前加一个扩充通道的卷积操作,什么操作能给通道升维呢?当然是1*1卷积了。


image.png


这种在深度卷积之前扩充通道的操作在v2中被称作Expansion layer。这也是v2网络的第二个关键点。


MobileNet v1虽然加了深度可分离卷积,但网络主体仍然是VGG的直筒型结构。所以v2网络的第三个大的关键点就是借鉴了ResNet的残差结构,在v1网络结构基础上加入了跳跃连接。相较于ResNet的残差块结构,v2给这种结构命名为Inverted resdiual block,即倒残差块。与ResNet相比,我们来仔细看一下“倒”在哪。

v2-a8f9dda0ea1a6a3b598625de78b4b577_720w.jpg



从图中可以看到,ResNet是先0.25倍降维,然后标准3*3卷积,再升维,而MobileNet v2则是先6倍升维,然后深度可分离卷积,最后再降维。更形象一点我们可以这么画:


v2-249f87abe957d11f11ae02b0ecbf8241_720w.jpg


MobileNet v2的维度升降顺序跟ResNet完全相反,所以才叫倒残差。


综合上述三个关键点:Linear Bottlenecks、Expansion layer和Inverted resdiual之后就组成了MobileNet v2的block,如下图所示。


v2-eb8d018ca8d02b6a211f636aac46fb36_720w.jpg


MobileNet v2的网络结构如下图所示。


image.png


可以看到,输入经过一个常规卷积之后,v2网络紧接着加了7个bottleneck block层,然后再两个1*1卷积和一个7*7的平均池化的组合操作。


MobileNet v3


MobileNet v3同样是由谷歌于于2019年提出新版本的MobileNet。在v2网络的基础上,v3提出了四个大的改进措施。


  • 使用NAS神经架构搜索确定网络结构
  • 在v2的block基础上引入Squeeze and Excitation结构
  • 使用h-swish激活函数
  • 对v2网络尾部结构进行改进


v3论文为Searching for MobileNetV3,将神经架构搜索引入的意思已经很明显了。


v2-355b4ddd4b98ecc79a2e8d39bfddfbc6_720w.jpg


关于NAS这里笔者不太了解,也没法展开细说,感兴趣的朋友可以直接查阅NAS相关论文。第二个改进措施就是在v2基础上引入squeeze and excitation结构,熟悉SENet的读者应该知道,这是一个对通道之间相互依赖关系进行建模的操作。


Squeeze and Excitation包括Squeeze(压缩)和Excitation(激活)两个部分。其中Squeeze通过在特征图上执行Global Average Pooling得到当前特征图的全局压缩特征向量,Excitation通过两层全连接得到特征图中每个通道的权值,并将加权后的特征图作为下一层网络的输入。所以可以看到SE block只跟当前的一组特征图存在依赖关系,因此可以非常容易的嵌入到几乎现在所有的卷积网络中。所以MobileNet v3就自然拿来使用了。


在v2基础上,v3网络的block如下图所示。


v2-24d17d799942245ed039365117b1d25f_720w.jpg


第三个改进点是使用了h-swish激活函数。h-swish激活函数是基于swish的改进,swish激活函数表达式如下:


image.png


swish激活函数图像在β取0.1、1.0和10.0时如下图所示:


v2-3fa39772a04df2351bab63df1bae3376_720w.jpg


swish激活函数在一系列深度卷积网络上都对效果有显著提升,MobileNet也不例外,但是v3认为,作为一个轻量化的网络,swish激活虽然能带来精度提升,但在移动设备上会有速度损失。所以在swish函数的基础上,v3对其进行了改进,提出了h-swish激活函数。


h-swish的基本想法是用一个近似函数来逼近swish函数,让swish函数变得不那么光滑(hard),基于MobileNet v1和v2的经验,v3还是选择了ReLU6。变换逻辑如下图所示。


v2-bb5110e170e42e5a5336ab0e98972571_720w.jpg


swish和h-swish函数对比图像:


image.png


可以将h-swish视为swish的低精度化模式,相较于swish,h-swish能够保持相同精度的条件下减少时间和计算量的开销。对v2网络尾部的修改这里不做详细描述,感兴趣的读者可直接阅读v3论文原文进行学习。


总结


最后一句话对MobileNet系列做个简单的总结,MobileNet v1就是加了深度可分离卷积的VGG;MobileNet v2则是在v1基础上加了Linear激活、Expansion layer和Inverted residual三大关键操作;而v3则是在v2基础上引入NAS,并且加入Squeeze and Excitation结构、h-swish激活和网络尾部优化等改进措施。


参考资料:


Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017.


Sandler M, Howard A, Zhu M, et al. Mobilenetv2: Inverted residuals and linear bottlenecks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 4510-4520.


Howard A, Sandler M, Chu G, et al. Searching for mobilenetv3[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019: 1314-1324.

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
相关文章
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
|
16天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
73 7
|
19天前
|
机器学习/深度学习 自然语言处理 算法
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
29 1
|
26天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
本文旨在通过深入浅出的方式,为读者揭示卷积神经网络(CNN)的神秘面纱,并展示其在图像识别领域的实际应用。我们将从CNN的基本概念出发,逐步深入到网络结构、工作原理以及训练过程,最后通过一个实际的代码示例,带领读者体验CNN的强大功能。无论你是深度学习的初学者,还是希望进一步了解CNN的专业人士,这篇文章都将为你提供有价值的信息和启发。
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的卷积神经网络(CNN)及其在现代应用中的革新
探索深度学习中的卷积神经网络(CNN)及其在现代应用中的革新
|
26天前
|
机器学习/深度学习 人工智能 网络架构
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
39 1
|
28天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。
|
29天前
|
机器学习/深度学习 人工智能 数据处理
深入浅出卷积神经网络(CNN)
【10月更文挑战第40天】本文旨在通过浅显易懂的语言和直观的示例,带领初学者了解并掌握卷积神经网络(CNN)的基本概念、结构以及在图像处理中的应用。我们将从CNN的核心组成讲起,逐步深入到网络训练的过程,最后通过一个实际的代码示例来展示如何利用CNN进行图像识别任务。无论你是编程新手还是深度学习爱好者,这篇文章都将为你打开一扇通往人工智能世界的新窗。
|
29天前
|
机器学习/深度学习 人工智能 算法
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
27 1

热门文章

最新文章