人脸识别相关及其内部原理

article/2025/10/25 12:56:40

整理并翻译自吴恩达深度学习视频,卷及神经网络第四章4.1-4.5,有所详略。

人脸验证和人脸识别

Verification与Recognition的差异:

验证:

  • 输入图像,名字/ID
  • 输出输入的图像是否和输入的名字/ID是同一个人

这是个1:1问题。

识别:

  • 你有一个K个人的数据库
  • 获取一张图像作为输入
  • 如果它属于K个人之一,输出这张图像对应的ID(不属于任何一个,输出不能识别)

这是个1:100问题,需要更高的准确度保证不会出错以满足我们对准确性的要求(Maybe need more than 99.9 % accuracy)。

One-Shot学习

One shot, one kill - war3暗夜精灵族弓箭手语音。

意思很直观,你需要在仅有一个example作为输入的情况下给出正确的结果。
在这里插入图片描述
如果按之前我们对网络的训练方式,我们不能训练出一个足够健壮的网络因为输入实在是太少了。

而且每次如果有新人加入的团队,你不能总得重新训练你的网络,这显然不是一个好的方法。

相似度 函数

因此我们将学习的目标更改为学习两张图片之间的的差异程度。
在这里插入图片描述 I f d ( i m g 1 , i m g 2 ) ≤ τ If \ d(img1, img2) \leq \tau If d(img1,img2)τ “same”
I f d ( i m g 1 , i m g 2 ) > τ If \ d(img1, img2) > \tau If d(img1,img2)>τ “different”

小于等于某个阀值,判定是同一个人;否则判定不是同一个人。

我个人觉得叫差异度函数更合适。这篇博文后面就使用差异度函数了。

Siamese network

The job of function d which you learned about last video is to input two faces and tell you how similar or how different they are, a good way to this is to use aSiamese Network

在这里插入图片描述

去掉普通卷积网络全连接层之后的输出层,我们把输入经过卷积网络之后得到的128维的vector作为输入x的编码。我们就得到了一个Siamese网络。

在这里插入图片描述

把两张图像经过网络得到的vector记为f(x1)和f(x2),定义差异度函数为
∣ ∣ f ( x ( i ) − f ( x ( j ) ) ∣ ∣ 2 ||f(x^{(i)}-f(x^{(j)})||^2 f(x(i)f(x(j))2
如果是同一个人,那么该函数应当很小;如果不是同一个人,那么该函数应该很大。我们学习的目标就是学习到一组parameter,这组parameter能够使得该函数实现同一个人时其值很小,不是同一个人时其值很大的。

三元组损失(TripletLoss)

One way to learn the parameters of the neural network so that it gives you a good encoding for your pictures of faces is to define and apply gradient descent on the
triplet loss function

在这里插入图片描述
更科学的方法:我们定义学习目标为三元组(A, P, N)之间的组合公式(过程如上图):
∣ ∣ f ( A ) − f ( P ) ∣ ∣ 2 − ∣ ∣ f ( A ) − f ( N ) ∣ ∣ 2 + α ≤ 0 ||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 + \alpha \leq 0 f(A)f(P)2f(A)f(N)2+α0

其中,A代表Anchor即输入的一个图像,P代表Positive,即正例,N代表Negative,即反例。 α \alpha α即为SVM里面的margin。
在这里插入图片描述

对上述公式和0之间取max,作为我们的损失函数:
l ( A , P , N ) = m a x ( ∣ ∣ f ( A ) − f ( P ) ∣ ∣ 2 − ∣ ∣ f ( A ) − f ( N ) ∣ ∣ 2 + α , 0 ) l(A,P,N)=max(||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 + \alpha,\ 0) l(A,P,N)=max(f(A)f(P)2f(A)f(N)2+α, 0)
损失函数衡量的是不对的情况,因此它是训练目标取反。上式的意义的在于 α \alpha α是个大于0的定值,因此 ∣ ∣ f ( A ) − f ( P ) ∣ ∣ 2 − ∣ ∣ f ( A ) − f ( N ) ∣ ∣ 2 ||f(A)-f(P)||^2 - ||f(A)-f(N)||^2 f(A)f(P)2f(A)f(N)2取较大的值时,表示我们的损失也很大。

整个训练集上的损失函数即为:
J = ∑ 1 m l ( A ( i ) , P ( i ) , N ( i ) ) J=\sum_1^ml(A^{(i)},\ P^{(i)},\ N^{(i)}) J=1ml(A(i), P(i), N(i))
在这里插入图片描述
在训练数据三元组的选取上,我们选"难"训练的三元组收益更大,"难"直观上的理解是, d ( A , P ) + α d(A,P)+\alpha d(A,P)+α很大, d ( A , N ) d(A,N) d(A,N)很小,这样使得算法必须竭尽全力地学习到使 d ( A , P ) + α d(A,P)+\alpha d(A,P)+α变小,同时使 d ( A , N ) d(A,N) d(A,N)变大的parameter,这提高了算法的计算效率。

人脸识别与二元分类

将人脸识别看作二元分类是三元组损失的另外一种替代方案。
在这里插入图片描述
我们使用2个Siamese网络得到2张输入图像的2个vector,取这2个vector作为logistic regression的输入,如果2张图像输入同一个人,那么logistics regression应该输出1(或者大于某个阀值),否则输出0。基于此收集训练数据(或者小于某个阀值)。

假设logistic regerssion使用 σ \sigma σ函数,那么输出
y = σ ( ∑ k = 1 128 w i ∣ f ( x k ( i ) ) − x k ( j ) ) ∣ + b ) y=\sigma (\sum_{k=1}^{128}w_i \ | f(x_k^{(i)})-x_k^{(j)})|+b) y=σ(k=1128wi f(xk(i))xk(j))+b)

