吴恩达Deep Learning学习笔记——第四课 卷积神经网络

目录链接:吴恩达Deep Learning学习笔记目录

 1.卷积神经网络
 2.CNN实例探究
 3.目标检测
 4.人脸识别和神经风格转换

1. 卷积神经网络

  1.1 边缘检测

  在计算机视觉中,图片的识别过程是先检测到图片中的边缘,再检测到图片中的一部分,最后检测到整个图像。如下图,对于边缘检测,计算机检测一张图片时,可能首先第一步要做的就是检测图片中的垂直边缘(如栏杆、人的轮廓线)。可能第二步要做的是检测水平边缘。

  那么如何进行边缘检测呢?例如下图中垂直边缘的检测,一张单通道的6x6的图片矩阵表示,经过3x3的卷积核卷积后,输出4x4的矩阵。
  卷积计算过程(图片来源):

  为什么通过卷积计算后,计算机能够检测到图像的边缘呢?下图是比较直观的描述,可以看出,原图片为左边亮、右边暗,卷积核也是左边亮、右边暗(反过来呢?),卷积后的结果就是中间亮、两边暗(卷积核或原图反过来就中间暗)。
  下图中,第一种情况,即由亮到暗的过渡,边缘检测为亮;第二种情况,由暗到亮过渡,边缘检测为暗。如果不在意这个过渡变化,那么可以在卷积后取绝对值。
  水平边缘检测和垂直边缘检测:

  1.2 Padding

  如下图中的卷积操作,(n,n)的图片经过(f,f)的卷积核后,得到(n-f+1,n-f+1)的输出。这样进行卷积存在两个问题,①每经过一次卷积,图片都在缩小;②在边缘上的像素点卷积时只被利用一次或几次,而在中间的像素点被重复利用很多次,这就导致边缘的很多信息被丢失。Padding即用来解决这个问题,即在图片矩阵外围再补一层亮度值0(RGB图中为0-255),Padding后再卷积得到的输出为(n+2p-f+1,n+2p-f+1),如此便可以避免图片缩小问题,弱化边缘信息丢失问题。

  一般,是否进行Padding,Padding多少,取决于你希望图片大小不变还是缩小。在计算机视觉中很少有f为偶数的卷积核,因为①偶数卷积核会导致输出大小不变图片时,Padding会不对称填充;②奇数卷积核会有一个中心点便于定位卷积核的位置。

  1.3 卷积步长

  假设输入图片为(n,n),卷积核(f,f),步长为s,Padding为p,那么输出图片大小为((n+2p-f)/ s +1,(n+2p-f)/ s +1)。如果(n+2p-f)/ s不是整数,则向下取整。

  1.4 三维卷积

  RGB图片有三个通道,分别为红绿蓝,描述一张图片的矩阵为(n,n,3),所以卷积核大小为(f,f,3),但输出还是一个二维矩阵。

  多个卷积核同时卷积,如同时提取垂直边缘和水平边缘,用两个不同三维的卷积核卷积后再堆叠:
  多核卷积后,输出结果的通道数等于卷积核的数量。

  1.5 单层卷积网络

  单层卷积网络计算过程:

  1.6 简单卷积网络示例

  简单的卷积网络如下,一般而言,卷积核的数量会随着网络深入而增加,图片缩小(无Padding时),实际上,典型的卷积网络应该包括卷积层、池化层和全连接层。

  1.7 池化层

  池化的直观理解,相当于卷积核,但不是执行权重求和,而是执行核选取区域最大值(最大池化)或平均值(平均池化)。其意义是,如果核提取到某个特征,则保留其最大值,如果这个区域没有这个特征,那么它的最大值也很小。池化操作会对每一通道数据进行池化,池化后通道数不变。池化层只有一组超参数,没有可学习参数。

  1.8 典型卷积神经网络

  1.9 为什么采用卷积网络

  相比于只用全连接层相比,卷积层的两个主要优势是参数共享和稀疏连接,这两个原因可以减少参数,防止过拟合。

  ①参数共享:相比全连接层,卷积层中可训练参数数量极少,如下图,假设输入32x32x3的图片,输出到28x28x6的数据,那么全连接层权重参数w数量将达3072 x 4704,近1400万个,如果输入图片为1000x1000x3,那么参数数量量级会更大;而采用卷积层,参数数量只与卷积核大小和数量相关,如下图中,w仅5 x 5 x 6 =150个参数,参数数量急剧减少。
  为什么可以参数共享?如果一个卷积核用于提取某类特征,如垂直边缘,那么这个卷积核可能适用于其他区域。这不仅适用于低层提取边缘,也适用于提取高阶特征,如脸上的眼睛。

  ②稀疏连接:例如,输出结果中一个像素点上的数值仅由卷积核对应的那块区域决定,其他区域都不会对其造成影响,而全连接层则是将输入图片所有数据用于计算。
  卷积神经网络还能够提取平移不变的特征,因为对于卷积网络,即使画像平移几个像素,这张图片依然具有非常相似的特征。

