zoukankan      html  css  js  c++  java
  • MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    1. 摘要

    作者提出了一系列应用于移动和嵌入式视觉的称之为 MobileNets 的高效模型,这些模型采用深度可分离卷积来构建轻量级网络。

    作者还引入了两个简单的全局超参数来有效地权衡时延和准确率,以便于网络设计者针对自己任务的限制来选择大小合适的模型。

    2. 相关工作

    设计轻量级的高效模型大致可以分为两个方向:压缩预训练好的模型或者直接训练小的网络。

    针对前者,模型压缩主要是基于量化、哈希、剪枝和霍夫曼编码等,另外一种训练小模型的方法则是蒸馏,用较大的网络来教较小的网络。而直接设计小网络结构的尝试则主要有 Xception、SqueezeNet 等。

    MobileNets 主要集中在优化时延但同时也会产生较小的模型,同时,两个超参数宽度乘子和分辨率乘子可以根据实际应用来灵活地定义更小更高效的网络。

    3. 网络结构

    3.1. 深度可分离卷积

    标准的卷积操作一步就可以对输入进行特征提取并将它们结合成一系列输出,深度可分离卷积则将这个过程分为两层:一层是深度卷积(depthwise convolution)用来对输入的每个通道单独提取特征,一层是点卷积(pointwise convolution)用 1×1 的卷积来结合上一步的输出。

    假设输入的特征图大小是 (D_F×D_F×M),一个标准卷积层的参数为 (D_K×D_K×M×N)(D_K) 是卷积核的大小。如果输出特征图的空间大小保持不变,那么计算代价为:

    [D_K*D_K*M*N*D_F*D_F ]

    而采用深度可分离卷积的计算代价为:

    [D_K*D_K*M*D_F*D_F+M*N*D_F*D_F ]

    计算量减少了:

    [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_K^2} ]

    MobileNets 采用 3×3 大小的深度可分离卷积,相比标准卷积可以减少 8 到 9 倍的计算量。

    除此之外,在深度可分离卷积的两层后面都要引入 BN 和 ReLU。

    3.2. MobileNet 网络结构

    MobileNet 的主体结构除了第一层为标准卷积外都采用深度可分离卷积,除了最后一层全连接没有激活函数直接送入到 Softmax 层外其余层都紧跟着 BN 和 ReLU。在第一层和深度卷积层采用步长为 2 来进行下采样,最后一个平局池化层将空间分辨率减小到 1。详细信息如下表所示:

    通过定义有更少乘-加操作的网络是不够的,还要考虑在硬件上有效实现这些操作,比如非结构化的稀疏矩阵通常不会比密集矩阵快除非稀疏到一定程度。MobileNet 结构将几乎所有的计算都放在 1×1 卷积操作上,而这在现有的卷积实现算法中不需要在内存中的初始化重新排序,也就可以加快计算速度。

    可以看到,95% 的计算时间都花费在 1×1 卷积上,75% 的参数量也都集中在 1×1 卷积层,其余的参数则主要来自全连接层。

    3.3. 宽度乘子:更瘦的模型

    尽管基本的 MobileNet 结构已经非常小、时延很低,但具体的使用场景可能需要模型更小更快。为了构建这些计算量更少更小的模型,作者引入了一个简单的参数 (alpha),称之为宽度乘子(width multiplier),它的作用是统一让网络中的每一层都更瘦。

    针对某一层网络和 (alpha),输入的通道数从 (M) 变成 (alpha M),输出通道数从 (N) 变成 (alpha N),这样这一层的计算代价就变为:

    [D_K*D_K*alpha M*D_F*D_F+alpha M*alpha N*D_F*D_F ]

    宽度乘子可以以大致 (alpha^2) 的速率减少计算代价和参数量,可以用来设计一个更小的网络来平衡准确率、时延和模型大小这三者。

    3.4. 分辨率乘子:减弱表示能力

    另一个减少计算代价的超参数是分辨率乘子(resolution multiplier) ( ho),将它应用在输入图像上,然后每一层的表示能力都相应减少。实际中,作者是通过设置输入分辨率来确定这个参数的。

    宽度乘子和分辨率乘子结合在一起,某一层网络的计算代价就变为了:

    [D_K*D_K*alpha M* ho D_F* ho D_F+alpha M*alpha N* ho D_F* ho D_F ]

    分辨率乘子可以以 ( ho^2) 的速率减少计算代价。下面的例子可以很好地展示深度可分离卷积以及两个超参数是怎么减少网络的计算代价和参数量的。

    4. 实验结果

    采用深度卷积的网络相对于标准卷积节省了巨大的计算代价和参数量,但准确率却仅仅降低了 1%。

    相较于移除表一中特征图大小为 14×14×512 的五层网络,宽度因子 (alpha=0.75) 的更瘦网络比更浅的网络准确率高出 3 个百分点。

    随着宽度因子的降低,模型的准确率平滑降低,直到值太小 (alpha=0.25) 时才有显著下降。

    随着分辨率因子的降低,模型的准确率始终保持平滑降低。

    相较于 GoogleNet 和 VGG,MobileNet 的准确率接近于 VGG ,超越了 GoogleNet,但模型大小的计算代价都小了很多。

    获取更多精彩,请关注「seniusen」!

  • 相关阅读:
    算法作业10——0-1装载问题(背包问题)
    算法作业9-1——最长公共子序列问题
    算法作业9-2——背包问题
    算法作业7——投资问题
    算法作业6——选第k小的元素:特定分治策略
    【Java并发编程】并发编程大合集
    Redis学习笔记-Redis内部数据结构
    近期的随笔
    2013年的总结,比以往时候来得晚了一些
    探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法
  • 原文地址:https://www.cnblogs.com/seniusen/p/12025293.html
Copyright © 2011-2022 走看看