第四门课-卷积神经网络 第四周(重点总结)


注:图片来自网络

第四周 特殊应用:人脸识别和神经风格转换(Special applications: Face recognition &Neural style transfer)

4.1 什么是人脸识别?(What is face recognition?)

人脸验证(face verification): 如果你有一张输入图片,以及某人的ID或者是名字,这个系统要做的是,验证输入图片是否是这个人。有时候也被称作1对1问题,只需要弄明白这个人是否和他声称的身份相符。
人脸识别(face recognition): 假设你有一个验证系统,准确率是99%。如果你把这个验证系统应用在100个人身上,正确率可能需要远大于99%,才能得到很好的效果。1对多问题。

4.2 One-Shot学习(One-shot learning)

“一次学”(one-shot learning problem)问题: 需要通过单单一张图片或者单单一个人脸样例就能去识别这个人。而历史上,当深度学习只有一个训练样例时,它的表现并不好。
例如,假设你的数据库里有4张你们公司的员工照片,现在假设有个人(编号6所示)来到办公室,并且她想通过带有人脸识别系统的栅门,现在系统需要做的就是,仅仅通过一张已有的照片,来识别前面这个人确实是谁。相反,如果机器看到一个不在数据库里的人(编号7),机器应该能分辨出她不是数据库中四个人之一。
在这里插入图片描述
解决方案:
1. 有一种办法是,将人的照片放进卷积神经网络中,使用softmax单元来输出4种,或者说5种标签,分别对应这4个人,或者4个都不是,所以softmax里我们会有5种输出。但实际上这样效果并不好,因为如此小的训练集不足以去训练一个稳健的神经网络。而且,假如有新人加入你的团队,你现在将会有5个组员需要识别,所以输出就变成了6种,这时你要重新训练你的神经网络吗?这听起来实在不像一个好办法。
2. 学习Similarity函数
在这里插入图片描述
以两张图片作为输入,然后输出这两张图片的差异值。如果你放进同一个人的两张照片,你希望它能输出一个很小的值,如果放进两个长相差别很大的人的照片,它就输出一个很大的值。所以在识别过程中,如果这两张图片的差异值小于某个阈值τ,它是一个超参数,那么这时就能预测这两张图片是同一个人,如果差异值大于τ,就能预测这是不同的两个人。如果之后有新人加入了你的团队(编号5),你只需将他的照片加入你的数据库,系统依然能照常工作。

4.3 Siamese 网络(Siamese network)

如何训练你的神经网络学会这个函数d: 对于两个不同的输入,运行相同的卷积神经网络,然后比较它们,这一般叫做Siamese网络架构。
在这里插入图片描述
步骤:
1.输入图片x(1),然后通过一些列卷积,池化和全连接层,最终得到这样的特征向量(编号1),假设它有128个数字,命名为f( x(1) ),可以看作图像的编码
2.把第二张图片喂给有同样参数的同样的神经网络,然后得到一个不同的128维的向量(编号3),这个向量代表或者编码第二个图片,命名为f( x(2) )。
定义d: 编码之差的范数
在这里插入图片描述
在这里插入图片描述
如何训练这个Siamese神经网络:
这两个网络有相同的参数,实际要做的就是训练一个网络
你要做的就是学习参数,使得如果两个图片x(i)和x(j)是同一个人,那么你得到的两个编码的距离就小。相反,如果x(i)和x(j)是不同的人,那么它们之间的编码距离大一点。你要做的就是用反向传播来改变这些所有的参数,以确保满足这些条件.

4.4 Triplet 损失(Triplet 损失)

要想通过学习神经网络的参数来得到优质的人脸图片编码,方法之一就是定义三元组损失函数然后应用梯度下降。
三元组损失:Anchor 图片和Positive 图片(Positive 意味着是同一个人)的距离很接近,Anchor 图片与Negative 图片(Negative意味着是非同一个人)的距离很远。通常会同时看三张图片,我要把Anchor 图片、Positive 图片和Negative 图片简写成A、P、N
在这里插入图片描述
为了阻止网络出现每个图片的编码和其他图片一样的情况,我们需要修改这个目标
在这里插入图片描述
在这里插入图片描述
这里的a叫做间隔(margin),是另一个超参数,它拉大了AnchorPositive 图片对和Anchor 与Negative 图片对之间的差距,可以阻止网络输出无用的结果

