作为实验,我尝试使用自动编码器对来自阿尔卑斯山的高度数据进行编码,但是经过几个小时的训练,解码后的图像非常像素化,如下图所示。这种重复模式大于最终的内核大小,所以我认为可以在某种程度上从图像中删除这些重复模式。
图像为 (1, 512, 512) 并被采样到 (16, 32, 32)。这是用 pytorch 完成的。这是代码的相关示例,其中显示了确切的层。
self.encoder = nn.Sequential(
# Input is (N, 1, 512, 512)
nn.Conv2d(1, 16, 3, padding=1), # Shape (N, 16, 512, 512)
nn.Tanh(),
nn.MaxPool2d(2, stride=2), # Shape (N, 16, 256, 256)
nn.Conv2d(16, 32, 3, padding=1), # Shape (N, 32, 256, 256)
nn.Tanh(),
nn.MaxPool2d(2, stride=2), # Shape (N, 32, 128, 128)
nn.Conv2d(32, 32, 3, padding=1), # Shape (N, 32, 128, 128)
nn.Tanh(),
nn.MaxPool2d(2, stride=2), # Shape (N, 32, 64, 64)
nn.Conv2d(32, 16, 3, padding=1), # Shape (N, 16, 64, 64)
nn.Tanh(),
nn.MaxPool2d(2, stride=2) # Shape (N, 16, 32, 32)
)
self.decoder = nn.Sequential(
# Transpose convolution operator
nn.ConvTranspose2d(16, 32, 4, stride=2, padding=1), # Shape (N, 32, 64, 64)
nn.Tanh(),
nn.ConvTranspose2d(32, 32, 4, stride=2, padding=1), # Shape (N, 32, 128, 128)
nn.Tanh(),
nn.ConvTranspose2d(32, 16, 4, stride=2, padding=1), # Shape (N, 32, 256 256)
nn.Tanh(),
nn.ConvTranspose2d(16, 1, 4, stride=2, padding=1), # Shape (N, 32, 512, 512)
nn.ReLU()
)
相关图像:左侧原始,右侧自动编码器结果
那么上图中的这些像素化效果可以解决吗?