吴恩达《深度学习-卷积神经网络》1--卷积神经网络

1. Computer Vision

计算机视觉包括:

  --图片分类(图片识别)Image classification

  --目标检测 object detection

  --神经风格迁移 neural style transfer,如合成图片创造新的艺术风格

吴恩达《深度学习-卷积神经网络》1--卷积神经网络

计算机视觉面临的一个挑战是输入数据较大,这就带来两个问题,一是神经网络复杂,参数较多,容易发生过拟合,二是计算量大所需内存也多,解决方法就是卷积神经网络。

2. Edge Detection Example边缘检测示例

本节以边缘检测为例说明卷积是怎么回事。
图片的边缘检测可以通过与相应过滤器(有的文章也称之为核)进行卷积来实现。
以垂直边缘检测为例,原始图片尺寸为6x6,过滤器filter尺寸为3x3,卷积后的图片尺寸为4x4,得到结果如****意这里的*表示卷积运算,跟乘法无关,python中,卷积用conv_forward()表示;tensorflow中,卷积用tf.nn.conv2d()表示;keras中,卷积用Conv2D()表示。

吴恩达《深度学习-卷积神经网络》1--卷积神经网络

为什么卷积可以检测边缘?

举一个简单的例子,下图最左是原图,可以看出中间有一个明显的竖线,经过卷积得到的图像中间就表示原图的边缘。这里看边缘有些粗,是因为我们的图像太小了,应用到正常图像会发现其检测的边缘相当不错。

吴恩达《深度学习-卷积神经网络》1--卷积神经网络
3. More Edge Detection
本节讲正边和负边的区别,也就是由亮到暗和由暗到亮的区别,以及其他类型的边缘检测。

1)正边和负边

下图展示了两种方式的区别,第一个称为正边,表示图片有亮到暗,第二个称为负边,表示图片由暗到亮。实际应用中,这两种渐变方式并不影响边缘检测结果,如果不在意这种区别的话,可以对输出图片取绝对值操作。

吴恩达《深度学习-卷积神经网络》1--卷积神经网络

水平边缘检测的过滤器算子如下所示:

吴恩达《深度学习-卷积神经网络》1--卷积神经网络

除了上面提到的这种简单的Vertical、Horizontal滤波器之外,还有其它常用的filters,例如Sobel filter和Scharr filter。这两种滤波器的特点是增加图片中心区域的权重
吴恩达《深度学习-卷积神经网络》1--卷积神经网络
以上是研究者设计好的过滤器算子,在深度学习时代,当检测复杂图像的边缘时,还可以通过反向传播来学习过滤器算子,学习获得的过滤器可能优于任何一个手写的过滤器,因为相对于水平垂直边缘,它可以检测任意倾斜角度的边缘。
吴恩达《深度学习-卷积神经网络》1--卷积神经网络
4. Padding填充
按照上面讲的图片卷积,如果原始图片尺寸为n x n,filter尺寸为f x f,则卷积后的图片尺寸为(n-f+1) x (n-f+1),注意f一般为奇数。这样会带来两个问题:
  · 每次卷积运算后,输出图片尺寸都会缩小
  · 原始图片边缘信息对输出贡献得少,输出图片丢失边缘信息
为了解决这两个问题,可以在卷积之前对图像进行padding(扩充),扩展区域的像素值用0填充,设p为向外拓展的像素数,那么为了使卷积之后的图像和原图像大小相等,那么:p=(f-1)/2

没有padding操作,即p=0,称之为“Valid convolutions”;有padding操作,称之为“Same convolutions”。

5. Strided Convolutions卷积步长
Stride表示filter在原图片中水平方向和垂直方向每次的步进长度。用s表示stride长度,p表示padding长度,如果原始图片尺寸为n x n,filter尺寸为f x f,则卷积后的图片尺寸为:
                                           [(n+2*p-f)/s +1]×[(n+2*p-f)/s +1]
如果商不是整数,那么向下取整。

值得一提的是,目前为止介绍的卷积实在数学中称为互相关(corss-correlation),数学意义上的卷积需要对过滤器进行双重镜像操作,即按右上左下的斜对角线翻转,这样做是为了满足结合律A*(B*C)=(A*B)*C,这对信号处理来说很重要,但对深度学习来说不重要,所以一般忽略双重镜像操作,即简化的步骤又不影响结果。所以深度学习中的卷积通常指的是无双重镜像的卷积。

6. Convolutions Over Volume立体卷积
本节讲述在三维立体上的卷积

