ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices的理解

前沿

随着近几年AI算法爆发式的发展,越来越多的运用场景出现了。为了让更多的算法落地,如何做移动端的模型加速和模型压缩成了近期的一个热点。比如前一段做参数量化的BinaryNet、Google出的GoogleNet,到现在Face++出的ShuffleNet。这个趋势应该还会继续。模型压缩,一方面需要保证模型的精度、另外一方面需要减少模型的存储量。这次我就主要解释一下ShuffleNet,它的网络结构以及它的实验结果。

ShuffleNet主要是在计算方法上做了创新,提出了pointwise group convolution和channel shuffle两个操作来减少计算量,使得计算量在10~150 MFLOPS次操作。该文作者训练了ImageNet和MS COCO这两个训练集,说明该方法还不错,可以在大数据集上进行训练,有较高的可用性。相比于MobileNet在ImageNet top1上高了6.7%。然后在ARM平台上,计算性能上是AlexNet(5层卷机,3层全连接)的13倍,需要40 MFLOPS的计算量。看来该论文主要是做模型加速而不是走压缩的路线,毕竟BianryNet出来了,都是1bit了。再做压缩要么改网络要么做去除网络一部分,这些改进竞争也是极大的。之前不少人针对现成的网络已经做了很多优化,做模型参数的压缩、参数浮点量化、pruning(去掉一些不重要的activation,值为0。比如activation小于某个阈值就认为对整个网络没有印象。后来很多论文开始把bias去掉了)那我感觉这篇论文是在计算结构和内存设计上进行的优化,在这方面的设计,其实有很多人做了不少工作。后面找个时间我总结这方面的东西。这篇论文相比于ResNext和Xception的优势在于,ShuffleNet更适合在很小的卷积核的网络比如1x1这样的网络。总体上这篇论文还是有不少可圈可点的工作。

加速方法

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(借鉴了Al

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值