文章目录
《Convolutional Neural Networks》是Andrw Ng深度学习专项课程中的第四门课。这门课主要介绍卷积神经网络(CNN)的基本概念、模型和具体应用。该门课共有4周课时,所以分成4次笔记来总结,这是第一节笔记。
一、计算机视觉(Computer Vision)
计算机视觉(Computer Vision)的高速发展标志着新型应用产生的可能,例如自动驾驶、人脸识别、创造新的艺术风格。人们对于计算机视觉的研究也催生了很多机算机视觉与其他领域的交叉成果。一般的计算机视觉问题包括以下几类:
- 图片分类(Image Classification)
- 目标检测(Object detection)
- 神经风格转换(Neural Style Transfer)
下面展示了一个神经风格转换(Neural Style Transfer)的例子:
使用传统神经网络处理机器视觉的一个主要问题是输入层维度很大。 例如一张64x64x3的图片,神经网络输入层的维度为12288。如果图片尺寸较大,例如一张1000x1000x3的图片,神经网络输入层的维度将达到3百万,使得网络权重W非常庞大。这样会造成两个后果:①神经网络结构复杂,数据量相对不够,容易出现过拟合;②所需内存和计算量较大。
因此,一般的神经网络很难处理蕴含着大量数据的图像。解决这一问题的方法就是使用卷积神经网络(CNN)。
二、边缘检测(Edge Detection)
我们之前提到过,神经网络由浅层到深层,分别可以检测出图片的边缘特征、局部特征(例如眼睛、鼻子等),到最后面的一层就可以根据前面检测的特征来识别整体面部轮廓。 这些工作都是依托卷积神经网络来实现的。
卷积运算(Convolutional Operation) 是卷积神经网络最基本的组成部分。我们以边缘检测为例,来解释卷积是怎样运算的。
最常检测的图片边缘有两类:一是垂直边缘(vertical edges),二是水平边缘(horizontal edges)。
1. 边缘检测例子(Edge Detection Example)
图片的边缘检测可以通过与相应滤波器(filter)进行卷积来实现。 以垂直边缘检测为例,原始图片尺寸为6x6,滤波器filter尺寸为3x3,卷积后的图片尺寸为4x4,得到结果如下:
上图只显示了卷积后的第一个值和最后一个值。可以看到,卷积运算的求解过程是从左到右,由上到下,每次在原始图片矩阵中取与滤波器同等大小的一部分,每一部分中的值与滤波器中的值对应相乘后求和,将结果组成一个矩阵。
顺便提一下,∗
表示卷积操作。在计算机中这个符号表示一般的乘法,而在不同的深度学习框架中,卷积操作的 API 定义可能不同:在python中,卷积用conv_forward()
表示;tensorflow中,卷积用tf.nn.conv2d()
表示;keras中,卷积用Conv2D()
表示。
Vertical edge detection能够检测图片的垂直方向边缘。下图对应一个垂直边缘检测的例子:
如果将最右边的矩阵当作图像,那么中间一段亮一些的区域对应最左边的图像中间的垂直边缘。
2. 更多边缘检测的例子(More Edge Detection)
图片边缘有两种渐变方式,一种是由明变暗,另一种是由暗变明。以垂直边缘检测为例,下图展示了两种方式的区别。实际应用中,这两种渐变方式并不影响边缘检测结果,可以对输出图片取绝对值操作,得到同样的结果。
垂直边缘检测和水平边缘检测的滤波器算子如下所示:
下图展示一个水平边缘检测的例子:
其他常用的滤波器还有 Sobel 滤波器和 Scharr 滤波器。它们增加了中间行的权重,以提高结果的稳健性。
上图展示的是垂直边缘检测算子,水平边缘检测算子只需将上图顺时针翻转90度即可。
在深度学习中,如果我们想检测图片的各种边缘特征,而不仅限于垂直边缘和水平边缘,那么filter的数值一般需要通过模型训练得到,类似于标准神经网络中的权重W一样由梯度下降算法反复迭代求得。CNN的主要目的就是计算出这些filter的数值。 确定得到了这些filter后,CNN浅层网络也就实现了对图片所有边缘特征的检测。
三、padding 与 Strided Convolutions
1. padding
假设输入图片的大小为 n × n n×n n×n,而滤波器的大小为 f × f f×f f×f,则卷积后的输出图片大小为 ( n − f + 1 ) × ( n − f + 1 ) (n−f+1)×(n−f+1) (n−f+1)×(n−f+1)。
这样就会有两个问题:①每次卷积运算后,输出图片的尺寸缩小;②原始图片的角落、边缘区像素点在输出中采用较少,输出图片丢失边缘位置的很多信息。
为了解决这些问题,可以在进行卷积操作前,对原始图片在边界上进行填充(Padding),以增加矩阵的大小。通常将 0 作为填充值。
经过padding之后,原始图片尺寸为 ( n + 2 p ) × ( n + 2 p ) (n+2p) × (n+2p) (n+2p)×(n+2p),filter尺寸为 f × f f × f f×f,则卷积后的图片尺寸为 ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) (n+2p-f+1) × (n+2p-f+1) (n+2p−f