前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2

卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2

作者头像
BBuf
发布2020-02-21 11:28:24
7170
发布2020-02-21 11:28:24
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

前言

这个系列已经更新了20多篇了,感谢一直以来大家的支持和等待。前面已经介绍过MobileNet V1,MobileNet V2,MobileNet V3,ShuffleNet V1这几个针对移动端设计的高效网络,ShuffleNetV2是ShuffleNetV1的升级版,今天就一起来看看这篇论文。论文原文见附录。

介绍

论文首先指出目前大部分的模型加速和压缩的论文在对比加速效果时的指标都是FLOPS,这个指标主要衡量的就是乘法和加法指令的数量。而这篇论文通过一系列实验发现FLOPS并不能完全衡量模型的速度。如Figure1(c)和(d)所示,在FLOPS相同的情况下,速度却有较大的区别。所以接下来就针对相同FLOPS会出现速度差异的这个问题,做了一系列工程实验,并在ShuffleNet V1的基础上提出方法进行改进就得到ShuffleNet V2了。

在这里插入图片描述

关键点

论文提出除了FLOPS之外,内存访问消耗的时间是需要计算的,这对速度的影响也比较大。这个指标是后续一些实验的优化目标,下面就将每个实验独立出来理解一下。

实验1

探索卷积层的输入输出特征通道数对MAC指标的影响。

实验结论是卷积层的输入和输出特征数相等时MAC最小,此时模型的速度最快。

在这里插入图片描述

这里的结论也可以由理论推导出来,推导过程如下:

假设一个卷积层的输入特征图通道数是,输入特征图尺寸是和,输出特征通道数是,那么这样一个卷积层的FLOPS就是:。

接下来看看存储空间,因为是卷积,所以输入特征和输出特征的尺寸是相同的,这里用和表示,其中表示输入特征所需要的存储空间,表示输出特征所需空间,表示卷积核所需存储空间。

所以,。

根据均值不等式推出:

再把MAC和B带入式子1就得到,因此等式成立的条件是,也就是输入特征通道数和输出通道特征数相等时,在给定FLOPs前提下,MAC达到取值的下界。

实验2

探索卷积的group操作对MAC的影响。

实验结论是过多的group操作会增大MAC,从而使模型变慢。

Mobilenet V1/V2/V3, ShuffleNet V1,Xception都使用了深度可分离卷积,也就是分组卷积来加速模型,这是因为分组卷积可以大大减少FLOPS。

和前面一样,带group操作的卷积的FLOPs如下所示:

多了一个除数,表示group数量。这是因为每个卷积核都只和个通道的输入特征做卷积,所以多个一个除数。

同样MAC为:

这样就能得到MAC和B之间的关系了,如下面的公式所示,可以看出在B不变时,g越大,MAC就越大。

下面Table2是关于卷积的group参数对模型速度的影响,其中代表的和,通过控制这个参数可以使得每个实验的FLOPS相同,可以看出随着的不断增大,也不断增大。这和前面说的在基本不影响FLOPS的前提下,引入分组卷积后可以适当增加网络宽度相吻合。

在这里插入图片描述

实验3

探索模型设计的分支数量对模型速度的影响。

实验结论是模型中的分支数量越少,模型速度越快。

论文用了fragment表示网络的支路数量。这次实验结果如下:

在这里插入图片描述

其中2-fragment-series表示一个block中有2个卷积层串行,也就是简单的堆叠。而2-fragment-parallel表示一个block中有2个卷积层并行,类似于Inception的整体设计。可以看出在相同FLOPS的情况下,单卷积层(1-fragment)的速度最快。因此模型支路越多(fragment程度越高)对于并行计算越不利,导致模型变慢,在GPU上这个影响更大,在ARM上影响相对小一点。

实验4

探索element-wise操作对模型速度的影响。

实验结论是element-wise操作所带来的时间消耗远比在FLOPS上体现的数值要多,因此要尽可能减少element-wise操作。

在文章开头部分的Figure 2:

在这里插入图片描述

可以看到FLOPS主要表示的是卷积层的时间消耗,而ElementWise操作虽然基本不增加FLOPS,但是带来的时间消耗占比却不可忽视。

因此论文做了实验4,实验4是运行了10次ResNet的bottleneck来计算的,short-cut表示的就是element-wise操作。同时作者这里也将depthwise convolution归为element-wise操作,因为depthwise-wise convolution也具有低FLOPS,高MAC的特点。实验结果如Table4所示。

在这里插入图片描述

ShuffleNet V2 瓶颈结构设计

如Figure3所示。这张图中的(a)(b)是ShuffleNet V1的两种不同的block结构,两者的差别在于(b)对特征图分辨率做了缩小。(c)(d)是ShuffleNet V2的两种不同结构。从(a)(c)对比可知(c)在开头增加了一个通道分离(channel split)操作,这个操作将输入特征通道数分成了和,在论文中取,这主要是为了改善实验1。然后(c)取消了卷积层中的分组操作,这主要为了改善实验2的结论,同时前面的通道分离其实已经算是变相的分组操作了。其次,channel shuffle操作移动到了concat操作之后,这主要为了改善实验3的结果,同时也是因为第一个卷积层没有分组操作,所以在其后面跟channel shuffle也没有太大必要。最后是将element-wise add操作替换成concat,这和前面的实验4的结果对应。(b)(d)的对比也是同理,只不过因为(d)的开始处没有通道分离操作,所以最后concat后特征图通道数翻倍。

在这里插入图片描述

ShuffleNet V2网络结构

在这里插入图片描述

不同stage的输出通道倍数关系和上面介绍bottleneck结构吻合,每个stage都是由Figure3(c)(d)所示的block组成,block的具体数量对应于Repeat列。

实验结果

从表中可以看到,ShuffleNet V2在速度和精度上对比众多轻量级网络都是State of Art。

总结

论文的构思很像我们在工作时解决问题的方式,先是分析影响模型的速度可能有哪些因素,然后针对这些因素做出一系列实验,最后针对这些实验提出解决方案,最后得出了这个网络。这种思路在整个开发过程中都是通用的。

附录

  • 论文原文:https://arxiv.org/pdf/1807.11164.pdf
  • 代码实现:https://github.com/anlongstory/ShuffleNet_V2-caffe
  • 参考1:https://blog.csdn.net/u014380165/article/details/81322175
  • 参考2:https://zhuanlan.zhihu.com/p/69286266

欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 介绍
  • 关键点
    • 实验1
      • 实验2
        • 实验3
          • 实验4
          • ShuffleNet V2 瓶颈结构设计
          • ShuffleNet V2网络结构
          • 实验结果
          • 总结
          • 附录
          • 欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧
          相关产品与服务
          GPU 云服务器
          GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档