计算机系统应用教程网站

网站首页 > 技术文章 正文

计算机视觉中的卷积神经网络 深度卷积神经网络在计算机视觉中的应用研究综述

btikc 2024-10-28 13:01:01 技术文章 35 ℃ 0 评论


利用神经网络进行图片识别时,通常会将三通道图片转化为一维向量:
高度×宽度×3,当图片的像素较低时,在神经网络中,可以将整个向量作为神经网络输入。但是,处理高分辨率的图片时,图片的尺寸过于庞大,利用神经网络进行处理,显然是不现实的,为此,需要对图片进行卷积运算。

卷积运算

对于卷积的运算如下动态图表示:

  • 定义一个过滤器,一个3×3的矩阵
  • 将过滤器矩阵的对应元素值与原矩阵的对应元素相乘并求和,得到输出矩阵值。
  • 按照行列之间的关系对应移动这个过滤器矩阵。

以过滤器选定的第一个区域做计算,其计算过程是:


利用卷积运算实现边缘检测的过程如下图所示,

如上所述的矩阵中,像素为10代表代表较为明亮的颜色区域,而像素为0则代表较暗的区域,通过过滤器的卷积运算后,得到一个新的矩阵,中间的区域较边缘区域更为明亮(像素值更大),所以,可以很好的实现一个简单的垂直边缘检测。

边缘检测

如上所示的边缘检测中,实现了垂直的边缘检测。可以通过调整过滤器的参数实现水平检测,如下图所示:

通过调整过滤器,可以检测垂直或者水平的边缘,在计算机视觉中,可以通过调整过滤器的参数不同的组合,可以实现不同的效果,常见的两种过滤器,如下所示:



(1,2,-1,-2,0)的组合,称之为sobel过滤器,具有更强的鲁棒性,而(3,10,0,-3,-10)的组合称之为Scharr过滤器。

在深度学习中,目标就是当需要检测复杂图像的边缘时,将过滤器的参数设置为神经网络的参数,希望通过网络的学习,得到较好的参数,能够有效的检测图像的边缘。

Padding

构建卷积神经网络时,一个基本的卷积操作数就是Padding,关于Padding,有如下解释:

以上述例子为例,对一个6x6的像素矩阵,使用一个3x3的过滤器进行卷积运算,就会得到一个

的输出矩阵,假设输入矩阵的维度是4x4,而过滤器矩阵的维度是nxn

,则卷积后的矩阵维度大小是fxf

,以深层神经网络为例,随着神经网络层数的增加,每一层的训练将会使得输入矩阵缩小,而我们希望输出矩阵跟输入矩阵有相同的大小,所以需要对输入矩阵进行填充。

对输入矩阵进行填充时,通常填充的值是0,关于填充大小,有以下两种情况:

  • Valid卷积:Valid意味着不进行填充,通过卷积运算会得到一个的输出矩阵。
  • Same卷积:这种卷积方式,意味着输出矩阵和输入矩阵有相同的大小,假设填充个像素点,则有如下推导:

当填充p个像素点时,此时输入矩阵将会变成n+2p;

此时输出矩阵的大下将会变成n+2p-f+1

;

希望输入矩阵和输出矩阵有相同的大小,则有:n+2p-f+1 = n

,即有:p=(f-1)/2

,即为此时的填充大小,可以看出,填充的值是由过滤矩阵的大小决定的。

注意:在计算机视觉中,通常选择过滤矩阵的大小f为奇数值。

卷积步长

上述例子中,卷积步长都是1,在神经网络中,可以对卷积步长做出调整,如下所示,将卷积步长调整为2时,卷积的过程将会如下所示:

卷积步长发生变化时,输出矩阵的大小也会发生变化,假设卷积步长为s,填充为p,输入矩阵为

nxn,而过滤器矩阵大小为fxf,那么输出矩阵的大小的计算方式如下所示:


其中[],表示向下取整,因为,我们不能保证以上公式中的除法运算得到的商是整数,需要向下取整,即也就是,希望,在卷积运算时,过滤矩阵能够完整的覆盖到输入矩阵上,而不至于过滤矩阵的一部分超出输入矩阵的大小,而导致运算错误。

三维卷积

在图像处理中,如果是彩色的三维图像(RGB三通道),卷积的过程如下图所示:


此时,过滤器也是一个三维矩阵,计算方法与二维卷积的计算类似,也是将对应元素相乘并相加。以上述图片为例,每次卷积的元素都是27个,最后将这些元素相加起来得到卷积后的元素。

