Google在2017年上半年发表了一篇关于可以运行在手机等移动设备上的神经网络结构——MobileNets。MobileNets是基于深度可分离卷积(depthwise separable convolution)而设计的轻量级深度神经网络。这文章也介绍了两个超参数可以很好的平衡延时与精度,这两个超参数可以使人更方便地选出自己想要的网络结构。MobileNets的结构能用在图片分类、人脸识别、目标检测等上面。论文的mxnet代码已经开源,tensorflow的相关代码也开源了。

深度可分离卷积(depthwise separable convolution)

在上一篇博客中——ShuffleNet总结中已经说明过卷积的计算了,与这里卷积相关计算有一点不同的是:这论文中长度为\(n\)方阵计算的复杂度直接设为\(n^2\),而我在前一篇博客中设为\(n^3\),实际上能优化到\(n^{2.376}\),加上openmp等多核多线程技术,方阵计算复杂度为\(n^2\)是合理的。

论文中的主要的思想是将一个标准卷积(standard convolution)分解成两个卷积,一个是深度卷积(depthwise convolution),这个卷积应用在每一个输入通道上;另一个是\(1 \times 1\)的逐点卷积(pointwise convolution),这个卷积合并每一个深度卷积的输出。

分解

为什么标准卷积能分解,怎么分解?先来看下论文给出的分解方法。如图一所示:

图1 标准卷积的分解

事实上标准卷积的分解可以用矩阵乘法来理解。在上一篇博客中——ShuffleNet总结卷积的计算时,如果卷积核\(K\)为\(D_K \times D_K \times M \times N\),输入的\(D_F \times D_F \times M\)张量\(F\)(也叫Feature),输出的\(D_F \times D_F \times N\)张量\(G\)(这里都采用了论文中的符号,\(D_K\)为卷积核的长与宽,\(M\)是是输入的通道数,\(N\)输出通道数,\(D_F\)是Feature的长与宽),先要将\(F\)转换成一个\((M \times D_K \times D_K) \times (D_F \times D_F)\)矩阵(就是im2col),卷积核\(K\)转换为\(N \times(M \times D_K \times D_K)\)。

卷积核这个矩阵可以分解成两个矩阵\(DW\)与\(PW\)的乘积,其中\({DW}\)代表depthwise convolution,\({PW}\)代表pointwise convolution。\(DW\)的shape为如图1b)所示的\(M \times (1 \times D_k \times D_k)\),\(DP\)的shape为如图1c)所示的\(N \times (M \times 1 \times 1)\),所以这两个相乘的shape刚好是卷积核\(K\)的shape:
\[
K_{N \times(M \times D_K \times D_K)}={PW}_{N \times (M \times 1 \times 1)} \times {DW}_{M \times (1 \times D_k \times D_k)} \tag{1.1}
\]

标准卷积计算

可以证明分解出来的两个卷积核与一个标准卷积核是等价的。标准卷积下的计算方法以下:
\[
G_{N \times (D_F \times D_F)} = K_{N \times(M \times D_K \times D_K)} \times F_{(M \times D_K \times D_K) \times (D_F \times D_F)} \tag{1.2}
\]

分解后的计算

分解成两个卷积后,先与第一个卷积核\(DW\)卷积,由于这个卷积核作用于每一个输入的通道,实现上就是分组了,一共分成了M组,这个需要循环计算M次:
\[
{G1}_{M \times (D_F \times D_F)} = {DW}_{M \times(1 \times D_K \times D_K)} \times F_{(M/M \times D_K \times D_K) \times (D_F \times D_F)} \tag{1.3}
\]

得到的\({G1}\)再转换成一个\((M \times 1 \times 1) \times (D_F \times D_F)\)矩阵\({G2}\),再通过与\({PW}\)卷积可得:
\[
{G3}_{N \times (D_F \times D_F)} = {PW}_{N \times(M \times 1 \times 1)} \times {G2}_{(M \times 1 \times 1) \times (D_F \times D_F)} \tag{1.4}
\]

分解前后单元网络结构对比如图2所示:

图2 分解前后的对比图

计算复杂度

对于标准卷积来说,根据式(1.2)可以看到计算量为:
\[
Cost_{std} = D_K \times D_K \times M \times N \times D_F \times D_F \tag{1.5}
\]

对于分解后的卷积,根据式(1.3)与式(1.4)可以看到计算量为:
\[
Cost_{sep} = D_K \times D_K \times M \times D_F \times D_F + M \times N \times D_F \times D_F\tag{1.6}
\]

分解前后的计算量之比是:
\[
p = \frac{Cost_{sep}}{Cost_{std}} = \frac{1}{N} + \frac{1}{D_K^2} \tag{1.7}
\]

可以看到前后的计算量是小了很多的。

MobileNets结构

经过上面的说明可以看得MoblieNets的结构如图3所示:

图3 MobileNets的网络结构

