DeepLearning.ai学习笔记(四)卷积神经网络 -- week4 特殊应用:人力脸识别和神经风格转换

简介: 一、什么是人脸识别老实说这一节中的人脸识别技术的演示的确很牛bi,但是演技好尴尬,233333啥是人脸识别就不用介绍了,下面笔记会介绍如何实现人脸识别。二、One-shot(一次)学习假设我们发财了,开了一家公司。

一、什么是人脸识别

老实说这一节中的人脸识别技术的演示的确很牛bi,但是演技好尴尬,233333

啥是人脸识别就不用介绍了,下面笔记会介绍如何实现人脸识别。

二、One-shot(一次)学习

假设我们发财了,开了一家公司。然后作为老板的我们希望与时俱进,所以想使用人脸识别技术来实现打卡。

假如我们公司只有4个员工,按照之前的思路我们训练的神经网络模型应该如下:

img_519d38d9c0b66a3d51cec2296d7001a8.png

如图示,输入一张图像,经过CNN,最后再通过Softmax输出5个可能值的大小(4个员工中的一个,或者都不是,所以一一共5种可能性)。

看起来好像没什么毛病,但是我们要相信我们的公司会越来越好的啊,所以难道公司每增加一个人就要重新训练CNN以及最后一层的输出数量吗?

这显然有问题,所以有人提出了一次学习(one-shot),更具体地说是通过一个函数来求出输入图像与数据库中的图像的差异度,用d(img1,img2)表示。

img_a7b8b500ec542314d7e6085d8a7282f9.png

如上图示,如果两个图像之间的差异度不大于某一个阈值 τ,那么则认为两张图像是同一个人。反之,亦然。

下一小节介绍了如何计算差值。

三、Siamese网络

注意:下图中两个网络参数是一样的。

先看上面的网络。记输入图像为x(1),经过卷积层,池化层和全连接层后得到了箭头所指位置的数据(一般后面还会接上softmax层,但在这里暂时不用管),假设有128个节点,该层用f(x(1))表示,可以理解为输入x(1)的编码。

那么下一个网络同理,不再赘述。

因此上一节中所说的差异度函数即为

d(x(1),x(2))=||f(x(1))f(x(2))||2

img_fee9458c29cdccf10af7ec01155dc7f0.png

问题看起来好像解决了,但总感觉还漏了点什么。。。

没错!!!
你没错!!!
神经网络的参数咋确定啊?也就是说f(x(i))的参数怎么计算呢?

首先我们可以很明确的是如果两个图像是同一个人,那么所得到的参数应该使得||f(x(1))f(x(2))||2的值较小,反之较大。(如下图示)


img_30d2ef91e096e79ca45ba1ffa11512c6.png

沿着这个思路我们继续看下一小节内容~~~

四、Triple损失

1. Learning Objective

这里首先介绍一个三元组,即 (Anchor, Positive, Negative),简写为(A,P,N)

Anchor: 可以理解为用于识别的图像
Positive: 表示是这个人
Negative: 表示不是同一个人

由上一节中的思路,我们可以得到如下不等式:

d(A,P)d(A,N),即||f(A)f(P)||2||f(A)f(N)||20 (如下图示)


img_38352336944c052276af98ee963dc7ba.png

但是这样存在一个问题,即如果神经网络什么都没学到,返回的值是0,也就是说如果f(x)=0的话,那么这个不等式是始终成立的。(如下图示)


img_a75e76198a24d34a613801e0a8fb24a0.png

为了避免上述特殊情况,而且左边值必须小于0,所以在右边减去一个变量α,但是按照惯例是加上一个值,所以将α加在左边。

img_381e643817ac132fbd92be161684a9d6.png img_6531877b6ab79be95a5dc0f8a6c97d43.png

综上,所得到的参数需要满足如下不等式

||f(A)f(P)||2||f(A)f(N)||2+α0

2. Lost function

介绍完三元组后,我们可以对单个图像定义如下的损失函数(如下图示)