2. CNN实例探究

  2.1 经典网络

  (1)LeNet - 5
  LeNet - 5可以识别图片中的手写数字(适用于灰阶图像,32 * 32 * 1),LeNet - 5没有Padding,池化采用的是平均池化。随网络深度增加,图像缩小,通道数增加。论文中使用的激活函数为sigmoid和tanh。一共约6万个参数。

  (2)AlexNet **
  实际上,AlexNet (一共约6000万个参数)与LeNet - 5有很多相似之处,但AlexNet采用了含有很多隐藏单元的基础模块,并在规模很大的数据集上训练,这使得其表现极为出色;另一个让其表现出色的原因是采用了relu激活函数。
  ①这篇论文中采用了非常复杂的方法在两个GPU上进行训练(因为那时候GPU还不行),方法大致是将一个卷积层中的卷积核分成两部分在两个GPU上分别运行,同时还专门有一个方法用于两个GPU交流。
  ②“局部响应归一化层”:将一个像素位置上所有通道上的值进行归一化,即LRN层,这么做的原因是我们可能不需要那么高的激活值,但后来研究者发现LRN层起到的作用不大。
  
(2)VGG-16 **

  2.2 残差网络(Residual Networks)

  非常深的网络是很难训练的,因为存在梯度消失和梯度爆炸问题。残差网络,通过“远跳连接”将前面的信息直接传给后面的layer,而不经过中间的layer。

    理论上随着网络层数的增加,训练误差应该是单调递减的,但实际上当网络层数到了一定深度,训练误差开始增加,这可能是由于梯度消失和梯度爆炸问题带来的。但通过残差网络,训练误差可以一直单调递减。

(1)残差网络为什么有效?
  当一个网络越深时,它在训练集上的效率会有所降低,但在残差网络上并不完全如此。在残差块中,a[l]通过远跳连接直接与l+2层Z加和后输入到激活函数,若网络中添加了正则项,Z[l+2]的计算中,权重W可能被压缩得很小,如果出现梯度消失问题,那么Z[l+2]项被忽略;又激活函数为ReLu,故该过程相当于计算了a[l]=a[l+2]得恒等式。a[l]和a[l+2]维度不同问题,添加一个权重矩阵来将a[l]维度转化与a[l+2]一致,但实际上ReNet采用了一系列维度相同的卷积。
详细解释参见详解残差网络
(2)网络中的网络和1x1卷积
  对于一张单通道的图片来说,用一个1x1的卷积核去卷积,其意义不大,但对于网络中,通道数量很多的数据,1x1卷积核可以实现降维或升维的作用(通道坐标上的维度)。

  2.3 Inception network motivation

  构建卷积层是,我们要决定卷积核的大小(1x3、3x3或5x5?)、要不要添加池化层,Inception网络可以自己学习决定,虽然模型会变得比较复杂,但其表现却非常好。如下图,①1x1 filter用于通道降维(或升维);②3x3 filter用于卷积;③5x5 filter也用于卷积;④MAX-POOL用于最大池化。这些filter过程都需要维持输出图片大小一致(通过Padding和stride控制)。


