In Super-Resolution using Convolutional Neural Networks without Any Checkerboard Artifacts, Sugawara et al suggest a solution to the checkerboard problem noted by Odena, Dumoulin, and Olah. Interestingly, the solution has to do with initialization.
It’s not super clear to me what the default initialization is for PyTorch’s PixelShuffle. Does it use Sugawara initialization? If not, does it at least use the earlier ICNR method of normalization?
Looking at how FastAI initializes PixelShuffle, it gives the impression that PyTorch is not doing any special initialization.
PyTorch’s nn.PixelShuffle
layer does not contain any trainable parameters and thus does not initialize them with a specific method.
Based on the linked code snippets you shared it seems that at least FastAI implements a PixelShuffle_ICNR
layer, which contains a ConvLayer
as well as a PixelShuffle
layer.
The former then seems to be initialized with a specific method.
1 Like
Very good point, thanks for your reply. The fact that PixelShuffle requires external / surrounding code to be specially initialized for optimal performance is a bit unusual. But it seems like something best solved by a library rather than within PyTorch itself.