L(A,P,N)=max(||f(A)f(P)||2||f(A)f(N)||2+α,0)

解释一下为什么用max函数,因为如果只要满足||f(A)f(P)||2||f(A)f(N)||2+α0,我们就认为已经正确识别出了图像中的人,所以对于该图像的损失值是0.

img_af956b240d724e8488a6da2114d2de68.png

所以总的损失函数是 : J=L(A(i),P(i),N(i))

要注意的是使用这种方法要保证每一个人不止有一张图像,否则无法训练。另外要注意与前面的One-shot区分开来,这里是在训练模型,所以训练集的数量要多一些,每个人要有多张照片。而One-shot是进行测试了,所以只需一张用于输入的照片即可。

3. Choosing the triplets(A,P,N)

还有一个很重要的问题就是如何选择三元组(A,P,N)。因为实际上要满足不等式d(A,P)+αd(A,N)是比较简单的,即只要将Negative选择的比较极端便可,比如anchor是一个小女孩,而Negative选择一个老大爷。

所以还应该尽量满足d(A,N)d(A,N)

img_74a9b20804600cf5d11c0e0a8d1f4796.png

五、面部验证与二分类

通过以上内容,我们可以确定下图中的网络的参数了,那么现在开始进行面部验证了。

上面的是测试图,下面的是数据库中的一张照片

和之前一样假设f(x(i))有128个节点,之后这两个数据作为输入数据输入到后面的逻辑回归模型中去,即

ˆy=σ(128k=1wi|f(x(i))kf(x(j))k|+bi)

ˆy=1,为同一人。反之,不是。

如下图示,绿色下划线部分可以用其他公式替换,即有

ˆy=σ(128k=1wi(f(x(i))kf(x(j))k)2f(x(i))k+f(x(j))k+bi)

img_a881e6e928597f028d745ba31330fc59.png

当然数据库中的图像不用每次来一张需要验证的图像都重新计算,其实可以提前计算好,将结果保存起来,这样就可以加快运算的速度了。

img_547f902bc5ebb69284147c5da5a7eaf0.png

六、什么是神经风格转换

如下图示,不多赘述。

img_f97146e056dd28f813ae0b34cdea95df.png

七、深度卷积网络在学什么?

八、代价函数

如下图示:

左上角的包含Content的图片简称为C,右上角包含Style的简称S,二者融合后得到的图片简称为G。

我们都知道计算问题必须是有限的,所以融合的标准是什么?也就是说Content的保留程度和Style的运用程度如何取舍呢?

此时引入损失函数,并对其进行最优化,这样便可得到最优解。

J(G)=αJContent(C,G)+βJStyle(S,G)

JContent(C,G)表示图像C和图像G之间的差异,JStyle(S,G)同理。

img_a884bb289a07dbed2ce762178bd6d38a.png

计算过程示例:

  • 随机初始化图像G,假设为100*100*3 (如下图右边四个图像最上面那个所示)
  • 使用梯度下降不断优化J(G)。 (优化过程如下图右边下面3个图像所示)

    img_bc42580db61a82211429f16e5cefce00.png

下面一小节将具体介绍损失函数的计算。

九、内容代价函数

  • 首先假设我们使用第l层隐藏层来计算JContent(C,G),注意这里的l一般取在中间层,而不是最前面的层,或者最后层。

原因如下:

  • 假如取第1层,那么得到的G图像将会与图像C像素级别的相似,这显然不行。
  • 假如取很深层,那么该层已经提取出了比较重要的特征,例如图像C中有一条狗,那么得到的图像G会过度的保留这个特征。
  • 然后使用预先训练好的卷积神经网络,如VGG网络。这样我们就可以得到图像C和图像G在第l层的激活函数值,分别记为a[l][C],a[l][G]

  • 内容损失函数 JContent(C,G)=12||a[l][C]a[l][G]||2


    img_147bf871f635a16382c18e520f547452.png

十、风格损失函数

1.什么是“风格”

要计算风格损失函数,我们首先需要知道“风格(Style)”是什么。

