AI笔记 - 网络训练 -人脸识别opensphere
opensphere
- 简介
- Hyperspherical face recognition
- Brief history of hyperspherical face recognition
- 理解1 - 高维空间
- 理解2 - 球面
- 理解3 - 衡量相似性(余弦相似度)
- 理解4 - 训练(损失函数)
- 理解5 - 训练过程
- opensphere地址
- 描述
- start
- 参考
简介
Hyperspherical face recognition
Hyperspherical face recognition ( 高维球面人脸识别 )是 深度人脸识别 领域的一种研究方法,核心思想是:将人脸图像映射到一个高维空间中的单位超球面上,通过优化特征空间中的类间角度间隔(angular margin)来提升识别性能。该方法通过引入 SphereFace 等模型,在训练过程中增大类间角度间隔,以减少类内最大距离和类间最小距离的差异。
Brief history of hyperspherical face recognition
理解1 - 高维空间
- 原始数据到特征空间:一张人脸图片(112x112x3)包含大量像素点,可以看作是一个极高维空间(例如112x112x3=37632维)中的一个点。这个极高维空间是混乱且没有良好结构的。
- 深度学习的作用:深度神经网络(如CNN)充当一个复杂的函数,将这个高维的原始数据点变换(或“嵌入”) 到另一个维度更低、但更具判别性的特征空间中(例如512维或1024维)。这个最终得到的特征向量被称为“人脸嵌入”。
理解2 - 球面
- L2归一化
- 在高维特征空间中,通常对学习到的人脸特征向量进行 L2归一化。意味着将向量的长度(模长)缩放到1
- 经此操作后,所有的人脸特征向量都落在了一个半径为1的超球面上。
- 几何解释
- 一个三维的球体,所有点都落在球面上,到球心的距离都是1。
- 高维球面是这个概念在更高维度(如512维)的推广
- 比较两人脸特征向量的相似性,从欧几里得距离 转为它们间的角度
理解3 - 衡量相似性(余弦相似度)
- 在超球面上,两个特征向量的相似度由它们间的夹角决定,人脸识别任务就变成了在超球面上寻找最近邻的问题
- 夹角越小,余弦值越接近1,表示两个人脸越相似
- 夹角越大,余弦值越接近-1,表示两个人脸越不相似。
理解4 - 训练(损失函数)
- 为了让网络学会将不同的人脸映射到超球面上正确的位置,需要设计特殊的损失函数。传统的Softmax损失函数在超球面范式下效果不佳,因此提出一系列边际惩罚损失函数,核心目标是:减小同一个ID内人脸的夹角,增大不同ID人脸的夹角。(类内聚,类间距)
损失函数名称 | 核心思想 | 贡献 |
---|---|---|
L-Softmax | 在Softmax中引入角度的乘法边际,让分类界限更严格 | 开创了在角度空间引入边际的思想 |
A-Softmax (SphereFace) | 对权重向量也进行归一化,将预测完全依赖于角度,并加入了更大的角度边际 | 首次明确提出了超球面流形的概念,是里程碑式的工作 |
CosFace | 余弦值上直接减去一个边际m:cos(θ)−m\cos(\theta) - mcos(θ)−m。目标logit变得更小,从而迫使网络学习更精确的特征 | 概念清晰,实现简单,效果显著 |
ArcFace | 角度上直接加上一个边际m:cos(θ+m)\cos(\theta + m)cos(θ+m)。是最直观的“加大夹角”的方式,几何解释非常明确 | 当前最流行、最广泛使用的损失函数,在多数场景下提供了最佳性能 |
Circle Loss | 统一了类别内和类别间的优化,为每个相似度分数分配一个灵活的边际,动态调整优化力度 | 一个更通用的框架,进一步提升了性能 |
理解5 - 训练过程
- 将输入图像通过深度神经网络(如ResNet)得到特征向量
- 对特征向量进行L2归一化,将其投影到超球面上
- 将归一化后的特征与同样经过L2归一化的分类层权重进行点积,得到角度/余弦值
- 使用ArcFace等损失函数计算预测值与真实标签的差距
- 通过反向传播更新网络参数,使得同类的特征在球面上不断“聚集”,类间的特征不断“远离”
opensphere地址
- github地址
- 官网地址
描述
OpenSphere是一个基于PyTorch的易于使用的高维球面(超球面)人脸识别库,为超球面人脸识别研究提供了一个一致且统一的训练和评估框架。该框架将损失函数与其他变化组件(如网络架构、优化器和数据增强)解耦。它能够在流行的基准测试上公平比较超球面人脸识别中的不同损失函数,作为一个基准平台,用于复现已发表的结果。
start
git clone -b OpenSphere_v0 --single-branch https://github.com/ydwen/opensphere.gitcd opensphereconda env create -f environment.yml# 下载训练集,验证集并训练# 切换到OpenSphere_v0分支可以看到config/train/arcface,cosface的配置文件bash scripts/dataset_setup.shCUDA_VISIBLE_DEVICES=0,1 python train.py --config config/train/vggface2_sfnet20_sphereface2.yml# 修改yml的工程路径未新训练的路径,Test the model:CUDA_VISIBLE_DEVICES=0,1 python test.py --config config/test/ijbb.yml
参考
opensphere.world
sphereface
CosFace_pytorch
arcface_pytorch