项目简介
FaceNet 项目是一个基于 TensorFlow 的面部识别实现,该项目根据论文《FaceNet: A Unified Embedding for Face Recognition and Clustering》而开发。此外,还借鉴了牛津大学视觉几何组发表的论文《Deep Face Recognition》中的一些理念。FaceNet 的核心在于通过深度学习技术实现精确的面部识别与聚类,为用户提供高效的面部验证和识别工具。
兼容性
Facenet 项目主要是在 Ubuntu 14.04 系统下测试的,使用 TensorFlow r1.7 版本,并支持 Python 2.7 和 Python 3.5。用户可以在 GitHub 的测试目录中找到相关测试用例,并在 Travis-CI 查看测试结果。
项目更新
项目自启动以来不断更新,以下是一些重要的更新节点:
- 2018年4月10日:新增了在 Casia-WebFace 和 VGGFace2 数据集上训练的模型。这些模型采用了固定的图像标准化。
- 2018年3月31日:引入了新的输入管道以及一些小更新。
- 2017年5月13日:移除了较旧的非简模块,并进行了模型架构的优化以及中心损失的正则化。
- 2017年3月2日:增加了生成128维度嵌入向量的预训练模型。
- 2017年2月22日:项目更新到 TensorFlow r1.0,并加入了持续集成工具 Travis-CI。
预训练模型
FaceNet 提供了一些基于不同数据集和架构的预训练模型。例如,使用 CASIA-WebFace 数据集训练的模型在 LFW 数据集上的准确率为 0.9905,而使用 VGGFace2 数据集训练的模型准确率可以达到 0.9965。用户使用这些模型时,需对原数据提供方给予适当的来源说明。
灵感来源
项目在开发过程中,吸取了开源项目 OpenFace 的许多经验教训,以提升自身模型的稳定性和准确性。
训练数据
训练过程中,项目主要使用了 CASIA-WebFace 和 VGGFace2 两个大规模面部数据集。CASIA-WebFace 包含约45万图像,涵盖超过一万个身份,经过人脸检测后进行训练。VGGFace2 数据集则提供了约330万张面部图像,用于训练精度更高的模型。
数据预处理
为了提升模型性能,项目采用了多任务 CNN 进行人脸对齐,这较传统的 Dlib 面部检测器有显著优势。在项目中提供了 Python/TensorFlow 实现的 MTCNN,用于对输入面部图像进行预处理和标准化。
训练流程
当前,最佳的训练效果是通过使用 softmax 损失函数来训练模型。详细的训练过程和步骤可以在项目的 Wiki 页面中找到。
性能表现
Facenet 的某些预训练模型在 LFW(Labelled Faces in the Wild)数据集上的准确率高达 0.99650±0.00252。用户在进行测试时,需要标准化输入图像,即在执行验证脚本时加入固定图像标准化选项。
通过这一系列功能和特性,FaceNet 项目为广大开发者和研究者提供了一个强大的面部识别与验证工具,并在多种应用场合展现了优异的性能表现。