MobileNet——一种模型轻量化方法
导言
新的CNN网络的提出,提高了模型的学习能力但同时也带来了学习效率的降低的问题(主要体现在模型的存储问题和模型进行预测的速度问题),这使得模型的轻量化逐渐得到重视。轻量化模型设计主要思想在于设计更高效的“网络计算方式”(尤其针对卷积方式),从而不损失网络性能的前提下,减少网络计算的参数。本文主要介绍其中的一种——MobileNet[1](顾名思义,是能够在移动端使用的网络模型)。
深度可分离卷积
MobileNet实现模型轻量化的核心是depth-wise separable convolution,可翻译为深度可分离卷积,最早由Sifre在2014年提出[2]。直观上,此方法将CNN中传统卷积方法中的卷积(filtering)和求和(combining)这两个部分,拆分开来,从而极大地减小了网络计算的权值参数数量,提高了计算速度。
具体来讲,假设输入为\(D_F \times D_F \times M\)的特征图F(feature map),其中\(M\)表示输入特征的个数;若步长(stride)为1,且使用padding的话,则可知输出为\(D_F \times D_F \times N\)的特征图,设为G,其中N表示输出特征的个数。
对于传统卷积方法,需要使用\(N\)个$D_K \times D_K \times M $的卷积核,如图(a)所示:

这一卷积过程的数学表达式为:
\]
可以看到计算每个\(G_n\)的时候, 都需要对所有的m进行计算并求和,而深度可分离卷积要做的,正是把(1)式中的m拿出来。
深度可分离卷积将传统的卷积和拆分成了卷积和求和两部分,其卷积核自然也由两部分构成,分别是:Depthwise Convolutional Filters和Pointwise Convolution Filter。

