Fully convolutional network with zero padding:
I have a fully convolutional network which does not have any padding in convolutional layers. This implies that, after each convolution operation, the output feature map is smaller than the input feature map. No padding convolutional layers are crucial for my application since I wish to have strict translation invariance.
Following are some important points about my CNN:
- It only consists of max-pool and convolutional layers.
- The stride of my CNN is 8 which is calculated by multiplying the strides of max-pool and convolution layers.
- If I pass a 255x255 image, I get an output map of 17x17x5 (4 bounding box values + confidence score).
Comparison with YOLO:
YOLO fits the output grid simply on the whole image. I guess they are able to do so because they maintain feature size in convolutional layers with padding. Since I don't have any padding in my convolutional layers, I know that the output corresponds to some part of the image with border pixels getting washed away.
I wish to fit the output grid (17x17) in the original image space (255x255) but I can't figure out the convolutional arithmetic. I have two questions here:
- What should be the offset of the grid in the original image from top left?
- What are the dimensions (width and height) of each grid cell?
I guess the answers to above two questions should be functions of network stride $s$, input image size $d_i$ and output size $d_o$ (feel free to prove me wrong). Just to be clear, in my fully convolutional network, $s$ = 8, $d_i$ = 255 and $d_o$ = 17.