Hi @TaoLv,

Can’t say I’ve ever used a dilated *deconvolution*, but the idea is the same as with a dilated *convolution*.

Starting with an example of a dilated convolution with a kernel size of 3x3, same padding, a dilation factor of 2, and no stride (i.e. stride of 1x1), we see that the dilation adds gaps to where the kernel is applied on the input matrix. Same color cells are multiplied, and then totals summed to give value in black.

One way of thinking about transpose convolutions is that they just changes the order in which the weights of the kernel are applied. Instead of the top left pixel being multiplied by the top left weight in the kernel, it is the bottom right. See the dark blue cell for an example of this.

And now when we add dilation to a transpose convolution, we do just the same as with the standard convolution, we add gaps to where the ‘transposed’ kernel is being applied to the input matrix. I say ‘transposed’ kernel, but this isn’t technically a transpose operation being applied to the kernel weights!

All of the above, with transpose convolutions would be a little pointless though, because we could have just used a standard convolution for the same effect. Instead of applying the opposite kernel weights, we could have just leant the same weights in the normal kernel positions! So transpose convolutions are useful when we used stride. With stride we get the upsampling effect, to enlarge the output matrix. So below I show an example of a transpose convolution with stride.

And to answer your question, we can now see the effect of applying dilation to a transpose convolution with stride.

I hope that helps. Cheers,

Thom