导言

新的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)所示:

这一卷积过程的数学表达式为:

\[\mathbf{G}_{k, l, n}=\sum_{i, j, m} \mathbf{K}_{i, j, m, n} \cdot \mathbf{F}_{k+i-1, l+j-1, m}
\]

可以看到计算每个\(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,对于计算有何影响呢?这时候,相应的计算式变成了:

\[\hat{\mathbf{G}}_{k, l, m}=\sum_{m} \sum_{i, j} \hat{\mathbf{K}}_{i, j, m} \cdot \mathbf{F}_{k+i-1, l+j-1, m}
\]
\[\mathbf{G}_{k, l, n} = \sum_{m} \hat{\mathbf{G}}_{k, l, m} \cdot \bar{\mathbf{K}}_{m,n}
\]

(2)式中\(\hat{K}\)表示Depthwise Convolutional Filters卷积核,(3)式中\(\bar{K}\)表示Pointwise Convolution Filter卷积核。为了方便比较,我们把(2)代入(3),得到

\[\mathbf{G}_{k, l, n}=\sum_{m} \sum_{i, j} \hat{\mathbf{K}}_{i, j, m} \cdot \mathbf{F}_{k+i-1, l+j-1, m}\cdot \bar{\mathbf{K}}_{m,n}
\]

比较(1)和(4),可以看出,通过这样的设计,我们成功地拿出了m,把求和号拆成了两部分。为了量化对计算速度提升的效果,我们可以计算前者与后者计算量的比值为:

\[\frac{D_{K} \cdot D_{K} \cdot M \cdot D_{F} \cdot D_{F}+M \cdot N \cdot D_{F} \cdot D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}} = \frac{1}{N}+\frac{1}{D_{K}^{2}}
\]

可见,计算量的减少程度与\(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\)作用于特征的尺寸,对应图中每个长方体的“横截面积”。更精确地,可以将考虑到超参数的卷积计算量表示如下:

\[D_{K} \cdot D_{K} \cdot \alpha M \cdot \rho D_{F} \cdot \rho D_{F}+\alpha M \cdot \alpha N \cdot \rho D_{F} \cdot \rho D_{F}
\]

在实际应用中,\(\alpha\)的取值一般为1,0.75,0.5和0.25,而\(\rho\)由选择的分辨率决定,默认的分辨率选择为224,192,160和128。

总结

MobileNet的提出是为了在保证网络性能的前提下,提高计算的速度,推动CNN在移动设备上的应用。这一轻量化模型的核心是利用深度可分离卷积将传统卷积中的卷积与求和两个步骤拆开,对应Depthwise Convolutional Filters和Pointwise Convolution Filter这两个卷积核。模型还提供了宽度乘子和分辨率乘子以平衡不同应用场景下对速度和精度的需求。


  1. Howard, Andrew G., et al. "Mobilenets: Efficient convolutional neural networks for mobile vision applications." arXiv preprint arXiv:1704.04861 (2017).

  2. Sifre, L., and S. Mallat. Rigid-motion scattering for image classification, 2014. Diss. Ph. D. thesis, 2014.

