解码器上采样大小

Decoder upsample size

我有一个简单的自动编码器,看起来像这样:

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

        self.channels = [3, 8, 16, 32]

        self.encoder = nn.Sequential(
                # layer 1
                nn.Conv2d(self.channels[0], self.channels[1], 3, 1, 1),
                nn.BatchNorm2d(self.channels[1]),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=4, stride=4),
                # layer 2
                nn.Conv2d(self.channels[1], self.channels[2], 3, 1, 1),
                nn.BatchNorm2d(self.channels[2]),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=4, stride=4),
                # layer 3
                nn.Conv2d(self.channels[2], self.channels[3], 3, 1, 1),
                nn.BatchNorm2d(self.channels[3]),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=2, stride=2)
            )
        
        self.decoder = nn.Sequential(
                nn.Conv2d(self.channels[3], self.channels[2], 3, 1, 1),                
                nn.ReLU(inplace=True),
                nn.Upsample(size=(15, 20), mode='bilinear', align_corners=False),

                nn.Conv2d(self.channels[2], self.channels[1], 3, 1, 1),                
                nn.ReLU(inplace=True),
                nn.Upsample(scale_factor=4, mode='bilinear', align_corners=False),

                nn.Conv2d(self.channels[1], 1, 1),                
                nn.ReLU(inplace=True),
                nn.Upsample(scale_factor=4, mode='bilinear', align_corners=False)
            )

    def forward(self, x):
        h = self.encoder(x)
        y = self.decoder(h)
        return y

有人可以澄清解码器中的 nn.Upsample(size=(15, 20)... 是否与将图像恢复到原始尺寸有关吗?我的输入图像(手电筒张量)大小为 240*320,网络应该将输入张量恢复到其原始大小。

此外,如果我向具有 64 个通道的编码器添加第四层并向解码器添加第四层(类似于上面的层),那么解码的第一层中的上采样大小应该是多少?

PyTorch Documentation中所述,您可以使用比例因子或输出大小定义上采样层。无论输入大小如何,声明 output_size=(H, W) 将确保输出大小为 (H, W)。另一方面,声明 scale_factor=4 将确保每个空间维度的输出将是输入的 4 倍,例如(30, 40) -> (120, 160).

您想提及您需要获得大小为 240 * 320 的输出。因此,解码器输出的空间维度将为 (15*4*4, 20*4*4),方便地为 (240, 320).