老实说,这看起来不像棋盘神器。另外我认为鉴别器不是问题,它通常与图像恢复(生成器或解码器)有关。
快速浏览了 MUNIT,他们使用的Decoder
是最近邻上采样(此处torch.nn.Upsample
的确切代码行)。
您可以尝试使用torch.nn.Conv2d
后跟torch.nn.PixelShuffle
,如下所示:
import torch
in_channels = 32
upscale_factor = 2
out_channels = 16
upsampling = torch.nn.Sequential(
torch.nn.Conv2d(
in_channels,
out_channels * upscale_factor * upscale_factor,
kernel_size=3,
padding=1,
),
torch.nn.PixelShuffle(upscale_factor),
)
image = torch.randn(1, 32, 16, 16)
upsampling(image).shape # [1, 16, 32, 32]
这允许神经网络学习如何对图像进行上采样,而不仅仅是使用torch.nn.Upsample
网络无法控制的图像(并且使用下面的技巧,它也应该没有棋盘伪影)。
此外,ICNR 初始化Conv2d
也应该有所帮助(可能在此处或此处实现)。此初始化方案初始化权重以在开始时类似于最近邻上采样(此处为研究论文)。