(1)如何计算loss
  如下图,在计算loss的过程中,存在一个问题,28x28x192的输入,那么卷积核的大小为5x5x192,一共32个卷积核,那么需要执行的乘法操作将达到1.2亿次,就算是现在的计算机也比较花费时间,而这仅仅是一层卷积。
  另一种架构如下图所示,输入输出大小与上图相同,但中间采用了1x1x192的filter将输入维度降低到28x28x16大小,再经过5x5x16卷积核卷积。其乘法计算量减少至1240万。

(2)Inception network
  Inception模块,两个绿色层中间各个连接,在训练时,模型会选择启用哪一个连接结果更优。
  完整Inception网络如下,它在隐藏层也伸出了一些分支,通过隐藏层特征直接连接到全连接层用于预测。这确保了即使隐藏层参与了特征计算,但同时也能做预测,在一定程度上能防止过拟合的发生。

  2.4 迁移学习

image.png

  如上图所示,①当你的数据集较小时,可以采用其他人的网络核权重参数,替换输出层,训练时仅训练输出层参数;②当数据集较大时,则选择训练后几层网络参数;③当你的数据集足够大时,可以将所有参数都训练。

3. 目标检测

  3.1 目标定位

  在目标检测中,一张图片的分类,输出不仅仅是一个标签(归属于什么),而是多个标签,如同时输入这张图片含有行人、汽车、摩托、背景等;此外对于检测到的目标如行人,不仅包含行人标签,还包含这个行人的位置、大小。如下图,图片左上角坐标为(0,0),右下角坐标为(1,1),检测到的目标坐标为其中心点(bx,by),大小为(bh,bw)。故目标检测中,输出的结果为多个标签,每个标签含目标所属类别、坐标、大小。

  标签定义和loss函数如下,假设目标检测仅含下图中4类,那么,定义标签为长度为8的向量,y1=Pc代表图片中是否含目标(除背景之外),接着四个值为目标大小和坐标,c1、c2、c3分别代表目标所属归类。一张图片的loss,当检测到目标时(y1=Pc=1)由向量中各对应值来求,否则只采用y1=Pc来求loss,其他值忽略(只有背景的图片,标签向量中只含Pc,其他值为?,这并不影响模型训练和预测)。在输出层,可以不是都采用均方误差来输出,Pc可采用逻辑回归输出,目标大小和坐标采用平方误差,类别采用softmax。

  3.2 特征点检测

  通过目标定位方法可以输出目标大小、坐标。更概括的说法是,神经网络可以通过输出图片上的特征点(x,y)坐标,来实现对目标特征的识别。例如,需要通过特征点来识别一张人脸,在训练集中,X为图片数据,标签数据Y包含[分类,人脸各个部分轮廓的特征点],如下图中人脸检测,输出64对坐标点、一个分类。需要注意的是,所有图片的坐标点顺序一致,如左眼角都是(x1,y1)。.

  3.3 目标检测

(1)滑动窗口法
  要实现图片中汽车目标检测,①首先要构建一个标签训练集,X表示适当剪切的汽车图片样本(含有汽车则图片基本被汽车占满),Y=[1 = 汽车,0 != 汽车];②将这个训练集用于训练卷积网络;③通过滑动窗口的方法,采用已训练好的网络,可以实现目标检测。

  滑动窗口法:①设置滑动窗口大小,将窗口内的图片数据输入到卷积网络用于预测,然后滑动窗口,再预测,重复,窗口自左向右,自上向下滑动,直到扫描完整张图片;②改变窗口大小,重复①过程,因此,无论汽车在图片哪一个位置,总会有一个窗口检测到。显然,滑动窗口法会增加计算量,因为每滑动一次窗口,都要进行预测,如果增加滑动的步长,那么,会减少出入卷积网络的窗口个数,这能够减少计算量,但会影响性能。滑动步长和窗口大小要足够小,否则无法准确定位图中的目标。

