人脸识别和人脸验证的区别
one_shot learning
通过一个样例去识别一个人(只有一个训练样例)
核心问题:使得模型去学习一个样例使得之后其能再次识别这个目标
因为数据库中每个员工都只有一个样本
之所以不能用传统的cnn分类,原因一:训练样本太少;原因二:要是有新员工加入,又要重新训练整个模型
取而代之的学习方式是去学习一个相似性函数
孪生网络
求两个输入图片输入同一个网络的编码之差,
如果是同一个人编码之差就小
利用tripletloss进行人脸识别的训练
首先需要图像对
希望anchor和正样本尽可能靠近,和负样本尽可能远离
之所以叫做triplet也就是因为常常会同时看三个图片A,P,N
我们期待的损失
最后需要满足的条件
为了进一步拉大这两个距离的差距,再加上一个间隔margin
具体损失定义:
之所以要取一个max,是为了使得损失小于0的时候使得损失等于0,即当前这个三元组非常符合正样本相似,负样本不同的目标,就不需要反传更新参数。
对训练集进行成对匹配
数据选择问题
如果随机地从负样本集,正样本集种选择训练样本,这个条件很容易达到,完全无法很好地训练。
尽可能选择“难例”进行训练
难例APN组合
即正样本距离要尽可能接近负样本距离地三元组
把人脸识别转化为二分类问题
同样是计算相似性 输出一个数值 如果是1就是同一个人 反之则不是
训练上依旧是用tripletloss没啥区别,就输出使用二分类地概念
一个部署地技巧
提前计算好对应员工的特征,员工进门的时候提供的新照片求特征后拿去与数据库中的特征进行比对。