如同普通的逻辑回归一样,你训练网络,得到 w i w_i wi b b b,然后使用这些参数去判断给定的2张图片是否是同一个人。

一个实际部署的小trick是,你可以预先计算数据库出里员工的图像的vector然后存储起来,这样可以节省大量的计算资源,加快你整个系统的响应速度。
在这里插入图片描述
将人脸识别看作二元分类监督问题,你使用一组图像当做输入,输出1或者0如上图所示。


http://chatgpt.dhexx.cn/article/0RfJLxOb.shtml

相关文章

人脸识别实践(1) - 基本原理与设计思路

写在前面 随着时代的高速发展,视频监控等基础设施越来越完备,计算机视觉也在各行各业开始发挥出更大的效用,而这一领域中大家最熟知的就是刷脸支付,现在大家享受着科技带来的便利。还有我们乘坐高铁,进站前刷身份证然后…

计算机识别人脸原理,人脸识别:原理、方法与技术

人脸识别:原理、方法与技术 语音 编辑 锁定 讨论 上传视频 《人脸识别:原理、方法与技术》是2010年2月1日科学出版社出版的图书。 《人脸识别:原理、方法与技术》主要介绍人脸识别技术的基本原理、研究内容、研究方法,以及已有的研…

OpenCV人脸识别(1)原理介绍

前言 本系列博客学习如何使用OpenCV来执行面部识别。 为了构建人脸识别系统,我们首先进行人脸检测,使用深度学习从每个人脸提取人脸特征,在提取到特征上训练人脸识别模型,然后用OpenCV识别图像和视频流中的人脸。 这里提取人脸特…

基于Python的面部表情识别分析系统

资源下载地址:https://download.csdn.net/download/sheziqiong/85660758 面部表情识别 练习技能: 爬虫数据清洗计算机视觉(图片基本处理,信息提取)深度学习 图像识别技术文档 一、项目概述 项目名称:面部…

基于人脸面部检测的口罩识别系统

基于人脸面部检测的口罩识别系统 摘 要 作为数字图像处理和计算机视觉领域的一个重要组成部分,利用摄像机对图像进行采集,从图像中检测人脸并进行口罩穿戴的识别的有着非常重要的研究意义和应用价值。面对突如其来的新型肺炎疫情,人们生活秩…

[深度概念]·简述人脸识别开发原理

0、文章概述 我们知道人脸识别在这几年应用相当广泛,人脸考勤,人脸社交,人脸支付,哪里都有这黑科技的影响,特别这几年机器学习流行,使得人脸识别在应用和准确率更是达到了一个较高的水准。 下面将带着大家…

