Project Icon

AdaFace

自适应质量边界人脸识别算法

AdaFace是一种创新的人脸识别算法,通过自适应质量边界函数调整样本重要性。该方法利用特征范数近似图像质量,有效提升了低质量人脸数据集的识别效果。在IJB-B、IJB-C、IJB-S和TinyFace等多个数据集的实验中,AdaFace的人脸识别性能优于现有最先进方法。

AdaFace:用于人脸识别的自适应质量边界

AdaFace:用于人脸识别的自适应质量边界的官方GitHub仓库。 该论文(https://arxiv.org/abs/2204.00964)在CVPR 2022会议上进行了口头报告。

摘要:低质量人脸数据集的识别具有挑战性,因为面部特征被遮挡和降级。基于边界的损失函数的进展提高了嵌入空间中人脸的可区分性。此外,先前的研究探讨了自适应损失的效果,以赋予错误分类(困难)样本更多的重要性。在本工作中,我们在损失函数中引入了另一个自适应方面,即图像质量。我们认为,强调错误分类样本的策略应根据其图像质量进行调整。具体来说,容易和困难样本的相对重要性应基于样本的图像质量。我们提出了一种新的损失函数,根据样本的图像质量强调不同难度的样本。我们的方法通过用特征范数近似图像质量,以自适应边界函数的形式实现这一点。大量实验表明,我们的方法AdaFace在四个数据集(IJB-B、IJC-C、IJB-S和TinyFace)上改进了人脸识别性能,超越了现有最先进的技术(SoTA)。

@inproceedings{kim2022adaface,
  title={AdaFace: Quality Adaptive Margin for Face Recognition},
  author={Kim, Minchul and Jain, Anil K and Liu, Xiaoming},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  year={2022}
}

PWC PWC PWC PWC PWC

仓库更新

  • CVLFace是AdaFace的新官方仓库(支持各种架构,如ViT、SWIN-ViT、KP-RPE等)。
  • CVLFace中添加了PartialFC AdaFace实现(以及更多与人脸识别相关的功能,用于开展研究)。
  • 测试了与Pytorch Lightning 1.8的兼容性。
  • 上传了5分钟视频演示。
  • 添加了直接使用InsightFace数据集(train.rec)文件进行训练的选项,无需提取图像。

新闻

  • 您还可以查看我们的新论文KP-RPE: KeyPoint Relative Position Encoding for Face Recognition 论文 视频 代码,用于面部特征点辅助的人脸识别。简而言之:使用面部特征点进行对齐鲁棒性的人脸识别。(在TinyFace、IJB-S上达到SoTA)
  • 您还可以查看我们的新论文Cluster and Aggregate (CAFace, NeurIPS2022) 链接,用于基于视频的人脸识别。简而言之:长视频探针的人脸识别。

5分钟视频演示

IMAGE ALT TEXT

AdaFace和ArcFace在低质量图像上的演示比较

演示 该演示展示了AdaFace和ArcFace在实时视频上的比较。 为了展示模型在低质量图像上的表现,我们展示了原始模糊+模糊++设置,其中 模糊++表示heavily模糊。 带有颜色框的数字显示了实时图像与最接近匹配的图库图像之间的余弦相似度。 底部的统计数据显示了模糊++设置下真阳性匹配的累计计数。 AdaFace具有较高的真阳性率。 它还表明它不太容易出现误报(红色)错误,这在ArcFace中有时会观察到。

使用方法

import torch
from head import AdaFace

# 典型的512维输入
B = 5
embbedings = torch.randn((B, 512)).float()  # 潜在编码
norms = torch.norm(embbedings, 2, -1, keepdim=True)
normalized_embedding  = embbedings / norms
labels =  torch.randint(70722, (B,))

# 实例化AdaFace
adaface = AdaFace(embedding_size=512,
                  classnum=70722,
                  m=0.4,
                  h=0.333,
                  s=64.,
                  t_alpha=0.01,)

# 计算损失
cosine_with_margin = adaface(normalized_embedding, norms, labels)
loss = torch.nn.CrossEntropyLoss()(cosine_with_margin, labels)

安装

conda create --name adaface pytorch==1.8.0 torchvision==0.9.0 cudatoolkit=10.2 -c pytorch
conda activate adaface
conda install scikit-image matplotlib pandas scikit-learn 
pip install -r requirements.txt

训练(准备数据集和训练脚本)

  • 请参阅README_TRAIN.md
  • [重要]请注意,我们的实现假设模型的输入是BGR颜色通道,如cv2包中所使用的。InsightFace模型假设RGB颜色通道,如PIL包中所使用的。因此,我们所有的评估代码都使用cv2包的BGR颜色通道。

预训练模型

请注意,我们的预训练模型以BGR颜色通道作为输入。 这与InsightFace发布的使用RGB颜色通道的模型不同。

架构数据集链接
R18CASIA-WebFace谷歌云盘
R18VGGFace2谷歌云盘
R18WebFace4M谷歌云盘
R50CASIA-WebFace谷歌云盘
R50WebFace4M谷歌云盘
R50MS1MV2谷歌云盘
R100MS1MV2谷歌云盘
R100MS1MV3谷歌云盘
R100WebFace4M谷歌云盘
R100WebFace12M谷歌云盘

推理

使用提供的样本图像的示例

AdaFace接受经过预处理的输入图像。 预处理步骤包括:

  1. 使用面部关键点对齐(使用MTCNN)
  2. 裁剪为112x112x3大小,颜色通道为BGR顺序。

我们提供了执行预处理步骤的代码。 要使用预训练的AdaFace模型进行推理,请按以下步骤操作:

  1. 下载预训练的AdaFace模型并将其放置在pretrained/目录中

  2. 要在以下3张图像上使用预训练的AdaFace,请运行

python inference.py
图像1图像2图像3

相似度得分结果应为:

tensor([[ 1.0000,  0.7334, -0.0655],
        [ 0.7334,  1.0000, -0.0277],
        [-0.0655, -0.0277,  1.0000]], grad_fn=<MmBackward0>)

通用推理指南

简而言之,推理代码如下所示:

from face_alignment import align
from inference import load_pretrained_model, to_input

model = load_pretrained_model('ir_50')
path = '图像路径'
aligned_rgb_img = align.get_aligned_face(path)
bgr_input = to_input(aligned_rgb_img)
feature, _ = model(bgr_input)
  • 请注意,AdaFace模型是一个普通的PyTorch模型,它接受bgr_input,这是一个112x112x3大小的torch张量,具有BGR颜色通道,其值使用mean=0.5std=0.5进行归一化,如to_input()所示。
  • 当预处理步骤出现错误时,可能是因为MTCNN无法在图像中找到人脸。请参考issues/28进行讨论。

验证

高质量图像验证集(LFW、CFPFP、CPLFW、CALFW、AGEDB)

要使用预训练模型在5个高质量图像验证集上进行评估,请参考:

bash validation_hq/eval_5valsets.sh
架构数据集方法LFWCFPFPCPLFWCALFWAGEDB平均
R18CASIA-WebFaceAdaFace0.99130.92590.87000.92650.92720.9282
R18VGGFace2AdaFace0.99470.97130.91720.93900.94070.9526
R18WebFace4MAdaFace0.99530.97260.92280.95520.96470.9621
R50CASIA-WebFaceAdaFace0.99420.96410.89970.93230.94380.9468
R50MS1MV2AdaFace0.99820.97860.92830.96070.97850.9688
R50WebFace4MAdaFace0.99780.98970.94170.95980.97780.9734
R100MS1MV2AdaFace0.99820.98490.93530.96080.98050.9719
R100MS1MV3AdaFace0.99780.98910.93930.96020.98170.9736
R100WebFace4MAdaFace0.99800.99170.94630.96050.97900.9751
R100WebFace12MAdaFace0.99820.99260.94570.96120.98000.9755

与其他方法的比较

架构数据集方法LFWCFPFPCPLFWCALFWAGEDB平均
R50CASIA-WebFaceAdaFace0.99420.96410.89970.93230.94380.9468
R50CASIA-WebFace(ArcFace)0.99450.9521NANA0.9490NA
R100MS1MV2AdaFace0.99820.98490.93530.96080.98050.9719
R100MS1MV2(ArcFace)0.9982NA0.92080.9545NANA

混合质量场景(IJBB、IJBC数据集)

对于IJBB和IJBC验证,请参考:

cd validation_mixed
bash eval_ijb.sh
架构数据集方法IJBB TAR@FAR=0.01%IJBC TAR@FAR=0.01%
R18VGG2AdaFace90.6792.95
R18WebFace4MAdaFace93.0394.99
R50WebFace4MAdaFace95.4496.98
R50MS1MV2AdaFace94.8296.27
R100MS1MV2AdaFace95.6796.89
R100MS1MV3AdaFace95.8497.09
R100WebFace4MAdaFace96.0397.39
R100WebFace12MAdaFace96.4197.66

与其他方法的比较

  • 其他方法的数据来自各自的论文。
架构数据集方法会议IJBB TAR@FAR=0.01%IJBC TAR@FAR=0.01%
R100MS1MV2AdaFaceCVPR2295.6796.89
R100MS1MV2(MagFace)CVPR2194.5195.97
R100MS1MV2(SCF-ArcFace)CVPR2194.7496.09
R100MS1MV2(BroadFace)ECCV2094.9796.38
R100MS1MV2(CurricularFace)CVPR2094.8096.10
R100MS1MV2(MV-Softmax)AAAI2093.6095.20
R100MS1MV2(AFRN)ICCV1988.5093.00
R100MS1MV2(ArcFace)CVPR1994.2596.03
R100MS1MV2(CosFace)CVPR1894.8096.37
架构数据集方法IJBC TAR@FAR=0.01%
R100WebFace4MAdaFace97.39
R100WebFace4M(CosFace)96.86
R100WebFace4M(ArcFace)96.77
R100WebFace4M(CurricularFace)97.02
架构数据集方法IJBC TAR@FAR=0.01%
R100WebFace12MAdaFace97.66
R100WebFace12M(CosFace)97.41
R100WebFace12M(ArcFace)97.47
R100WebFace12M(CurricularFace)97.51

低质量场景 (IJBS)

对于IJBB、IJBC验证,请参考

cd validation_lq
python validate_IJB_S.py

与其他方法的比较

监控到单张监控到簿册监控到监控小脸
架构方法数据集排名1排名51%排名1排名51%排名1排名51%排名1排名5
R100AdaFaceWebFace12M71.3576.2459.3971.9376.5659.3736.7150.034.6272.2974.97
R100AdaFaceWebFace4M70.4275.2958.2770.9376.1158.0235.0548.224.9672.0274.52
R100AdaFaceMS1MV265.2670.5351.6666.2771.6150.8723.7437.472.5068.2171.54
R100(CurricularFace)MS1MV262.4368.6847.6863.8169.7447.5719.5432.802.5363.6867.65
R100(URL)MS1MV258.9465.4837.5761.9867.1242.73NANANA63.8968.67
R100(ArcFace)MS1MV257.3564.4241.8557.3664.9541.23NANANANANA
R100(PFE)MS1MV250.1658.3331.8853.6061.7535.999.2020.820.84NANA
  • 监控到单张:比较监控视频(探针)与单张注册图像(画廊)的协议
  • 监控到簿册:比较监控视频(探针)与所有注册图像(画廊)的协议
  • 监控到监控:比较监控视频(探针)与监控视频(画廊)的协议
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号