轻量级卷积神经网络——MobileNet
谷歌论文题目:
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
其他参考:
Tensorflow实现参考:
前言:
目前,CNN以及其他神经网络正在飞速发展与应用,为了追求高准确率,网络模型的深度和复杂度越来越大。然而在某些真实的应用场景如移动或者嵌入式设备上,如此大而复杂的模型难以应用。
首先,模型过于庞大,面临着内存不足的问题;
其次,一些场景要求低延迟或者说响应速度要快(自动驾驶中的行人检测)。
因此,研究小而高效的CNN模型至关重要。
目前针对此类问题的研究,主要集中在两个方面:
1、对训练好的模型进行压缩得到小的模型。
2、直接设计小的模型。
总的来说,都是在保持模型的性能的前提下,降低模型大小,提升模型速度。
而谷歌提出的MobileNet就是一种直接设计的小模型,它是在accuracy(准确率)和latency(延迟)中折中的一种方法。

图1.MobileNet模型可以高效的应用到智能设备的识别任务中去
Depthwise Separable Convolution(深度级可分离卷积,DSC):
MobileNet与CNN的不同在于它的基本单元是DSC,即深度级可分离卷积。
深度级可分离卷积是一种可分解卷积操作,它可分解为两个更小的操作:depthwise Convolution和pointwise Convolution。
对于标准卷积,其卷积核是用在所有的输入通道上,而depthwise Convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise Convolution是depth级别的操作。而pointwise Convolution其实就是普通的卷积,只不过采用的是1*1的卷积核。

图2.标准卷积滤波器被深度级卷积和1*1卷积替代用来构建深度级可分离卷积
对于DSC,其首先采用depthwise Conv对不同输入通道分别进行卷积,然后采用pointwise Conv将上面的输出再进行结合,其效果与一个标准卷积差不多,但是会大大减少计算量和模型参数量。
采用depthwise Conv会有一个问题,就是会导致信息流通不畅,即输出的feature Map仅包含输入的feature Map的一部分,在这里,MobileNet采用了pointwise Conv解决这个问题。后来的ShuffleNet采用同样的思想对网络进行改进,只不过将pointwise Conv换成了channel Shuffle。
下面,对DSC在计算量上与标准卷积的区别进行说明:
假设输入特征图:Df*Df*M;输出特征图:Df*Df*N,M、N是通道数(channel或者depth),这里假定了输入和输出特征图的大小(width and height)是一致的。采用的卷积核:Dk*Dk。
对于标准的卷积,其计算量为:Dk*Dk*M*N*Df*Df
对于depthwise Conv:Dk*Dk*M*Df*Df
对于pointwise Conv:M*N*Df*Df
从而总的DSC的计算量为:Dk*Dk*M*Df*Df+M*N*Df*Df
进而得到depthwise Conv/CNN = (Dk*Dk*M*Df*Df+M*N*Df*Df)/(Dk*Dk*M*N*Df*Df) = 1/N + 1/Dk^2
从上面可以看出,如果采用3*3的卷积核,DSC可将原来的计算量将至1/9。
MobileNet 的一般结构:
MobileNet的基本结构和网络结构可以从下面的图表中进行了解,网络结构是针对谷歌论文中的识别任务构建的,可以对其进行修改。

图3.带有BN和ReLU的标准卷积层与DSC
表1.MobileNet的网络结构

表2.MobileNet网络的计算与参数分布

从上面可以看出MobileNet的计算主要集中在1*1的卷积中,约占95%,拥有着75%的参数。另一个主要的参数分布在全连接层。卷积一般通过一种im2col的方式实现,其需要内存重组,但当卷积核为1*1时,其实就不需要这种操作了,底层就可以有更快的实现。
MobileNet瘦身:
之前提到的是MobileNet的基准模型,有时候需要对MobileNet瘦身,这个时候就需要引入两个超参数:width multiplier(宽度乘数)和 resolution multiplier(分辨率乘数)。
对于宽度乘数a:
1、其是按比例减少通道数。
2、取值范围(0,1]。
3、引入宽度乘数后,计算量变成:Dk*Dk*a*M*Df*Df+a*M*a*N*Df*Df。
4、由于主要计算量在后一项,所以width multiplier可以按照a^2的比例降低计算量,其参数量也会下降。
对于分辨率乘数p:
1、按比例降低特征图的大小。
2、在引入宽度乘数和分辨率乘数之后,计算量变成:Dk*Dk*a*M*p*Df*p*Df+a*M*a*N*p*Df*p*Df。
3、分辨率乘数仅影响计算量,不改变参数量。
论文中对引入两个超参数之后的效果进行了比较,具体如下:
表3.使用超参数之后的性能对比

表4.MobileNet的宽度乘数对网络的影响

表5.MobielNet的分辨率乘数对网络的影响

