sphereface
SphereFace 是一款专为高精度人脸识别设计的开源深度学习框架,源自 CVPR 2017 的经典论文。它主要解决了传统人脸识别方法在应对复杂光照、姿态变化及大规模身份分类时,特征区分度不足的难题。
该工具提供了一套完整的处理流水线,涵盖人脸检测、对齐到最终识别的全过程。其核心技术创新在于提出了“深度超球面嵌入”理念,通过独特的角间隔软最大损失函数(A-Softmax Loss),强制神经网络在超球面流形上学习具有更大类间间隔和更小类内差异的特征表示。与标准残差网络不同,SphereFace 去除了批归一化层并采用预激活单元,从而在几何意义上更纯粹地优化角度特征,显著提升了模型的判别能力。
SphereFace 非常适合计算机视觉领域的研究人员、算法工程师以及希望深入理解度量学习机制的开发者使用。项目不仅提供了基于 Caffe 的完整训练代码和多种深度的预训练模型(如 20 层至 64 层架构),还包含了在 CASIA-WebFace 和 LFW 等主流数据集上的复现指南。对于想要探索角度边界学习前沿技术或构建高鲁棒性人脸系统的团队来说,这是一个极具参考价值的基准实现。
使用场景
某安防科技公司的算法团队正在为大型园区的门禁系统升级人脸识别模块,旨在解决复杂光照和角度下员工识别率低的问题。
没有 sphereface 时
- 特征区分度不足:传统软最大值(Softmax)损失函数仅关注分类正确性,导致不同人脸在特征空间中的夹角区分不明显,难以分辨长相相似的同事。
- 姿态鲁棒性差:当员工侧身或低头刷卡时,由于缺乏对角度边界的显式约束,模型极易将同一人的不同角度误判为不同身份。
- 误识率居高不下:在百万级底库检索中,因特征分布不够紧凑,系统频繁出现将陌生人误认成授权人员的“假阳性”警报。
- 调优依赖经验:工程师不得不花费大量时间手动调整阈值和数据增强策略,却难以从几何本质上提升模型的判别能力。
使用 sphereface 后
- 超球面嵌入增强:sphereface 引入深度超球面嵌入技术,通过角间隔损失函数(A-Softmax)强制拉大不同类别间的角度距离,显著提升了相似人脸的区分度。
- 几何一致性提升:利用归一化权重和偏置为零的策略,模型在超球面上学习到更具几何解释性的特征,即使在大角度姿态下也能精准锁定同一身份。
- 类间分离性优化:借助其特有的角费雪评分(Angular Fisher score)指导训练,特征分布更加紧凑,大幅降低了高并发场景下的误识率。
- 端到端流程简化:直接复用官方提供的包含检测、对齐到识别的完整流水线,团队无需重复造轮子即可在 CASIA-WebFace 等数据集上复现 SOTA 效果。
sphereface 通过将人脸识别问题转化为超球面上的角度度量学习,从根本上解决了传统方法在特征判别性和几何鲁棒性上的瓶颈。
运行环境要求
- Linux
需要支持 CUDA 的 NVIDIA GPU(具体型号和显存未说明,需自行配置 Caffe CUDA 版本)
未说明

