轻量化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
相关文章
|
4天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
15天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第21天】本文旨在深入探讨深度学习领域的核心组成部分——卷积神经网络(CNN)。通过分析CNN的基本结构、工作原理以及在图像识别、语音处理等领域的广泛应用,我们不仅能够理解其背后的技术原理,还能把握其在现实世界问题解决中的强大能力。文章将用浅显的语言和生动的例子带领读者一步步走进CNN的世界,揭示这一技术如何改变我们的生活和工作方式。
|
16天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
16天前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLO11改进 - C3k2融合】C3k2融合YOLO-MS的MSBlock : 分层特征融合策略,轻量化网络结构
【YOLO11改进 - C3k2融合】C3k2融合YOLO-MS的MSBlock : 分层特征融合策略,轻量化网络结构
|
22天前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
68 1
|
1天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
8 0
|
25天前
|
机器学习/深度学习 SQL 数据采集
基于tensorflow、CNN网络识别花卉的种类(图像识别)
基于tensorflow、CNN网络识别花卉的种类(图像识别)
19 1
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第32天】本文将介绍深度学习中的一个重要分支——卷积神经网络(CNN),以及其在图像识别领域的应用。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库构建一个基本的CNN模型,并对其进行训练和测试。
|
10天前
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第26天】在这篇文章中,我们将深入探讨卷积神经网络(CNN)的基本原理、结构和应用。CNN是深度学习领域的一个重要分支,广泛应用于图像识别、语音处理等领域。我们将通过代码示例和实际应用案例,帮助读者更好地理解CNN的概念和应用。
|
18天前
|
机器学习/深度学习 人工智能 自动驾驶
深入理解深度学习中的卷积神经网络(CNN)
【10月更文挑战第18天】深入理解深度学习中的卷积神经网络(CNN)
28 0
下一篇
无影云桌面