明星、公众人物人脸识别——Pytorch使用mtcnn+arcface搭建人脸识别平台

这篇具有很好参考价值的文章主要介绍了明星、公众人物人脸识别——Pytorch使用mtcnn+arcface搭建人脸识别平台。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

明星、公众人物人脸识别——Pytorch使用mtcnn+arcface搭建人脸识别平台

一、人脸检测

什么是MTCNN

该算法由3个阶段组成:

  • 第一阶段,通过CNN快速产生候选框体。
  • 第二阶段,通过更复杂一点的CNN精炼候选窗体,丢弃大量的重叠窗体。
  • 第三阶段,使用更强大的CNN,实现候选窗体去留,同时回归5个面部关键点。

第一阶段是使用一种叫做PNet(Proposal Network)的卷积神经网络,获得候选窗体和边界回归向量。同时,候选窗体根据边界框进行校准。然后利用非极大值抑制去除重叠窗体。
第二阶段是使用R-Net(Refine Network)卷积神经网络进行操作,将经过P-Net确定的包含候选窗体的图片在R-Net中训练,最后使用全连接网络进行分类。利用边界框向量微调候选窗体,最后还是利用非极大值抑制算法去除重叠窗体。
第三阶段,使用Onet(Output Network)卷积神经网络进行操作,该网络比R-Net多一层卷积层,功能与R-Net类似,只是在去除重叠候选窗口的同时标定5个人脸关键点位置。

MTCNN网络在经过3个卷积网络处理之前,先进行了多尺度变换,将一幅人脸图像缩放为不同尺寸的图片,这样就构成了图像金字塔。然后这些不同尺度的图像作为3个阶段的输入数据进行训练,这样可以令MTCNN检测到不同尺寸的人脸。MTCNN三个阶段所做的事情如下图:
人脸检测pytorch算法,pytorch,人工智能,python,深度学习,机器学习,tornado,pycharm

NTCNN训练比较复杂,在代码中无需训练,直接使用现有模型即可达到满意效果。

二、人脸识别

什么是ArcFace

论文地址:https://arxiv.org/pdf/1801.07698.pdf
论文代码:https://github.com/deepinsight/insightface
数据集:训练数据集:分别采用CASIA、VGGFACE2、MS1MV2、DeepGlint-Face(包括MS1M-Deepglin和Asian-Deepglin)

人脸验证数据集:LFW、YTF、CFP-FP、AGEDB-30

大姿态和大年龄数据集:CPLFW、CALFW

大规模图像数据集:MegaFace,IJB-B,IJB-C,Trillion-Pairs,iQIYI-VID(视频)

网络结构

人脸检测pytorch算法,pytorch,人工智能,python,深度学习,机器学习,tornado,pycharm我们将特征向量L2归一化,权重L2归一化,他俩的夹角为θ,计算cos(θj),求反余弦arccos(θyi)得到特征xi与真实权值Wyi之间的夹角θyi,添加角度间隔m,再求余弦cos(θyj+m),将所有的log乘以特征尺度s,然后将logit送到softmax函数得到各类别概率。再用Ground Truth OneHot Vector一起算出交叉熵损失。

也就是DCNN特征和最后一个完全连接层之间的点积等于特征和权重归一化后的余弦距离。我们利用arc-cosine函数来计算当前特征和目标权重之间的角度。然后,在目标角上加上一个附加的角度间隔,用余弦函数重新计算逻辑回归的反向传播过程。然后,我们用一个固定的特征范数重新缩放。

同样的,提供现有模型,自己无需训练,目前支持resnet50,resnet18和mobilenet_v2模型。resnet50和resnet18参数量比较大,计算量较大,适合在PC服务器部署 ;而mobilenet_v2模型计算量较小,适合嵌入式,开发板,Android等终端部署。

三、项目安装

项目结构说明

├── common                # 配置文件(设置检测模型,特征提取模型)、log
├── core
│   ├── alignment          # 人脸校准算法
│   ├── detection          # 人脸检测模型
│   ├── feature            # 人脸特征提取模型
│   ├── face_detector.py   # 人脸检测(支持MTCNN)
│   ├── face_feature.py    # 人脸特征提取模型
│   ├── face_matcher.py    # 人脸匹配算法
│   ├── face_recognizer.py # 人脸识别 
│   └── face_register.py   # 人脸注册
├── data                   # 人脸识别相关数据
├── face_search.py         # 1:N人脸搜索Demo
├── register.py            # 1:N人脸搜索人脸数据库注册Demo
├── README.md              # 说明文档
└── requirements.txt       # 项目依赖文件

