浅谈 Mobilenet V1-V3

文章目录

  • 一:复杂网络模型移植问题
  • 二:模型剪枝策略
      • 1.剪枝
      • 2.网络设计策略
  • 三:Mobilenet v1的横空出世
  • 四:Mobilenet v2大杂烩
  • 五:Mobilenet v3完全体

一:复杂网络模型移植问题

移植难点:

  • 很多嵌入式,手机端无法使用庞大的网络结构
  • 一个几百M的模型难以随便移植
  • 复杂网络的参数和计算量庞大,难以DIY后强加训练,预期效果不尽人意

那么一个简洁时效的网络结构该如何设计呢,答案就是模型的剪枝策略。其实,剪枝和策略是两种侧重点不同的方法前者是对较为冗长的网络结构进行训练后的删减简化,而后者则是直接设计出轻巧、高移植性的网络架构。本文针对Mobilenet重点讲解网络设计策略。

二:模型剪枝策略

1.剪枝

有关剪枝的具体细节可以参考本人另一篇文章
浅谈 Mobilenet V1-V3_第1张图片
浅谈 Mobilenet V1-V3_第2张图片

2.网络设计策略

几种常见的策略:

  • Feature map的channels聚类
    浅谈 Mobilenet V1-V3_第3张图片
    对特征图每个通道的γ权重值聚类,如上图聚成四个簇。接着用每一个簇中心的权重值代替特征图,达到剪值效果。

  • ensembling networks Learning
    浅谈 Mobilenet V1-V3_第4张图片
    借鉴类似随机森林的集成思想,首先用大量数据训练出N个网络集成的大型网络,将训练出的标签结果作为small net的目标标签(先验值),学起来的话会更容易,而且不易过拟合,可以理解为一群学长将自己几年的学习经验先分享给了你,那么直接对着他们的话学起来,自然就轻松许多,也会少走很多弯路(不易过拟合)

  • 类似SVD的网络分解法
    浅谈 Mobilenet V1-V3_第5张图片
    一种类似与奇异值分解的思想,如上图举例,在长度N和M层之间插入一个长度k的线性层,那么原本的param由M×N变成了M×K+N×K,肉眼可见的参数量减少。


上述几种老早提出的模型架构设计方法,效果都不尽人意,接下来我们的主角登场了。

三:Mobilenet v1的横空出世

浅谈 Mobilenet V1-V3_第6张图片
上图是YOLO_v3目标检测模型在手机端的运行结果,时效性和准确度都达到了预期要求。那么为什么相对庞大的检测算法能如此轻易地移植到手机端呢?正是因为他们将YOLO_v3中的backbone替换成了Mobilenet_v1,替代了常用的Resnet和VGG作为backbone,降低了模型的复杂度,参数量和计算量大大减少。

下面我来讲讲Mobilenet_v1的思想,首先从经典卷积计算讲起:
浅谈 Mobilenet V1-V3_第7张图片
浅谈 Mobilenet V1-V3_第8张图片

传统的卷积就是一个filter对特征图的每个通道都进行卷积,虽然能融合不同通道的信息,却增加了计算量,拿下面的模型举例:
浅谈 Mobilenet V1-V3_第9张图片
可见经典卷积所需计算量巨大,所以Mobilenet_v1提出了Depthwise卷积概念每一个filler只对一层channel卷积计算,所以说input的通道数等于output的通道数,如下图所示:
浅谈 Mobilenet V1-V3_第10张图片
那么输出和输入是对应的,怎么能扩展通道数呢,这里Mobilenet_v1又提出了Pointwise卷积概念实际上就是通过Conv 1*1卷积,扩大了通道数,没什么特殊的,如下图所示:
浅谈 Mobilenet V1-V3_第11张图片
综上所述,Mobilenet_v1实际上就是depthwise卷积 + Pointwise卷积 的组合,作者又将他们整合成一个叫Depthwise Seperable卷积,整个Mobilenet_v1的核心步骤可用下图表示出:
浅谈 Mobilenet V1-V3_第12张图片
Mobilenet_v1中其实还提出了一种新的激励函数ReLU6,当x超过6后y不再改变,增加了非线性与泛化能力,同时降低了梯度爆炸的风险。如下图:
浅谈 Mobilenet V1-V3_第13张图片

最后,我们来看看参数量和计算量到底减少了多少,空口无凭,上图!
浅谈 Mobilenet V1-V3_第14张图片
浅谈 Mobilenet V1-V3_第15张图片
浅谈 Mobilenet V1-V3_第16张图片

浅谈 Mobilenet V1-V3_第17张图片
浅谈 Mobilenet V1-V3_第18张图片

四:Mobilenet v2大杂烩

延用Mobilenet_v1中的可分离卷积,v2版本主要对架构进行了修改,主要是如下两点:

  • 整体网络架构改变,借鉴Resnet思想,设计了反残差网络,也就是Shotcut模块
  • Relu激活函数改变,用线性替代

通过研究发现,ReLU对低维数据影响很大,部分数据会丢失,但对于高维数据,则没太大影响。
浅谈 Mobilenet V1-V3_第19张图片
所以作者改变了v1中先depthwise后1×1卷积扩通道的架构,而是选择先1×1卷积扩大维度,后depthwise的架构,实验表明各效果相对于v1都有所提升。如下图所示:
浅谈 Mobilenet V1-V3_第20张图片
其实这种架构,就是类似于将Resnet中的bottleneck思想反过来运用,先窄后宽— >先宽后窄Shotcut模块如下图所示:
浅谈 Mobilenet V1-V3_第21张图片
浅谈 Mobilenet V1-V3_第22张图片
下面贴上Mobilenet_v2的整体结构框图,供大家参考学习:
浅谈 Mobilenet V1-V3_第23张图片
浅谈 Mobilenet V1-V3_第24张图片
对比实验结果:
浅谈 Mobilenet V1-V3_第25张图片

五:Mobilenet v3完全体

借鉴Mobilenet_v2中的Shotcut结构的思想,v3版本又提出了SE结构,主要是如下两点:

  • 引入Squeeze-Excitation结构
  • 非线性变换改变,h-swish替代swish

SE-net其实就是将注意力机制引入到了特征图通道中来先是S操作得到各channel的注意力权重,而后E操作,将权重加权到特征图中。具体操作不再赘述,如下图所示:
浅谈 Mobilenet V1-V3_第26张图片
浅谈 Mobilenet V1-V3_第27张图片
浅谈 Mobilenet V1-V3_第28张图片
浅谈 Mobilenet V1-V3_第29张图片

SE-net可以和很多经典模型融合,如下图所示:
浅谈 Mobilenet V1-V3_第30张图片
至于hard-swish并不是那么重要,直接贴图:
浅谈 Mobilenet V1-V3_第31张图片
浅谈 Mobilenet V1-V3_第32张图片
至此,v1-v3的结构全部讲完,最后贴上我们的Mobilenet_v3完全体的网络结构
(exp size:bneck模块中neck的宽度,NL:非线性方法ReLU或hard-Swish)

浅谈 Mobilenet V1-V3_第33张图片
效果分析:
浅谈 Mobilenet V1-V3_第34张图片


  至此我对Mobilenet模型v1-v3版本,进行了简单讲解,希望对大家有所帮助,有不懂的地方或者建议,欢迎大家在下方留言评论。

我是努力在CV泥潭中摸爬滚打的江南咸鱼,我们一起努力,不留遗憾!

你可能感兴趣的:(CNN检测系列,深度学习,人工智能,图像处理,计算机视觉,迁移学习)