I found a very good solution for getting rid of checkerboard artefacts in GANs:
Instead of using Transposed Convolution, use bilinear upsampling
nn.Upsample(scale_factor = 2, mode='bilinear'), nn.ReflectionPad2d(1), nn.Conv2d(ngf * mult, int(ngf * mult / 2), kernel_size=3, stride=1, padding=0),
padding=1 to keep the same size of the image. The tradeoff, though, is that the Generator doesn't learn to evolve distinct objects as with Transposed Convolution. For example, on Street View House Number (SVHN) dataset, the one on the left was made with Transposed Convolution, the one on the right with Upsampling:
I haven't found any good explanations on the difference in results so far.