Python依赖环境,使用pip安装即可
可能会有缺少依赖,需要自己补充

tornado
numpy
scikit-learn
pybaseutils
matplotlib
tqdm
toolz
tornado

人脸注册

#默认人脸数据库,图像存放在portrait = "./data/database/portrait"
#默认人脸数据库,特征文件保存在database='./data/database/database-resnet50.json'
 
python register.py

运行结果如下:


>>>>>>>>>>>>>开始注册人脸<<<<<<<<<<<<<<
file=./data/database/portrait\1.jpg-刘亦菲_1.jpg.jpg,	注册人脸:ID=1.jpg-刘亦菲	
file=./data/database/portrait\1.jpg-刘德华_1.jpg.jpg,	注册人脸:ID=1.jpg-刘德华	
file=./data/database/portrait\1.jpg-刘恺威_1.jpg.jpg,	注册人脸:ID=1.jpg-刘恺威	
file=./data/database/portrait\1.jpg-刘诗诗_1.jpg.jpg,	注册人脸:ID=1.jpg-刘诗诗	
file=./data/database/portrait\1.jpg-古力娜扎_1.jpg.jpg,	注册人脸:ID=1.jpg-古力娜扎	
save database:./data/database\database11.17-resnet50.json
>>>>>>>>>>>>>完成注册人脸<<<<<<<<<<<<<<

如果需要注册新人 ,请参考如下步骤:

1.采集一张新人的个人照片,以张三的照片为例子
2.照片保存在人脸数据库中(data/database/portrait)中,图片按照[ID-XXXX.jpg]命名,如:张三-image.jpg,作为人脸识别的底图
3.然后运行register.py,完成人脸数据库的人脸注册

测试图片文件,可在终端运行

#待识别人脸图片存放在项目目录data/test_image 
python face_search.py 
import cv2
import traceback
from core import face_recognizer
from pybaseutils import image_utils


class Example1(face_recognizer.FaceRecognizer):
    def __init__(self, database):
        """
        @param database: 人脸数据库的路径
        """
        super(Example1, self).__init__(database=database)

    def start_capture(self, video_file, save_video=None, detect_freq=1, vis=True):
        """
        start capture video
        :param video_file: *.avi,*.mp4,...
        :param save_video: *.avi
        :param detect_freq:
        :return:
        """
        video_cap = image_utils.get_video_capture(video_file)
        width, height, numFrames, fps = image_utils.get_video_info(video_cap)
        if save_video:
            self.video_writer = image_utils.get_video_writer(save_video, width, height, fps)
        count = 0
        while True:
            if count % detect_freq == 0:
                # 设置抽帧的位置
                if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
                isSuccess, frame = video_cap.read()
                if not isSuccess:
                    break
                frame, face_info = self.search_face_task(frame, thickness=4, fontScale=2.0, delay=10, vis=True)
                if save_video:
                    self.video_writer.write(frame)
            count += 1
        video_cap.release()

    def detect_image_dir(self, image_path, out_dir=None, vis=True):
        """
        @param image_dir:
        @param out_dir:
        @param vis:
        @return:
        """

        try:
            res = self.search_face_task(image_path, vis=vis)
            return res
        except:
            traceback.print_exc()

    def search_face_task(self, bgr, thickness=2, fontScale=1.5, delay=0, vis=False):
        """
        1:N人脸搜索任务
        :param bgr: BGR image
        :return:
        """
        face_info = self.detect_search(bgr, max_face=-1, vis=False)
        image = self.draw_result("Recognizer", image=bgr, face_info=face_info,
                                 thickness=thickness, fontScale=fontScale, delay=delay, vis=vis)
        return image

配置文件

# -*-coding: utf-8 -*-
import torch
import os
 
root = os.path.dirname(os.path.dirname(__file__))
 
det_thresh = 0.5  # 人脸检测阈值,小于该阈值的检测框会被剔除
rec_thresh = 0.5  # 人脸识别阈值,小于该阈值的人脸识别结果为unknown,表示未知
# 人脸检测模型,目前支持RFB和MTCNN人脸检测
DETECTOR = {
    # "net_name": "RFB",
    "net_name": "MTCNN",
}
 
# 人脸识别(特征提取)模型配置文件,目前支持resnet50,resnet18和mobilenet_v2模型
FEATURE = {
    "net_name": "resnet50",
    # "net_name": "resnet18",
    # "net_name": "mobilenet_v2",
    "input_size": (112, 112),
    "embedding_size": 512
}
 
# 人脸数据库图像路径,用于注册人脸
portrait = "./data/database/portrait"
# 人脸数据库特征路径database(注册人脸后生成的特征文件)
database = os.path.join(os.path.dirname(portrait), "database-{}.json".format(FEATURE['net_name']))
 
