您的位置:首页 > 其它

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

2017-08-26 18:59 507 查看

channel shuffle

文章对CNN进行改进,采用pointwise convolution 和 channel shuffle,保持精度的同时,减少了计算量,加快了计算速度.

在ImageNet classification and MS COCO上的实验上取得了比top1,即mobile net,错误率减小6.7%.相比AlexNet,计算速度提高13倍,同时精度基本不变.

CNN网络中,为了减小计算量,核心算法,如Xception(文献3), ResNeXt(文献37),引入了depthwise separable convolutions 或者 group convolutions,来代替标准的卷积层,以减小计算量.然而, depthwise separable convolutions 和group convolutions这两个结构都需要1×1卷积,而1×1卷积需要相当的复杂性.例如,ResNeXt中,近3×3层采用了 group convolutions,这样对于每个residual unit,e pointwise convolutions占用来93.4%的乘法加法计算.在tinny network中,pointwise convolutions导致了有限的channels数量,以减小复杂度,这可能减小精度.

为了解决这个问题,一种直接的方法是采用channel sparse connections.例如,group convolutions,每个卷积操作只作用于输入channel group,这样做的好处是减小了计算量,但是对于每一个特定的输出,其只来源于一部分的input channels,如图1(a)所示, 分三个group对输入进行特征提取,得到输出output,每组的output只与本组的卷积特征输出相关,而已其他组的特征无关,这阻塞了不同groups之间的信息传递,削弱了特征.如果我们运行group convolutions能够获得不同组的输入,如图1(b)所示,那么既可以完整地连接输入和输出.对于来自前一个group layer的feature map,可以将这些feature map分为多个不同的subgroup,将这些subgroup输入到下一层的group中去,如图1(c)所示.feature map的channel采用channel shuffle操作,分为多个组,再将这些特征输入到下一层.例如,图1(c)中,GConv1层包含3个groups,每个groups输出channels为3,这样得到9个feauture map,将这9个feaure map采用channel shuffle 操作打乱,再分为3组,输入到GConv2层.



即使两个卷积层有不同数量的groups,也可以进行channel shuffle操作,同时channel shuffle是可微的,因此可以进行端到端训练.

ShuffleNet Unit

利用channel shuffle操作,本文提出例一种新的ShuffleNet结构,适用于小的网络的设计.例如下面的网络结构:



图2(a)为一个residual block,在residual结构中,引入3×3 depthwise convolution.2(b)(c)为将(a)的第1×1卷积层 pointwise group convolution代替,并在其后进行channel shuffle操作,组成一个SuffleNet Unit.

ShuffleNet architecture

在ShuffleNet Unit基础上,文章试验了一个完整的ShuffleNet architecture,参数如下:



试验效果

滤波器个数对精度的影响:



“ShuffleNet 1×”为Table 1 的参数结构,”ShuffleNet s×”为”ShuffleNet 1×”滤波器的s倍.

有无Channel Shuffle试验对比:



与其他网络的分类精度对比:





在MS COCO 物体检测上的效果:



移动端计算速度:



代码实现

ShuffleNet caffe代码:https://github.com/farmingyard/ShuffleNet
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