三元组损失函数的定义:
基于三张图片A、P、N
在这里插入图片描述
代价函数J: 训练集中这些单个三元组损失的总和
在这里插入图片描述
训练集:
1.你需要确保有同一个人的多个图片,至少是你训练集里的一部分人,这样就有成对的Anchor和Positive图片了。
2.随机地选择A、P和N,遵守A和P是同一个人,而A和N是不同的人这一原则:约束条件很容易达到,网络并不能从中学到什么。
解决方法:你的A、P和N的选择使得d(A,P)很接近d(A,N),这样你的学习算法会竭尽全力使右边这个式子d(A,N)变大,或者使左边这个式子d(A,P)变小,并且选择这样的三元组还可以增加你的学习算法的计算效率

论文推荐 :
Florian Schroff, Dmitry Kalenichenko, James Philbin (2015). FaceNet: A Unified Embedding forFace Recognition and Clustering
3.用梯度下降最小化我们之前定义的代价函数J

4.5 面部验证与二分类(Face verification and binary classification)

如何将人脸识别当成一个二分类问题:
在这里插入图片描述
选取一对神经网络(如Siamese 网络),使其同时计算这些嵌入(如128维的嵌入),然后将其输入到逻辑回归单元,然后进行预测,如果是相同的人,那么输出是1,若是不同的人,输出是0。使用反向传播算法去训练神经网络。
在这里插入图片描述
其中,符号 i ,j 代表图片的编码,下标 k 代表选择这个向量中的第 k 个元素,
把向量中的128个元素当作特征,再他们放入逻辑回归中,最后的逻辑回归可以增加参数 w b ,在这128个单元上训练合适的权重,用来预测两张图片是否是一个人。
其他公式:
在这里插入图片描述
在这里插入图片描述
论文推荐:
Yaniv Taigman, Ming Yang, Marc’Aurelio Ranzato, Lior Wolf (2014). DeepFace:Closing the gap to human-level performance in face verification

预先计算的思想:
1.输入是一对图片,输出取决于你的输入是相似图片还是非相似图片。
2.Siamese网络:上面这个神经网络拥有的参数和下面神经网络的相同(编号3和4所示的网络),两组参数是绑定的,这样的系统效果很好。
3.如果1是一张新图片,2是在数据库中的图片,不需要每次都计算这些特征(编号6),当输入一张新图片时,你可以使用上方的卷积网络来计算编号5,然后预先计算好的编码6进行比较,然后输出预测值。

在这里插入图片描述
优点:节省大量时间

4.6 什么是神经风格转换?(What is neural style transfer?)

在这里插入图片描述
C:内容图像----S:风格图像----G:生成的图像

4.7 什么是深度卷积网络?(What are deep ConvNets learning?

将你的训练集经过神经网络,然后找出哪些图片最大限度地激活特定的单元
在这里插入图片描述
每一层九个隐藏单元,每个单元取九张图片:
从第一层的边缘,第二层的质地,到深层的复杂物体

论文推荐:
Zeiler M D, Fergus R.Visualizing and Understanding Convolutional Networks[J]. 2013, 8689:818-833.)《可视化理解卷积神经网络》

4.8 代价函数(Cost function)

要构建一个神经风格迁移系统,让我们为生成的图像定义一个代价函数,通过最小化代价函数,你可以生成你想要的任何图像
定义代价函数J: 用G来评判某个生成图像的好坏,我们将使用梯度下降法去最小化J(G),以便于生成这个图像
在这里插入图片描述
内容代价: 度量生成图片 G 的内容与内容图片 C 的内容的相似度
风格代价: 度量生成图片 G 的风格和图片 S 的风格的相似度
α、β为超参数
论文推荐:
Leon A. Gatys, Alexander S. Ecker, Matthias Bethge, (2015). A Neural Algorithm of Artistic Style (https://arxiv.org/abs/1508.06576)

运行算法:
1.随机初始化G(如3)
2.运用梯度下降法最小化代价函数J(G)(如4,5,6)
在这里插入图片描述

4.9 内容代价函数(Content cost function)

在这里插入图片描述
取第 l 层的隐含单元的激活值,按元素相减,内容图片的激活值与生成图片相比较,然后取平方,对J(G) 做梯度下降来找 G 的值。整个代价函数会激励这个算法来找到图像 G,使得隐含层的激活值相似。
其中,al][C],al][G]代表 CG 两个图片的 l 层的激活函数值。如果这两个激活值相似,那么就意味着两个图片的内容相似
l 层在网络中既不能选的太浅也不能选的太深,如果l是个很小的数,这个代价函数就会使你的生成图片像素上非常接近你的内容图片;如果l是很深的层,那么生成图片会有和内容图片相同的特定物体。
用一个预训练的卷积模型,可以是VGG网络或者其他的网络。

