I had a quick look for you, and noticed that in their network 5 they use Upscale2DLayer, which seems to be a fixed upsampling operation, like nearest neighbour upsampling. Your network 5 uses nn.ConvTranspose2d, which is a learned upsampling operation. Some people have reported better success with this. Also, I do not see batch norm in their network, but you have it in your network.
Also, in your description, you wrote that you use Adam, but in your code I see SGD + momentum instead.