news 2026/4/16 18:19:12

人脸识别(吴恩达深度学习笔记)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
人脸识别(吴恩达深度学习笔记)

目录

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神经网络。处理人脸验证和人脸识别扩展为二分类问题,效果也很好。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:32:32

Blender MMD Tools插件完全指南:5步解决模型导入导出难题

Blender MMD Tools插件完全指南:5步解决模型导入导出难题 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …

作者头像 李华
网站建设 2026/4/16 12:36:01

Blender3mfFormat插件:3D打印新手的完美文件处理方案

Blender3mfFormat插件:3D打印新手的完美文件处理方案 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 在3D打印领域,3MF格式正以其完整的属性支持和…

作者头像 李华
网站建设 2026/4/16 12:58:46

手机号码智能定位系统:一键查询精准地理位置

手机号码智能定位系统:一键查询精准地理位置 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirrors/lo/lo…

作者头像 李华
网站建设 2026/4/16 12:59:09

iOS微信抢红包插件配置全攻略:3步实现智能自动抢红包

iOS微信抢红包插件配置全攻略:3步实现智能自动抢红包 【免费下载链接】WeChatRedEnvelopesHelper iOS版微信抢红包插件,支持后台抢红包 项目地址: https://gitcode.com/gh_mirrors/we/WeChatRedEnvelopesHelper 还在为错过微信群里的红包而懊恼吗&#xff1f…

作者头像 李华
网站建设 2026/4/15 21:44:36

5分钟部署通义千问3-Embedding-4B,零基础搭建知识库系统

5分钟部署通义千问3-Embedding-4B,零基础搭建知识库系统 在构建智能知识库、语义搜索或文档去重系统时,文本向量化是核心环节。传统方案往往依赖云端API或复杂部署流程,而随着本地化大模型生态的成熟,我们完全可以在单卡消费级显…

作者头像 李华
网站建设 2026/4/16 14:01:54

边缘计算快速入门:项目驱动的学习方法

从零开始玩转边缘计算:用一个项目打通“端—边—云”全链路你有没有遇到过这样的场景?工厂里的一台关键设备突然停机,维修人员赶到现场才发现是轴承磨损导致的——但其实早在几天前,振动信号就已经出现异常。如果能早一点发现呢&a…

作者头像 李华