0. Paper link

MobileNets

1. Overview

  MobileNets是一种基于深度可分割卷积的轻量流线型结构,引进了两个简单的全局超参数在延迟与准确率之间达到了平衡,并且超参数让model builder可以按照不同的应用场景的限制去选择合适大小的模型,网络的主要贡献是把传统的卷积拆成了“deepwise convolution”与“pointwise convolution”来减少卷积过程的计算量与参数数量,同时利用了两个超参数来改变了网络的宽度与输入图片的分辨率。文章做的实验也比较好,是一篇值得学习各方面得文章,不仅仅是他的网络结构。

2. Depthwise Separable Convolution

2.1 architecture

  MobileNet的网络结构基于Depthwise Separable Convolution, 它把传统的卷积操作拆成了两部分,一部分是Depthwise convolution,即对输入的每个channel使用一个卷积核,来达到对每一层做convolution的操作。另一部分是pointwise convolution,利用1 × 1卷积把Depthwise convolution的输出组合起来,从而达到传统convolution的效果,具体可以看下图:

2.2 computational cost

  对于一个传统的卷积操作:假设输入与输出的feature map都是\(D_F × D_F × M\),卷积核为\(D_K × D_K × M × N\), 其中\(D_F\)与\(D_K\)是尺寸(作者假设输入等于输出并且都是正方形,实际网络模型可以处理任何大小与长宽比),M是通道数,N是卷积核的个数。
  传统卷积操作如下(加padding)
\[
\mathbf{G}_{k, l, n} = \sum_{i, j, m} \mathbf{K}_{i, j, m, n} · \mathbf{F}_{k+i-1, l+j-1, m}
\]
  传统卷积computational cost 如下
\[D_K · D_K · M · N · D_F · D_F\]
  depthwise convolution计算如下:
\[
\hat{\mathbf{G}}_{k, l, m} = \sum_{i, j}\hat{\mathbf{K}}_{i, j, m} · \mathbf{F}_{k+i-1, l+j-1, m}
\]
  depthwise convolution的computational cost如下:
\[
D_K · D_K · M · D_F · D_F
\]
  所以Depthwise Separable convolution cost:
\[
D_K · D_K · M · D_F · D_F + M · N · D_F · D_F
\]
  他们之间computational cost的比例为:
\[
\frac{D_K · D_K · M · D_F · D_F + M · N · D_F · D_F}{D_K · D_K · M · N · D_F · D_F} = \frac{1}{N} + \frac{1}{D^{2}_{K}}
\]

3. Network Structure

  MobileNet除了第一层是全卷积其他层的卷积都是使用Depthwise Separable convolutions,除了最后一层FC层数值直接送到softmax层之外,所有层后面都跟着BN层以及ReLU激活函数, 一个average pooling层在FC层之前把空间卷积减为1。
下图为 Depthwise Separable convolution的结构:

下表为一个MobileNet的整体结构:

以下为文中的一些具体实行细节,自己经验不多,直接翻译来增加一些知识储备。

  非结构化的稀疏矩阵操作通常不比密集矩阵运算快,除非是非常稀疏的矩阵。我们的模型结构将几乎全部的计算复杂度放到了1x1卷积中。这可以通过高度优化的通用矩阵乘法(GEMM)功能来实现。通常卷积由GEMM实现,但需要在称为im2col的内存中进行初始重新排序,以将其映射到GEMM。这个方法在流行的Caffe包中正在使用。1x1的卷积不需要在内存中重新排序而可以直接被GEMM(最优化的数值线性代数算法之一)实现。MobileNet在1x1卷积花费了95%计算复杂度,也拥有75%的参数(见表二)。几乎所有的额外参数都在全连接层。

下图为不同层的参数量:

  使用类似于InceptionV3的异步梯度下降的RMSprop,MobileNet模型在TensorFlow中进行训练。然而,与训练大模型相反,我们较少地使用正则化和数据增加技术,因为小模型不容易过拟合。当训练MobileNets时,我们不使用sideheads或者labelsmoothing,通过限制croping的尺寸来减少图片扭曲。另外,我们发现重要的是在depthwise滤波器上放置很少或没有重量衰减(L2正则化),因为它们参数很少。

4. Width Multiplier: Thinner Models

  加入一个超参数Width Multiplier \(\alpha\)来使得模型更小更快,用来对网络中的每一层进行“瘦身”(thin)。输入的通道\(M\)变为\(\alpha M\)输出的通道\(N\)变为\(\alpha N\),因此加上Width Multiplier的cost为:
