卷积(convolution)、通道(channel)
步长(stride)、填充(padding)
卷积核移动的步长(stride)小于卷积核的边长(一般为正方行)时,便会出现卷积核与原始输入矩阵作用范围在区域上的重叠(overlap),卷积核移动的步长(stride)与卷积核的边长相一致时,不会出现重叠现象。
举例:
填充(padding,在原始input的周围进行填充),以保证卷积后的大小与原始 input shape 一致。
定量计算公式:
补零填充(zero padding):保证卷积后的大小与原始尺寸一致
K为卷积核的大小(K通常是奇数),这样如果原始 input 的大小为 w*w,填充后的大小为 (w+k-1)*(w+k-1)(两端都要填充)
卷积后的大小:
其中,w: input 的 height/width;k:卷积核的 height/width;p:表示填充的大小;s:stride 步长;
举例:
7*7 的 input,3*3 的 kernel,无填充,步长为1,则 o = (7-3)/1 +1=5,也即 output size 为 5*5
7*7 的 input,3*3 的 kernel,无填充,步长为2,则 o =(7-3)/2+1=3,也即 output size 为 3*3
感受野
感受野指的是卷积神经网络每一层输出的特征图(feature map)上每个像素点映射回输入图像上的区域大小。第一层卷积层的输出特征图像素的感受野大小等于卷积核的大小,其它卷积层的输出特征图的感受野的大小和它之前所有层的卷积核大小和步长都有关。神经元感受野的范围越大表示其能接触到的原始图像范围就越大,也意味着它能学习更为全局,语义层次更高的特征信息,更能检测出大目标,相反,范围越小则表示其所包含的特征越趋向局部和细节(比如说位置或者颜色)。因此感受野的范围可以用来大致判断每一层的抽象层次,并且我们可以很明显地知道网络越深,神经元的感受野越大。
VGG使用上图第一种方法,用多个3*3卷积核堆叠代替大的卷积核(5*5)来减少参数量。
解释:设原图大小h*w*c,卷积后通道数保持不变(如本文第一张图的图③,卷积后通道数为2,原图通道数为3,要使卷积后通道数保持不变应再加一组卷积核,即卷积核组数=原图通道数),计算卷积核参数的数量:
2个3*3:(3*3*c)*c*2=18c^2
1个5*5:(5*5*c)*c=25c^2
由此可见,得到相同大小的特征图和感受野,用多个3*3卷积核堆叠代替大的卷积核(5*5),参数量有所下降。而且由于是多个卷积层的堆叠,每个卷积层后都加relu激活,那么提取出来特征的非线性就更强
卷积核:k*k,k太大会增加后续的计算量且信息抽象层次不够高,影响网络性能,k太小会造成非常严重的信息丢失,如原始分辨率映射到最后一层的feature map有效区域可能不到一个像素点,使得训练无法收敛。k一般为奇数,有中心像素点,便于定位卷积核。
计算每一层特征图的感受野:
举例:
反卷积
为了更深度的了解反卷积,现在还来看下卷积的数学操作。
1、卷积的数学操作
如果把卷积操作写成矩阵相乘,则对于4 ∗ 4的输入和3 ∗ 3的卷积核的结果如下:
最后得到一个4 ∗ 1的矩阵,可以reshape成2 ∗ 2的矩阵,便是最后卷积的结果,即y=cx