torch same padding
CNN中,增加Padding过后,为我们带来的那些负面影响。 如上图所示: 第一行为普通3x3卷积,步长1,padding 0, 第二行为普通3x3卷积,步长1,padding 1, 第三行为膨胀3x3卷积,dilation rate=3,步长1,padding 3. 上图箭头右向所指,为cnn底层在caffe 和darknet的底层实现,用c或c++,至于pytorch和tensorflow 是否也是这样实现cnn我不清楚,但是目前来讲,有效实现卷积的也就3种方式, im2col(上图) ,winograd, FFT,但是还是im2col比较常见,winograd好像是商汤最近几年提出来的,通过特殊数学计算方式,减少计算量,目前该方法被应用在腾讯移动端深度学习框架NCNN中,至于FFT,还没见到用在深度学习种。 至于为什么使用im2col,这还是贾清扬大神在写caffe时提出来的,因为图像中,一个块内的像素点在内存中是地址不连续的,所以对于同一个块内的像素想要缓存到cache上,可能出现多次内存访问,效率极低,所以设计出im2co方式,提前将需要计算的像素点放在连续地址上。 因此,对于同一图像,除了原始图像在内存中占空间,使用im2col又会消耗另一份空间。 如上图所示,对于8x8的图像: 不加padding,计算量为9x36=324, 内存消耗为8x8=64,有效内存为64