ShuffleNet paper笔记(附shuffle代码)

ShuffleNet是一种专为移动设备设计的轻量级CNN模型,通过引入pointwisegroupconvolution和channelshuffle两种新操作来提升效率。pointwisegroupconvolution利用1x1卷积进行分组,减少计算量;channelshuffle则通过重新排列通道来增加信息交互,缓解信息量减少的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shuffleNet是一个轻量化的CNN模型,paper链接
主要面向mobile device(有限的算力)设计。
主要有2个新的operations: pointwise group convolution 和 channel shuffle

pointwise group convolution

说到pointwise group convolution,不得不先提到group convolution,
它是在AlexNet中第一次提到,详细介绍见这篇文章
在这里插入图片描述
channel分成了G个组,每个组的卷积核尺寸为C/G * K * K, C是input channel数量。
output channel数量为N,分到每个组的channel就为N/G,所以每个组需要N/G个卷积核。
大概就是这个意思。

再说一下pointwise convolution, 它就是1x1卷积。

pointwise group convolution, 就是卷积核的大小是1x1,再加上上面的分组操作。
后面再说它用在哪。

channel shuffle

然后是channel shuffle的提出,为什么要shuffle。
在这里插入图片描述

因为面临有限的计算资源下,小网络channel受限的问题,
这时可以用稀疏的channel,group convolution就是一个例子,
但是group convolution有一个副作用,就是一个特定的output channel只和一小部分的input channel有关,信息量变少了。
想增加信息量可以通过group卷积时,把每个group进一步分成sub group, 多加一些group的信息进来,
在这里插入图片描述
这种从不同的sub group里采样的做法,等效于channel shuffle.
具体怎么shuffle,
在这里插入图片描述
channel数转为矩阵,矩阵转置再压平。而且channel shuffle是可导的,因此可用在back propagation,
也就是能嵌入到网络结构中。

def channel_shuffle(x, groups):
    # type: (torch.Tensor, int) -> torch.Tensor
    batchsize, num_channels, height, width = x.data.size()
    channels_per_group = num_channels // groups

    # reshape
    #channel变为groups x channels_per_group
    x = x.view(batchsize, groups, channels_per_group, height, width)

	#转置为channels_per_group x groups
    x = torch.transpose(x, 1, 2).contiguous()

    # flatten
    x = x.view(batchsize, -1, height, width)

    return x
ShuffleNet unit

以bottleneck为例
在这里插入图片描述
左边的是bottleneck结构,中间的把1x1卷积换成1x1 分组卷积,紧跟一个channel shuffle,
最后一个1x1 分组卷积不再跟channel shuffle. 这是stride = 1的情况。
右边的是stride=2的情况,在residual的部分加上了3x3 average pooling,
同时用channel concat 代替了直接add.

整个shuffleNet的结构如下

在这里插入图片描述
stage2的第一个1x1 layer没有用分组卷积,因为channel比较少。
这个是用于imageNet分类的。

分组卷积只用在bottleneck里。
在这里插入图片描述

分组的效果比较
在这里插入图片描述
其中ShuffleNet sx表示channel缩放了多少倍
在这里插入图片描述
output channel缩放了s倍,就意味着filter个数缩放了s倍,
在这里插入图片描述
后面有实验证明channel shuffle能降低error
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值