基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】

功能演示 摘要:面部表情识别(Facial Expression Recognition)是一种通过技术手段识别人物图像中人脸面部表情的技术。本文详细介绍了其实现的技术原理,同时给出完整的Python实现代码、训练好的深度学习模型,并且通过Py…

2022年12月编程语言排行榜公布!

2022年迎来了最后一个月,我们可以看到,在这一年中编程语言起起伏伏,有的语言始终炙手可热,而有的语言却逐渐“没落”… 日前,全球知名TIOBE编程语言社区发布了12月编程语言排行榜,有哪些新变化&#xff1f…

html不是编程语言什么梗,html不是编程语言?

HTML究竟算不算是一门编程语言,这是争执已久的话题。其实,从本质来讲,HTML确实算不上是一门编程语言。 HTML全称,HyperText Markup Language。字面理解,HTML就是一种超文本语言,何谓超文本,就是…

2017年编程语言排名

https://spectrum.ieee.org发布了2017年编程语言排名,这个榜单是对数十种流行的编程语言进行排名。 请参考: https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2017 可以对排名规则进行选择 可选择的权重分别为&#xf…

【总结】编程语言的分类

一、计算机编程语言的分类 1、低级语言 机器语言(二进制代码)、汇编语言(面向机器的程序设计语言)和符号语言。汇编语言源程序必须经过汇编,生成目 标文件,然后执行。 机器语言优缺点如下…

编程语言排行榜 - 2020年度最热门编程语言盘点!

如今,广大用户更喜欢利用移动应用程序,来获取他们所关心的产品与信息。而移动应用程序也成为了企业在市场竞争中,保持领先地位的成功关键。据某项调查预测:到2020年,全英国移动应用的用户下载数量将增加到200亿次。当然…

IT培训分享:11种热门编程语言的主要用途

IT行业发展前景广阔,想进去IT领域的小伙伴也是与日俱增。但编程语言的种类那么多,具体学习哪个好呢?建议刚开始学习就要明白自己的目的来进行有针对性的学习。今天小千就以自己了解到的知识,来给大家简单介绍一下时下热门编程语言…

最受欢迎的八种编程语言

DevJobsScanner公司分析了2022年超过1200万份开发者工作需求,其中舍弃了对语言要求比较模糊的工作,有明确编程语言要求的工作有700万份,最终得出了目前行业需求量最高的 8 种编程语言。 让我们一起看看在目前的市场需求中,哪些语…

软件测试用例编写方法

软件测试学习导图如下: 软件测试的宗旨就是尽早地和不断地进行测试,更早、更快、更多的发现错误。 编写测试用例主要用到五种方法:等价类划分、边界值分析、因果图法、场景法(用户故事法)、错误推测 等价类划分&#…

编写测试用例方法之正交表分析法

今天我们再来介绍另外一个编写测试用例的方法:正交表分析法,这个方法是一种比较方便的方法。话不多说,开始整干货,老规矩,首先全图镇楼。 之前我们在对产品进行测试用例设计的时候,都是针对单个输入框。如果…

测试用例的编写方法

测试用例 买手机、买电脑,要试用一下:开机、屏幕、运行速度、内存大小;这就是生活中的测试用例! 测试用例(Test Case)是为特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,它是指导测试工…

编写测试用例的方法,这个是真的很好用

大家测试过程中经常用的等价类划分、边界值分析、场景法等,并不能覆盖所有的需求,我们之前讲过很少用到的因果图法,下面就来讲另一种不经常用到但又非常重要的测试用例编写方法——测试大纲法。 测试大纲法适用于有多个窗口,每个…

亲测快捷高效的编写测试用例方法

目录 一、什么是测试用例? 二、设计用例是否有必要? 三、设计用例的益处? 四、一定要写测试用例吗? 五、测试用例怎么写? 六、用例必备4个方面? 七、用例设计理念? 八、没有需求文档&am…

测试用例的特性以及编写测试用例的方法

测试用例的特性以及编写测试用例的方法 测试用例的定义:什么是测试用例?测试用例的特征: 编写测试用例的好处:测试用例的作用: 测试用例的4个特性测试用例通常包括以下几个组成元素:编写测试用例的基本方法…