当前位置:   article > 正文

轻量化网络结构——ShuffleNet_shufflenet网络结构

shufflenet网络结构
论文:《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》—Face++

1.shuffle具体来说是channel shuffle,是将各部分的feature map的channel进行有序的打乱,构成新的feature map,以解决group convolution带来的[信息流通不畅]的问题。(MobileNet是用pointwise convolution解决这个问题。)

  • 因此可知道shuffle不是什么网络都需要用的,是有一个前提,就是采用了group convolution,才有可能需要shuffle,也可以使用pointwise convolution来解决这个问题。
    ShuffleNet主要在计算上做了创新,提出了pointwise group convolution和channel shuffle两个操作来减少计算量,使得计算量在10-150MFLOPS(每秒百万个浮点)次操作。
    对比一下MobileNet,采用shuffle替换掉1x1卷积,这样可以减少权值参数,而且是减少大量权值参数,因为在MobileNet中,1x1卷积层有较多的卷积核,并且计算量巨大。

MobileNet每层的参数量和运算量如下路所示:
在这里插入图片描述
2.Channel Shuffle for Group Convolution

  • 2.1 Group Convolution:
    Group convolution自Alexnet就有,当时因为硬件限制而采用分组卷积,主要是解决模型在双GPU上的训练。ResNeXt借鉴了这种group操作改进了原本的ResNet。MobileNet则是采用了depthwise separable convolution代替传统的卷积操作,在几乎不影响准确率的前提下大大降低计算量。Xception主要也是采用depthwise separable convolution改进Inception v3的结构。
  • 2.2 Channel Shuffle:
    channel shuffle的思想如下图Figure1所示。这就要先从group操作说起,一般卷积操作中比如输入feature map的数量是N,该卷积层的filter数量是M,那么M个filter中的每一个filter都要和N个feature map的某个区域做卷积,然后相加作为一个卷积的结果。假设你引入group操作,设group为g,那么N个输入feature map就被分成g个group,M个filter就被分成g个group,然后再做卷积操作的时候,第一个group的M/g个filter中的每一个都和第一个group的N/g个输入feature map做卷积得到结果,第二个group同理,直到最后一个group,如Figure1(a)。不同的颜色代表不同的group,图中有三个group。这种操作可以大大减少计算量,因为你每个filter不再是和输入的全部feature map做卷积,而是和一个group的feature map做卷积。但是如果多个group操作叠加在一起,如Figure1(a)的两个卷积层都有group操作,显然就会产生边界效应,什么意思呢?就是某个输出channel仅仅来自输入channel的一小部分。这样肯定是不行的的,学出来的特征会非常局限。于是就有了channel shuffle来解决这个问题,先看Figure1(b),在进行GConv2之前,对其输入feature map做一个分配,也就是每个group分成几个subgroup,然后将不同group的subgroup作为GConv2的一个group的输入,使得GConv2的每一个group都能卷积输入的所有group的feature map,这和Figure1(c)的channel shuffle的思想是一样的。
    在这里插入图片描述
  • 2.3 ShuffleNet Unit
    pointwise group convolutions,其实就是带group的卷积核为1*1的卷积,也就是说pointwise convolution是卷积核为11的卷积。在ResNeXt中主要是对33的卷积做group操作,但是在ShuffleNet中,作者是对11的卷积做group的操作,因为作者认为11的卷积操作的计算量不可忽视。可以看Figure2(b)中的第一个11卷积是GConv,表示group convolution。Figure2(a)是ResNet中的bottleneck unit,不过将原来的33 Conv改成33 DWConv,作者的ShuffleNet主要也是在这基础上做改动。首先用带group的11卷积代替原来的11卷积,同时跟一个channel shuffle操作,这个前面也介绍过了。然后是33 DWConv表示depthwise separable convolution。depthwise separable convolution可以参考MobileNet,下面贴出depthwise separable convolution的示意图。Figure2(c)添加了一个Average pooling和设置了stride=2,另外原来Resnet最后是一个Add操作,也就是元素值相加,而在(c)中是采用concat的操作,也就是按channel合并,类似googleNet的Inception操作。
    在这里插入图片描述
    注: 因为分辨率小了,于是最后不采用Add,而是concat,从而[弥补]了分辨率减少而带来的损失。在depthwise convolution后不使用ReLU。
    文中提到: 对于小型网络,多多使用通道,会比较好。所以,以后若涉及小型网络,多多使用通道,会比较好。

3.网络结构

Table 1是ShuffleNet的网络结构,基本上和ResNet是一样的,也是分成几个stage(ResNet中有4个stage,这里只有3个),然后在每个stage中用ShuffleNet unit代替原来的Residual block,这也就是ShuffleNet算法的核心。这个表是在限定complexity的情况下,通过改变group(g)的数量来改变output channel的数量,更多的output channel一般而言可以提取更多的特征。
在这里插入图片描述

4.实验结果:

Table2表示不同大小的ShuffleNet在不同group数量情况下的分类准确率比较。ShuffleNet s表示将ShuffleNet 1的filter个数变成s倍。Table2的一个重要结论是group个数的线性增长并不会带来分类准确率的线性增长。但是发现ShuffleNet对于小的网络效果更明显,因为一般小的网络的channel个数都不多,在限定计算资源的前提下,ShuffleNet可以使用更多的feature map。
在这里插入图片描述
至于实验比较,并没有给出模型参数量的大小比较,而是采用了Complexity(MFLOPS)指标,在相同的Complexity(MFLOPS)下,比较ShuffleNet和各个网络,还专门和MobileNet进行比较,由于ShuffleNet相较于MobileNet少了1x1的卷积层,所以效率大大提高了
在这里插入图片描述
相似准确率条件下的性能比较:
在这里插入图片描述
由上图可知,虽然SqueezeNet可以极大的减少模型的存储,但速度上并没有提升,反而些许变慢了。ShuffleNet在计算性能上是AlexNet(5层卷机,3层全连接)的18倍,需要40 MFLOPS的计算量。

实际在手机上的前向测试:
在这里插入图片描述
ShuffleNet小结:

  • 1.ShuffleNet的核心就是用pointwise group convolution,channel shuffle和depthwise separable convolution代替ResNet block的相应层构成了ShuffleNet uint,达到了减少计算量和提高准确率的目的。channel shuffle解决了多个group convolution叠加出现的边界效应–[信息流通不畅](MobileNet中则是采用pointwise convolution操作来解决),pointwise group convolution和depthwise separable convolution主要减少了计算量。
  • 2.在网络拓扑方面,ShuffleNet采用的是resnet的思想,而MobileNet采用的是VGG的思想,SqueezeNet也是采用VGG的堆叠思想。

注:博众家之所长,集群英之荟萃。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/346299
推荐阅读
相关标签
  

闽ICP备14008679号