前沿
随着近几年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 convol