上采样和下采样层 nn.pixelshuffle and nn.pixelunshuffle

该文介绍了在深度学习中用于特征图尺寸变化的Downsample和Upsample操作,分别通过卷积和PixelUnshuffle/PixelShuffle层来改变通道维度和空间尺寸,以达到降采样和上采样的效果。

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

前言

理论部分后面有空的时候补一下,这里先放代码和简要说明。


Downsample

这里先对channel维度降低为原来 1/21/21/2,然后再对channel维度提升 r2r^2r2 倍数, 这里 r=2r=2r=2 (nn.PixelUnshuffle中的参数),同时特征图的宽度和高度都会缩减为原来的 1/r1/r1/r

class Downsample(nn.Module):
    def __init__(self, n_feat):
        super(Downsample, self).__init__()

        self.body = nn.Sequential(nn.Conv2d(n_feat, n_feat//2, kernel_size=3, stride=1, padding=1, bias=False),
                                  nn.PixelUnshuffle(2))

    def forward(self, x):
        return self.body(x)

给个例子吧.

ds = Downsample(16)
# up = Upsample(16)
x = torch.randn(1, 16, 64, 64)
x = ds(x)
# x = up(x)
print(x.shape)  # torch.Size([1, 32, 32, 32])

这里 [1,16,64,64][1, 16, 64, 64][1,16,64,64] 经过 conv 层后变为 [1,8,64,64][1, 8, 64, 64][1,8,64,64], 然后经过 PixelUnshuffle 层 变为 [1,8×4,64/2,64/2]=[1,32,32,32][1, 8 \times 4, 64 / 2, 64 / 2]=[1, 32, 32,32][1,8×4,64/2,64/2]=[1,32,32,32]

Upsample

这里先对channel维度提升为原来的 222 倍,然后再对channel维度降低为原来的 1/(r2)1/(r^2)1/(r2) , 这里 r=2r=2r=2 (nn.PixelUnshuffle中的参数),同时特征图的宽度和高度都会扩大为原来的 222 倍。

class Upsample(nn.Module):
    def __init__(self, n_feat):
        super(Upsample, self).__init__()

        self.body = nn.Sequential(nn.Conv2d(n_feat, n_feat*2, kernel_size=3, stride=1, padding=1, bias=False),
                                  nn.PixelShuffle(2))

    def forward(self, x):
        return self.body(x)

给个例子吧

# ds = Downsample(16)
up = Upsample(16)
x = torch.randn(1, 16, 64, 64)
# x = ds(x)
x = up(x)
print(x.shape)  # torch.Size([1, 8, 128, 128])

这里 [1,16,64,64][1, 16, 64, 64][1,16,64,64] 经过 conv 层后变为 [1,32,64,64][1, 32, 64, 64][1,32,64,64], 然后经过 PixelUnshuffle 层 变为 [1,32/4,64×2,64×2]=[1,8,128,128][1, 32/4, 64 \times 2, 64 \times 2]=[1, 8, 128, 128][1,32/4,64×2,64×2]=[1,8,128,128]

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值