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

版权声明:本文为博主原创文章,未经博主允许不得转载。    https://blog.csdn.net/u013082989/article/details/77970196
本文个人博客地址:点击查看
Tensorflow 中的实现:点击查看
Caffe 中的实现:点击查看
1、概述
Google在2017年提出的适用于手机端的神经网络模型
主要使用了深度可分离卷积Depthwise Separable Convolution 将卷积核进行分解计算来减少计算量
引入了两个超参数减少参数量和计算量 
宽度乘数(Width Multiplier): [减少输入和输出的 channels ]
分辨率乘数(Resolution Multiplier):[减少输入输出的 feature maps 的大小]
2、深度可分离卷积(Depthwise Separable Convolution)
可以将一个标准卷积核分成一个深度卷积depthwise convolution 和 一个1X1的卷积(叫作逐点卷积pointwise convolution)。如下图所示

depthwise separable convolution
2.1 标准卷积
标准的卷积层是将维度为DF×DF×MDF×DF×M的输入层转化为维度为DG×DG×NDG×DG×N [ 上篇论文中也有提到] 
DFDF 是输入feature map的长和宽,M 是输入的通道数(channels)
DGDG 是输出feature map的长和宽,N 是输出的通道数
假设卷积核filter的大小是Dk×DkDk×Dk,则标准卷积的计算量是
Dk⋅Dk⋅M⋅N⋅DF⋅DF
Dk⋅Dk⋅M⋅N⋅DF⋅DF

引用上篇论文中的图, 只看kernel matrix 部分,Dk⋅DkDk⋅Dk就是一个方格的大小,然后乘上输入和输出的channels个数,然后作用在input feature maps 

kernel matrix

标准卷积是这样的, 即不管当前pixel有多少channels,卷积之后就是一个channel

regular conv
2.2 Depthwise Separable Convolution
分为两个步骤 
第一步深度卷积:卷积核的大小是Dk×Dk×1×MDk×Dk×1×M,所以总的计算量是:
Dk⋅Dk⋅M⋅DF⋅DF
Dk⋅Dk⋅M⋅DF⋅DF
第二步逐点卷积:卷积核大小是1×1×M×N1×1×M×N,所以总的计算量是:
M⋅N⋅DF⋅DF
M⋅N⋅DF⋅DF
所以和标准的卷积相比计算量比率为:
Dk⋅Dk⋅M⋅DF⋅DF+M⋅N⋅DF⋅DFDk⋅Dk⋅M⋅N⋅DF⋅DF=1N+1D2k
Dk⋅Dk⋅M⋅DF⋅DF+M⋅N⋅DF⋅DFDk⋅Dk⋅M⋅N⋅DF⋅DF=1N+1Dk2

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αM,输出层的channels个数N变成了αNαN
所以引入宽度乘数后的总的计算量是
Dk⋅Dk⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF
Dk⋅Dk⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF

一般α∈(0,1]α∈(0,1],常取的值是1, 0.75, 0.5, 0.25,
大约可以减少参数量和计算量的α2α2
5. 分辨率乘数 (Resolution Multiplier)
引入超参数ρρ,目的是降低图片的分辨率
即作用在输入的feature map上
所以再引入分辨率乘数后总的计算量是:
Dk⋅Dk⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDF
Dk⋅Dk⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDF

一般输入图片的分辨率是224, 192, 160 or 128
大约可以减少计算量的ρ2ρ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/
--------------------- 
作者:莫失莫忘Lawlite 
来源:CSDN 
原文:https://blog.csdn.net/u013082989/article/details/77970196 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值