Vorwort
Bitte füllen Sie den theoretischen Teil aus, wenn Sie Zeit haben. Hier finden Sie zunächst den Code und eine kurze Beschreibung.
Downsampling
Hier zunächst das Kanalmaß auf das ursprüngliche 1/2 1/2 reduzieren1/2 und erhöhen Sie dann die Kanalabmessung umr 2 r^2RVielfaches von 2 , hierr = 2 r=2R=2 (Parameter in nn.PixelUnshuffle) und die Breite und Höhe der Feature-Map werden auf das Original1 / r 1/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)
Gib ein Beispiel.
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])
Hier [ 1 , 16 , 64 , 64 ] [1, 16, 64, 64][ 1 ,16 ,64 ,64 ] , nachdem die Conv-Ebene[1, 8, 64, 64] [1, 8, 64, 64][ 1 ,8 ,64 ,64 ] und dann, nachdem die PixelUnshuffle-Ebene zu[ 1 , 8 × 4 , 64 / 2 , 64 / 2 ] = [ 1 , 32 , 32 , 32 ] [1, 8 \times 4, 64 / 2, 64 / 2] wird ] =[1, 32, 32, 32][ 1 ,8×4 ,64/2 ,64/2 ]=[ 1 ,32 ,32 ,32 ]
Upsampling
Erhöhen Sie hier zunächst die Kanaldimension auf die ursprünglichen 2 22 -mal, und reduzieren Sie dann die Kanalabmessung auf das Original1 / ( r 2 ) 1/(r^2)1/ ( r2 ), wobeir = 2 r=2R=2 (Parameter in nn.PixelUnshuffle) und die Breite und Höhe der Feature-Map werden auf die ursprünglichen2 22x .
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)
gib ein Beispiel
# 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])
Hier [ 1 , 16 , 64 , 64 ] [1, 16, 64, 64][ 1 ,16 ,64 ,64 ] , nachdem die Conv-Ebene[1, 32, 64, 64] [1, 32, 64, 64][ 1 ,32 ,64 ,64 ] und dann, nachdem die PixelUnshuffle-Ebene zu[ 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 ]