Paper Reading - Model系列 - ShuffleNet Chanel Attention

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

Paper

更多可见计算机视觉-Paper&Code - 知乎

目录

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

Abstract

Related Work

Channel Shuffle

深度可分离卷积 - Depthwise Separable Convolution

Experiment

Coding


Abstract

ShuffleNet由旷世提出主打轻量化网络,移动端部署,结合了Mobilenet的深度可分离卷积dwconv,ResNeXt的group卷积操作。主要有以下三点改进

  1. channel shuffle
  2. pointwise group convolutions
  3. depthwise separable convolution

Related Work

Channel Shuffle

一般卷积操作中那么每一个filter都要和所有的feature map做卷积,然后相加作为一个卷积的结果。

如图中的(a)如果引入group操作,这样每个filter不再需要和输入的全部feature map做卷积,而是和一个group中的feature map做卷积,这种操作可以大大减少计算量,且最早被AlexNet用来切分网络进行多卡训练。但是这也会导致每个group的输出channel仅仅来自输入channel的一小部分,学出来的特征会非常局限。且组卷积要谨慎使用,注意分组的数目同时注意避免网络碎片化

因此(b/c)中引入了channel shuffle,在进行下一次卷积前,将原先的group依次平均分配到下一个group中进行组合,这样GConv2的每一个group都能得到各个group的信息feature map,


Pointwise Group Convolutions

在ResNeXt中主要是对3*3的卷积做group操作,ShuffleNet中同样把group引入1*1卷积中

如图a是ResNet的bottleneck unit,把3*3替换为dwconv。图b加入channelshuffle以及1*1gconv。图c是增加了一个avgpooling,以及最后融合方式改为concat通道合并

深度可分离卷积 - Depthwise Separable Convolution

  • Depthwise Convolution完成后的Feature map数量与输入层的depth相同,没有有效的利用不同map在相同空间位置上的信息。因此需要增加Pointwise Convolution操作来将这些map进行组合生成新的Feature map,如图参数量 3 × 3 × 3 = 27

Depthwise Convolution , 每个kernel的shape为3*3,分别对应一个channel

  • Pointwise Convolution(1*1conv)不同在于普通卷积核,他的的尺寸为 1×1×M,M为上一层的depth。将上一步的map在深度方向上进行加权组合,生成新的Feature map,可以用于调解通道数以及通道之间信息融合,如图 1 × 1 × 3 × 4 = 12

Depthwise Convolution , 每个kernel的shape为1*1*3,分别对应一个channel

  • Depthwise Separable Convolution将一个完整的卷积运算分解为以上两步进行,参数量 27+12=39,相比于传统卷积4 × 3 × 3 × 3 = 108,大大减少了计算量,因此dsc可以做得更深

Depthwise Separable Convolution是将一个完整的卷积运算分解为以上两步进行,参数量3 × 3 × 3 = 27

Experiment

以及模型可以在固定模型复杂度的情况下,可以通过改变group的数量来改变output channel的数量,更多的输出channel通常能有提取更多维的特征

不同group的输出channel

文章也对比了不同group,是否shuffle,以及不同复杂度情况下的模型性能,采用shuffle、较多的group、更复杂的模型带来的性能更好

不同group下的性能

同时要达到差不多性能的情况下,shuffle的模型复杂度非常低


Coding

值得注意的是在代码在的个stage通过3*3以及maxpool来减少输入channel到24再进入stage2。且stage2中第一个conv1*1是不进行分组的。

FLOPS:意指每秒浮点运算次数。是一个衡量硬件性能的指标
FLOPs:意指浮点运算数,用来衡量算法/模型的复杂度

猜你喜欢

转载自blog.csdn.net/weixin_43953700/article/details/124448359