【问题标题】:Decoder upsample size解码器上采样大小
【发布时间】:2021-03-11 09:08:06
【问题描述】:

我有一个简单的自动编码器,如下所示:

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 个通道的编码器添加第四层,向解码器添加第四层(类似于上面的层),解码的第一层中的上采样大小应该是多少?

【问题讨论】:

  • 欢迎来到 SO。请重新阅读What topics can I ask about here?,并注意要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题是关闭的SO主题(删除了您的最后一个问题,否则这将有资格作为资源请求关闭)。

标签: python deep-learning pytorch autoencoder


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多