Hi K. Frank,
Thanks for the fast and clear response.
If i understand correctly the 2 approaches can do vaguely the same thing. But to get an intuition of what’s different :

With Upsample and Conv2d you will mix together pixels along space dimension.
Whereas if you only use ConvTranspose2d with (2,2) kernel and stride (2,2) the pixels are going to stay separated along the spatial dimension. (it would not be the case for a kernel size > (2,2) but still the pixels would not be mixed as much as with Upsample and Conv2d)

Have a good day,
Max