吴恩达4.4人脸识别

本文围绕吴恩达课程课后作业展开,聚焦人脸识别算法。介绍了人脸识别的两类问题,阐述将人脸照片编码成128维向量及三元损失函数,还说明了下载预训练模型后,如何应用其实现人脸检测和人脸识别,包括门禁系统中的鉴别与识别流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要讨论一下上完了吴恩达的课程以后我对课后作业的理解。基本上就是我把吴恩达的内容翻译了一下(挑选的重要的部分),总的来说,发现总结完了以后,自己对着个的理解更加深入了一步。其实这个真的还是挺简单的,我对自己现在的目标就是先能看懂其中的算法部分。本文的算法部分还是比较简单的。
人脸识别问题主要有一下两类:
(1)人脸检测(即能够检测出来是人脸即可)
(2)人脸识别(即能够确切的检测出来对象是哪个人)这是本次作业着重讨论的方面。
人脸识别神经网络能将人脸照片编码成一个有128个单元的向量,通过比较两个向量能够来确定出来两张照片是否是同一个人。
本次任务中,要求学会:(1)实现三元损失函数
(2)使用一个预训练的模型能够将一张图片编码成128个单元的向量。
(3)使用这些编码来实现人脸检测和人脸识别
0-人脸检测
人脸检测中,判断给定的两张照片是否是同一个人,最简单的方式就是一个像素一个像素去比对,如果两张的距离值小于给定的阈值,那么这两张照片可能就是同一个人。但是这种方法的表现力非常差,可能因为灯光,人脸的角度等等细小的差别都会影响像素。下面使用的这种编码方法能够更加准确的判断这两个人是否是同一个人。
1.把图片编码成128维向量
1.1通过把神经元的最后一个全连接层的神经元设置为128个,就可以使得输出是128个元素的向量。然后通过如下的方式来比较两张照片。
在这里插入图片描述
如果两张照片是同一个人,编码的值非常小;两张照片不是同一个人,编码的值非常大,那么就说明这个算法的效果非常好。三元组函数的功能就是使得两张同一个人的照片的编码值非常小,非同一个人的编码值非常大。
1.2三元组函数
对于输入图片x,我们用f(x)来代表经过神经网络的输出,三元组是从我们的训练集中挑选出来的。要确保:
在这里插入图片描述
三元组损失函数:
在这里插入图片描述
因为第一项使我们尽力想让其值尽可能小的,第二项是我们尽可能想要其值大的,所以这两者合并时,第二项的前面有一个负号是合理的。a在这里是一个需要我们手动调节的参数。编码的向量需要被归一化。
2.下载预训练的模型
在这里我们下载一个别人已经训练过的模型参数。
3. 应用模型来 实现人脸检测和人脸识别吧
3.1人脸检测(鉴别就是一个人拿着他的ID卡在门前用照相机采集完了他的人脸照片再与数据库中的对应ID图片进行对比,然后通过阈值的比较判断是否是同一个人)
这个项目就是:让某一些特定的人可以进入房子,门禁系统有他们的照片数据集,人们使用他们的ID卡在对比成功以后可以进入这个房子。
首先建立一个包含可以进入这个房子的人的编码值的数据集。为了实现编码,我们应用了img_to_encoding()函数,这基本上就是在模型上对特定图片运行一次前向传播。接下来运行的一个数据集把每个人的脸映射为128个单元的向量。
接下来实现鉴别功能
(1)计算门前的人的照片的编码值
(2)计算门前照片的编码值和数据库里面的编码值的距离
(3)如果距离小于0.7就开门,否则就关门。
3.2 人脸识别
人脸识别所要做的就是输入一张图片的时候,需要判断出这是否是门禁系统数据库里面的一个人,如果是的话,那这个人是谁。实现这个任务,我们有以下几步:
(1)计算门前照片的编码值
(2)从数据库里面找到与门前照片有最近距离的编码值的照片
初始化min_dist=100
使用for循环计算门前的照片编码值和数据库里面的每一个照片的编码值的L2距离值 ,如果距离值小于min_dist,那么就把当前的距离值设置为mi-dist,存储当前的用户名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值