1.computer vision

cv是深度学习的一个重要方向,cv一般而言包括:图像识别,目标检测,神经风格转换

吴恩达深度学习 course4 卷积神经网络

传统的神经网络所存在的问题:图片的输入维度比较大,具体如下图所示,这就造成了权重w的维度比较大,那么他所占用的内存也会比较大,计算w的计算量也会很大

所以我们会引入卷积神经网络

吴恩达深度学习 course4 卷积神经网络

2.Edge detection example

神经网络由浅层到深层可以检测图片的边缘特征,局部特征,整体特征

吴恩达深度学习 course4 卷积神经网络

 

边缘特征以垂直边缘检测为例.如下图所示,将一个6X6的灰度图片卷积一个filter,得到一个新的图片即是对该图进行了垂直边缘检测,其中,表示卷积操作。python中,卷积用conv_forward()表示;tensorflow中,卷积用tf.nn.conv2d()表示;keras中,卷积用Conv2D()表示。

吴恩达深度学习 course4 卷积神经网络

3.More edge detection

图片边缘检测有两种渐变方式,一种由明边暗,一种由暗变明,具体如下所示

实际应用中,对输出图片取绝对值,则渐变方式不同也不会影响什么

吴恩达深度学习 course4 卷积神经网络

水平边缘检测例子:

吴恩达深度学习 course4 卷积神经网络

除了上图的filter,其他常见的filter还有Sobel filter和Scharr filter,如下:

吴恩达深度学习 course4 卷积神经网络

实际应用中,我们会检测边缘的更多特征,而不只是垂直特征与水平特征,filter的参数是通过训练得到的,类似于标准神经网络中的权重W一样由梯度下降算法反复迭代求得,确定边缘特征后,CNN就可以对所有的边缘特征进行一个检测

4.Padding

按照之前所讲的,如果一张nxn的图片,filter为fxf,那么卷积后所得到的图片大小为 n-f+1,卷积后会出现两个问题:

图片变得更小;图片自身的边缘信息丢失

解决这两个问题,我们可以对图像就行一个填充,如下: 填充的部分像素都为0

吴恩达深度学习 course4 卷积神经网络

假设填充了p个宽度,那么填充之后进行卷积所得到的图片为  (n+2p-f)+1 X (n+2p-f)+1

 

valid convolutions:不对图片进行填充

same convolutions:即是 令(n+2p-f)+1=n  ==> p=(f-1)/2,使得填充后进行卷积所得到的图片与原图片的大小相同,f通常为奇数(odd),原因也许可能是:

使得p为整数,填充为对称的填充

为奇数的时候filter有一个中心位置   

 吴恩达深度学习 course4 卷积神经网络

5.Strided convolutions

步长即是只每一次卷积的时候,步进的长度:如下

吴恩达深度学习 course4 卷积神经网络

步长为s时,卷积后所得到的图片大小为 (n+2p-f)/s +1  X (n+2p-f)/s +1,如果结果不为整数,则向下取整,会把卷积时超出图片的部分给舍去,如上图中的画X部分

我们所说的卷积实际上计算的是一个相关系数,与数学意义上的卷积并不相同,数学意义上的卷积会对filter进行一个旋转,而我们的操作过程并不会这样,在深度学习中,对filter旋转这并不重要

吴恩达深度学习 course4 卷积神经网络

6.Convolutions over volumes

对于有R,G,B三个颜色通道的图片来说,对其进行一个卷积时,filter中的最后一个参数 应该与颜色通道的个数保持一致

3通道图片的卷积运算与单通道图片的卷积运算基本一致。过程是将每个单通道(R,G,B)与对应的filter进行卷积运算求和,然后再将3通道的和相加,得到输出图片的一个像素值。

不同通道的滤波算子可以不相同。例如R通道filter实现垂直边缘检测,G和B通道不进行边缘检测,全部置零,或者将R,G,B三通道filter全部设置为水平边缘检测。

吴恩达深度学习 course4 卷积神经网络

吴恩达深度学习 course4 卷积神经网络

 

上图指的是是只有一个filter的情况,为了进行多个卷积运算,实现更多边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。这样,不同滤波器组卷积得到不同的输出,个数由滤波器组决定。,则结果应该如下所示

吴恩达深度学习 course4 卷积神经网络

假设图片的颜色通道为nc,n x n x nc, 与f x f x nc,所得到的图片为(n -f +1) x (n -f +1) x n'c  n'c为过滤器个数

 7.One layer of a convolutional network

卷积神经网络的单层结构如下:

吴恩达深度学习 course4 卷积神经网络

上图中的参数一共有 (3x3x3+1)x2个,参数的数目与图片的大小无关,只与filter有关

总结一下CNN单层结构的所有标记符号,设层数为

  •  = filter size

  • = padding

  •  = stride

  •  = number of filters

吴恩达深度学习 course4 卷积神经网络

 

 8.A Simple Convolution network example

一个简单的CNN例子如下:

前几层都是在进行卷积操作,n[H]与n[W]逐渐减下,而n[c]逐渐增加,最后一层,将图片化为一个向量(7x7x40,1)的向量,与最后一层的输出层相连接

吴恩达深度学习 course4 卷积神经网络

CNN有三种类型的layers:

吴恩达深度学习 course4 卷积神经网络

9.Pooling layers

池化层是用来减小尺寸,提高运算速度,减少噪音,使模型更加健壮的

 

Pooling layers的做法比convolution layers简单许多,没有卷积运算,仅仅是在滤波器算子滑动区域内取最大值,即max pooling,这是最常用的做法。注意,超参数p很少在pooling layers中使用。

pooling layers只有filter的两个参数f和s,而且都是固定的,不需要经过训练得到的所以计算量很少

max pooling:即在filter的滑动范围取最大值,优势:忽略其他特征,只保留那个最大值的特征,降低模型的noise,使其比较健壮

吴恩达深度学习 course4 卷积神经网络

average pooling:即在filter的滑动区域进行一个求平均的操作

吴恩达深度学习 course4 卷积神经网络

max pooling用的比average pooling 用的多

10.Convolutional nerual network example

CNN例子:

以一个数字识别为例   第一层由一个conv 和一个pool组成 ,第二层也是 ,第三层和第四层是一个全连接,最后输出层的激活函数是一个softmax activation

吴恩达深度学习 course4 卷积神经网络

每一层的参数情况如下:

吴恩达深度学习 course4 卷积神经网络

11.why convolutions

为什么使用CNN

参数共享:一个特征检测器(例如:垂直特征检测器)适用于一个图片的一部分,也可能会适应图片的另外一个部分

稀疏连接:每一层的输出只与输入部分区域内有关

 

吴恩达深度学习 course4 卷积神经网络

除此之外,CNN的参数比较少,这就要求所需要的样本可以少一些,从而一定程度上不易发生过拟合现象

而且,CNN擅长捕捉区域的位置偏移,不太易受物体的位置影响,增强了网络的准确性和系统的健壮性