两个超参数

这两个超参数也是相当容易理解的,一个是减小输出通道数\(N\),一个是减少输入图片的大小(退出是分辨率resolution)。

Width Multiplier \(\alpha\)

如果上面输出的通道数都是原来的\(\alpha\)倍,那么我们可以知道计算量由式(1.6)变为:
\[
Cost_{sep}^\alpha = D_K \times D_K \times \alpha M \times D_F \times D_F + \alpha M \times \alpha N \times D_F \times D_F\tag{1.8}
\]
由于\(D_K\)一般比\(N\)小很多,所以计算量与参数量都大约是\(\alpha =1\)(MobileNets的基准线)时的\(\alpha^2\)倍。\(\alpha\)一般取值为0.25,0.5,0.75和1。比如的结果如图4所示。

Resolution Multipliter \(\rho\)

这个用于控制输入图片的大小,输入的图片越小,后面的feature也会相于地变小,所以能减小计算量,但是并不能减小参数量,因为这个对于卷积核的大小没有影响,计算计算量由式(1.8)变为:
\[
Cost_{sep}^{\alpha\rho} = D_K \times D_K \times \alpha M \times \rho D_F \times \rho D_F + \alpha M \times \alpha N \times \rho D_F \times \rho D_F\tag{1.9}
\]

可以明显地看到,计算量为原来的\(\rho^2\)倍,如果以224大小为基准线,那么输入大小一般建议取为192、160与128。具体结果如图4所示。

图4 两个超参数对准确率、计算量与参数量的影响。

结语

MobileNets基以上面几种技术,训练出来的网络能很好地用于各类视觉任务,比如目标检测、分类等。

MobileNets总结的更多相关文章

  1. [论文阅读] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (MobileNet)

    论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 本文提出的模型叫Mobi ...

  2. 论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)

    论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications MobileNet由Go ...

  3. 【网络结构】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文解析

    目录 0. Paper link 1. Overview 2. Depthwise Separable Convolution 2.1 architecture 2.2 computational c ...

  4. 【论文翻译】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文链接:https://arxi ...

  5. [论文理解] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications Intro MobileNet 我 ...

  6. 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2

    from:https://blog.csdn.net/qq_14845119/article/details/73648100 Inception v1的网络,主要提出了Inceptionmodule ...

  7. Paper | MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    目录 1. 故事 2. MobileNet 2.1 深度可分离卷积 2.2 网络结构 2.3 引入两个超参数 3. 实验 本文提出了一种轻量级结构MobileNets.其基础是深度可分离卷积操作. M ...

  8. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    1. 摘要 作者提出了一系列应用于移动和嵌入式视觉的称之为 MobileNets 的高效模型,这些模型采用深度可分离卷积来构建轻量级网络. 作者还引入了两个简单的全局超参数来有效地权衡时延和准确率,以 ...

  9. 深度学习论文翻译解析(六):MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications

    论文标题:MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications 论文作者:Andrew ...

随机推荐

  1. Python学习--字典

    在Python中通过名字来引用值的数据结构称为映射(mapping).字典是Python中唯一内建(Python解释器本身支持,不需要import)的映射类型.字典中的值没有特殊的顺序,都存储在一个特 ...

  2. Java 核心内容相关面试题【1】

    1.什么是 transient 变量? transient 变量是指不会被序列化的变量. 2.什么是同步(synchronization)? 在多线程环境中,同步是指控制多个线程访问共享资源的方式.没 ...

  3. pwnable.kr login之write up

    main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...

  4. TF30042: The database is full. Contact your Team Foundation Server administrator.

    TF30042: The database is full. Contact your Team Foundation Server administrator. 在一个阳光明媚的下午,迁入代码的时候 ...

  5. Mac上编译并运行Android5.0源码

    下载.配置环境.build和运行参考的都是Android Source提供的文档,包括:Initializing a Build Environment,Downloading the Source和 ...

  6. [转载] gitbook安装与使用

    转载自http://blog.csdn.net/xiaocainiaoshangxiao/article/details/46882921 废话不说,直接主题: gitbook安装 ========= ...

  7. Ant的使用

    Ant的使用 什么是Apache Ant Apache Ant是一个基于java的软件构建工具(build tool),理论上它有点类似C/C++的make工具 为什么要用ant? make, gnu ...

  8. Facebook-Haystack合并小文件

    1.原文 https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf 2.翻译版 http://www.importn ...

  9. js 资料

    http://javascript.ruanyifeng.com/#introduction 2.MDN 火狐中文社区  https://developer.mozilla.org/zh-CN/doc ...

  10. CTF 文件包含与伪协议

    正巧在写代码审计的文章,无意间看到了一篇CTF的代码审计,CTF题目很好,用的姿势正如标题,文件包含和伪协议. 先放出原文链接(http://www.freebuf.com/column/150028 ...