\[{D_K · D_K · \alpha M · D_F · D_F + \alpha M · \alpha N · D_F · D_F}\]
其中 \(\alpha \in (0, 1]\),Width multiplier有减少计算复杂度和参数数量(\(\alpha ^ 2\))的作用。

5. Resolution Multiplier: Reduced Representation

  加入第二个超参数resolution multiplier \(\rho\)来统一减少输入图片跟中间每一层的特征。现在Depthwise Separable convolution 的计算量如下:
\[
D_K · D_K · \alpha M · \rho D_F · \rho D_F + \alpha M · \alpha N · \rho D_F · \rho D_F
\]
  其中 \(\rho \in (0, 1]\) 通常网络的输入像素设为224, 192, 160, 128.另外 ,resolution multiplier 也有减少计算复杂度和参数数量(\(\rho ^ 2\))的作用。

Experiments

  下图比较了MoilbeNet全卷积与Depthwise Separable convolution的性能,可以发现仅仅在准确率低了1%左右,参数却少很多

  下面比较了 “浅层”网络与“瘦”网络的性能

  下面实验在固定 \(\rho\) 改变 \(\alpha\)来观察在ImageNet上的准确率变化

  下面实验在固定\(\alpha\)改变\(\rho\)来观察在ImageNet上的准确率变化

  下面实验比较了随着计算量增大准确率的变化

  下面实验比较了 \(\alpha \in \{1, 0.75, 0.5, 0.25\}\) \(\rho \in \{224, 192, 160, 128\}\)一共16个模型的实验性能

  下面实验比较了MobileNet与VGG GoogLeNet 之间的准确、计算量与参数

  下面实验比较了smaller MobileNet与Squeezenet AlexNet 之间的准确、计算量与参数

  下面实验比较了各版本MobileNet与inception V3在细粒度分类方面的准确、计算量与参数

  下面实验比较了各版本MobileNet与其他网络在目标检测方面的准确、计算量与参数

【网络结构】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文解析的更多相关文章

  1. 深度学习论文翻译解析(十七):MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 【MobileNet-V1】-2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications-论文阅读

    2017-CVPR-MobileNets Efficient Convolutional Neural Networks for Mobile Vision Applications Andrew H ...

随机推荐

  1. d3.js:数据可视化利器之快速入门

    hello,data! 在进入d3.js之前,我们先用一个小例子回顾一下将数据可视化的基本流程. 任务 用横向柱状图来直观显示以下数据: var data = [10,15,23,78,57,29,3 ...

  2. 6.Git代码回滚

    1.代码修改并提交 我们已经成功地添加并提交了一个helloWorld.txt文件,现在,是时候继续工作了. 于是,我们继续修改helloWorld.txt文件,改成如下内容: $ vi helloW ...

  3. Flask与pyaudio实现音频数据流的传输(电话会议语音交互式应用)

    1.声卡设备验证 #查看音频设备 dong@dong-ubuntu:~$ arecord -l**** CAPTURE 硬體裝置清單 ****card 0: PCH [HDA Intel PCH], ...

  4. 揭秘DOM中data和nodeValue属性同步改变那些事

    问题引发:最近在整理DOM系列的一些知识点,发现在DOM的某些接口API中,存在一些我想不通的现象.就随便举个例子吧:DOM文档模型中的文本节点,可以通过nodeValue或data属性访问文本节点的 ...

  5. 爱用bootstrap系列一:Sublime上写H5及运行

    sublime上使用插件快速生成模板文件 第一,你要先下载package control的插件,这是一款用来管理插件的插件 . 可能会由于你所在的网络通过代理访问而导致安装失败,你可以通过下面的步骤来 ...

  6. 深入理解JS对象和原型链

    函数在整个js中是最复杂也是最重要的知识 一个函数中存在多面性: 1.它本身就是一个普通的函数,执行的时候形成的私有作用域(闭包),形参赋值,预解释,代码执行,执行完 成后栈内存销毁/不销毁. 2.& ...

  7. log4j的配置和使用

    日志记录 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器 ...

  8. android线程学习心得

    有一篇关于android线程讲的非常好,大家可以参考下,其中有一句话讲的非常好,就拿来做开篇之句: 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主 ...

  9. peeping tom 在渗透信息收集前的作用。

    原本想写个截屏类的脚本,发现已经有了这个 py脚本   名字叫作: peeping tom 想要了解详细,戳:https://bitbucket.org/LaNMaSteR53/peepingtom/ ...

  10. 服务器抓包命令:tcpdump详解

    官网地址:http://www.tcpdump.org/tcpdump_man.html 简介: tcpdump,就是:dump the traffic on a network,根据使用者的定义对网 ...