# 运行设备
# device = "cpu"
device = "cuda:0" if torch.cuda.is_available() else "cpu"

服务使用

python main.py 

运行后直接使用postman测试即可
支持参数:imageUrl(图片url)、imageBase64(图片base64格式)、imageFile(本地图片文件)

接口返回格式:

{
    "code": 0,
    "message": "成功",
    "success": true,
    "result": {
        "face_num": "关晓彤"
    }
}

人脸识别Python版本源码下载、数据集下载

评论区留言
数据集中每人有五张图片
中外公众人物数据集(400人左右):
人脸检测pytorch算法,pytorch,人工智能,python,深度学习,机器学习,tornado,pycharm
中外明星数据集(400人左右):
人脸检测pytorch算法,pytorch,人工智能,python,深度学习,机器学习,tornado,pycharm文章来源地址https://www.toymoban.com/news/detail-860754.html

到了这里,关于明星、公众人物人脸识别——Pytorch使用mtcnn+arcface搭建人脸识别平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

    下文搬运自GitHub,很多超链接都是相对路径所以点不了,属正常现象。 点击查看原文档 。转载请注明出处。 Click here to return to the English document 译者注: 本项目 facenet-pytorch 是一个十分方便的人脸识别库,可以通过 pip 直接安装。 库中包含了两个重要功能 人脸检测:使用MT

    2024年02月04日
    浏览(48)
  • FER2013人脸表情识别从零实现(Pytorch,FNN,CNN)

    学完了深度学习的理论和框架,接下来就是实践啦!相信大家在实践的时候都会去找各种的项目,本文是kaggle上面的一个深度学习小项目,目的是实现人脸表情的分类。接下来我将具体讲解实现过程,相信你只要学了深度学习的理论知识,对pytorch框架有所了解,就能够看得懂

    2024年02月05日
    浏览(51)
  • html简单网页代码:HTML+CSS肖战明星人物介绍网页 web结课作业的源码

    👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTML+CSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容丰富,主题鲜明,非常适合初学者学习使用, 这个实例比较全面,有助于同学的学习,本文将

    2024年01月16日
    浏览(38)
  • python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)(一)

    python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)(二) 逗号前的事图像路径,逗号后的事对应的标签 定义了模型存储、模型恢复、优化函数以及与学习率相关的设定 关于数据处理相关: 定义方式: 例子: 以上定义好batch_norm层后,在网络训练

    2024年02月11日
    浏览(43)
  • 毕业设计——基于Pytorch的人脸识别及人像卡通化算法设计与实现(源码+数据+模型)

    如需完整项目,请私信博主 基于Pytorch的人脸识别及人像卡通化算法设计与实现综述 一、引言 随着深度学习技术的飞速发展,人脸识别与人像卡通化作为计算机视觉领域的两大重要应用,近年来受到了广泛关注。基于Pytorch的人脸识别技术通过构建深度学习模型,实现对人脸

    2024年04月17日
    浏览(77)
  • 基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标,利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数

    2024年02月08日
    浏览(47)
  • 人脸识别实战:使用Python OpenCV 和深度学习进行人脸识别

    首先简要讨论基于深度学习的面部识别的工作原理,包括“深度度量学习”的概念。 然后,我将帮助您安装实际执行人脸识别所需的库。 最后,我们将为静止图像和视频流实现人脸识别。 安装人脸识别库 ================================================================== 为了使用 Python 和

    2024年04月09日
    浏览(87)
  • vue使用tracking实现人脸识别/人脸侦测

    1、安装依赖 2、完整代码(人脸识别功能) 以下代码实现打开摄像头识别人脸 注: 1、安卓设备的人脸识别实现规则: 打开设备摄像机后,在相机的拍摄下实时进行人脸识别,如果识别到人脸后,1.5秒后自动拍照(可自行调整拍照时间)。 2、IOS设备的人脸识别实现规则:

    2024年02月15日
    浏览(33)
  • Java使用opencv实现人脸识别、人脸比对

    1. opencv概述 OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。 opencv官网:https://opencv.org/ opencv官网文档:https://docs.opencv.org/4.7.0/index.html 参考教程1:https://www.w3cschool.cn/opencv/ 参考教

    2024年02月08日
    浏览(52)
  • 人脸识别 - 使用FaceNet或ArcFace在LFW数据集上训练一个人脸识别模型

    目录 介绍 LFW数据集 FaceNet模型 ArcFace模型 实现 加载数据集

    2024年02月06日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包