总的来说,引入的两个参数会降低MobileNet网络的性能,具体实验分析可以查阅论文。其是在accuracy 和 computation,以及accuracy 和 model Size 之间做了这种。论文的最后还使用该网络进行了COCO data等数据集的验证,具体请下载论文阅读。
轻量级卷积神经网络——MobileNet的更多相关文章
- 轻量化卷积神经网络MobileNet论文详解(V1&V2)
本文是 Google 团队在 MobileNet 基础上提出的 MobileNetV2,其同样是一个轻量化卷积神经网络.目标主要是在提升现有算法的精度的同时也提升速度,以便加速深度网络在移动端的应用.
- 卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和Mo ...
- 第二次作业:卷积神经网络 part 2
第二次作业:卷积神经网络 part 2 问题总结 输出层激活函数是否有必要? 为什么DnCNN要输出残差图片?图像复原又该如何操作? DSCMR中的J2损失函数效果并不明显,为什么还要引入呢? 代码练 ...
- 从LeNet到SENet——卷积神经网络回顾
从LeNet到SENet——卷积神经网络回顾 从 1998 年经典的 LeNet,到 2012 年历史性的 AlexNet,之后深度学习进入了蓬勃发展阶段,百花齐放,大放异彩,出现了各式各样的不同网络 ...
- 深度学习笔记 (二) 在TensorFlow上训练一个多层卷积神经网络
上一篇笔记主要介绍了卷积神经网络相关的基础知识.在本篇笔记中,将参考TensorFlow官方文档使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络. 下载并导入mnist数据集 首 ...
- 卷积神经网络 part1
[任务一]视频学习心得及问题总结 根据下面三个视频的学习内容,写一个总结,最后列出没有学明白的问题. [任务二]代码练习 在谷歌 Colab 上完成代码练习,关键步骤截图,并附一些自己的想法和解读. ...
- 第四周:卷积神经网络 part 3
第四周:卷积神经网络 part 3 视频学习 语义分割中的自注意力机制和低秩重建 语义分割(Semantic Segmentation) 概念:语义分割是在像素级别上的分类,属于同一类的像素都要被归为 ...
- 卷积神经网络学习笔记——SENet
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和SE ...
- 卷积神经网络提取特征并用于SVM
模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...
随机推荐
- Chapter 4 Invitations——20
Well, that was fine. I could leave him alone. 行吧,但愿一切都好.我能让他一个人. I would leave him alone. 我也会让他一个人的. ...
- 写在最前面 - 《看懂每一行代码 - kubernetes》
我要写什么 <看懂每一行代码 - kubernetes>会包含k8s整个项目的源码解析,考虑到门槛问题,在开始分析k8s之前我会通过一些更低难度的golang开源项目讲解来帮助大家提升go ...
- 微服务浪潮中,程序猿如何让自己 Be Cloud Native
前言 CNCF 与 Cloud Native 这两个技术词汇最近频频走进了程序员的视野,一切和他能搭上边的软件意味着标准.开放.时尚,也更能俘获技术哥哥们的心:这篇文章不想去带大家重温这个词汇后面的软 ...
- [十五]java.math包简介,RoundingMode与MathContext
java.math包提供了java中的数学类 包括基本的浮点库.复杂运算以及任意精度的数据运算 '可以看得到,主要包括三个类一个枚举 BigDecimal和BigInteger接下来会详细介绍 先 ...
- -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp
计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...
- ASP.NET Core教程【二】从保存数据看Razor Page的特有属性与服务端验证
前文索引:ASP.NET Core教程[一]关于Razor Page的知识 在layout.cshtml文件中,我们可以看到如下代码: <a asp-page="/Index" ...
- 对HTML5的初步认识(一)
一.概述 1.HTML5是什么? HTML5是最新一代的HTML标准,它不仅拥有HTML中所有的特性,而且增加了许多实用的特性,如视频.音频.画布(canvas)等. 2012年12月17日,万维网联 ...
- linux学习笔记-linux主机上传下载文件至linux虚拟机的方法
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.上传文件 scp -r file 用户名@ip地址:目标目录 2.下载文件 scp -r 用户名@ip地址:文件 目标目录
- 震惊!Vector两行代码求逆序对,六行代码过普通平衡树
Vector两行代码求逆序对 背景:济南集训Day7上午T2,出了一道逆序对的裸题,SB的我没看出是逆序对来,于是现场推了一个很刁钻的求逆序对的方法 首先我们想一下冒泡排序的过程,我们不难发现,对于每 ...
- SAP 用户参数 ME_USE_GRID
SAP 用户参数 ME_USE_GRID SAP的一些标准报表格式极其不友好,如果不做特殊参数设定,报表使用起来很不方便.我们可以通过设置user parameter的方式,改变一些报表的显示格式,让 ...