1. 人脸识别概述
各位同学好,我是老周。在AI视觉领域摸爬滚打了快十年,人脸识别算是我接触最早、也最常被问到的一个方向。很多人一上来就问:“能不能直接给我一个模型,让我做人脸识别?”
嗯,这个问题其实没那么简单。咱们得先把概念理清楚。
1.1 人脸识别技术发展史
人脸识别这玩意儿,其实从上世纪60年代就有人开始研究了。我把它分成四个阶段,你一看就明白:
| 阶段 | 时间 | 核心方法 | 代表事件 |
|---|---|---|---|
| 萌芽期 | 1960s - 1990s | 几何特征、模板匹配 | Woody Bledsoe 手动标注人脸特征点 |
| 发展期 | 1990s - 2010s | PCA(特征脸)、LBP、HOG | MIT、CMU 推动的早期算法竞赛 |
| 爆发期 | 2012 - 2017 | 深度学习(CNN、FaceNet、DeepFace) | LFW 准确率突破 99.5% |
| 成熟期 | 2018 - 至今 | ArcFace、CosFace、MagFace、Transformer | 百万级底库实时检索、端侧部署 |
我个人印象最深的是2014年。那时候DeepFace刚出来,LFW上准确率直接干到97%以上。说实话,当时我还在用LBP+SVM做项目,看到这个结果,心里就一个念头——传统方法该退场了。
关键转折点:2015年Google的FaceNet提出Triplet Loss,把人脸映射到欧几里得空间。从此,人脸识别从“分类问题”变成了“度量学习问题”。这个思路,直到今天依然是主流。
1.2 人脸识别 vs 人脸比对
这两个概念,很多人混着用。但在我做项目的时候,必须分得清清楚楚。
- 人脸识别(Identification):1:N 问题。给你一张脸,从底库N个人里找出他是谁。说白了就是“你是谁?”
- 人脸比对(Verification):1:1 问题。给你两张脸,判断是不是同一个人。说白了就是“你俩是不是同一个人?”
举个例子你就懂了:
- 机场安检刷脸过闸机 → 人脸比对(1:1,跟身份证照片比)
- 警方在监控里找嫌疑人 → 人脸识别(1:N,跟通缉库比)
我的经验:做项目时,1:1 比 1:N 好做得多。为什么?因为1:N 的底库越大,误报率就越高。我曾经在10万人底库上做过测试,阈值调低一点,每天误报几百次;调高一点,漏报又受不了。所以,阈值调参是门手艺活。
1.3 应用场景分析
人脸识别现在几乎无处不在。我挑三个最典型的场景聊聊:
安防
- 需求:高召回、低误报、实时性
- 难点:光照差、角度偏、遮挡多、底库大
- 我踩过的坑:有一次在火车站部署,白天效果还行,一到晚上红外补光下的人脸,模型直接崩了。后来加了红外数据增强,才勉强过关。
金融
- 需求:高精度、活体检测、防攻击
- 难点:用户配合度低、手机端环境复杂
- 关键点:金融场景必须上活体检测。我见过用一张照片就骗过系统的案例,那之后我再也不敢省活体模块。
社交
- 需求:快速、用户体验好、隐私合规
- 难点:美颜滤镜干扰、表情夸张
- 有意思的事:某社交App上线人脸聚类功能后,用户量涨了30%。但同时也出现了“撞脸”误分组的问题——两个长得像的陌生人被分到一个相册里,场面一度很尴尬。
1.4 行业主流方案对比
现在市面上主流的人脸识别方案,我整理了一张表:
| 方案 | 核心算法 | 优势 | 劣势 | 典型场景 |
|---|---|---|---|---|
| ArcFace (InsightFace) | Additive Angular Margin Loss | 精度高、社区活跃、开源 | 训练调参复杂 | 安防、金融 |
| FaceNet | Triplet Loss | 思路经典、可解释性强 | 训练慢、难收敛 | 学术研究 |
| CosFace | Large Margin Cosine Loss | 收敛快、实现简单 | 精度略低于ArcFace | 中小规模应用 |
| 商业SDK(商汤、旷视、百度) | 闭源、自研 | 开箱即用、效果好 | 贵、依赖厂商 | 企业级项目 |
避坑指南:我曾经在一个项目里直接用了某开源模型,没做任何微调。结果在东南亚人脸上准确率掉了8个点。为什么?训练数据里亚洲人脸太少。所以,别迷信开源模型,一定要在目标场景上做评估。
1.5 本章知识体系
下面这张图,帮你把本章的核心逻辑串起来:
这张图把本章的五个核心模块串在了一起。你顺着箭头看,就能理解人脸识别这个领域是怎么从历史走到今天,又怎么落到具体场景和方案上的。
一句话总结:人脸识别不是单一技术,而是一个系统工程。理解它的发展脉络、分清识别与比对的差异、选对场景方案,是做好模型训练的第一步。