我们使用l层的激活来度量“Style”,将“Style”定义为通道间激活值之间的相关系数。(Define style as correlation between activation across channels)

img_075316ef9ff02ef3fdc870e957fd9a0b.png

那么我们如何计算这个所谓的相关系数呢?

下图是我们从上图中所标识的第l层,为方便说明,假设只有5层通道。


img_48d6a36bb6c50569f1ef48a8f7e52440.png

如上图示,红色通道和黄色通道对应位置都有激活项,而我们要求的便是它们之间的相关系数

但是为什么这么求出来是有效的呢?为什么它们能够反映出风格呢?

继续往下看↓

2.图像风格的直观理解

如图风格图像有5层通道,且该图像的可视化特征如左下角图所示。

其中红色通道可视化特征如图中箭头所指是垂直条纹,而黄色通道的特征则是橘色背景。

那么通过计算这两层通道的相关系数有什么用呢?

其实很好理解,如果二者相关系数性强,那么如果出现橘色背景,那么就应该很大概率出现垂直条纹。反之,亦然。

img_8a5d1ce8b3ea64ca87dd672a5be5f0e3.png

3.风格相关系数矩阵

a[l]i,j,k表示(i,j,k)的激活项,其中i,j,k分别表示高度值(H),宽度值(W)以及所在通道层次(C)。

风格矩阵(也称为“Gram Matrix”)用G[l]表示,其大小为nl]cnl]c.

因此风格图像的风格矩阵为:

G[l](S)kk=n[l]Hi=1n[l]Wj=1a[l](S)i,j,ka[l](S)i,j,k

生成图像的相关系数矩阵

G[l](G)kk=n[l]Hi=1n[l]Wj=1a[l](G)i,j,ka[l](G)i,j,k

img_cba30e6bb7830dbc51f55bbe94895c28.png

4.风格损失函数

l层的风格损失函数为:

J[l]Style=1(2n[l]Hn[l]Wn[l]C)2kk(G[l](S)kkG[l](G)kk)

总的风格损失函数:

JStyle(S,G)=lλ[l]J[l]Style(S,G)

img_6b078fba244dd1b7611052256338d4f7.png








MARSGGBO原创





2018-2-13



目录
打赏
0
0
0
0
11
分享
相关文章
云原生应用网关进阶:阿里云网络ALB Ingress 全面增强
云原生应用网关进阶:阿里云网络ALB Ingress 全面增强
机器学习在网络流量预测中的应用:运维人员的智慧水晶球?
机器学习在网络流量预测中的应用:运维人员的智慧水晶球?
64 19
DeepSeek生成对抗网络(GAN)的训练与应用
生成对抗网络(GANs)是深度学习的重要技术,能生成逼真的图像、音频和文本数据。通过生成器和判别器的对抗训练,GANs实现高质量数据生成。DeepSeek提供强大工具和API,简化GAN的训练与应用。本文介绍如何使用DeepSeek构建、训练GAN,并通过代码示例帮助掌握相关技巧,涵盖模型定义、训练过程及图像生成等环节。
应用程序中的网络协议:原理、应用与挑战
网络协议是应用程序实现流畅运行和安全通信的基石。了解不同协议的特点和应用场景,以及它们面临的挑战和应对策略,对于开发者和用户都具有重要意义。在未来,随着技术的不断发展,网络协议也将不断优化和创新,为数字世界的发展提供更强大的支持。
神经架构搜索:自动化设计神经网络的方法
在人工智能(AI)和深度学习(Deep Learning)快速发展的背景下,神经网络架构的设计已成为一个日益复杂而关键的任务。传统上,研究人员和工程师需要通过经验和反复试验来手动设计神经网络,耗费大量时间和计算资源。随着模型规模的不断扩大,这种方法显得愈加低效和不够灵活。为了解决这一挑战,神经架构搜索(Neural Architecture Search,NAS)应运而生,成为自动化设计神经网络的重要工具。
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
180 10
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
496 7

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等