卷积神经网络介绍1

   

  讲到卷积,首先要从传统图像处理的边缘检测说起。

       卷积神经网络的前几层一般用于检测边缘,后面几层用于检测物体的某一部分,更后面的可能检测到完整的物体。

       如何在一张图片中检测边缘?

       举个例子,这是一个6 x 6的灰度图像,

       为了检测图像中的垂直边缘,我们可以构造一个3 x 3的矩阵,称为filter(过滤器),或者称为kernel(核)。

  原图像与filter做卷积运算,得到一个4 x 4的矩阵,如下图所示(下图只显示了4x4矩阵第一个元素的计算方式)。

 

最后结果如下图:

  左边可以理解为一张图片,中间3x3矩阵理解为过滤器filter,右边的矩阵可以理解成另一张图片。

以上过程动图如下:

       以上就是边缘检测器。

  为什么上面的方法可以检测到边缘?再举一个例子,下面是一个简单的6 x 6大小的图像。

 

  如果把最右边的矩阵当成是图像,那么图像就会像右边那样,在中间有一段亮一点的区域,对应的就是检查到6 x 6图像中间的垂直边缘。上图检测到的边缘看上去很粗,是因为这个例子中原始图片太小了,如果你用一个1000 x 1000的图像,那么你会发现其实会很好的检测出图像中垂直边缘。

       以上例子可知,卷积运算提供了一种简单的方式来发现图像中的垂直边缘。

  如何检测正边(由亮到暗)或者负边(由暗到亮)呢?下图给出了答案。

  历史上,有学者也提出过改进的边缘过滤器,如sobel过滤器和Scharr过滤器,这些改进的过滤器可以提高算法的鲁棒性。手工寻找合适的过滤器是比较麻烦的,在深度学习中,我们把这3 x 3矩阵当成9个参数,然后再让算法自己去学习(通过反向传播学习)这些参数的值,这就免去了手工选择参数的麻烦,深度学习算法寻找到的参数或许比手工设置的参数效果更好,可以检测到更复杂的边缘,比如说检测45度的边缘,或者73度的边缘或者其他角度的边缘。

(注:深度学习中的卷积与我们平常上课中信号与处理课的卷积有一点不同,后者需要先将过滤器先沿着水平和垂直轴翻转,接下来就跟深度学习中步骤一样了)。

 

Padding

  上面提到,6 x 6的图像与3 x 3的过滤器作卷积,会得到一个4 x 4的矩阵。推广一下,对于一个n x n的图像,与f x f的过滤器作卷积,那么就会得到一个(n-f+1)x(n-f+1)的矩阵。

       这个方法有两个缺点,第一个缺点就是每次做卷积操作,你的图像就会缩小,做多次卷积之后,你的图像就会变得很小。第二个缺点就是,如果你注意角落边的像素,这些像素只被一个输出所使用;但是对于中间区域的像素,就会被多个3 x 3的过滤器使用。因此,这些边缘处的像素,在输出中采用较少,意味着你丢掉了图像的边缘位置的许多信息。

 

  解决方法就是,在做卷积之前,填充这幅图像。即沿着图像的边缘,再填充一层像素。即一个6 x 6的图像填充成8 x 8的图像,这样,再对8 x 8图像与3 x 3做卷积,其结果是一个6 x 6的矩阵,与原图像大小一致。

 

  习惯上,可以用0去填充。如果p代表填充数量,那么此处p=1,因为在原图像周围都只填充了一个像素点,输出也就变成了(n+2p-f+1)x(n+2p-f+1),即(6+2x1-3+1)x(6+2x1-3+1)=6x6

       当然,也可以在原图像周围填充上两层像素点,此时p=2.

  至于选择填充多少像素,通常有两个选择,分别叫做valid卷积same卷积

  Valid卷积意味着不填充,那么对于一个n x n的图像和一个f x f的过滤器,将会得到一个(n-f+1)x(n-f+1)的输出。

  Same卷积的作用是使得输出大小和输入大小是一样的,由于输出大小为(n+2p-f+1)x(n+2p-f+1),因此如果想让输出大小与输入大小一致,那么有n+2p-f+1=n,即p=(f-1)/2。当f是奇数时,只要选择对应的值就行。通常上,f是奇数,f数偶数的情况非常小。原因可能有两个,1)如果是偶数,那么只能使用一些不对称填充(如左边少填充一点,右边多填充一点),2)如果是一个奇数维的过滤器,那么它就有一个中心点,在计算机视觉里,如果有一个中心像素会更方便,这样可以指出过滤器的位置。

卷积步长stride

  原始图像大小n x n,过滤器大小f x f,步幅stride=s,padding=p,则输出图像大小为((n + 2p – f) / s + 1)x ((n + 2p – f) / s + 1),如果商不是整数,则可以向下取整。

如何在三维空间上做卷积?

       一个三通道的RGB图像作为输入,大小为6 x 6 x 3(height x width x channels)过滤器大小为3 x 3 x 3(最后一维也是channel,与输入图像的channel一致),做卷积之后得到一个4 x 4 x 1大小的图像。

 

卷积过程如下图:

  如上图所示,原始图像与过滤器在重合位置对各自元素相乘,然后再求和,得到的值就是4 x 4的第一个元素,依次类推,与二维图像做卷积是类似的。

  由于过滤器是三维的,所以如果想检测图像中红色通道的边缘,可以将红色通道对应的过滤器部分设置为[1 1 1;0 0 0;-1 -1 -1],其余两个通道对应的过滤器部分设置为[0 0 0;0 0 0;0 0 0]。

  多个过滤器的情况。比如想同时检测垂直边缘和水平边缘,则需要两个过滤器,如下图,原图像对每个过滤器作卷积,然后将得到的两个结果叠加,记得到最后的结果,下图中得到一个4 x 4 x 2的结果。输出通道等于你要检测的特征数(filter的个数)。

 

 内容主要来自与:

Andrew Ng的卷积神经网络课程

原文地址:https://www.cnblogs.com/hejunlin1992/p/8367266.html