在做深度学习的时候,会遇到padding的设置,设置SAME,还是VAILD,那么如何理解padding呢?
首先看英文翻译:
padding:
UK /ˈpæd.ɪŋ/ US /ˈpæd.ɪŋ/
the pieces of material used to protect something or give it shape
衬垫,衬料,填料
从翻译上可以看出,padding是填补的意思,那么一张图片哪里可以(需要)填补呢?肯定是边缘的地方,像素不够的时候需要填补。即padding是在图像的边缘增加几个像素,目的是保持特征图不要太小,添加的个数与卷积核有关。通常经过卷积运算后,得到的图片大小的尺寸会变小的,具体计算公式如下:
O
=
I
−
K
+
2
P
S
+
1
O = \frac{I-K+2P}{S} + 1
O=SI−K+2P+1
其中O是卷积后的输出,I是输入图片尺寸,K是卷积核的尺寸,P是填充的像素数,S是步长。这里的P就是咱们所说的填充数。从上式中看出,如果不做填充,而步长为1的情况下,那么输出图像会变小。我们直到卷积操作的过程,如下图:
从图中可以看出,越是边缘的像素点,对输出的结果影响越小(原来是5x5的图片,输出变成了3x3),应为卷积运算在移动的时候到边缘就结束了,而中间部分的像素点被计算了很多次,这就是边缘信息丢失的原因。
那么增加增加padding的主要目的就显而易见了:
padding的目的:
- 保留边界信息,如果不加padding,边界限速点只被计算一次,而加上后,会被多次计算。
- 保证经过卷积后的特征图与原来的图尺寸一致,上图的输入图如果是增加了padding,即输入图是3x3,边缘全是通过padding增加的像素,那么输出的图像尺寸就跟原图的尺寸大小一样了。
- 卷积神经网络增加padding后,会保证输出的图像和输入的图像尺寸保持一致
padding的两个设置:
- 如果设置成SAME,那么就会使用0全部填充。
- 如果设置成VALID,无填充,直接计算输出。