MobileNets

一篇讲如何设计轻量级网络的文章,来自Google,方法和创新不是很多,但实验太充分。不愧是谷歌,财大气粗,实验随便跑。

文章链接: 《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》

文章共从三点来探讨网络加速,下面依次介绍这三点以及部分关键性的实验。

Depthwise Separable Convolution

想要明白这一节,前提还是要清楚常见的卷积实现方式,即caffe采用的im2col + GEMM。 具体可参考知乎上的一个高票回答,图示很清楚,
https://www.zhihu.com/question/28385679?sort=created

所谓的Depthwise Separable Convolution,就是将传统的卷积按照下面的图示拆分成两个级联的卷积。

float

下面还是用公式说明一下:

假设输入 \(X\in R^{D_F\times D_F\times M}\), 一共有 \(N\)个 \(D_K\times D_K \times M\)大小的卷积核,再假设卷积stride=1且存在padding,即保证输出大小与输入一致。

首先,通过im2col将输入展开重排成一个大矩阵 \(\hat X\in R^{D_F^2\times D_K^2M}\), 卷积核也被整理成了一个矩阵 \(W \in R^{D_K^2M\times N}\), 于是输出直接通过GEMM矩阵乘法计算:\(output = \hat X \times W\).

至于Depthwise Separable Convolution,则是将上述的卷积拆分成两个卷积同时保证输出大小不变,具体地:

(1)拆分卷积1 如上图b, 该卷积层共有 \(M\) 个 \(D_K\times D_K\times 1\)的卷积核。 M是输入feature map的通道数,注意这里的卷积计算采用了类似于caffe中的Group操作。即第\(M_i\) 个卷积核只对输入feature map的第 \(i\) 个通道进行卷积。 最后的输出和输入的大小一致;

(2)拆分卷积2 如上图c,为了使得输出通道数为N,这里采用 \(N\) 个 \(1\times 1\times M\) 卷积,最后的输出变为 \(D_F\times D_F\times N\)。

通过这种操作,acc只下降了1%,但参数量和计算量都得到了大幅下降:

float

Width Multiplier: Thinner Models

增加了一个超参数 \(\alpha \in[0,1]\) 来控制feature map的通道数,\(alpha\) 越小,则模型越小。

float

Resolution Multiplier: Reduced Representation

增加了一个超参数 \(\rho\) 来控制输入图像的分辨率,\(\rho\) 越小,则输入图像越小。

float

Experiments

(1)网络变深往往比网络变宽带来的效果好。

如下图,Shallow表示砍掉几层网络,0.75表示每层的feature map的通道数只有原来的75%.

float

(2) 网络性能和计算量呈现Log线性关系。

如下图,横坐标表示 乘加计算量。

float

(3) 参数量、分辨率与模型性能的关系

float

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值