(2)滑动窗口的卷积应用实现
  如果采用上述的方法来实现窗口滑动,那么效率很低,如果在卷积层上应用这个算法,那么效率将大大提升。
  (2.1)全连接层转化为卷积层
  如下图第一个全连接层,一个样本输出的是一个长度为400的向量。将其转化为卷积层,则采用5x5x400的卷积核,卷积后得到1x1x400的输出,最终输出不再是一个softmax向量,而是1x1x4的输出。

  (2.2)卷积层实现滑动窗口
  实际上将滑动窗口中数据传入卷积网络,很多像素点对应的卷积计算都是重复在进行,所以没必要一个一个窗口的输入,而是将整张图片输入,最后输出各个窗口组成的卷积层数据。如下图中,绿色对应绿色部分。
  所以,在卷积网络中应用窗口滑动法,将一次获得所有窗口预测值。

  3.4 YOLO算法

(1)Bounding box
  在卷积网络中实现窗口滑动,能够提升效率,但还存在一个问题:不能输出最精准的边界框。在YOLO算法中,将图片划分为nxn份,如下图中3x3,更精细一点还可以是19x19等等。为每一部分都设置标签向量(含类别、坐标、大小等),最后输出结果大小为3x3x8(8即每个标签向量的长度)。这个算法将会使得两个目标的中心在同一个格子的概率降低。同时,能输出边界边框,可以具有任意高宽比和更精确的坐标。

  坐标、大小参数(注意:中心坐标一定会坐落在划分的格子内,但长宽可能会比格子大)

(2)交并比函数
  交并比函数用于评价预测边框是否定位准确。

(3)非极大值抑制
  前述的算法可能会对同一个目标做出多次检测,非极大值抑制可以保证算法对每个目标只检测一次。如下图中,每一个目标对象都会有很多个边框,每个边框会给出对应的Pc概率值,非最大值抑制算法会去掉除了概率最大的其他边框。
  如下图,首先后抛弃所有概率低于0.6的边框;②对于剩下的边框,进行循环筛选:i、筛选出概率最大的框,然后计算其他框与这框的IoU值,将IoU大于0.5的框都去除;ii、筛选剩余框中第二大,重复第i步。通过这样筛选,如果是同一个目标,那么这些框的IoU值都会很大,而不同目标,如果距离足够远,那么IoU为0,该框会被保留,以此来定位图片中多个目标。

(4)Anchor box
  如前所述算法都只是一个框检测一个目标,如果需要一个框检测多个目标,可以使用Anchor box。如下图,人和车的中心坐标都坐落在同一个格子里,那么对于那个格子的输出Y将无法检测出两个结果,必须输出人或车的其中一个。而Anchor box的思路是预先定义两个形状不同的anchor box,然后定义的输出向量包含两个概率、坐标、类别信息,并将其与anchor box分别关联起来。
  当只有一个目标时,标签定义如下:

(5)YOLO算法
  ①训练集:检测类别(行人、车、摩托),anchor box(竹竿和胖墩),那么标签向量为3x3x2x8。不同各自y定义如下:
  ②预测:对于含目标和不含目标的格子,卷积网络的输出如下:
  ③非极大值抑制:i、如下图,由于会检测到两个目标,所以将会获得两个bounding boxes;ii、抛弃概率极低的边框;iii、对于每个类别,执行非极大值抑制算法,留下概率最大的边框。

