OpenSphere是一个基于PyTorch的超球面人脸识别库。请查看项目主页。
简介
OpenSphere为超球面人脸识别研究提供了一个一致和统一的训练和评估框架。该框架将损失函数与其他可变组件(如网络架构、优化器和数据增强)解耦。它可以在流行的基准测试上公平比较超球面人脸识别中的不同损失函数,作为重现已发表结果的透明平台。
目录:- 主要特点 - 设置 - 入门 - 预训练模型 - 可重现结果 - 引用 -
支持的项目
-
SphereFace:用于人脸识别的深度超球面嵌入,CVPR 2017
-
(SphereFace+) 学习最小超球面能量,NeurIPS 2018
-
SphereFace2:二元分类是深度人脸识别所需的全部,ICLR 2022
-
SphereFace Revived:统一超球面人脸识别,TPAMI 2022
更新
- 2022.4.28:添加了SphereFace-R、Glint360K和更多预训练模型。
- 2022.4.22:添加了SphereFace+、MS1M和MS1M上的配置文件。
- 2022.4.12:添加了SFNet(带BN)和IResNet。
- 2022.4.9:添加了一些数据集的下载脚本。
- 2022.4.1:初始提交。
主要特点
设置
-
克隆OpenSphere仓库。我们将您克隆OpenSphere的目录称为
$OPENSPHERE_ROOT
。git clone https://github.com/ydwen/opensphere.git
-
在Anaconda中构建虚拟环境:
conda env create -f environment.yml
入门
在这部分中,我们假设您位于$OPENSPHERE_ROOT
目录下。成功完成设置后,您就可以运行以下所有实验了。
- 下载并处理数据集
-
下载训练集(
VGGFace2
)、验证集(LFW
、Age-DB
、CA-LFW
、CP-LFW
)和测试集(IJB-B
和IJB-C
),并将它们分别放在data/train
、data/val
和data/test
中。 -
为方便起见,我们提供了一个自动下载数据的脚本。只需运行
bash scripts/dataset_setup.sh
-
如果您需要
MS1M
训练集,请运行以下额外命令:bash scripts/dataset_setup_ms1m.sh
-
要下载其他数据集(如
WebFace
或Glint360K
),请查看scripts
文件夹并找到您需要的内容。
-
训练模型(详细设置请参阅训练配置文件)
我们给出了一些在不同数据集上使用不同骨干网络架构进行训练的示例:
-
要在
VGGFace2
上使用SFNet-20训练SphereFace2,请运行以下命令(使用2个GPU):CUDA_VISIBLE_DEVICES=0,1 python train.py --config config/train/vggface2_sfnet20_sphereface2.yml
-
要在
VGGFace2
上使用SFNet-20训练SphereFace,请运行以下命令(使用2个GPU):CUDA_VISIBLE_DEVICES=0,1 python train.py --config config/train/vggface2_sfnet20_sphereface.yml
-
要在
VGGFace2
上使用SFNet-20训练SphereFace-R(v2,HFN),请运行以下命令(使用2个GPU):CUDA_VISIBLE_DEVICES=0,1 python train.py --config config/train/vggface2_sfnet20_spherefacer.yml
-
要在
MS1M
上使用SFNet-64(带BN)训练SphereFace,请运行以下命令(使用4个GPU):CUDA_VISIBLE_DEVICES=0,1,2,3 python train.py --config config/train/ms1m_sfnet64bn_sphereface.yml
-
要在
MS1M
上使用IResNet-100训练SphereFace,请运行以下命令(使用4个GPU):CUDA_VISIBLE_DEVICES=0,1,2,3 python train.py --config config/train/ms1m_iresnet100_sphereface.yml
-
我们提供了许多用于训练的配置文件,详情请参见此文件夹。
-
训练完模型后,您会在
$OPENSPHERE_ROOT
下看到一个project
文件夹。训练好的模型保存在以任务开始时间命名的文件夹中,例如,2022-04-22 03:17:05的文件夹名为20220422_031705
。 -
我们的框架还重新实现了一些其他流行的超球面人脸识别方法,如ArcFace、AM-Softmax(CosFace)和CocoLoss(NormFace)。请查看
model/head
文件夹和config/papers/SphereFace2/sec31
文件夹中的一些示例配置文件。
- 测试模型(详细设置请参阅测试配置文件)
-
要在
组合验证
数据集上进行测试,只需运行CUDA_VISIBLE_DEVICES=0,1 python test.py --config config/test/combined.yml --proj_dir project/##YourFolder##
-
要在
IJB-B
和IJB-C
上进行测试,只需运行CUDA_VISIBLE_DEVICES=0,1 python test.py --config config/test/ijb.yml --proj_dir project/##YourFolder##
-
要在
IJB-B
上进行测试,只需运行CUDA_VISIBLE_DEVICES=0,1 python test.py --config config/test/ijbb.yml --proj_dir project/##YourFolder##
-
要在
IJB-C
上进行测试,只需运行CUDA_VISIBLE_DEVICES=0,1 python test.py --config config/test/ijbc.yml --proj_dir project/##YourFolder##
有关如何使用训练和测试配置文件的更多信息,请参见此处。
结果和预训练模型
损失函数 | 网络架构 | 数据集 | 配置文件、训练日志和预训练模型 |
---|---|---|---|
SphereFace | SFNet-20 (不带BN) | VGGFace2 | Google Drive |
SphereFace+ | SFNet-20 (不带BN) | VGGFace2 | Google Drive |
SphereFace-R (HFN,v2) | SFNet-20 (不带BN) | VGGFace2 | Google Drive |
SphereFace-R (SFN,v2) | SFNet-20 (不带BN) | VGGFace2 | 待添加 |
SphereFace2 | SFNet-20 (不带BN) | VGGFace2 | Google Drive |
SphereFace | SFNet-64 (带BN) | MS1M | Google Drive |
SphereFace+ | SFNet-64 (带BN) | MS1M | Google Drive |
SphereFace-R (HFN,v2) | SFNet-64 (带BN) | MS1M | 待添加 |
SphereFace2 | SFNet-64 (带BN) | MS1M | 待添加 |
SphereFace | IResNet-100 | MS1M | Google Drive |
SphereFace+ | IResNet-100 | MS1M | Google Drive |
SphereFace-R (HFN,v2) | IResNet-100 | MS1M | Google Drive |
SphereFace2 | IResNet-100 | MS1M | 待添加 |
SphereFace | SFNet-64 (带BN) | Glint360K | 待添加 |
SphereFace+ | SFNet-64 (带BN) | Glint360K | 待添加 |
SphereFace-R (HFN,v2) | SFNet-64 (带BN) | Glint360K | 待添加 |
SphereFace2 | SFNet-64 (带BN) | Glint360K | 待添加 |
SphereFace | IResNet-100 | Glint360K | 待添加 |
SphereFace+ | IResNet-100 | Glint360K | 待添加 |
SphereFace-R (HFN,v2) | IResNet-100 | Glint360K | 待添加 |
SphereFace2 | IResNet-100 | Glint360K | 待添加 |
复现已发表的结果
我们创建了一个额外的文件夹 config/papers
,用于提供详细的配置文件并复现已发表论文中的结果。目前我们为以下论文提供了配置文件:
- SphereFace2: 二元分类是深度人脸识别所需的全部,ICLR 2022
引用
如果您在研究中发现 OpenSphere 有用,请考虑引用:
对于 SphereFace:
@article{Liu2022SphereFaceR,
title={SphereFace Revived: Unifying Hyperspherical Face Recognition},
author={Liu, Weiyang and Wen, Yandong and Raj, Bhiksha and Singh, Rita and Weller, Adrian},
journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
year={2022}
}
@InProceedings{Liu2017SphereFace,
title = {SphereFace: Deep Hypersphere Embedding for Face Recognition},
author = {Liu, Weiyang and Wen, Yandong and Yu, Zhiding and Li, Ming and Raj, Bhiksha and Song, Le},
booktitle = {CVPR},
year = {2017}
}
@inproceedings{Liu2016lsoftmax,
title={Large-Margin Softmax Loss for Convolutional Neural Networks},
author={Liu, Weiyang and Wen, Yandong and Yu, Zhiding and Yang, Meng},
booktitle={ICML},
year={2016}
}
对于 SphereFace+:
@InProceedings{Liu2018MHE,
title={Learning towards Minimum Hyperspherical Energy},
author={Liu, Weiyang and Lin, Rongmei and Liu, Zhen and Liu, Lixin and Yu, Zhiding and Dai, Bo and Song, Le},
booktitle={NeurIPS},
year={2018}
}
对于 SphereFace2:
@InProceedings{wen2021sphereface2,
title = {SphereFace2: Binary Classification is All You Need for Deep Face Recognition},
author = {Wen, Yandong and Liu, Weiyang and Weller, Adrian and Raj, Bhiksha and Singh, Rita},
booktitle = {ICLR},
year = {2022}
}
联系方式
问题也可以作为 issue 提交到代码仓库。我们很乐意回答它们。