4.10 风格代价函数(Style cost function)

风格定义: l 层中各个通道之间激活项的相关系数
在这里插入图片描述
步骤:
1.选择了某一层 l(编号1)
在这里插入图片描述
相关系数这个概念关系数描述的就是测量不同的特征在图片中的各个位置同时出现或不同时出现的频率。
在这里插入图片描述
2.计算风格矩阵 G
把图中各个高度和宽度的激活项都遍历一遍,并将 k k‘ 通道中对应位置的激活项都进行相乘
输入的风格图像所构成的风格矩阵:
在这里插入图片描述
其中i(<=nH),j(<=nW)对应 l 层的高度和宽度,k,k‘ 对应通道数,a 为相应位置的激活值
矩阵 G 的维度 nc × nck k’ 分别有 nc 个取值
生成图像所构成的风格矩阵:
在这里插入图片描述
3.将 SG 代入到风格代价函数中去计算
Frobenius 范数:计算两个矩阵对应元素相减的平方的和再乘上一个归一化常数
在这里插入图片描述
如果你对各层(而不是单独l层)都使用风格代价函数,会让结果变得更好。定义代价函数时,把各个层的风格代价函数都加起来,并对每个层定义权重 λ[l] 。这样将使得我们的神经网络在计算风格时能够同时考虑到这些低级和高级特征的相关系数。这样,在基础的训练中你在定义超参数时,可以尽可能的得到更合理的选择。
4.封装全体代价函数
在这里插入图片描述

4.11 一维到三维推广(1D and 3D generalizations of models)

在这里插入图片描述
一维: 输入为 14×1,卷积核为 5×1 ,如果你有16个卷积核,可能你最后会获得一个 10 × 16 的输出
对于卷积网络的下一层,为 10 × 16 ,使用一个5维过滤器进行卷积,这需要16个通道进行匹配,如果你有32个过滤器,另一层的输出结果就是 6 × 32

三维:
在这里插入图片描述

(图中所示为人体躯干中不同层的切片,附CT扫描示意图)
如果你有一个3D对象,大小为 14×14×14,通道数1,使用 5×5×5×1 的16个过滤器进行卷积,那么输出为 10×10×10×16;
如果下一层卷积使用 5×5×5×16 维度的32个过滤器再次卷积,输出为 6×6×6×32 。

在这里插入图片描述
参考文献:

  • Florian Schroff, Dmitry Kalenichenko, James Philbin (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering
  • Yaniv Taigman, Ming Yang, Marc’Aurelio Ranzato, Lior Wolf (2014). DeepFace: Closing the gap to human-level performance in face verification
  • The pretrained model we use is inspired by Victor Sy Wang’s implementation and was loaded using his code: https://github.com/iwantooxxoox/Keras-OpenFace.
  • Our implementation also took a lot of inspiration from the official FaceNet github repository: https://github.com/davidsandberg/facenet
  • Leon A. Gatys, Alexander S. Ecker, Matthias Bethge, (2015). A Neural Algorithm of Artistic Style (https://arxiv.org/abs/1508.06576)
  • Harish Narayanan, Convolutional neural networks for artistic style transfer. https://harishnarayanan.org/writing/artistic-style-transfer/
  • Log0, TensorFlow Implementation of “A Neural Algorithm of Artistic Style”. http://www.chioka.in/tensorflow-implementation-neural-algorithm-of-artistic-style
  • Karen Simonyan and Andrew Zisserman (2015). Very deep convolutional networks for large-scale image recognition (https://arxiv.org/pdf/1409.1556.pdf)
  • MatConvNet. http://www.vlfeat.org/matconvnet/pretrained/

该系列已完结,第五门课-序列模型 略

发布了1 篇原创文章 · 获赞 0 · 访问量 282

猜你喜欢

转载自blog.csdn.net/qq_35024702/article/details/104902311