4. 人脸识别和神经风格转换

  4.1 one shot学习

  人脸识别最大的挑战是解决一次学习问题,也就是需要仅仅通过一张照片或一个样本就能去识别这个人,而在传统的deep learning的认知中,只有一个样本时,表现并不好。假设用下图的方法去做人脸识别,①如果仅有4个员工,用4个员工去训练一个卷积网络,显然样本数太小,是不合理;②如果又来一个新员工,那么又将要重新训练这个网络。

  可以通过学习"similarity"函数来解决一次学习问题。这个函数用于判断两张照片的差异性,并设置一个阈值来判断两张照片是否是同一个人,如下数据库中有4个人的照片,当输入一张照片后,会与这四张照片都计算出相似度函数值。期望同一个人输出的d值小,而不是同一个人的d值很大。如果有新员工,只需要将照片添加至数据库就可以,而不用再次训练。

  4.2 Siamese network

  前述的卷积网络,最后将提取到的特征输入到softmax等函数来输出结果。在Siamese network中,将最后提取特征这一层(encoding of sample)将不会输入给softmax层,再将另一张照片输入到同一网络中(结构和参数都相同)提取特征,将两张照片的特征输入到“similarity”函数来求两张照片的相似度。

  而我们需要做的是要学习这个网络的参数,使得网络在提取特征时,如果是同一个人的照片,那么提取到的特征相似度高,不是同一个人的照片提取到的特征相似度低。

  4.3 三元损失函数(Triplet loss)

  如下图,一共三张照片,A和P为同一个人,A和N为不同人,学习的目标是,我们希望,A和P之间的距离尽量小,而A和N之间的距离尽量大,那么就有:

  
  为避免两项距离同时出现0的情况,需要加一项α作为两项间的margin,得到公式:

loss 函数
  如果在数据集中随机选择图片来进行训练,那么很大程度上,d(A,N)都会大于d(A,P),那么模型将学习不到什么东西,所以,用于训练的数据,应该是d(A,N)和d(A,P)比较接近的数据。

  4.4 人脸验证和二分类问题

  4.5 神经风格转换

  例子:采用Style的风格来绘制Content:


(1)深度卷积网络到底在学习什么?
  论文Visualizing and Understanding Convolutional Networks告诉我们CNN每一层到底学习到了什么。论文通过将每一层的输出反池化、反卷积的到与原图片大小的图片,以此来观察每一层所学习到的东西。池化是不可逆的过程,论文中采用记录最大值的位置,再将池化后的数值放回原来位置,其余位置填充0来实现反池化过程。例如第一层,我们选取9个卷积核的输出,将每个卷积核的输出反卷积后,选取激活值top9(我的理解:n个样本通过这个卷积核输出后,选择激活值最大的9个)的绘制成图。可以看出,随着layer的增加,所学习到的特征更为复杂。

(2)代价函数
  为了实现神经风格迁移,我们需要定义一个对于生成图片G的代价函数,并来优化它。公式含两项,分别代表新生成的图片和原图片、风格图片的相似度。对于新图片会先随机生成,然后经过优化代价函数来生成图片。

  (2.1)Content代价函数
  ①我们需要通过hidden layer来计算content cost,如果层数太浅,那么它可能会使得像素上非常接近content图片,如果太深,则会判断图片中有什么(狗)来生成图片,并确保生成图片里有这个东西(狗),所以一般这个hidden layer既不会太浅也不会太深。②使用一个已经预训练的卷积网络(如VGG)。③将al和al作为图片在l层的激活值。④如果al和al相似,那么图片内容相似。

  (2.2)Style代价函数
  什么是一张图片的“style”?如果采用某一层的激活值来衡量“style”,那么这个style的定义就是各个通道之间对应位置上的点的相关系数。这个相关系数描述了,如果通道i中的内容出现在该位置,那么通道j中的内容出现在该位置的概率。例如下图,①通道对应①部分垂直线特征,②对应②部分橘色图案,相关系数描述了在对应位置①②同时出现的概率。

  ①k和k`表示同一层不同通道,i,j代表一个通道中不同位置坐标。计算两个通道的相关系数如下,将会得到一个相关系数矩阵,大小为通道数 x 通道数:
  ②代价函数:求和符合内为两个矩阵的Frobenius范数。此外,在每一层上都使用风格代价函数,将会使得效果更好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容