从图(b)(c)中,可以直观地看出,Depthwise Convolutional Filters包含了传统卷积核宽度(\(D_K\))和高度(\(D_k\))以及输入特征数(\(M\))这3个参数,Pointwise Convolution Filter包含了输出特征数(\(N\))这1个参数。原来的4个参数被拆分成3+1,对于计算有何影响呢?这时候,相应的计算式变成了:
\]
\]
(2)式中\(\hat{K}\)表示Depthwise Convolutional Filters卷积核,(3)式中\(\bar{K}\)表示Pointwise Convolution Filter卷积核。为了方便比较,我们把(2)代入(3),得到
\]
比较(1)和(4),可以看出,通过这样的设计,我们成功地拿出了m,把求和号拆成了两部分。为了量化对计算速度提升的效果,我们可以计算前者与后者计算量的比值为:
\]
可见,计算量的减少程度与\(D_K\)和\(N\)正相关,已知MobileNet中Depthwise Convolutional Filters卷积核为\(3\times3\),则随着N取遍大于1的正整数,该比值的变化范围为\((\frac{1}{9},\frac{11}{18}]\),对应的速度提升为\([1.64,9)\),且N越大,则速度提升越明显。
超参数
超参数的设计使得MobileNet能更好的适应不同用户对于速度和精度的需求。MobileNET主要有两个超参数:宽度乘子(Width Multiplier \(\alpha\))和分辨率乘子( Resolution Multiplier \(\rho\)),它们都与网络的卷积计算有着紧密的联系。宽度乘子\(\alpha\)作用于特征数量,对应到图(a)(b)(c)中为卷积核的数量,而分辨率乘子\(\rho\)作用于特征的尺寸,对应图中每个长方体的“横截面积”。更精确地,可以将考虑到超参数的卷积计算量表示如下:
\]
在实际应用中,\(\alpha\)的取值一般为1,0.75,0.5和0.25,而\(\rho\)由选择的分辨率决定,默认的分辨率选择为224,192,160和128。
总结
MobileNet的提出是为了在保证网络性能的前提下,提高计算的速度,推动CNN在移动设备上的应用。这一轻量化模型的核心是利用深度可分离卷积将传统卷积中的卷积与求和两个步骤拆开,对应Depthwise Convolutional Filters和Pointwise Convolution Filter这两个卷积核。模型还提供了宽度乘子和分辨率乘子以平衡不同应用场景下对速度和精度的需求。
MobileNet——一种模型轻量化方法的更多相关文章
- 新上线!3D单模型轻量化硬核升级,G级数据轻松拿捏!
"3D模型体量过大.面数过多.传输展示困难",用户面对这样的3D数据,一定不由得皱起眉头.更便捷.快速处理三维数据,是每个3D用户对高效工作的向往. 在老子云最新上线的单模型轻量化 ...
- 基于WebGL/Threejs技术的BIM模型轻量化之图元合并
伴随着互联网的发展,从桌面端走向Web端.移动端必然的趋势.互联网技术的兴起极大地改变了我们的娱乐.生活和生产方式.尤其是HTML5/WebGL技术的发展更是在各个行业内引起颠覆性的变化.随着WebG ...
- 倾斜摄影3D模型|手工建模|BIM模型 轻量化处理
一.什么是大场景? 顾名思义,大场景就是能够从一个鸟瞰的角度看到一个大型场景的全貌,比如一个园区.一座城市.一个国家甚至是整个地球.但过去都以图片记录下大场景,如今我们可以通过建造3D模型来还原大场景 ...
- Xbim.GLTF源码解析(四):轻量化处理
原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10839433.html 在IFC标准中,由IfcRepresentationMap支持 ...
- 轻量化模型之MobileNet系列
自 2012 年 AlexNet 以来,卷积神经网络在图像分类.目标检测.语义分割等领域获得广泛应用.随着性能要求越来越高,AlexNet 已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的 ...
- 轻量化模型:MobileNet v2
MobileNet v2 论文链接:https://arxiv.org/abs/1801.04381 MobileNet v2是对MobileNet v1的改进,也是一个轻量化模型. 关于Mobile ...
- CNN结构演变总结(二)轻量化模型
CNN结构演变总结(一)经典模型 导言: 上一篇介绍了经典模型中的结构演变,介绍了设计原理,作用,效果等.在本文,将对轻量化模型进行总结分析. 轻量化模型主要围绕减少计算量,减少参数,降低实际运行时间 ...
- 卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和Mo ...
- 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- Linux常用命令代码大全
arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 – (SMBIOS / DMI ...
- KEIL查看ARM-Cortex M架构soc的内核寄存器之 MSP
参考下图stm32l475的参考手册: MSP指向地址基地址为0x20000000的内存处.参考STM32L475的memory map可知MSP指向的是SRAM的一块地址.并且由上面的编译信息 ...
- Paxos 协议
可用性与一致性 为了向用户提供更好的服务体验,现代软件架构越来越注重系统的可用性availability. 正是在这种趋势的驱动下,微服务与容器化技术才能在今天大行其道. 而高可用架构的前提是冗余: ...
- spring-boot-route(八)整合mybatis操作数据库
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法
083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...
- 【编程开发】Python---列表
ERROR:错误 waring:警告,还没到犯错的地步 print(r'\n') r"字符串",字符串里的所有字符都不转义 str = "abcdef" 如果 ...
- Xnip Mac上方便好用的截图工具
Xnip Mac上方便好用的截图工具 标注 Xnip 拥有齐全的标注功能,您可以对截取的图片进行标注,在标注的同时还能重新调整截图大小. 查看标注操作 GIF 滚动截图 Xnip 的滚动截图功能可以让 ...
- 在Windows7系统中设置虚拟内存大小
当我们的电脑物理内存空间不够用时,操作系统就会自动从硬盘空间上分出一块空间来当内存使用,这就是虚拟内存.可以说虚拟内存是物理内存的补充,是备用的物理内存.一般来说,如果电脑里的程序不多,占用内存资源不 ...
- str常用操作方法
1. 索引(即下标) s = 'ABCDEFGHIJKLMN' s1 = s[0] print('s[0] = ' + s1) #s[0] = A print('s[3] = '+ s[3]) #s[ ...
- 如何在yii2直接执行SQL
执行SQL $connection=Yii::app()->db; // 假设你已经建立了一个 "db" 连接 $sql = "SELECT * FROM tb ...