十四、AI学习笔记|人脸识别

1、人脸识别概述

  • 人脸验证:给定一个人脸和它对应的ID,让系统来判断这个人是否就是这个ID对应的人。如手机的人脸解锁功能、火车站的进站闸口。

  • 人脸识别:就是随便给定一个人,然后给出这个人的相关信息。

  • 活体检测:防止别人用你的一张照片来欺骗摄像头,检测摄像头前的是否是活人。

2、差异性验证

公司内部的人脸打卡系统和人脸门禁系统如何实现?

(1)第一种方案

使用公司员工相片作为数据集,训练一个CNN神经网络,当输入相片到CNN时,输出对应数据库中的哪一个人。

缺点

  • 公司员工数量相对于训练神经网络所需要的数据太少了。

  • 加入又来一个一位新员工,还需要将新员工的照片输入到神经网络中重新训练。

(2)第二种方案

构建一个检测差异性的神经网络,即将两张照片输入到一个神经网络中,输出一个评分结果:两张照片的人差异性越高,评分结果越高。如下图所示(第二张图片和右边的图片差异性最小,所以最相似):

优点

  • 可以获取很大的训练数据集,可以使用任何人的图片,不仅仅是公司内部员工的图片。

  • 网络训练好了之后,可以将摄像头前的人脸和数据库中的人脸进行一一对比,找到一个差异性最小的图片,说明是公司员工。

  • 假设新来的一名员工,只需要将该员工的人脸图片放入到员工数据库中即可。

3、如何实现差异性验证——Siamese网络

首先构建一个卷积神经网络,如下图

输入图片经过卷积层、池化层、全连接层,后面并没有接分类单元(sigmod、softmax)

然后将另外一张图片输入到同上面相同的神经网络中

因此对比两张图片差异的问题就转化成了对比两组激活值差异性的问题,可以使用如下公式来对比两组激活值的差异(差异函数)

 

上述公式的计算结果越大,说明这两张图片的差异越大。

4、如何训练差异性验证网络——三元组损失函数

需要一个合适的损失函数,使得神经网络会根据损失大小一步步的调整参数值,使损失越来越小,一步步的调整产生的激活值使得差异函数d的输出越来越准确,这个函数就是三元组损失函数

三元组损失函数

需要三张图片

一张为 Anchor图片,简称 A,第二张为 Positive 图片,简称 P。第三张为Negative图片,简称N。其中A和P是同一个人,A和N不是同一个人。所以A和P、A和N的差异函数关系如下

等价于

但是上述公式有个漏洞:神经网络可能为了满足上述公式,在调整参数时,使所有激活值都变成0,即 f(A) = f(P) = f(N) = 0,为了防止这种情况的发生,需要价格偏移量α,这个偏移量也称为间隔。

d(A,P) = || f(A)-f(P)|| * || f(A)-f(P)||

根据上述,可以得出三元组损失函数的公式:

通常我们不关心L小于0的情况,只要损失为0就够了,所以三元组损失函数会写成下面的形式(小于0的值用0来代替)

5、差异性验证网络的训练技巧

数据集的构成:一个人同时拥有多张图片,如每个人10张图片,1000个人就有10000张图片,这10张图片可以是同一个人在不同光线下的、不同发型等的图片。同一个人的两张图片和另外一个人的一张图片就可以组成(A,P,N)三元组。

训练时,同一个人要拿多张图片,但是在使用时只需要拿一张图片就够了。

如何选择图片来构成三元组

最好不要随机选择选择两个人组成三元组,因为这样选择可能使得两个人背身差异就很大,没有鉴别难度,导致神经网络学习速度变慢。所以应当尽量选择相似的两个人来组成三元组。

6、差异性验证网络的另一种训练方法——二元分类法

将两张图片输入到相同的神经网络中,分别得到两组激活值,之后接一个二元分类神经元,如果最终输出是1则表示两个图片100%是同一个人,反之则不是同一个人。

最后一个二分类神经元的主要工作原理

假设最后一个神经元使用的是Sigmoid激活函数,一般来说他不会使用两组激活值作为输入,而是使用两组激活值的差值作为输入。假设每组激活值的向量中有128个元素,则最后一个神经元的计算公式为:

得出预测后,可以使用二元分类损失函数来训练神经网络,比如使用交叉熵损失函数

训练技巧

可以使用预先计算方法,提前将图片的激活值计算出来,即数据库中存储的不是1000(假如公司有1000人)张图片,这样当员工刷脸时只需要跑一次神经网络就可以了。如下图,第二个神经网络计算就不需要跑了(红线划掉的部分)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值