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.Conv2d(ngf * mult, int(ngf * mult / 2),
                                         kernel_size=3, stride=1, padding=0),

I replaced padding=0 with 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:

enter image description here enter image description here

I haven't found any good explanations on the difference in results so far.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.