论文记录_MobileNets Efficient Convolutional Neural Networks for Mobile Vision Application

  • 本文个人博客地址:点击查看
  • Tensorflow 中的实现:点击查看
  • Caffe 中的实现:点击查看

1、概述

  • Google2017年提出的适用于手机端的神经网络模型
  • 主要使用了深度可分离卷积Depthwise Separable Convolution 将卷积核进行分解计算来减少计算量
  • 引入了两个超参数减少参数量和计算量
    • 宽度乘数(Width Multiplier): [减少输入和输出的 channels ]
    • 分辨率乘数(Resolution Multiplier):[减少输入输出的 feature maps 的大小]

2、深度可分离卷积(Depthwise Separable Convolution

  • 可以将一个标准卷积核分成一个深度卷积depthwise convolution 和 一个1X1的卷积(叫作逐点卷积pointwise convolution)。如下图所示

depthwise separable convolution

2.1 标准卷积

  • 标准的卷积层是将维度为 D F ×D F ×M  的输入层转化为维度为 D G ×D G ×N  [ 上篇论文中也有提到]
    • D F   是输入feature map的长和宽,M 是输入的通道数(channels
    • D G   是输出feature map的长和宽,N 是输出的通道数
  • 假设卷积核filter的大小是 D k ×D k   ,则标准卷积的计算量是
    D k D k MND F D F  

    • 引用上篇论文中的图, 只看kernel matrix 部分, D k D k   就是一个方格的大小,然后乘上输入和输出的channels个数,然后作用在input feature maps
  • 标准卷积是这样的, 即不管当前pixel有多少channels,卷积之后就是一个channel

2.2 Depthwise Separable Convolution

  • 分为两个步骤
    • 第一步深度卷积:卷积核的大小是 D k ×D k ×1×M  ,所以总的计算量是:
      D k D k MD F D F  
    • 第二步逐点卷积:卷积核大小是 1×1×M×N  ,所以总的计算量是:
      MND F D F  
  • 所以和标准的卷积相比计算量比率为:
    D k D k MD F D F +MND F D F D k D k MND F D F  =1N +1D 2 k   

    • MobileNet使用的是3x3的卷积核,所以计算量可以减少8-9倍 (因为比率是1/N+1/9)
  • 第一步深度卷积操作是在每一个channel上进行的卷积操作


- 第二步逐点卷积才是结合起来

3. 神经网络结构

  • MobileNet共有28层(深度卷积和逐点卷积分开来算)
  • 之前标准的结构是卷积层之后跟上Batch Normalization层和Relu激活函数,这里引入Depthwise separable convolution之后的结构如下图
    • 每一层都跟上了BN层和激活函数
  • 总的结构

4. 宽度乘数(Width Multiplier)

  • 引入超参数 α  , 目的是使模型变瘦,
  • 即输入层的channels个数M,变成 αM  ,输出层的channels个数N变成了 αN 
  • 所以引入宽度乘数后的总的计算量是
    D k D k αMD F D F +αMαND F D F  

    • 一般 α(0,1]  ,常取的值是1, 0.75, 0.5, 0.25,
    • 大约可以减少参数量和计算量的 α 2  

5. 分辨率乘数 (Resolution Multiplier)

  • 引入超参数 ρ  ,目的是降低图片的分辨率
  • 即作用在输入的feature map
  • 所以再引入分辨率乘数后总的计算量是:
    D k D k αMρD F ρD F +αMαNρD F ρD F  

    • 一般输入图片的分辨率是224, 192, 160 or 128
    • 大约可以减少计算量的 ρ 2  

6. 实验结果

  • 关于超参数的选择,下图可以看出准确度和参数量和参数运算量的关系,之间有个trade off,合理选择参数即可

  • 还在细粒度的识别大规模地理位置识别人脸属性提取目标检测人脸识别等任务上进行了测试,效果也很好

7. 总结

  • 主要是基于depthwise separable convolution
  • 引入了两个超参数
    • [ 第一个宽度乘数就是减少feature map,以此来降低模型厚度 ]
    • [ 第二个分辨率乘数就是缩小feature map的大小,来减少计算量]
  • [ 超参数的选择是有个trade off的 ]

Reference

  • https://arxiv.org/abs/1704.04861
  • https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.md
  • https://github.com/shicai/MobileNet-Caffe
  • http://machinethink.net/blog/googles-mobile-net-architecture-on-iphone/

你可能感兴趣的:(论文记录,TensorFlow,机器学习,深度学习)