Implementing DeepLab V3+ in PYTORCH

I am trying to implement DeepLab V3+ in PYTORCH, but I am confused in some parts of the network.

image

  1. Is “1*1 conv” -. Global Average Pooling as mentioned in DeepLab V3

  2. What exactly is “Image Pooling” operation?

  3. As Dilated convolutions of different Rates are applied on the same feature map, the resulting feature map will have different dimensions. Is padding applied during these convolutions, so that the final results can be concatenated?

PLS help…

Hi - I’m doing the same right now.

Here’s my understanding:

  • The 1x1 conv is just that, a 1x1 conv.
  • The “Image Pooling” is the Global Average Pooling.
  • the dilations do not result in different dimensions but you need to have different padding for each.

Let me go into a little more detail for the padding issue. For a normal NxN-Conv (dilation rate=1) choosing a padding of (N-1)//2 will give you the same size output as input. Now consider the a 3x3 Conv with dilation rate=2. Draw a little picture and you can convince yourself that the field of view is the same as the field of view for a 5x5 Conv and therefore, the padding required to have the same size output as input is not (3-1)//2=1, as with the rate=1 case, but rather (5-1)//2=2

It turns out that the generalized formula for “same” padding for atrous convs is

effective_kernel_size=kernel_size+((kernel_size-1)*(rate-1))
padding=int((effective_kernel_size-1)//2)

Which for kernel_size=3, rate=2 simplifies to (3+2*1-1)/2=(5-1)/2=2 as before.