【计算机视觉|人脸识别】 facenet-pytorch 项目中文说明文档

这篇具有很好参考价值的文章主要介绍了【计算机视觉|人脸识别】 facenet-pytorch 项目中文说明文档。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下文搬运自GitHub,很多超链接都是相对路径所以点不了,属正常现象。点击查看原文档。转载请注明出处。

使用 Pytorch 进行人脸识别

Click here to return to the English document

译者注:

本项目 facenet-pytorch 是一个十分方便的人脸识别库,可以通过 pip 直接安装。

库中包含了两个重要功能

  • 人脸检测:使用MTCNN算法
  • 人脸识别:使用FaceNet算法

利用这个库,可以轻松实现人脸检测和人脸向量映射操作。

为了方便中文开发者研究学习人脸识别相关任务、贡献代码,我将本项目的README文件以及位于 examples 里面的几个示例脚本中必要的部分翻译成了中文,以供参考。

向本项目的所有贡献者致敬。

英译汉:远哥挺乐

Translator’s Note:

This project facenet-pytorch is a very convenient face recognition library that can be installed directly via pip.

The library contains two important features:

  • Face detection: using the MTCNN algorithm
  • Face recognition: using the FaceNet algorithm

With this library, one can easily carry out face detection and face vector mapping operations.

In order to facilitate Chinese developers in studying face recognition and contributing code, I have translated the README file of this project and some necessary parts of several example scripts located in the examples directory into Chinese.

Salute to all contributors to this project.

Translated from English to Chinese by 远哥挺乐.

facenet_pytorch,计算机视觉/情感分析/多模态,人工智能,深度学习,目标检测,计算机视觉,facenet-pytorch

这是 pytorch 中 Inception Resnet (V1) 模型的存储库,在 VGGFace2 和 CASIA-Webface 上进行了预训练。

Pytorch 模型权重使用从 David Sandberg 的 tensorflow Facenet repo 移植的参数进行初始化。

该存储库中还包含 MTCNN 的高效 pytorch 实现,用于推理之前的人脸检测。这些模型也是经过预训练的。据我们所知,这是最快的 MTCNN 实现。

目录

  • 目录
  • 快速启动
  • 预训练模型
  • 示例笔记本
    • 完整的检测和识别流程
    • 视频流中的人脸跟踪
    • 使用新数据微调预训练模型
    • facenet-pytorch 中的 MTCNN 指南
    • 人脸检测包的性能比较
    • FastMTCNN 算法
  • 使用 docker 运行
  • 在您自己的 git 项目中使用此存储库
  • Tensorflow 到 Pytorch 的参数转换
  • 参考资料

快速启动

  1. 安装:
# 使用pip安装:
pip install facenet-pytorch

# 或克隆此存储库,删除“-”以允许 python 导入:
git clone https://github.com/timesler/facenet-pytorch.git facenet_pytorch

# 或使用 docker 容器(参见 https://github.com/timesler/docker-jupyter-dl-gpu):
docker run -it --rm timesler/jupyter-dl-gpu pip install facenet-pytorch && ipython
  1. 在python中,导入 facenet-pytorch 并实例化模型:
from facenet_pytorch import MTCNN, InceptionResnetV1

# 如果需要,使用 MTCNN 创建人脸检测模型:
mtcnn = MTCNN(image_size=<image_size>, margin=<margin>)

# 创建一个 inception resnet(在 eval 模式下):
resnet = InceptionResnetV1(pretrained='vggface2').eval()
  1. 处理图像:
from PIL import Image

img = Image.open(<image path>)

# 获取裁剪和预白化的图像张量
img_cropped = mtcnn(img, save_path=<optional save path>)

# 计算嵌入(解压缩以添加批量维度)
img_embedding = resnet(img_cropped.unsqueeze(0))

# 或者,如果用于 VGGFace2 分类
resnet.classify = True
img_probs = resnet(img_cropped.unsqueeze(0))

