机器学习:人脸识别
如果用 CNN 按分类做验证的话,会有以下问题
- 需要每个人都给多个样本照片,比如每个人要提供 100 张自己的人脸照片供模型学习,这本来就不容易,加上人的数量也多,就更是个问题
- 哪怕有足够的样本数据,另一个问题是人员组成很容易变化,比如公司员工经常变化(大组织甚至每天都有人员进出),分类的数量和类别也就变了,不可能每次都重新训练
如果是为了识别部分公众人物,倒是可以这样做,因为一方面网上有很多公众人物的照片,另一方面公众人物的数量不多,而且也较为稳定
Triplet Loss (三元组损失)
训练集的每个数据,是一个三元组,由 Anchor (锚)、Positive (正确)、Negative (错误) 的三张照片组成
其中 Positive 和 Anchor 是同一个人,而 Negative 和 Anchor 不是同一个人
将照片分别放入卷积网络,得出一维特征值,比如 512 维特征值
然后计算 Anchor 的特征值和 Positive 的特征值的距离 d(A,P)
以及 Anchor 的特征值和 Negative 的特征值的距离 d(A,N)
要求 d(A,N) 至少要比 d(A,P) 大某个值,即 d(A,P) + a <= d(A,N)
损失函数
有三种三元组
easy triplets:loss 为 0 d(A,P) + a <= d(A,N) 的时候损失取 0
hard triplets:d(A,P) > d(A,N)
semi-hard triplets:d(A,P) + a > d(A,N) > d(A,P) d(A,N) 比 d(A,P) 大但差距不到 a
训练中如果有样本计算出来的是 semi-hard 那么训练效果会比较好,模型会被调整到满足 loss 为 0
后面验证的时候就是用训练出来的 CNN 网络,得出两张图片的特征,再计算特征距离,小于 a,就认为是同一个人
二分类法
在卷积层提取出特征值,假设特征值是 n 维(比如 512 维),两张图片的特征值分别是 X1 和 X2
不是简单计算距离,而是计算另一个值
就是同一个人, 就不是
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界