小白的深度学习之路--MobileNet

  MobileNet 是 Google 公司在2017年提出的轻量级网络,如其名所示,因为其参数量小,低时延性,因此主要用于移动嵌入式应用。主要特点,利用了Xception的深度可分卷积(depthwise Separable convolution)和Bottleneck方法(日后更新,敬请期待

<( ̄3 ̄)> !)设定了两个超参数宽度乘子(width multiplier, 下文都叫英文名字,中文读起来怪怪的......)和分辨率乘子(resolution muliplier),主要用于表达网络收束的情况。网络大量使用1*1的卷积操作,实现内存优化(具体原因下文再说)。话不多说,下面正文。

1.Introdution

作者提出了一种有效的模型结构(MobileNet)和两个超参数的集合(width multiplier 和 resolution multipier)为了建立小的低时延的能够应用于移动嵌入式版本的应用。(百度翻译痕迹过重,请谅解......)(好吧,其实不是百度翻译的,是我自己人工翻译的o(一︿一+)o

2.Prior Work

  目前(2017)的主流方法还是压缩预训练网络或直接训练较小的网络。作者提出一种可以让模型匹配资源约束的轻量级的专门性网络--MobileNet。MoblieNet利用depth separable convolution(这个详见小白的深度学习之路--Inception),再用Inception模型减少前面几层的计算。Flattened network(这个还在看(╯﹏╰))利用了全分解卷积并且展示了全分解卷积网络的实力。Squeezenet网络用了bottleneck方法设计了一个非常小的网络,Xception证明了如何拓宽深度可分滤波器(scale up dpthwise separabble filters)比Inception V3 有更好的表现(主要就是多了深度可分的原理,Xception认为通道相关性(Cross-channels correlation)与空间相关性(Spatial correlation)完全独立(sufficiently decoupled.我是不知道翻译的对不对,咱也不敢问啊...这是一个猜想,用心感悟,具体参见小白的深度学习之路--Inception)。这些都为MobileNet网络模型的设计提供了思路。

3.MobileNet Architecture

  每个输入channel后都加一个1*1的卷积变换将filers的输出和combie到一个新的输出。标准的卷积是将这个一步直接得到输出,而深度可分卷积将它分为两个layer,一个separate layer 和 combie layer,这能有效的减少网络的参数与计算量。(笔者认为,这里就是利用的分解卷积的思想,将一个高纬度的feature先映射到一个低维度,再在低维度上进行卷积,参考Inception中的栗子:上一层的输入为100*100*128, 进过有256个输出的5*5卷积层之后(stride=1,pad=2),输出的结果为100*100*256。其中卷积层的参数为5*5*128*256,假如上一层输出先经过32个输入的1*1卷积层,在经过具有256个输出的5*5卷积层,那么最终得到的数据为100*100*256,但卷积层参数已经减少为128*1*1*32+32*5*5*256,大约减少了4倍。并且,加上作者提出的通道相关性与空间相关性独立的思想,在depth上分解为若干个小区间,在用不同的filter的分别对这些个小区间进行卷积。注意:这里每个filter对应一个区间,不重叠!!!因为深度可分卷积中filter只能抽象输入而不能combie新的feature,因此需要再加一个1*1的卷积,注意这里的深度可分卷积的filter的顺序和1*1卷积的顺序与Inception是相反的。这也就是深度可分卷积优化网络的思想。个人观点,仅供参考。)深度可分卷积打破了输出通道数量和kernal尺寸的联系。那么,具体计算量能减少多少呢,作者给出了详细的解释。具体公式见论文吧,很简单。

  所有的层都跟着Batch Normalization和Relu,除了最后一层是全连接。(还是避免不了这个啊,我估计最后一层的全连接有可能比前面的网络结构的参数加一起还要多......我猜的)。

  在计算加速方面,非结构化的梯度稀疏矩阵操作通常比稠密的快,除了非常高等级的稀疏程度。MobileNet结构就几乎全都是1*1的卷及操作(95%)。并且用GEMM(广义矩阵乘积操作,general matrix multiply function,这个是BLAS(Basic Linear Algebra Subprograms)的一种,BLAS是规定了在低级的执行常见的线性操作的规范,其实现实在特殊的机器进行优化的,与它并列的还有Gemv(矩阵向量),这个东西是计算机在多级存储结构和程序执行的局部性来进行充分加速运算的加速,应该是汇编等级的,我觉得.....链接和卷基层基本上都是利用GEMM实现的,网络的90%运算都在这两层中。)

两个超参数width multiplier 和 resolution multiplier 。

width multipiler:a(跟我读,阿尔法~)每一层的平均收束,若原输入输出为M和N,那么变化之后输入输出就应该是aM和aN,挺简单的。

resolution multiplier: p(跟我读,肉~)应用与输入图像和中间represention(这个是啥没咋明白,咱也不敢问..)这个和width的原理一样,直接乘就行。具体能优化多少论文有公式,我也不分析了,很多,直接上参数比较就行。

 

具体模型结构吗,画图就不现实了,你也看不清,附图。

Caption

大约照壁主流的全卷积网络减少1%的精确度,这样是难免的,毕竟减少了8倍多的计算和参数。

模型的训练利用了distillation训练方法,还没看,这就看。(*^__^*) 

还有一点,由于网络的参数较少,因此不需要regularization(weight-delay和early-stopping)

参考文献:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

参考代码:~皿~ 并没有,还在写,随缘上传,有相关资源的胸帝记得评论分享,蟹蟹O(∩_∩)O

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值