第四部分 人脸识别和神经风格转换 - 1 笔记

4.1 什么是人脸识别?
What is face recognition?

实用的人脸识别系统:人脸识别 + 活体检测


人脸验证 vs 人脸识别
人脸验证(Face verification):输入是一张图片以及一个人的名字/ID,输出是验证图片是否是这个人,即1对1问题,分辨图片和ID是否一一对应。
人脸识别(Face recognition):假设有K个人的数据库,输入一个人图片,需要从数据库中找到这个人对应的ID或者不识别。这是一个1对K的问题,针对K个人,识别的错误几率是上述的K倍,需要更高准确率的人脸验证系统。
提高人脸验证的准确率之所以难,原因之一在于需要解决 One-shot learning问题。

4.2 One-shot learning
一次学习

在一次学习问题中,只能通过一个样本进行学习,以能够认出同一个人。大多数人脸识别系统都需要解决这个问题,因为在数据库中每个雇员或者组员可能都只有一张照片。
有一种办法是,将人的照片放进卷积神经网络中,使用softmax单元来输出4种,或者说5种标签,分别对应这4个人,或者其他,softmax会有5种输出。但实际上这样效果并不好,因为如此小的训练集不足以去训练一个稳健的神经网络。并且当有新人加入团队时,将会有5个组员需要识别,所以输出就变成了6种,这时需要重新训练你的神经网络。这种方法显然不太实际。
学习相似度(similarity)

定义影像相似度函数d(img1,img2)。当img1,img2是同一个人的影像时,函数的输出应该很小,当不是同一个人的影像时,函数的输出应当较大。如何衡量输出值得大小呢?可以定义一个阈值τ,≤τ时为同一个人,≥τ时为不同的人。τ是一个超参数。
假设已经学到了这样的函数d,如何进行测试呢? 假设测试图片为img0,将img0同数据库中每个人的图像作比较计算出相似度d,根据阈值τ,小于阈值的最小函数值对应的数据图像ID就是测试图像对应人物的ID,若d值均大于阈值,则说明数据库中不存在测试图像对应的人物。而且,当新员工加入时,仅需要将新员工的图像加入到数据库中即可,并不用重新修改网络结果或者修改网络参数。
学习相似度函数需要用到孪生网络( Siamese network)。

4.3 Siamese 网络
Siamese network

卷积神经网络一般会在网络的最后加入全连接层,然后根据网络的作用再附加不同的结果输出函数(例如softmax)。本节中,不考虑softmax等函数,仅关注网络最后的全连接层,假设其输出维度为128,将网络视为特征提取器,则可以认为,最终的全连接层128向量即为图像对应的特征向量。假设输入图片x1,定义其128维输出为f(x1),同理,图像x2的输出可以定义为f(x2)。假设网络已经能够很好根据相似度提取图像特征,那么可以定义相似度函数d为这两个图像输出的范数:

对应两个不同的输入,应用相同的网络,然后对结果进行比较,称这种网络为 Siamese network

训练这样的网络,就是使得网络能够对定义正确的图像编码函数f(xi)。何为正确?就是说这样的编码函数能够使得同一个人不同的图像相似度函数d较小,不同人的图像,相似度函数d较大。为了训练这样的网络,需要定义有效的损失函数, FaceNet中引入了三元组损失函数( Triplet loss)。

4.4 Triplet损失
Triplet loss
1、定义学习的目标

定义Anchor图片、Positive图片、Negative图片,Positive与Anchor为同一人,Negative与Anchor为不同人,将这三种不同图片简写为A、P、N。那么A、P之间的相似度函数值应该很小,A、N之间的相似度函数值则应很大。应有:

这个不等式存在问题:1、如果学得的编码函数使得所有图像的编码值均为0,那么式子是成立的;2、如果学得的编码函数使得所有图像的编码值均为相等,那么式子也是成立的。显然这样的编码函数是没有意义的。为了有效避免这些情况,引入α值(超参),类似SVM的间隔margin,不等式修改为:

α值作用举例:假设d(A,P) = 0.5,d(A,N) = 0.51,d(A,N)要比d(A,P) 大,但是大的不多,此时如果判断N、P不为同一人则显得有点not convincing。令α = 0.2,那么d(A,N)至少要大于0.5+0.2 = 0.7才能判断N、P不为同一人,这样的结果显然更可靠。
2、定义损失函数

定义损失函数如下:

当图中绿色部分为负数时(P、N特征分明,编码效果好),那么损失函数值将为0。当绿色部分为正数(编码效果差)时,那么损失函数值即为绿色部分对应的值,也就是需要优化的目标值。最小化损失函数的过程,就是使得损失函数逐渐小于等于0的过程。假设训练数据集中有1000个人对应的10000影像,大约一个人对应10张影像,那么首先要做的就是根据三元组选取的规则(A、N、P)生成训练样本集。
3、选择三元组训练集

如果从训练集中,随机地选择A、N、P,遵守A和P是同一个人,而A和N是不同的人这一原则。如果随机的选择它们,那么约束条件d(A,P)+α≤d(A,N)很容易达到,因为随机选择的图片,A和N比A和P差别很大的概率很大,而且差距可能远大于α,这样的情况下网络并不能从中学到什么。
合理的构建三元组数据集,就不能随机的选择A、N、P,需要尽可能的选择难以训练的A、N、P,那训练的条件是d(A,P)≈d(A,N),由于α的存在,选择难的三元组可以使得d(A,P)变小、d(A,N)变大,这样GD才会有效。
4、小结

图片集合——>三元组数据集(hard)——>最小化损失函数——>训练完成,根据网络编码器计算相似度用于识别。
调优策略:迁移学习,加速网络收敛过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值