本节摘要:特征提取把"对齐后的标准脸"编码成一段紧凑的浮点向量,这就是第 1 章说的"身份签名"。它的全部追求浓缩成四个字:稳定可分——同一个人各种姿态光照下给出的向量尽量靠近,不同的人尽量拉远。本节对照手工特征(LBP、HOG、Gabor)与深度嵌入(FaceNet、ArcFace 风格)两条路线,让你理解现代方案为什么赢在"特征不是人定而是数据学出来的"。
阅读完本节,你应当能够:
到了这一步,画面已经摆正了。但摆在模型面前的仍是一张 112×112 的彩色像素矩阵——几万个数,绝大多数和"你是谁"无关,全是发型、背景、肤色、光影。特征提取要做的,是越过这些表象,抽出几百万维里真正决定"人群区别"的那几十几百缕信号,再压成一段向量。这段向量以后要反复和库里的千万条比对,所以它必须满足一个近乎苛刻的要求:同一人不管怎么换箱子换背景,给出来的向量都要"几乎一样";不同人给出来的向量,就算长得再像,也要"差得开"。
它们靠人设计规则,干的事其实很像:从局部结构里抓对比关系或方向梯度,对光照相对钝感。
以局部二值模式 LBP 为例:对每个像素,比较它与周围一圈邻域的大小,邻域比中心亮记为 1、暗记为 0,这一圈 0/1 就构成一个局部"位型",再把整张脸统计成一张直方图作为特征。它的聪明之处在于吃进了"局部明暗关系"而不是绝对亮度,所以对均匀光照变化不敏感;短板也明显——只抓局部纹理,全局结构、姿态变化照样过敏。
# LBP 的核心思想:用邻域相对明暗编码局部结构 import numpy as np def lbp_code(center, neighbors): # 一圈邻域归一化到3x3 code = 0 for i, nb in enumerate(neighbors): # 从左上角顺时针排 code |= (1 if nb >= center else 0) << i return code center, ring = 128, [90, 200, 60, 255, 100, 80, 210, 40] print(bin(lbp_code(center, ring))) # 输出 e.g. 0b1010100
手工特征的病根统一都在这:规则由人设计,人想不到的结构它就没有,跨种族、跨年龄这类凭直觉插不上的变比,往往稳不住。
深度方案把"什么是可分特征"的任务整个交给数据。把标准脸送进卷积网络(主干可以是 ResNet 这类),网络最后一层盘出一段几百维向量——这就是嵌入向量。训练时通过网络(三元组损失、角度间隔损失等,第 3.4、3.5 节展开),一只无形的手持续牵引,让同一人投影尽量挤在一起、不同人尽量散开。最终反映到向量层面,就是"同类近、异类远"变成可优化的硬指标,而不是期待中的巧合。FaceNet、ArcFace 这些名字,本质都是"怎么训这张网络才最可分"的答案。
用一句话总结两条路线:手工特征问"我该看什么才像在识人",深度嵌入问"数据告诉我看什么才能识人"。 后者的向量维度更高、判别力更强,代价是海量数据与算力。
本质上是把一张张脸"摆放"进一个抽象空间里,让同一个人挤在一处、不同人彼此拉开。下面这张示意图把这种布局画给你。

左边一圈红点代表同一个人在不同光线、表情、姿态下的所有照片,它们被挤压成一个紧密的小球;右边散布的各色圆点代表不同的人,各自成团、彼此隔开。识别比对时,"像不像"就看"查询向量落在这个空间的哪个球附近"。训练的一个核心目标,就是让左右这种布局越来越清晰——它由第 3.3、3.4 节的度量与损失共同决定。
嵌入维度过高(比如上千维)并不总意味着更好。过高的维度会放大与区分无关的细节、拖慢存储与检索,而且很多维度其实是冗余。经验上几百维就足以把亿级规模的身份证、人脸库分得开;维度选择要和你的库规模、检索设备的算力一起定,而不是"越大越高级"。这也正好呼应"宁可把信号压得刚好,也别把噪声一并放大"这个大方向。
手工特征与深度嵌入在"谁设计、抓什么、适合谁"上根本不同,写进一张表最清楚:
| 维度 | 手工特征(LBP/HOG) | 深度嵌入(CNN) |
|---|---|---|
| 特征从哪来 | 人设计的算子 | 网络从数据自学 |
| 抓什么 | 局部纹理/梯度结构 | 高阶可分语义 |
| 可分性 | 一般 | 强,可随数据提升 |
| 跨姿态/跨族群 | 弱 | 强 |
| 成本 | 轻、可解释 | 需数据与算力 |
| 适合场景 | 光照稳定的老场景 | 主流新方案全用 |
💡 关键直觉:特征质量看"可分性",不看"观感"。一段抽象向量能不能把"亲兄弟"分开,比它看起来像不像脸重要得多。
⚠️ 常见坑:拿像素级还原度去夸特征提取。好特征不是"拍得清楚",而是"同一人揉成一团、不同人撕得开"。
向量已到手上。下一节要把它送进比对台——和库里的千万条签名扳手腕,算出"像不像"。