2.4 特征提取固化向量


2.4 特征提取固化向量

本节摘要:特征提取把"对齐后的标准脸"编码成一段紧凑的浮点向量,这就是第 1 章说的"身份签名"。它的全部追求浓缩成四个字:稳定可分——同一个人各种姿态光照下给出的向量尽量靠近,不同的人尽量拉远。本节对照手工特征(LBP、HOG、Gabor)与深度嵌入(FaceNet、ArcFace 风格)两条路线,让你理解现代方案为什么赢在"特征不是人定而是数据学出来的"。

学习目标

阅读完本节,你应当能够:

  1. 说清"特征向量"为什么被喻为身份签名,它的两个硬性要求是什么。
  2. 列举手工特征代表(LBP、HOG)各自的灵感与局限。
  3. 解释深度嵌入如何让"同类近、异类远"成为可学习的指标。
  4. 判断某条特征路线是从人设计还是从数据学出来的。

一、问题与直觉

到了这一步,画面已经摆正了。但摆在模型面前的仍是一张 112×112 的彩色像素矩阵——几万个数,绝大多数和"你是谁"无关,全是发型、背景、肤色、光影。特征提取要做的,是越过这些表象,抽出几百万维里真正决定"人群区别"的那几十几百缕信号,再压成一段向量。这段向量以后要反复和库里的千万条比对,所以它必须满足一个近乎苛刻的要求:同一人不管怎么换箱子换背景,给出来的向量都要"几乎一样";不同人给出来的向量,就算长得再像,也要"差得开"。

二、核心原理:两条路线的来龙去脉

路线一:手工特征(LBP、HOG、Gabor)

它们靠人设计规则,干的事其实很像:从局部结构里抓对比关系或方向梯度,对光照相对钝感。

以局部二值模式 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)
特征从哪来 人设计的算子 网络从数据自学
抓什么 局部纹理/梯度结构 高阶可分语义
可分性 一般 强,可随数据提升
跨姿态/跨族群
成本 轻、可解释 需数据与算力
适合场景 光照稳定的老场景 主流新方案全用

三、工程实践要点

  • 别用图像分辨率之间的相关性衡量特征质量——分辨率是表象,可分性才是根,测试要在"同一人多样本、不同人强相似"这两类难例上做晋升压力测试。
  • 嵌入维度过高并非总更好:几百维足够区分千万级库,维度过高还可能放大不必要细节、拖慢检索;选维度要看库规模和检索设备。
  • 手工特征在今天不是废纸,光照稳定、算力受限、要可解释的老场景仍有用武之地;主流新方案都走向深度嵌入。

💡 关键直觉:特征质量看"可分性",不看"观感"。一段抽象向量能不能把"亲兄弟"分开,比它看起来像不像脸重要得多。

⚠️ 常见坑:拿像素级还原度去夸特征提取。好特征不是"拍得清楚",而是"同一人揉成一团、不同人撕得开"。

本节要点回顾

  • 本质:把标准脸压成紧凑向量,硬指标是稳定加可分。
  • 手工特征:LBP、HOG 按人定规则抓局部结构,对光照钝感但对姿态、跨族群薄弱。
  • 深度嵌入:网络从数据里学出"同类近、异类远"的向量,判别力远超手工。
  • 灵魂:特征不是人构想出来的,是可学习、可优化的指标。
  • 选型:看库规模、算力、可解释性三项权衡。

向量已到手上。下一节要把它送进比对台——和库里的千万条签名扳手腕,算出"像不像"。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U