天天看點

通道随機混合操作(Channel Shuffle Operation)

通道随機混合操作(Channel Shuffle Operation)可以看成“重塑-轉置-重塑”(“reshapetranspose-

reshape”)操作。這裡假設把4個Feature Maps級聯後,共1024個Channels。現在我們想把這個1024個Channels随機打亂混合。首先把Channels重塑為(g, c),其中  g 表示分組數目,c=1024/g。然後把它轉置一下為(c, g)。然後把它重塑為1024個通道。

具體代碼如下:

import torch


def channel_shuffle(x, groups):
    batchsize, num_channels, height, width = x.data.size()

    channels_per_group = num_channels // groups

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

    # transpose
    # - contiguous() required if transpose() is used before view().
    #   See https://github.com/pytorch/pytorch/issues/764
    x = torch.transpose(x, 1, 2).contiguous()

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


    return x
           

如果您覺得我的文章對您有所幫助,歡迎掃碼進行贊賞!

通道随機混合操作(Channel Shuffle Operation)

參考:

1. ShuffleNet

繼續閱讀