卷积神经网络~设置padding和stride

更多边缘检测内容

  • 下图所示的是垂直边缘检测的例子:
    卷积神经网络~设置padding和stride_第1张图片
    如果,这张图片被翻转了,即,使暗面在左,亮面在右,这对输出会造成什么影响?
    卷积神经网络~设置padding和stride_第2张图片
    运算结果发生了变化,过滤器得到的计算值变成了-30。输出的结果表明,-30 --> 0 是由暗到亮的过渡而非由亮到暗的过度。如果实验的结果不在乎二者的区别,那么可以直接对输出的卷积矩阵中的值取绝对值。但这种过滤器确实可以区别两种明暗的变化。
  • 水平垂直检测
    卷积神经网络~设置padding和stride_第3张图片
    注:对于垂直边缘检测,矩阵的第一列为1,而最后一列为-1,因此它进行卷积计算的结果会使左边较亮而右边相对较暗。
    相似的,水平垂直检测会使上面较亮,而下面较暗。
    使用水平垂直检测过滤器对一张图进行卷积:
    卷积神经网络~设置padding和stride_第4张图片
    由于卷积的参数图太小,因此得到的结果使检测结果不明显。
  • 使用哪一种过滤器?
    Sobel Filter:
    卷积神经网络~设置padding和stride_第5张图片
    Scharr Filter
    卷积神经网络~设置padding和stride_第6张图片
    它们都是垂直边缘检测过滤器,将他们九十度旋转,得到水平边缘检测过滤器。
    实际上,我们不需要一定使用研究者们使用的九个数字作为我们的过滤器。可以把过滤器的九个数字当成九个参数,使用反向传播,和原图进行卷积。通过反向传播,让神经网络自动的学习它们,可以得到更好的检测器。
    卷积神经网络~设置padding和stride_第7张图片

Padding

为了实现深度神经网络,padding是一种需要学会的基本的卷积操作。

  • 计算卷积输出矩阵的维数:
    卷积神经网络~设置padding和stride_第8张图片
    输入的图像矩阵为n×n的矩阵,过滤器矩阵的维数为f×f,那么最后输出的卷积矩阵维数是(n-f+1)×(n-f+1)。这样做的一个缺点是,每一次进行卷积运算,我们得到的矩阵都会缩小,甚至经过若干次卷积运算,我们的图像会缩小至1×1,这是我们不希望得到的结果。另一个缺点是,对于输入的图像矩阵,处于矩阵中央部分的像素点在卷积运算中被数次使用,而处于边缘(比如,左上角)的像素点,只被使用相对很有限次。
    卷积神经网络~设置padding和stride_第9张图片
    这意味着我们丢掉了图像的边缘位置的许多信息。为了解决这些问题,我们可以对输入的矩阵进行填充(Pad),经过像素填充操作,一个6×6的矩阵变成了8×8的矩阵:
    卷积神经网络~设置padding和stride_第10张图片
    这样,经过卷积计算,我们得到的输出矩阵仍为6×6的矩阵,而非4×4的矩阵。
  • 习惯上,我们可以使用0来对图像进行填充。规定p( padding )代表填充的层数,在上例中,p = 1。
    经过填充,得到的卷积输出矩阵维数是(n+2p-f+1)×(n+2p-f+1)。这样,通过padding的方法,同时解决了上述的两个问题。
  • 对于padding的层数p,有两种方法,分别称作Valid卷积和Same卷积。
    ①Valid卷积意味着不填充。
    ②Same卷积意味着填充后,输出矩阵的维数和输入矩阵相同。即,使n+2p-f+1 = n,解出p,即为答案,p = (f-1)/2。当f为奇数时,得到的输入和输出维数相同,在计算机视觉中,f基本上都是奇数,或者它总是奇数,极少会看到偶数阶的过滤器。使过滤器的维数为奇数,则过滤器中有了一个中心点,这对计算机视觉的相关计算是有利的。

卷积步长

卷积中的步幅是另一个构建卷积神经网络的基本操作。

  • 以一个7×7的图像矩阵和一个3×3的过滤器进行卷积计算为例,此时我们设置步长stride = 2。
    卷积神经网络~设置padding和stride_第11张图片
    由于之前我们默认步长为1,所以当我们计算完第一行第一列的卷积值之后,我们将过滤器在像素矩阵中左移一步,而当我们设置步长为2时,我们需要移动两步。
    卷积神经网络~设置padding和stride_第12张图片
    卷积神经网络~设置padding和stride_第13张图片
    当第一行的卷积值计算完毕,要进行第二行卷积值的计算时,我们在纵向移动的步长仍为2。
    卷积神经网络~设置padding和stride_第14张图片
    因此,输出矩阵的维数,变为:
    [(n+2p-f)/s + 1]×[(n+2p-f)/s + 1]
    此处n为输入的像素矩阵维数,p为padding的层数,f为过滤器的维数,s为步长stride。
    如果商不是整数,那么我们向下取整。这个规定实现的原则是,当我们计算图中蓝色框(过滤器)内的卷积值时,蓝色框在原矩阵或经过填充后的矩阵内时,才进行卷积值的计算,否则,我们不进行相乘的操作。
    卷积神经网络~设置padding和stride_第15张图片
    这是一个惯例,即过滤器必须完全处于图像中或填充后的图像区域内,才输出相应结果。因此,正确的输出矩阵维数应该向下取整。
    总结:
    卷积神经网络~设置padding和stride_第16张图片

你可能感兴趣的:(深度学习,卷积,过滤器,计算机视觉,神经网络,深度学习)