有关使用和实现详细信息,请参阅 help(MTCNN)help(InceptionResnetV1)

预训练模型

请参阅:models/inception_resnet_v1.py

以下模型已移植到 pytorch(包含下载 pytorch state_dict 的链接):

模型名称 LFW 准确度(如此处列出) 训练数据集
20180408-102900 (111MB) 0.9905 CASIA-Webface
20180402-114759 (107MB) 0.9965 VGGFace2

无需手动下载预训练的state_dict;它们会在模型实例化时自动下载,并缓存在 torch 缓存中以供将来使用。要在 pytorch 中使用 Inception Resnet (V1) 模型进行面部识别/识别,请使用:

from facenet_pytorch import InceptionResnetV1

# 对于在 VGGFace2 上预训练的模型
model = InceptionResnetV1(pretrained='vggface2').eval()

# 对于在 CASIA-Webface 上预训练的模型
model = InceptionResnetV1(pretrained='casia-webface').eval()

# 对于具有 100 个类的未经训练的模型
model = InceptionResnetV1(num_classes=100).eval()

# 对于未经训练的 1001 类分类器
model = InceptionResnetV1(classify=True, num_classes=1001).eval()

两个预训练模型均在 160x160 像素图像上进行训练,因此如果应用于调整为该形状的图像,则效果最佳。为了获得最佳结果,还应该使用 MTCNN 将图像裁剪到脸部(见下文)。

默认情况下,上述模型将返回 512 维图像嵌入。要启用分类,请将 classify=True 传递给模型构造函数,或者您可以随后使用 model.classify = True 设置对象属性。对于 VGGFace2,预训练模型将输出长度为 8631 的 logit 向量,对于 CASIA-Webface 则输出长度为 10575 的 logit 向量。

示例笔记本

完整的检测和识别流程

通过首先使用 MTCNN 检测人脸,然后使用 Inception Resnet 模型计算嵌入或概率,可以轻松地将人脸识别应用于原始图像。 examples/infer_cn.ipynb 中的示例代码提供了一个利用数据集、数据加载器和可选 GPU 处理的完整示例流程。

视频流中的人脸跟踪

MTCNN 可用于构建人脸跟踪系统(使用 MTCNN.detect() 方法)。完整的面部跟踪示例可以在 examples/face_tracking_cn.ipynb 中找到。

facenet_pytorch,计算机视觉/情感分析/多模态,人工智能,深度学习,目标检测,计算机视觉,facenet-pytorch

使用新数据微调预训练模型

在大多数情况下,实现人脸识别的最佳方法是直接使用预训练模型,通过聚类算法或简单的距离度量来确定人脸的身份。但是,如果需要微调(即,如果您想根据模型的输出 logits 选择标识),可以在 examples/finetune_cn.ipynb 中找到示例。

facenet-pytorch 中的 MTCNN 指南

本指南演示了 MTCNN 模块的功能。涵盖的主题有:

  • 基本用法
  • 图像标准化
  • 面边距
  • 单张图像中的多个面孔
  • 批量检测
  • 边界框和面部标志
  • 保存人脸数据集

请参阅kaggle 笔记本。

人脸检测包的性能比较

本笔记本演示了三个人脸检测包的使用:

  1. facenet-pytorch
  2. mtcnn
  3. dlib

每个包都经过测试,测试其在启用 GPU 支持的情况下检测一组 300 张图像(来自一个视频的所有帧)中的面部的速度。性能基于 Kaggle 的 P100 笔记本内核。结果总结如下。

套餐 FPS (1080x1920) FPS (720x1280) FPS (540x960)
facenet-pytorch 12.97 20.32 25.50
facenet-pytorch(非批处理) 9.75 14.81 19.68
dlib 3.80 8.39 14.53
mtcnn 3.04 5.70 8.23

