Shufflenet V2中的结论

1 卷积层的输入输出特征通道数对MAC指标的影响。

结论:卷积层的输入和输出特征通道数相等时MAC最小,此时模型速度最快。

2 卷积的group操作对MAC的影响。

结论:过多的group操作会增大MAC,从而使模型速度变慢

3 模型设计的分支数量对模型速度的影响

结论:模型中的分支数量越少,模型速度越快。

4 element-wise操作对模型速度的影响

结论:element-wise操作所带来的时间消耗远比在FLOPs上的体现的数值要多,因此要尽可能减少element-wise操作

在程序中实现channel shuffle

shuffle是将分组卷积后不同组的channel进行重组,以保证在之后的分组卷积的输入来自不同的组,因此信息可以在不同组之间流转。

这种shuffle并不是随机的,而是均匀地打乱

若输入的数据维度是B, C, H, W,一共分G组,每组C/G个channel
将输入数据reshape成B, C/G, G, H, W的形式
重新排列维度的顺序为B, G, C/G, H, W
最后再reshape成B, C, H, W,就完成了shuffle

以下给出shufflenetv1中shuffle的代码

def channel_shuffle(x, group):
    batchsize, num_channels, height, width = x.data.size()
    assert num_channels % group == 0
    group_channels = num_channels // group
    x = x.reshape(batchsize, group_channels, group, height, width)
    x = x.permute(0, 2, 1, 3, 4)
    x = x.reshape(batchsize, num_channels, height, width)
    return x

你可能感兴趣的:(Shufflenet V2中的结论)