【人脸识别中的“类内差异”和“类间差异】
核心问题:人脸识别中的“类内差异”和“类间差异”
想象你在教一个小朋友认人:
-
类间差异(不同人之间的区别):
- 目标:让小朋友能分清“爸爸”和“妈妈”。
- 方法:指着爸爸说“这是爸爸”,指着妈妈说“这是妈妈”。
- 对应DeepID1:只用SoftmaxLoss训练模型分类,模型只学会“爸爸和妈妈是不同的人”。
-
类内差异(同一个人的不同状态):
- 问题:如果爸爸换了发型、戴上口罩,小朋友可能认不出来了(因为训练时没见过这种样子)。
- 对应DeepID1的缺陷:模型没学过“同一个人不同照片的特征要相似”,所以容易误判。
DeepID1为什么不够好?
场景1:同一人误判(类内差异大)
- 例子:
训练时只有爸爸的正面照,测试时输入爸爸的侧脸照。- DeepID1可能输出:“这不是爸爸”(因为侧脸特征和正面特征差异大)。
- 本质:模型没被要求“爸爸的不同照片特征必须接近”。
场景2:不同人误判(类间差异小)
- 例子:
训练时没有“双胞胎”数据,测试时遇到双胞胎兄弟。- DeepID1可能输出:“这两人是同一个人”(因为特征偶然接近)。
- 本质:模型只保证已知类别分得开,但无法处理未知类别的相似性。
DeepID2的改进:加一个“验证老师”
DeepID2在SoftmaxLoss(分类老师)基础上,新增了一个验证Loss(L2/L1 Loss),相当于第二个老师:
-
SoftmaxLoss老师:
- 负责教模型“分清不同人”(类间差异)。
- 比如:“爸爸和妈妈的特征距离要远”。
-
L2/L1 Loss老师:
- 负责教模型“同一个人的不同照片要相似”(类内差异)。
- 比如:“爸爸的正面照和侧脸照的特征距离要近”。
实际效果对比
情况 | DeepID1(只有Softmax) | DeepID2(Softmax + L2/L1) |
---|---|---|
同一人的不同照片 | 可能误判为不同人(特征差异大) | 更可能正确识别(特征被强制接近) |
不同人的相似照片 | 可能误判为同一人(特征偶然接近) | 更可能正确区分(类间差异被保持) |
再举个栗子🌰
假设人脸特征是“身高”:
-
DeepID1:
- 只要求“爸爸身高>180cm,妈妈身高<160cm”(类间差异)。
- 但爸爸有时穿鞋(+5cm)、有时光脚(-5cm),模型可能把穿鞋和光脚的爸爸当成两个人。
-
DeepID2:
- 额外要求“爸爸的身高波动必须小”(类内差异),比如强制穿鞋和光脚的身高差<3cm。
- 同时保持“爸爸和妈妈的身高差>20cm”(类间差异)。
总结
- DeepID1:单任务(分类),可能“粗心大意”。
- DeepID2:双任务(分类+验证),既“火眼金睛”又“心细如发”。
- 关键:通过联合优化,模型在未知数据(如新角度、新表情)上更鲁棒。
类似生活中:不仅要学会区分苹果和橘子(类间差异),还要知道“青苹果和红苹果都是苹果”(类内差异)。