facenet_pytorch,计算机视觉/情感分析/多模态,人工智能,深度学习,目标检测,计算机视觉,facenet-pytorch

请参阅kaggle 笔记本。

FastMTCNN 算法

该算法演示了如何通过利用相邻帧之间的相似性来实现极其高效的人脸检测,特别是在视频中。

请参阅[kaggle 笔记本](https://www.kaggle.com/timesler/fast-mtcnn- detector-55-fps-at-full-resolution)。

使用 docker 运行

该包和任何示例笔记本都可以使用 docker(或 nvidia-docker)运行:

docker run --rm -p 8888:8888
    -v ./facenet-pytorch:/home/jovyan timesler/jupyter-dl-gpu \
    -v <path to data>:/home/jovyan/data
    pip install facenet-pytorch && jupyter lab 

导航到 example/ 目录并运行任何 ipython 笔记本。

有关 docker 容器的详细信息,请参阅 timesler/jupyter-dl-gpu。

在您自己的 git 项目中使用此存储库

要在您自己的 git 存储库中使用此代码,我建议首先将此存储库添加为子模块。请注意,当克隆为子模块时,应删除存储库名称中的破折号(“-”),因为它会在导入时破坏 python:

git submodule add https://github.com/timesler/facenet-pytorch.git facenet_pytorch

或者,可以使用 pip 将代码安装为包:

pip install facenet-pytorch

Tensorflow 到 Pytorch 的参数转换

请参阅:models/utils/tensorflow2pytorch.py

请注意,使用此存储库中的模型不需要此功能,该功能仅依赖于pytorch保存的 state_dict

实例化 pytorch 模型后,每层的权重均从 davidsandberg/facenet 的预训练 Tensorflow 模型中的等效层加载。

原始 Tensorflow 模型和 pytorch 移植模型的输出的等效性已经过测试并且是相同的:


>>> compare_model_outputs(mdl, sess, torch.randn(5, 160, 160, 3).detach())

Passing test data through TF model (通过TF模型传递测试数据)

tensor([[-0.0142,  0.0615,  0.0057,  ...,  0.0497,  0.0375, -0.0838],
        [-0.0139,  0.0611,  0.0054,  ...,  0.0472,  0.0343, -0.0850],
        [-0.0238,  0.0619,  0.0124,  ...,  0.0598,  0.0334, -0.0852],
        [-0.0089,  0.0548,  0.0032,  ...,  0.0506,  0.0337, -0.0881],
        [-0.0173,  0.0630, -0.0042,  ...,  0.0487,  0.0295, -0.0791]])

Passing test data through PT model (通过PT模型传递测试数据)

tensor([[-0.0142,  0.0615,  0.0057,  ...,  0.0497,  0.0375, -0.0838],
        [-0.0139,  0.0611,  0.0054,  ...,  0.0472,  0.0343, -0.0850],
        [-0.0238,  0.0619,  0.0124,  ...,  0.0598,  0.0334, -0.0852],
        [-0.0089,  0.0548,  0.0032,  ...,  0.0506,  0.0337, -0.0881],
        [-0.0173,  0.0630, -0.0042,  ...,  0.0487,  0.0295, -0.0791]],
       grad_fn=<DivBackward0>)

Distance 1.2874517096861382e-06 (距离1.2874517096861382e-06)

为了重新运行 Tensorflow 参数到 pytorch 模型的转换,请确保使用子模块克隆此存储库,因为 davidsandberg/facenet 存储库作为子模块包含在内,并且转换需要其中的一部分。

参考资料

  1. David Sandberg’s facenet repo: https://github.com/davidsandberg/facenet

  2. F. Schroff, D. Kalenichenko, J. Philbin. FaceNet: A Unified Embedding for Face Recognition and Clustering, arXiv:1503.03832, 2015. PDF

  3. Q. Cao, L. Shen, W. Xie, O. M. Parkhi, A. Zisserman. VGGFace2: A dataset for recognising face across pose and age, International Conference on Automatic Face and Gesture Recognition, 2018. PDF

  4. D. Yi, Z. Lei, S. Liao and S. Z. Li. CASIAWebface: Learning Face Representation from Scratch, arXiv:1411.7923, 2014. PDF

  5. K. Zhang, Z. Zhang, Z. Li and Y. Qiao. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks, IEEE Signal Processing Letters, 2016. PDF文章来源地址https://www.toymoban.com/news/detail-759103.html

到了这里,关于【计算机视觉|人脸识别】 facenet-pytorch 项目中文说明文档的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉40例】案例29:LBPH人脸识别

    【 导读 】本文是专栏《计算机视觉 40 例简介》的第 29 个案例《 LBPH 人脸识别 》。该专栏简要介绍李立宗主编《计算机视觉 40 例——从入门到深度学习( OpenCV-Python )》一书的 40 个案例。 目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

    2024年02月06日
    浏览(31)
  • 计算机视觉丨基于OpenCV的人脸识别打卡系统

    本期内容:基于OpenCV的WANT公司人脸识别打卡系统。 项目需求 : pycharm opencv numpy 项目下载路径:https://download.csdn.net/download/m0_68111267/88754360 社会上很多公司,学院都需要使用手机或者智能软件进行打卡签到。随着计算机技术的飞速发展,计算机视觉技术也越来越成熟了,例如

    2024年01月18日
    浏览(37)
  • 计算机竞赛 深度学习 机器视觉 人脸识别系统 - opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:3分 🧿 更多资料, 项目分享: https://gitee.com/dancheng

    2024年02月07日
    浏览(62)
  • 计算机设计大赛 深度学习人脸表情识别算法 - opencv python 机器视觉

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习人脸表情识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/

    2024年02月21日
    浏览(71)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型,本文将介绍如何使用主成分分析(PCA)实现简易的人脸识别模型。首先,我们将简要介绍PCA的原理及其在人脸识别中的应用。接着,我们将通过实例演示如何使用Python实现

    2024年02月03日
    浏览(29)
  • 【计算机视觉|人脸建模】3D人脸重建基础知识(入门)

    本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 三维重建(3D Reconstruction)是指根据单视图或者多视图的图像重建三维信息的过程。 人工几何模型 仪器采集 基于图像的建模 描述 基于几何建模软件通过人机交互生成物体三维几何模型 基于结构光和激光扫描技术

    2024年02月14日
    浏览(42)
  • 计算机视觉:使用dlib实现人脸检测

    Dlib是一个广泛使用的开源库,在计算机视觉和机器学习领域具有重要影响。它是由Davis King在2002年开发,主要用C++语言编写,但也提供了Python接口。Dlib结合了高效的算法和易用性,使其成为学术界和工业界的热门选择。 多样的机器学习算法:Dlib包含丰富的机器学习算法,如

    2024年04月28日
    浏览(32)
  • 【计算机视觉|人脸建模】深度学习时代的3D人脸重建调查报告

    本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题: 3D Face Reconstruction in Deep Learning Era: A Survey 链接:3D Face Reconstruction in Deep Learning Era: A Survey - PubMed (nih.gov) 随着深度学习的出现和图形处理单元的广泛应用,3D人脸重建已成为生物特征识别最引人入胜的主题。

    2024年02月14日
    浏览(43)
  • 计算机视觉 计算机视觉识别是什么?

    计算机视觉识别(Computer Vision Recognition)是计算机科学和人工智能领域中的一个重要分支,它致力于使计算机系统能够模拟和理解人类视觉的过程,从而能够自动识别、分析和理解图像或视频中的内容。这一领域的发展旨在让计算机具备视觉感知和理解的能力,使其能够从视

    2024年02月07日
    浏览(42)
  • 【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

    人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式,下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。 可选的人脸检测模型(区别是检测速度和精度不同

    2023年04月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包