可以设置不同的过滤矩阵,得到不同颜色卷积边缘,假设,只想检测红色图像的边缘,可以将过滤器矩阵的对应的蓝色通道和绿色通道的数据全部设置为0,红色部分设置为(-1,0,1)组成的矩阵即可。

除了设置一个过滤卷积矩阵外,还可以设置多个过滤矩阵进行卷积,以两个过滤矩阵进行卷积为例,其实现可以如下图所示;


整个实现过程就是分别利用两个过滤矩阵对图像进行卷积,最后的输出图像是由卷积后得到的图像组合而得到的。

由以上过程,可以得到如下规律:

  1. 输入图像的维数是( 代表通道数目)
  2. 过滤矩阵的维数是(按照惯例,输入图像的通道和过滤矩阵的通道应该一样。)
  3. 最后,会得到一个维数为,其中代表过滤矩阵的个数。

单层卷积网络

以上图所示的卷积计算过程为例,卷积网络的前向传播过程如下所示:

  • 以的矩阵作为输入,即令,计算
  • 如公式(1)所示,这里的参数代表过滤矩阵的值,而表示的偏置,利用广播机制,对过滤矩阵的每一个元素都加上偏置参数。
  • 最后利用,激活函数计算得到


层为例,总结卷积神经网络的一层(l层)的各种标记,如下所示:

Fl第l层过滤矩阵的大小

Pl第l层的填充大小

Sl第l层的卷积步长

Nlc过滤矩阵的通道数量l层的输入(即第l-1层的输出):


第l层的过滤矩阵的大小:


第l层的参数矩阵的w大小:


,即权重参数就是所有过滤矩阵的集合再乘以过滤器的总数量。

偏置参数的大小为一个Bl


的四维向量。

经过卷积之后,输出图像的维度高度和宽度是:


则第l层的输出矩阵的激活值


其中,nH和nW分别表示输入图像矩阵的高和宽。最后,若有m个样本,则输出矩阵Al

的维度大小是

池化层

除了使用卷积层,卷积网络经常使用池化层缩减模型的大小,以提高计算速度,同时提高所提取特征的鲁棒性。以最大池化为例,具体计算的过程如下所示:


与上述卷积计算不同的是,最大池化的计算是选择过滤矩阵所覆盖部分的最大值作为输出矩阵。数字大意味着可能探测到了某些特定的特征,最大化操作的功能是只要在任何一个区域内提取到某个特征,都会保留在最大化的池化输出里。其直观理解也就是只要在某个区域内提取到这个特征,就保留这个最大值,如果没有提取到这个特征,即使得到的最大值也还是较小。

此外,池化层没有需要学习的参数,只要确定了卷积步长和填充,此计算过程将会是一个固定运算,梯度下降不需要改变任何参数,并且最大池化的输出仍然满足卷积层的输出大小计算公式



如果参与计算的矩阵是多通道的矩阵,则计算过程需要对每个通道执行最大池化。

实际运算过程中,很少使用padding 填充,对于多通道图像,则最大池化后的输出大小是:

卷积神经网络示例

一个卷积神经网络的示例,如下图所示,卷积层和池化层构成了神经网络的“层”,最后,在其后连接全连接层和一个softmax输出层。


随着神经网络深度的加深,高度和宽度

都会逐渐减小,而通道数量会增加,最后得到一个全连接层。在卷积神经网络中,一个卷积层和其后的池化层构成了神经网络的一层,因为池化层并不进行参数更新。

如上图所示的卷积神经网络中,其激活值大小如下表所示,可以看出,随着神经网络的加深,激活值尺寸逐渐变小,如果激活值尺寸下降太快,则会影响神经网络的性能。


卷积的优势

与全部使用全连接层的神经网络相比,卷积在神经网络中的两个优势是参数共享和稀疏连接。

  • 参数共享:
    对于图片的特征检测而言,如果过滤矩阵能够检测图片的某一区域,那么该过滤矩阵的参数也能够检测图像的另一区域。以图像的垂直边缘检测为例,直观感受就是,特征检测器既能够检测图片左上角的垂直边缘,也能够检测图片右下角的边缘,即使左上角和右下角的分布可能不同,但是不需要添加其他特征检测器。整张图片共享特征检测器,其提取效果也会很好。
  • 稀疏连接:
    所谓稀疏连接,就是通过过滤矩阵卷积运算后得到的输出值,只与输入矩阵的被卷积运算的部分有关,而不受输入矩阵其他部分元素的影响。

神经网络通过这两种方法减少参数,以便能够使用更小的训练集进行训练,从而防止过拟合。


关注大话编程,一起提升技能。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表