三维数据在二维数据上增加了通道,令nc为图片通道数目,对应的过滤器其通道数目必须和输入图像的通道数目一样,如输入图片是6x6x3,分别表示图片的高度(height)、宽度(weight)和通道(#channel),过滤器通道也必须为3,可以是3x3x3也可以是5x5x3,即尺寸可以按需定制,而通道必须一致。

卷积计算过程和二维类似,即用过滤器覆盖原图,对应元素相乘最后相加,然后按步长在图像上移动过滤器,过滤器中不同通道其设计可以一样也可以不一样,例如想检测红色通道的竖线,就设计通道R检测垂直边缘,而G和B通道的过滤器都设置为0.

为了进行多个卷积运算,实现更多边缘检测,可以增加更多的滤波器组。例如设置第一个滤波器组实现垂直边缘检测,第二个滤波器组实现水平边缘检测。这样,不同滤波器组卷积得到不同的输出,个数由滤波器组决定。

吴恩达《深度学习-卷积神经网络》1--卷积神经网络
若输入图片的尺寸为n x n x nc,filter尺寸为f x f x nc,则卷积后的图片尺寸为(n-f+1) x (n-f+1) x nc。其中,nc为图片通道数目,nc为滤波器组个数。也可以增加padding或者改变步长s,计算方式如上。


7. One Layer of a Convolutional Network单层卷积网络
卷积神经网络的单层结构如下所示:(两个过滤器)
吴恩达《深度学习-卷积神经网络》1--卷积神经网络
吴恩达《深度学习-卷积神经网络》1--卷积神经网络
权重W就是过滤器,例中过滤器有27个元素,那么W中就有27个数值待更新,在加上b,参数就是28个,若一层有10个过滤器那么该层总参数就是280个,不论输入图像尺寸为多少,参数都是280个,即参数数目只和过滤器有关,这是CNN特点之一,参数较少有效防止过拟合。
吴恩达《深度学习-卷积神经网络》1--卷积神经网络
m为样本数。


8. Simple Convolutional Network Example简单卷积神经网络

本节通过一个例子介绍简单卷积神经网络的实现流程:

吴恩达《深度学习-卷积神经网络》1--卷积神经网络

该CNN模型各层结构如上图所示。卷积直至第三个隐藏层,即a[3]其维度是7 x 7 x 40,最后一步是将卷积获得的所有特征展开成一个向量,维度为1960 x 1,将其作为最后一层的输入。然后填充到logistic(二分类)或softmax(多分类)。最后得到预测输出y^


CNN中的隐藏层有三种类型:

  Convolution (CONV) 卷积层

  Pooling (POOL)  池化层

  Fully Connected (FC) 全连接层


9. Pooling Layers

作用:减小模型大小,提高计算速度,并提高提取特征的鲁棒性。所以在pooling中一般不用padding填充。

1)max pooling
pooling跟卷积类似,但是要简单的多,max pooling就是用一个取最大值得滤波器过滤图像。
吴恩达《深度学习-卷积神经网络》1--卷积神经网络
最大化的作用就是如果在过滤器中提取到某个特征,那么保留它的最大值,如果没有提取到某个特征值,那么其最大值也是很小的。
如果是多个通道,那么就每个通道单独进行max pooling操作
max pooling的。


2) average pooling

average pooling就是用一个取均值得滤波器过滤图像,其应用不如max pooling广。

吴恩达《深度学习-卷积神经网络》1--卷积神经网络
值得注意的是:池化过程中的超参数有滤波器尺寸f和滤波器步进长度s,没有需要学习的参数,也就是反向传播的时候没有参数需要更新。它是一个静态属性。
最常用的池化过滤器超参有两组:f=2 s=2和f=3 s=2


10. CNN Example

吴恩达《深度学习-卷积神经网络》1--卷积神经网络

图中,CON层后面紧接一个POOL层,共同构成第一层(因为POOL没有需要学习的参数),CONV2和POOL2构成第二层。
特别注意的是FC3和FC4为全连接层FC,它跟标准的神经网络结构一致。最后的输出层(softmax)由10个神经元构成。

关于超参选择的建议,尽量不要自己设置超参数,而是参考别人文献里面的超参数值。

CNN常用的架构模式是一个或多个CONV后面跟一个POOL,然后继续一个或多个CONV后面跟一个POOL……最后跟几个全连接层,softmax输出。

网络中参数如下图:

吴恩达《深度学习-卷积神经网络》1--卷积神经网络

可以看出大部分参数都在全连接层,卷积层参数很少,POOL层没有参数,**值的尺寸是逐渐降低的,事实证明如果降低速度过快会影响模型性能。


11. Why Convolutions

相对于标准神经网络来说,处理图像的话,卷积网络的参数大大减少,使得我们可以用更小的训练集来训练模型,同时也有效的防止过拟合

为什么要用卷积可以减少参数?
原因有二:参数共享和稀疏连接。
    参数共享(parameter sharing):一个特征检测器(例如垂直边缘检测)对图片某块区域有用,同时也可能对图片其它区域有用,即不需要添加特征检测器,就可以检测整幅图像的某个特征或者多个相似特征。
    稀疏连接(sparsity of connection):因为滤波器算子尺寸限制,每个输出仅依赖于滤波器覆盖的那几个特征。

另外CNN比较擅长捕捉平移不变特征。也就是说CNN进行物体检测时,不太受物体所处图片位置的影响。
吴恩达《深度学习-卷积神经网络》1--卷积神经网络