首页 > 其他分享 >吴恩达卷积神经网络——浅层卷积神经网络

吴恩达卷积神经网络——浅层卷积神经网络

时间:2023-02-27 16:00:10浏览次数:43  
标签:滤波器 吴恩达 卷积 检测 神经网络 池化 图片

一、计算机视觉

  计算机视觉(Computer Vision)的高速发展标志着新型应用产生的可能,例如自动驾驶、人脸识别、创造新的艺术风格。一般的计算机视觉问题包括以下几类:

  • 图片分类(Image Classification);
  • 目标检测(Object detection);
  • 神经风格转换(Neural Style Transfer),如滤镜、油画风等。

应用计算机视觉时要面临的一个挑战是数据的输入可能会非常大。例如一张 1000x1000x3 的图片,神经网络输入层的维度将高达三百万,使得网络权重 W 非常庞大。这样会造成两个后果:

  1. 神经网络结构复杂,数据量相对较少,容易出现过拟合;
  2. 所需内存和计算量巨大。

卷积神经网络可以处理带有大量数据的图像,检测图片的边缘、局部特征,主要依靠卷积运算

1. 卷积运算filter

  边缘检测一般包括垂直边缘(Vertical Edges)检测水平边缘(Horizontal Edges)检测。

 

 

 中间的矩阵元素称为滤波器,也叫卷积核。图中的*表示卷积运算符号。在计算机中这个符号表示一般的乘法,而在不同的深度学习框架中,卷积操作的 API 定义可能不同:

  • 在 Python 中,卷积用conv_forward()表示;
  • 在 Tensorflow 中,卷积用tf.nn.conv2d()表示;
  • 在 keras 中,卷积用Conv2D()表示  

滤波器中的值还可以设置为参数,通过模型训练来得到。这样,神经网络使用反向传播算法可以学习到一些低级特征,从而实现对图片所有边缘特征的检测,而不仅限于垂直边缘和水平边缘

 

 

 2. 填充padding

假设输入图片的大小为 n×n ,而滤波器的大小为 f×f,则卷积后的输出图片大小为 (n−f+1)×(n−f+1)。

这样就有两个问题:

  • 每次卷积运算后,输出图片的尺寸缩小;
  • 原始图片的角落、边缘区像素点在输出中采用较少,输出图片丢失边缘位置的很多信息。

为了解决这些问题,可以在进行卷积操作前,对原始图片在边界上进行填充(Padding),以增加矩阵的大小。通常将 0 作为填充值

设每个方向扩展像素点数量为 p,则填充后原始图片的大小为 (n+2p)×(n+2p),滤波器大小保持 f×f不变,则输出图片大小为 (n+2p−f+1)×(n+2p−f+1)

因此,在进行卷积运算时,我们有两种选择:

  • Valid 卷积:不填充,直接卷积。结果大小为 (n−f+1)×(n−f+1)
  • Same 卷积:进行填充,并使得卷积后结果大小与输入一致,这样 p=(f−1)/2。

在计算机视觉领域,f通常为奇数。原因包括 Same 卷积中(f−1)/2能得到自然数结果,并且滤波器有一个便于表示其所在位置的中心点;而如果f是偶数,只能使用一些不对称填充。

3. 卷积步长stride

 卷积过程中,有时需要通过填充来避免信息损失,有时也需要通过设置步长(Stride)来压缩一部分信息。

  公式中有一个向下取整的符号,用于处理商不为整数的情况。向下取整反映着当取原始矩阵的图示蓝框完全包括在图像内部时,才对它进行运算。

  我们学习的“卷积”实际上被称为互相关(cross-correlation),而非数学意义上的卷积。真正的卷积操作在做元素乘积求和之前,要将滤波器沿水平和垂直轴翻转(相当于旋转 180 度),而滤波器算子一般是水平或垂直对称的,180度旋转影响不大;而且最终滤波器算子需要通过CNN网络梯度下降算法计算得到,旋转部分可以看作是包含在CNN模型算法中。忽略旋转运算可以大大提高CNN网络运算速度,而且不影响模型性能,起到简化代码的作用

4. 高维卷积

  如果想同时检测垂直和水平边缘,或者更多的边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。设输入图片的尺寸为 n×n×nc(nc为通道数),滤波器尺寸为 f×f×nc,则卷积后的输出图片尺寸为 (n−f+1)×(n−f+1)×n′c,n′c为滤波器组的个数。

 

5. 单层卷积网络

在CNN中,参数数目只由滤波器组决定,选定滤波器组后,参数的数目与输入图片的尺寸无关;其参数相较于标准神经网络来说要少得多,避免过拟合。

 

 

  一个典型的卷积神经网络通常包含有三种层:卷积层(Convolution layer)、池化层(Pooling layer)、全连接层(Fully Connected layer)。仅用卷积层也有可能构建出很好的神经网络,但大部分神经网络还是会添加池化层和全连接层,它们更容易设计

 6. 池化层

  池化层的作用是缩减模型的大小,提高计算速度,同时减小噪声提高所提取特征的稳健性。采用较多的一种池化过程叫做最大池化(Max Pooling)。将输入拆分成不同的区域,输出的每个元素都是对应区域中元素的最大值,如下图所示:

  对最大池化的一种直观解释是,元素值较大可能意味着池化过程之前的卷积过程提取到了某些特定的特征,池化过程中的最大化操作使得只要在一个区域内提取到某个特征,它都会保留在最大池化的输出中。但是,没有足够的证据证明这种直观解释的正确性,而最大池化被使用的主要原因是它在很多实验中的效果都很好

  另一种池化过程是平均池化(Average Pooling),就是从取某个区域的最大值改为求这个区域的平均值:

 

  池化过程的特点之一是,它有一组超参数,但是并没有参数需要学习。  

  

 

  在计算神经网络的层数时,通常只统计具有权重和参数的层,因此池化层通常和之前的卷积层共同计为一层

7. 使用卷积原因

相比标准神经网络,对于大量的输入数据,卷积过程有效地减少了 CNN 的参数数量,原因有以下两点:

  • 参数共享(Parameter sharing):特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。即在卷积过程中,不管输入有多大,一个特征探测器(滤波器)就能对整个输入的某一特征进行探测。
  • 稀疏连接(Sparsity of connections):在每一层中,由于滤波器的尺寸限制,输入和输出之间的连接是稀疏的,每个输出值只取决于输入在局部的一小部分值。

  池化过程则在卷积后很好地聚合了特征,通过降维来减少运算量。

  由于 CNN 参数数量较小,所需的训练样本就相对较少,因此在一定程度上不容易发生过拟合现象。并且 CNN 比较擅长捕捉区域位置偏移。即进行物体检测时,不太受物体在图片中位置的影响,增加检测的准确性和系统的健壮性。

标签:滤波器,吴恩达,卷积,检测,神经网络,池化,图片
From: https://www.cnblogs.com/forever-fate/p/17160014.html

相关文章