channel shuffle通道洗牌

一般的卷积是在所有的输入特征图上做卷积,可以说是全通道卷积,是一种通道密集连接方式(channel dense connection);

分组卷积(Group convolution)是将输入层的不同特征图进行分组,然后采用不同的卷积核再对各个组进行卷积,这样可以降低卷积的计算量,但不利于通道组之间的信息流通,因此,与常规卷积相比,分组卷积是一种通道稀疏连接方式;

为了克服分组卷积带来的副作用,ShuffleNet v1 中提出了channel shuffle操作:对group convolution之后的特征图进行“重组”,这样可以保证下一步group convolution的输入来自不同的组,因此信息可以在不同组之间流转。
在这里插入图片描述
其实就是打乱原有特征顺序再进行重组:首先确定自己的特征图通道数多少,再确定组数多少,然后将通道分组后作为输入(input)就可以了。
在程序上实现channel shuffle流程:
假定将输入层分为 g 组,总通道数为 g × n :

在这里插入图片描述

import torch
def channel_shuffle(x, groups):
    batch_size, num_channels, height, width = x.size()
    channels_per_group = num_channels // groups
    print(channels_per_group)
    # reshape
    # b, c, h, w =======>  b, g, c_per, h, w
    x = x.view(batch_size, groups, channels_per_group, height, width)
    x = torch.transpose(x, 1, 2).contiguous()
    # flatten
    x = x.view(batch_size, -1, height, width)
    return x

a = torch.randn(1,15,3,3) #1x15x3x3
print(a.shape)
groups = 3
x = channel_shuffle(a, 3)
print(x.shape)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JoannaJuanCV

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

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

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

打赏作者

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

抵扣说明:

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

余额充值