快速开始
SphereFace: 用于人脸识别的深度超球嵌入
作者:刘伟阳、温彦东、于志德、李明、Bhiksha Raj 和 宋乐
许可证
SphereFace 根据 MIT 许可证发布(详情请参阅 LICENSE 文件)。
更新
2022年4月10日:如果您正在寻找一个易于使用且性能优异的 SphereFace PyTorch 实现,我们现在有了!请查看我们的官方 SphereFace PyTorch 重实现 这里。
2018年8月14日:我们推荐一篇有趣的 ECCV 2018 论文,该论文全面评估了 SphereFace(A-Softmax)在当前广泛使用的人脸数据集以及他们提出的噪声可控 IMDb-Face 数据集上的表现。感兴趣的用户可以尝试在自己的 IMDb-Face 数据集上训练 SphereFace。请参阅 这里。
2018年5月23日:我们在技术报告中提出了一种显式增强类间可分性的新方法 SphereFace+。请查看 这里。代码已发布 这里。
2018年2月1日:应要求,发布了 SphereFace-64 的 prototxt 文件。
2018年1月27日:我们更新了 SphereFace 论文的附录,增加了有用的实验和分析。请参阅 这里。内容包括:
- 去除最后一个 ReLU 的直观解释;
- 为什么我们要对权重进行归一化,而不仅仅是为了获得更多的几何解释?
- 将偏置置零的实证实验;
- 更多关于 MNIST 数据集上 A-Softmax 损失的二维可视化;
- 角度 Fisher 分数,用于评估特征的角度判别能力,这是一种新的、直接的评估指标,不同于最终的准确率。
- 在 MegaFace 数据集上使用不同卷积层的 SphereFace 实验;
- A-Softmax 损失的退火优化策略;
- MegaFace 挑战赛中 3 片拼接集成策略的详细说明;
2018年1月20日:我们更新了一些资源,以总结目前角度间隔学习领域的最新进展。请参阅 这里。
目录
简介
该仓库包含了使用 SphereFace 进行深度人脸识别的完整流程(包括所有预处理步骤)。识别流程主要分为三个步骤:人脸检测、人脸对齐和人脸识别。
SphereFace 是一种最近提出的人脸识别方法。它最初发表在一篇 arXiv 技术报告 中,随后又在 CVPR 2017 上发表。包含更多实验的最新论文可以在 arXiv 或 这里 找到。为了方便人脸识别研究,我们提供了一个使用论文中描述的 20 层 CNN 架构(即 SphereFace-20)在 CAISA-WebFace 上训练,并在 LFW 上测试的示例。
在 SphereFace 中,我们的网络架构以残差单元为基本构建块,但与标准 ResNet 有很大不同(例如,未使用 BatchNorm,用 PReLU 替代 ReLU,初始化方式也不同等)。我们提出了用于人脸识别的 4 层、20 层、36 层和 64 层架构(详细信息可在 论文 和 prototxt 文件 中找到)。我们在此提供了 20 层架构作为示例。如果我们的架构对您的研究有所帮助,请考虑引用我们的论文。
在小规模训练集协议下,SphereFace 在 MegaFace 挑战赛 中达到了当时最先进的验证性能(此前排名第一)
引用
如果您在研究中发现 SphereFace 很有用,请考虑引用:
@InProceedings{Liu_2017_CVPR,
title = {SphereFace: 用于人脸识别的深度超球嵌入},
author = {刘伟阳、温彦东、于志德、李明、Bhiksha Raj 和 宋乐},
booktitle = {IEEE 计算机视觉与模式识别会议 (CVPR)},
year = {2017}
}
我们另一项密切相关的 ICML'16 工作(更多信息):
@InProceedings{Liu_2016_ICML,
title = {卷积神经网络的大间隔 Softmax 损失},
author = {刘伟阳、温彦东、于志德、杨萌},
booktitle = {第 33 届国际机器学习大会论文集},
year = {2016}
}
要求
Matlab的要求Caffe和matcaffe的要求(详见:Caffe 安装说明)MTCNN的要求(详见:MTCNN - 人脸检测与对齐) 和Pdollar toolbox的要求(详见:Piotr 的图像与视频 Matlab 工具箱)。
安装
克隆 SphereFace 仓库。我们将您克隆的目录称为
SPHEREFACE_ROOT。git clone --recursive https://github.com/wy1iu/sphereface.git构建 Caffe 和 matcaffe
cd $SPHEREFACE_ROOT/tools/caffe-sphereface # 现在按照这里的 Caffe 安装说明进行操作: # http://caffe.berkeleyvision.org/installation.html make all -j8 && make matcaffe
使用方法
在成功完成安装后,您就可以运行以下所有实验了。
第一部分:预处理
注意:在此部分中,我们假设您位于目录 $SPHEREFACE_ROOT/preprocess/ 下。
下载训练集(
CASIA-WebFace)和测试集(LFW),并将它们放置在data/目录中。mv /your_path/CASIA_WebFace data/ ./code/get_lfw.sh tar xvf data/lfw.tgz -C data/请确保
data/目录下包含这两个数据集。使用
MTCNN检测 CAISA-WebFace 和 LFW 数据集中的人脸及面部关键点(参见:MTCNN - 人脸检测与对齐)。# 在 Matlab 命令窗口中 run code/face_detect_demo.m这将生成一个文件
dataList.mat,位于result/目录中。使用相似变换将人脸对齐到标准姿态。
# 在 Matlab 命令窗口中 run code/face_align_demo.m这将创建两个文件夹(
CASIA-WebFace-112X96/和lfw-112X96/),位于result/目录中,其中包含对齐后的 face 图像。
第二部分:训练
注意:在此部分中,我们假设您位于目录 $SPHEREFACE_ROOT/train/ 下。
获取训练图像和标签的列表。
mv ../preprocess/result/CASIA-WebFace-112X96 data/ # 在 Matlab 命令窗口中 run code/get_list.m对齐后的 face 图像从 preprocess 文件夹移动到 train 文件夹。同时,在
data/目录下会生成一个名为CASIA-WebFace-112X96.txt的列表文件,用于后续的训练。训练 sphereface 模型。
./code/sphereface_train.sh 0,1训练完成后,模型文件
sphereface_model_iter_28000.caffemodel和对应的日志文件sphereface_train.log将被放置在result/sphereface/目录中。
第三部分:测试
注意:在此部分中,我们假设您位于目录 $SPHEREFACE_ROOT/test/ 下。
获取 LFW 的配对列表(查看 2)。
mv ../preprocess/result/lfw-112X96 data/ ./code/get_pairs.sh确保 LFW 数据集和
pairs.txt文件都位于data/目录中。提取深度特征并在 LFW 上进行测试。
# 在 Matlab 命令窗口中 run code/evaluation.m最终我们会得到
sphereface_model.caffemodel、提取的特征pairs.mat(位于result/文件夹中),以及在 LFW 上的准确率如下:fold 1 2 3 4 5 6 7 8 9 10 AVE ACC 99.33% 99.17% 98.83% 99.50% 99.17% 99.83% 99.17% 98.83% 99.83% 99.33% 99.30%
模型
- 网络架构可视化(工具来自 ethereon):
- SphereFace-20:链接
- 模型文件
- SphereFace-20:Google Drive | 百度网盘
- 第三方提供的 SphereFace-4 和 SphereFace-6:这里,由 zuoqing1988 提供
结果
按照说明,我们完整地执行了整个流程五次。以下是我们在 LFW 上的准确率。总体而言,我们报告的是平均值,但此处发布了 model-3。
实验 #1 #2 #3 (已发布) #4 #5 ACC 99.24% 99.20% 99.30% 99.27% 99.13% 其他中间结果:
- LFW 特征:Google Drive | 百度网盘
- 训练日志:Google Drive | 百度网盘
视频演示
请点击图片观看 YouTube 视频。对于优酷用户,请点击这里。
详细信息:
- 这是一个开放集人脸识别场景。视频按帧处理,遵循本仓库中的相同流程。
- 库集合包含 6 个身份。每个主要角色仅有一张库集合中的 face 图像。所有检测到的 face 都被纳入探测集合。
- 库集合与训练集(CASIA-WebFace)之间没有重叠。
- 每个探测 face 与库集合之间的得分是通过余弦相似度计算的。如果某个探测 face 的最高得分低于预定义的阈值,则该探测 face 将被视为异常值。
- 主要角色用不同颜色的框标注。(
瑞秋,
莫妮卡,
菲比,
乔伊,
钱德勒,
罗斯)
注释
反向梯度
- 在本次实现中,我们并未严格遵循论文中的公式。相反,我们对梯度的尺度进行了归一化处理。这可以被理解为一种动态调整学习率的策略,有助于更稳定地收敛。类似的想法和直觉也出现在归一化梯度和投影梯度下降中。
- 更具体地说,如果函数 f 关于 x 的原始梯度可以表示为 df/dx = coeff_w * w + coeff_x * x,那么我们在反向传播时会使用归一化的版本 [df/dx] = (coeff_w * w + coeff_x * x) / norm_wx,其中 norm_wx 是 sqrt(coeff_w^2 + coeff_x^2)。同样的操作也应用于 f 关于 w 的梯度。
- 实际上,你并不一定需要使用原始梯度,因为原始梯度有时并不是最优的设计。修改反向传播梯度的一个重要标准是,新的“梯度”(严格来说,它已经不再是梯度了)需要能够稳定且持续地降低目标函数值。(关于基于梯度的反向传播的一些失败案例,我推荐观看由Shai Shalev-Shwartz所作的精彩演讲)
- 如果你使用原始梯度进行反向传播,仍然可以使其工作,但可能需要调整不同的 lambda 参数设置、迭代次数以及学习率衰减策略。
Lambda 和 训练注意事项(当损失变为 87 时)
- 请参考我们之前的注释与说明。
根据最新进展,使用带有可调缩放参数 s 的特征归一化可以显著提升 SphereFace 在 MegaFace 挑战赛上的性能
- 这一点得到了CosFace实验的支持。类似的思想也出现在加性间隔 softmax中。
收敛困难 - 当你在收敛过程中遇到困难时(例如在其他数据集上使用 SphereFace 时可能会出现这种情况),通常有几种简单的方法可以解决。
- 首先,尝试使用较大的小批量大小。
- 其次,尝试使用 PReLU 而不是 ReLU。
- 第三,增加网络的宽度和深度。
- 第四,尝试使用更好的初始化方法。例如,使用从原始 softmax 损失中预训练得到的模型(这也相当于微调)。
- 最后,也是最有效的方法,就是调整 lambda_min、lambda 及其衰减速率等超参数。
第三方重实现
- PyTorch:由 clcarwin 提供的 代码。
- PyTorch:由 Joyako 提供的 代码。
- TensorFlow:由 pppoe 提供的 代码。
- TensorFlow(附带精彩动画):由 YunYang1994 提供的 代码。
- TensorFlow:由 hujun100 提供的 代码。
- TensorFlow:由 HiKapok 提供的 代码。
- TensorFlow:由 andrewhuman 提供的 代码。
- MXNet:由 deepinsight 提供的 代码,通过设置 loss-type=1: SphereFace。
- SphereFace 的模型压缩:由 Siyang Liu 提供的 代码(在实际应用中非常有用)。
- Caffe2:由 tpys 提供的 代码。
- 基于 MS-1M 数据集训练:由 KaleidoZhouYN 提供的 代码。
- 系统:由 tpys 使用 SphereFace 构建的酷炫的人脸演示系统。
- 第三方预训练模型:由 goodluckcwl 提供的 代码。
角度间隔学习相关资源
L-Softmax 损失和SphereFace为角度表示学习提供了一个很有前景的框架,在深度人脸识别任务中表现出极高的有效性。我们非常高兴的是,我们的工作启发了许多表现优异的方法(以及损失函数)。以下列出其中一些供您参考(可能并非最新):
- 加性间隔 softmax:论文和代码。
- CosFace:论文。
- ArcFace/InsightFace:论文和代码。
- NormFace:论文和代码。
- L2-Softmax:论文。
- 冯·米塞斯-费舍尔混合模型:论文。
- COCO 损失:论文和代码。
- 角度三元组损失:代码。
为了评估角度间隔学习方法的有效性,您可以考虑使用我们在SphereFace 论文的附录 E 中提出的角 Fisher 分数。
免责声明:其中一些方法可能并非直接受到我们的启发,但我们仍将其列出,以体现其相关性和卓越性。
联系方式
您也可以在仓库中留下问题,我们将很乐意为您解答。
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
