Shufflenet V2中的结论
2019-09-27 本文已影响0人
wzNote
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