The ceil_mode flag in caffe controls the behavior of pooling output volume. For example, imagine a layer output that is 64 x 64. In caffe, if a convolution id done with kernel_size = 3, pad = 1, stride = 2, the output size is 32 x 32. However, if if a pooling is done with kernel_size = 3, pad = 1, stride = 2, the output size is 33 x 33. This is with ceil_mode: true, the default. With ceil_mode: false, the output size is 32 x 32 (like convolution). In netscope, the output is 33 x 33 regardless of whether ceil_mode: true or ceil_mode: false.
There are a number of BVLC/caffe issues describing the problem:
The ceil_mode flag in caffe controls the behavior of pooling output volume. For example, imagine a layer output that is 64 x 64. In caffe, if a convolution id done with kernel_size = 3, pad = 1, stride = 2, the output size is 32 x 32. However, if if a pooling is done with kernel_size = 3, pad = 1, stride = 2, the output size is 33 x 33. This is with ceil_mode: true, the default. With ceil_mode: false, the output size is 32 x 32 (like convolution). In netscope, the output is 33 x 33 regardless of whether ceil_mode: true or ceil_mode: false.
There are a number of BVLC/caffe issues describing the problem:
1318, #3656, #4252, #4781.
And these pull requests:
4257, #3057.
The solution seems simple: https://github.com/BVLC/caffe/pull/3057/files
Can this same solution be implemented in netscope?