梧州市网站建设_网站建设公司_SQL Server_seo优化
2026/1/17 7:05:59 网站建设 项目流程

目录

1.人脸识别

(1)人脸验证 与 人脸识别

2.一次学习(One-shot learning)

(1)一次学习问题

(2)Similarity函数

3.Siamese网络

(1)概念

(2)原理

4.Triplet 三元组损失函数

(1)三元组损失函数

5.训练集构成

6.二分类问题的人脸验证

(1)原理

(2)总结


1.人脸识别
(1)人脸验证 与 人脸识别
  • 人脸验证:一张输入图片,以及某人的ID或者是名字,验证输入图片是否是这个人(一对一问题)

  • 人脸识别:有数据库存储很多人的数据,根据输入图片,识别图片是谁或识别不出(一对多问题)

  • 假设有一个验证系统,准确率是99%。如果你把这个验证系统应用在100个人的人脸识别上,犯错的机会就是100倍了。事实上,对于人脸识别,如果我们有一个100人的数据库,正确率可能需要远大于99%,才能得到很好的效果

2.一次学习(One-shot learning)
(1)一次学习问题
  • 一次学习问题:在大多数人脸识别应用中,往往需要通过一张图片或者一个人脸样例就能去识别这个人。
  • 而当深度学习只有一个训练样例时,它的表现并不好。
(2)Similarity函数
  • 如上图,假设数据库里有4张员工照片(,分别是Kian,Danielle,Younes和Tian。现在Danielle来到办公室,并且她想通过带有人脸识别系统的栅门,现在系统需要做的就是,仅仅通过一张已有的Danielle照片,来识别前面这个人确实是她。

  • 有一种办法是,将人的照片放进卷积神经网络中,使用softmax单元来输出5种,分别对应这4个人和都不是,但实际上这样效果并不好,因为如此小的训练集不足以去训练一个稳健的神经网络。

  • 要让人脸识别能够做到一次学习,为了能有更好的效果,我们要让神经网络学习Similarity函数(d(img1,img2))

  • d(img1,img2)输出为两张图片的差异程度,r为阈值

  • 当d ≤ r,认为是同一个人

  • 当d>r,认为不是同一个人

3.Siamese网络
(1)概念
  • 使用similarity函数:输入两张人脸图片,然后输出相似度。实现这个功能的一个方式就是用Siamese网络
  • 对于两个不同的输入,运行相同的卷积神经网络,然后比较它们,这一般叫做Siamese网络架构(Siamese neural network architecture)
(2)原理
  • 上图是常见的卷积网络,输入图片x(1),然后经过卷积层、池化层和全连接层,最终得到特征向量。假如f(x(1))有128个数,可以看成是图像x(1)的编码。
  • 如果要比较两个图片的话,把第二张图片x(2)喂给有同样参数的神经网络,然后得到一个不同的128维向量。
  • 接下来定义d,将x(1)和x^(2)的距离定义为这两种图片编码之差的范数:d(x1,x2)=‖f(x1) - f(x2) ‖²
4.Triplet 三元组损失函数
(1)三元组损失函数
  • 要通过学习神经网络的参数来得到优质的人脸图片编码,方法之一就是定义三元组损失函数(triplet loss function),然后应用梯度下降。

  • 为了应用三元组损失函数,你需要比较成对的图像。通常是看三个图片,一个 Anchor 图片,Positive图片,Negetive图片,通常把它们简写成A、P、N。

  • 让Anchor图片和Positive图片(Positive意味着是同一个人)的距离很接近;同时Anchor图片与Negative图片(Negative意味着是非同一个人)的距离远一点。这就是为什么叫做三元组损失。

  • 我们需要满足‖f(A) - f(P)‖² ≤ ‖f(A) - f(N)‖²,为了减小这个等式相等的概率,或者为了拉大Anchor和Positive 图片组与Anchor与Negative 图片组之间的差距,我们一般加一个参数α(也叫margin),使等式变为‖f(A) - f(P)‖² - ‖f(A) - f(N)‖² +α ≤ 0

  • 定义损失函数:三元组损失函数的定义基于三张图片,即anchor样本、positive样本和negative样本,其中positive图片和anchor图片是同一个人,但是negative图片和anchor不是同一个人。

  • 三元组损失函数:L(A, P, N)=max(‖f(A) - f(P)‖² - ‖f(A) - f(N)‖² +α,0)

  • 我们要尽可能让损失函数小,max可以使损失函数为正,当‖f(A) - f(P)‖² - ‖f(A) - f(N)‖² +α<0的时候模型训练效果就不错了,所以用max取0,但当‖f(A) - f(P)‖² - ‖f(A) - f(N)‖² +α>0时,说明模型还有优化空间,损失函数还可以继续减小趋于0。

  • 整个网络的成本函数J应该是训练集中这些单个三元组损失的总和。假如你有一个10000个图片的训练集,里面是1000个不同的人的照片,你要做的就是取这10000个图片,然后生成这样的三元组,然后训练你的学习算法,对这种代价函数用梯度下降。

5.训练集构成
  • 为了训练你的系统你确实需要一个数据集,里面有同一个人的多个照片。如果你只有每个人一张照片,那么根本没法训练这个系统。对于训练集,你需要确保有同一个人的多个图片。
  • 随机地选择A、P和N,遵守A和P是同一个人,而A和N是不同的人这一原则,很容易满足,因为A和N比A和P差别很大的概率很大,这样网络很难从中学到什么。所以要尽可能的选择难训练的A、P和N,使得d(A,P)≈d(A,N)
6.二分类问题的人脸验证
(1)原理
  • 除了Triplet loss,将人脸识别当成一个二分类问题也是一个学习参数、训练网络的方法。
  • 上图,选取Siamese网络,输入两张图片,然后进行预测,如果是相同的人,那么输出是1,若是不同的人,输出是0。
  • 最后的逻辑回归单元主要处理编码之间的差异,比如:
  • 划线部分也可以卡方公式来代替,如图中所示(卡方平方相似度)
(2)总结
  • 如上图,把人脸验证当作一个监督学习,创建一个只有成对图片的训练集,输入不是三元组,而是成对的图片,目标标签是1表示一对图片是一个人,0表示图片中是不同的人。利用不同的成对图片,使用反向传播算法去训练神经网络,训练Siamese神经网络。处理人脸验证和人脸识别扩展为二分类问题,效果也很好。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询