MobileNet——一种模型轻量化方法的更多相关文章

  1. 新上线!3D单模型轻量化硬核升级,G级数据轻松拿捏!

    "3D模型体量过大.面数过多.传输展示困难",用户面对这样的3D数据,一定不由得皱起眉头.更便捷.快速处理三维数据,是每个3D用户对高效工作的向往. 在老子云最新上线的单模型轻量化 ...

  2. 基于WebGL/Threejs技术的BIM模型轻量化之图元合并

    伴随着互联网的发展,从桌面端走向Web端.移动端必然的趋势.互联网技术的兴起极大地改变了我们的娱乐.生活和生产方式.尤其是HTML5/WebGL技术的发展更是在各个行业内引起颠覆性的变化.随着WebG ...

  3. 倾斜摄影3D模型|手工建模|BIM模型 轻量化处理

    一.什么是大场景? 顾名思义,大场景就是能够从一个鸟瞰的角度看到一个大型场景的全貌,比如一个园区.一座城市.一个国家甚至是整个地球.但过去都以图片记录下大场景,如今我们可以通过建造3D模型来还原大场景 ...

  4. Xbim.GLTF源码解析(四):轻量化处理

    原创作者:flowell,转载请标明出处:https://www.cnblogs.com/flowell/p/10839433.html 在IFC标准中,由IfcRepresentationMap支持 ...

  5. 轻量化模型之MobileNet系列

    自 2012 年 AlexNet 以来,卷积神经网络在图像分类.目标检测.语义分割等领域获得广泛应用.随着性能要求越来越高,AlexNet 已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的 ...

  6. 轻量化模型:MobileNet v2

    MobileNet v2 论文链接:https://arxiv.org/abs/1801.04381 MobileNet v2是对MobileNet v1的改进,也是一个轻量化模型. 关于Mobile ...

  7. CNN结构演变总结(二)轻量化模型

    CNN结构演变总结(一)经典模型 导言: 上一篇介绍了经典模型中的结构演变,介绍了设计原理,作用,效果等.在本文,将对轻量化模型进行总结分析. 轻量化模型主要围绕减少计算量,减少参数,降低实际运行时间 ...

  8. 卷积神经网络学习笔记——轻量化网络MobileNet系列(V1,V2,V3)

    完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 这里结合网络的资料和Mo ...

  9. 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

随机推荐

  1. EM 算法 Expectation Maximization

  2. 软件定义网络实验记录②--Mininet 实验——拓扑的命令脚本生成

    一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能. 三. ...

  3. “酒香也怕巷子深” Smartflow-Sharp 工作流

    导语 老话说得好,"酒香不怕巷子深"可是我又不是什么大咖,写得再好也没人知道.所以我今天准备再写写我的工作流组件,写得不好还请大家见谅.写文章对于我来说,有点感觉"茶壶里 ...

  4. 【题解】Bzoj3916

    字符串\(Hash\). 笔者实在太菜了,到现在还没有熟练掌握\(Hash\),就来这里写一篇学习笔记. \(Description\) 有三个好朋友喜欢在一起玩游戏,\(A\)君写下一个字符串\(S ...

  5. 第0天 | 12天搞定Pyhon,前言

    依稀记得,在2014年的某一天,一位运营电商平台的多年好朋友,找我帮忙:一个月内,实现抓取竞争对手在某电商平台上的所有产品信息并统计每个产品的点击率. 说出来有些不好意思,那些年,参与过的产品挺多的, ...

  6. 玩转控件:GDI+动态绘制流程图

       前言 今天,要跟大家一起分享是"GDI+动态生成流程图"的功能.别看名字高大上(也就那样儿--!),其实就是动态生成控件,然后GDI+绘制直线连接控件罢了.实际项目效果图如下 ...

  7. 使用react Context+useReducer替代redux

    首先明确一点,Redux 是一个有用的架构,但不是非用不可.事实上,大多数情况,你可以不用它,只用 React 就够了. 曾经有人说过这样一句话. "如果你不知道是否需要 Redux,那就是 ...

  8. mysql任意文件读取漏洞复现

    前言 第一次得知该漏洞后找了一些文章去看. 一开始不明白这个漏洞是怎么来的,只知道通过在服务端运行poc脚本就可以读取客户端的任意文件,直接找到网上准备好的靶机进行测试,发现可行,然后就拿别人的poc ...

  9. java性能分析之火焰图

    原由 最近因为kafka.zookeeper.ES和相关的Java应用的内存问题搞的头大,做运维将近4年,对Java调优.性能方面的知识了解的少之又少,是时候下定决心来对他多一个学习了.不能一口吃成一 ...

  10. html学习(2)

    标签的语义化,也就是标签的用途. html.css.javascript作用: HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. CSS样式是表 ...