2018-05-13

作者: 时间的星辰 | 来源:发表于2018-05-13 14:20 被阅读62次

    27组- ShuffleNet:An Extremely Efficient Convolutional Neural Network for MobileDevices

    一、摘要介绍

            ShuffleNet介绍了一个非常有效的卷积神经网络,以其结构命名为洗牌网,它是为计算能力有限的移动设备而专门设计的。为了在保持精度的同时显著减少计算成本,新的架构用点态组卷积(pointwisegroup convolution)和通道随机混合(channel shuffle)这两种经典方法进行结合与改进,大大降低了维护的计算量。

            该文整体的网络结构设计延续了ResNe(X)t的设计思路,作者训练了ImageNet和MS COCO这两个训练集,说明该方法还不错,可以在大数据集上进行训练,有较高的可用性。相比于MobileNet在ImageNet top1上高了6.7%。然后在ARM平台上,计算性能上是AlexNet(5层卷机,3层全连接)的13倍,需要40 MFLOPS的计算量。看来该论文主要是做模型加速而不是走压缩的路线。这篇论文是在计算结构和内存设计上进行的优化。ShuffleNet更适合在很小的卷积核的网络比如1x1这样的网络。

            建立更大更深的卷积神经网络(CNN)是解决主要的视觉识别任务的一个主要趋势。最准确的神经网络通常有成百上千层通道,因此需要每秒浮点运算次数数十亿次。这份报告检验了相反的极端:在非常有限的计算中追求最佳精度在几十或几百MFLOPS预算,聚焦在普通的移动平台上,比如无人机、机器人和智能手机。注意到许多现有的工作着重于修剪、压缩或低位表示“基本”网络体系结构。在这里,我们的目标是探索一种高效的基本结构,专为我们想要的计算范围。

    二、方法

    Channel Shuffle for Group Convolutions(组卷积的随机通道混合)

            针对ResneXt和Xception的不足,ShuffleNet在pointwise convolution(也就是1x1的kernel的卷积)进行了优化。ResneXt和Xception是在3x3的kernel上做了group convolution,但是没有在1x1的网络做,结果大部分的乘法就出现在了1x1(占93.4%)同时大量的运算导致计算受局限,进而精度会损失。

            为了提高pointwise convolution的速度,最简单的方法就是在pointwise convolution采用group convolution,如下图中的一所示。但是这样会有问题,主要是pointwise convolution在进行group convolution以后,很容易出现欠拟合,导致精度下降。为了解决这个问题,采用了通道间混叠的方法,其实你看LeNet-5的做法就是这样的。采用的就是输入的feature map选取部分隐射到输出的feature map上。这样的通道交错的话,就可以使得输出的激励得到全局网络的影响而不是局部的影响。如下图中的b。但是这样会有问题,就是这么做的话,网络是全连接,就是我们计算输出的时候,我们要把整个input feature导入,这是很大的内存,频繁的内存交互,是很消耗时间的。为了解决这个全连接的问题,进行一个shuffle(借鉴了AlexNet训练时候的方法)把输入的feature map实现进行排列,然后计算输出的feature map的时候,只要导入需要的输入的feature map而不是进行全局索引。大大提高了cache hit率。速度大大提高。

    论文中提到了这种方法还适合group 不一样多的时候,并且shuffle(通道洗牌)是可微的,意味着它是可以被嵌入进网络结构,所以可以进行端到端的训练.

    (1) 图a是一般的group convolution的实现效果是用双堆叠式组卷积(two stacked group convolutions)进行通道随机混合(通道洗牌)。GConv代表组卷积。a)两个组数相同的堆叠式卷积层。每一个输出通道仅与组内的输入通道有关。没有串扰(crosstalk))。 其造成的问题是,输出通道只和输入的某些通道有关,导致全局信息流通不畅,网络表达能力不足。(2) 图b就是本文的方法啦。 即通过均匀排列,把group convolution后的feature map按通道进行均匀混合, 这样就可以更好的获取全局信息了。(3)图c是使用通道随机混合进行与 b)相同的操作

    三、ShuffleNet单元

    这个单元设计大的基础还是ResNet-18的,下图中的a。ShuffleNet的改进就是在做完第一个1x1的Group Convolution以后,增加了一个shuffle单元。接着是3x3的depthwise convolution的算法。后面还有一个1x1的卷积是为了把feature map size从3x3恢复为1x1。接着是在BN和ReLU方面也如下图做了改进。如果是stride大于1的话,那么增加了一个average pooling和改变了element wise add为通道连接(concatenation我理解的是两个数字连在一起)

    图2:ShuffleNet单元。a)使用了depthwise卷积(DWConv)的瓶颈单元(bottleneckunit);b)使用了点态组卷积(GConv)和通道随机混合的ShuffleNet单元;c)步长值为 2 的 ShuffleNet。

    注:

    group convolution:指的是计算feature map的时候,feature map分在不同的地方计算,比如两个GPU上。然后这两块GPU上的feature map分成支路做卷积,最后汇合(其实就是AlexNet的做法,AlexNet也是局限于GPU的性能)

    Depthwise separable convolution:是在Inception层进行卷积分割。Xinception最早提出,然后MobileNet也采用了这种做法。

    四、网络结构

    整个网络结构如下:

    每个阶段开始的stride都是2,后面一个是1。输出的channel都是越来越大,其实整个网络感觉和ResNet差别不大。另外为了比较不同的channel对accuracy的影响,这里又有一个scale factor,sx表示channel数目是1x的s倍。所以理论上,sx的计算量是1x的s倍。

    五、实验对比

    参数设置上weight decay是4e-5;另外由于小网络容易欠拟合,所以做了微小的图片augmentation工作。图片的输入是256x256中的224x224的中间区域。

    pointwise group convolution这部分对模型准确度的影响:主要是g和?x对其精度的影响。g越大,准确度先变大后减少。新的arch2对模型确实有提高精度。

    channel shuffle的作用:与没有shuffle的网络进行精读对比,发现进行shuffle的精度更高。

    比较计算单元的对classification的准确度的影响:将ShuffleNet的Stage2~4换成别的计算单元再计算需要的计算量。在同样的计算量情况下,ShuffleNet有最高的准确度。

    ShuffleNet和MobileNets、PVANET、SqueezeNet进行对比:

    对于ShuffleNet在迁移学习方面的方面的性能,用的是MS COCO做训练和测试。做的是目标检测~ 测试指标是mAP,就是检测的重叠面积。ShuffleNet 2x更加高,和MobileNet接近的计算量。

        在ARM平台上,做的是classification,该论文对不同分辨率的图片、不同的模型进行测试所需的操作数量、时间和精度。处理224x224的图片只要15.2 ms,在嵌入式平台这个结果已经非常优秀。

    六、总结

    实际上,这个网络最妙的并不只是它的精度,还有是它在限制模型规模和计算量的情况下(注意这个前提),尤其是对计算力有限的移动设备,同等速度下其他网络难以达到这个Accuracy,而且它能够拿到足够多的feature,非常适合做比如detection等应用。

    不知道大家有关这个网络思路接下去有什么能够加速的方法,或者对网络结构的改良呢?欢迎交流和批评指正!

    相关文章

      网友评论

        本文标题:2018-05-13

        本文链接:https://www.haomeiwen.com/subject/nblldftx.html