极智项目 | 实战pytorch arcface人脸识别
欢迎关注我的公众号 [极智视界],获取我的更多经验分享
大家好,我是极智视界,本文介绍 实战pytorch arcface人脸识别,并提供完整项目源码。
本文介绍的实战arcface人脸识别项目,提供完整的可以一键训练、测试的项目工程源码,获取方式有两个:
(1) 本文工程项目资源下载,链接:https://download.csdn.net/download/weixin_42405819/87501128
(2) 加入我的知识星球「极智视界」,星球内有更多项目源码下载,链接:https://t.zsxq.com/0aiNxERDq
ArcFace是一种基于深度学习的人脸识别算法,可以将不同的人脸图像映射到高维特征空间中,并通过计算特征向量之间的距离或相似度来实现人脸识别。与传统的人脸识别算法相比,ArcFace主要有以下两个优点:
- 针对人脸特征进行归一化处理。通过将人脸特征向量进行L2归一化处理,可以使得特征向量具有更好的可比性和稳定性,从而提高了人脸识别的准确率。
- 对特征向量和权重向量进行角度度量。传统的人脸识别算法使用的是欧式距离度量方法,而ArcFace则采用余弦相似度度量方法,这样可以使得特征向量之间的相似度更加准确。
ArcFace的核心是通过多层卷积和池化操作来提取人脸图像的特征,最后将特征向量进行归一化和角度度量。在训练时,使用大量的人脸图像和对应的标签,通过反向传播算法来优化网络参数。ArcFace的网络结构主要包括以下几个部分:
- 前置网络(Backbone Network):用于提取人脸图像的特征,通常使用的是一些经典的卷积神经网络,如ResNet、Inception等。
- 人脸对齐模块(Face Alignment Module):用于将人脸图像进行对齐,使得不同角度、姿态、表情等情况下的人脸图像具有一致的表征。常用的对齐方法包括仿射变换、人脸关键点定位等。
- 特征表示模块(Feature Representation Module):用于将对齐后的人脸图像特征映射到高维特征空间中,通常使用的是全连接层或卷积层。
- 损失函数(Loss Function):用于训练网络,并将不同的人脸特征向量在高维特征空间中分开,通常使用的是分类损失函数或距离度量损失函数。
其中,最核心的部分是损失函数。本项目的ArcFace工程项目在损失函数部分使用了Focal Loss。在人脸识别算法中,由于人脸图像的数量往往是类别不平衡的,即一些人的图像数量较少,而另一些人的图像数量较多,因此类别不平衡问题是一大挑战。Focal Loss正是一种用于解决类别不平衡问题的损失函数,因此在人脸识别算法中,Focal Loss得到了广泛的应用。与传统的softmax损失函数相比,ArcFace的损失函数引入了一个角度余弦值cos(θ),用于衡量特征向量和分类超平面的相似度。同时,ArcFace还引入了一个权重衰减系数m,用于增强样本的差异性,以便更好地区分不同的人脸。
介绍了一些人脸识别背景和应用之后,开始咱们的人脸识别项目实战。
本项目是基于arcface pytorch版本。
在拿到完整工程代码后,可以看到工程的目录结构如下:
接着咱们开始实战。
首先进行开发环境的准备,依赖已经放在 requirements.txt
里面了。
# 安装anaconda,略过~
# 使用conda管理py开发环境
conda create -n arcface_py37 python=3.7.5# 激活conda环境
conda activate arcface_py37# 安装py依赖
pip install -i https://pypi.douban.com/simple -r requirements.txt
完了之后记得还需要将`/root/anaconda3/envs/arcface_py37/lib/python3.7/site-packages/resnet`
中的`__init__.py`
、`resnet101.py`
、`resnet152.py`
进行一些简单的修改。
将`__init__.py`
修改为:
from tensorflow.keras.applications.resnet50 import ResNet50
from .resnet152 import ResNet152
from .resnet101 import ResNet101
将 `resnet101.py`
中的开头相应部分替换为如下部分:
from keras.layers import (Input, Dense, Conv2D, MaxPooling2D, AveragePooling2D, ZeroPadding2D,Flatten, Activation, GlobalAveragePooling2D, GlobalMaxPooling2D, add)
from keras.layers.normalization.batch_normalization_v1 import BatchNormalization
from keras.models import Model
from keras import initializers
from keras.layers import Layer, InputSpec
from tensorflow.keras.utils import get_source_inputs
from keras import backend as K
from keras_applications.imagenet_utils import _obtain_input_shape
from keras.utils.data_utils import get_file
将 `resnet152.py`
中的开头相应部分替换为如下部分:
from __future__ import print_function
from __future__ import absolute_importfrom keras.layers import (Input, Dense, Conv2D, MaxPooling2D, AveragePooling2D, GlobalMaxPooling2D,GlobalAveragePooling2D, ZeroPadding2D, Flatten, Activation, add)
from keras.layers.normalization.batch_normalization_v1 import BatchNormalization
from keras.models import Model
from keras import initializers
from keras.layers import Layer, InputSpec
from tensorflow.keras.utils import get_source_inputs
from keras import backend as K
from keras_applications.imagenet_utils import _obtain_input_shape
from keras.utils.data_utils import get_file
接着咱们准备训练数据集,训练和测试数据集我已经为你们好,并放在百度网盘里,你可以直接下载使用。
链接: 提取处 提取码: 6666
下载解压好后,将其放到`arcface-pytorch/data`
下,至此,data的目录结构会是这样的:
| data- datasets- lfw- lfw-align-128- lfw_test_pair.txt- webface- CASIA-maxpy-clean- cleaned_list.txt- dataset.py
开始训练:
python train.py
开始测试:
python test.py
这样就大功告成了。
好了,以上分享了 实战pytorch arcface人脸识别,包括完整的项目工程源码分享,希望我的分享能对你的学习有一点帮助。
【极智视界】
《极智项目 | 实战pytorch arcface人脸识别》
畅享人工智能的科技魅力。邀请您加入我的知识星球,星球内有丰富的AI技术应用相关技术文章、资源、项目源码,涵盖人脸、检测、分割、多模态、自动驾驶、工业等实用、好玩的项目应用,一定会对你的学习有所帮助。https://t.zsxq.com/0aiNxERDq
相关文章:

极智项目 | 实战pytorch arcface人脸识别
欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文介绍 实战pytorch arcface人脸识别,并提供完整项目源码。 本文介绍的实战arcface人脸识别项目,提供完整的可以一键训练、测试的项目工程…...

【IP技术】ipv4和ipv6是什么?
IPv4和IPv6是两种互联网协议,用于在互联网上标识和寻址设备。IPv4(Internet Protocol version 4)是互联网协议的第四个版本,是当前广泛使用的互联网协议。IPv4地址由32位二进制数构成,通常表示为4个十进制数࿰…...

linux基本功系列之uniq命令实战
文章目录前言一. uniq的命令介绍二. 语法格式及常用选项三. 参考案例3.1 统计行数3.2 对文本进行去重3.3 显示不重复的行3.4 仅显示重复的行,且显示重复的行的所有行3.5 忽略字母大小写总结前言 大家好,又见面了,我是沐风晓月,本…...

六、SpringBoot项目搭建
日志 Java 主流日志工具库 统一接口 什么是 REST? Representational State Transfer——“表现层状态转化”。可以总结为一句话:REST 是所有 Web 应用都应该遵守的架构设计指导原则。面向资源是 REST 最明显的特征,对于同一个资源的一组不…...

【LeetCode】2363. 合并相似的物品
2363. 合并相似的物品 题目描述 给你两个二维整数数组 items1 和 items2 ,表示两个物品集合。每个数组 items 有以下特质: items[i] [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 ,weighti 表示第 i 件物品的 重量 。items 中每…...

华为OD机试题,用 Java 解【出租车计费】问题
最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...

【人脸识别】DDL:数据分布知识蒸馏思想,提升困难样本(遮挡、低分辨率等)识别效果
论文题目:《Improving Face Recognition from Hard Samples via Distribution Distillation Loss》 论文地址:https://arxiv.org/pdf/2002.03662v3.pdf 代码地址:https://github.com/HuangYG123/DDL 1.前言及相关工作 Large facial variatio…...

如何管理好仓库/库房?
仓库管理是企业管理中不可缺少的一部分,事关企业能否正常运行的关键之一,古人有云:“三军未动粮草先行”,一个企业仓库管理做不好,他的生产管理肯定也是做不好的,不是说生产管理人员的管理能力不具备&#…...

Unity Lighting -- Unity的光源简介
在主菜单栏中,点击Window -> Rendering -> Light Explorer打开光源管理器,这个标签页可以看到场景中所有的光源,包括每个光源的类型,形状,模式,颜色,强度,阴影等信息。 在主菜…...

Android仿网易云音乐歌单详情页
效果图实现思路:1、Activity设置自定义Shared Element切换动画2、透明状态栏(透明Toolbar,使背景图上移)3、Toolbar底部增加和背景一样的高斯模糊图,并上移图片(为了使背景图的底部作为Toolbar的背景)4、上…...

linux基本功系列之free命令实战
文章目录前言一. free命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看free相关的信息3.2 以MB的形式显示内存的使用情况3.3 以总和的形式显示内存的使用情况3.4 周期性的查询内存的使用情况3.5 以更人性化的形式来查看内存的结果输出总结前言 大家好,又见面了…...

华为OD机试模拟题 用 C++ 实现 - 连续子串(2023.Q1)
最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明连续子串题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD …...

【软考——系统架构师】UML 建模与架构文档化
🔎这里是【软考——系统架构师】,关注我考试轻松过线 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 文章目录UML 基础UML 软件开发过程系统架构文档化送书福利UML 基础 U…...
Spring中常用注解
声明 bean 的注解 Component:泛指各种组件 Controller、Service、Repository 都可以称为Component Controller:控制层 Service:业务层 Repository:数据访问层Bean 的生命周期属性 Scope 设置类型包括:设置 Spring 容器…...

基于SpringCloud的可靠消息最终一致性06:轮询事务消息
上一节把可靠消息最终一致性的正常逻辑代码顺序执行了一次,并且对于同一个事务消息,在正常情况下它要被发送至少两次。 这是因为在发送消息之前,TransactionMessageService就已经把消息保存到了数据库中。而在首次消费完消息后,TransactionMessageListener并没有从数据库中…...

Python Flask + Echarts 轻松制作动态酷炫大屏( 附代码)
目录一、确定需求方案二、整体架构设计三、编码实现 (关键代码)四、完整代码五、运行效果1.动态实时更新数据效果图 说明: 其中 今日抓拍,抓拍总数,预警信息统计,监控点位统计图表 做了动态实时更新处理。 2.静态…...
Wepack(1):SourceMap讲解以及使用
今天我们来讲讲定位源码的工具 Sourcemap , 我们先讲最简单的配置,之后才补充 sourcemap 的其他属性 Sourcemap 作用 可以在打包的代码直接对应相应源码 例如 vue2 , vue3可以把对应的错误上传到相关服务器 使用 webpack.config.js const config …...

华为OD机试题,用 Java 解【最多等和不相交连续子序列】问题
最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...

Kubernetes06:Controller
Kubernetes06:Controller 1、什么是controller 管理和运行容器的对象,是一个物理概念 在集群上管理和运行容器的对象 2、Pod和Controller之间的关系 Pod是通过controller来实现应用的运维 比如伸缩、滚动升级等等操作Pod和Controller之间通过 label 标签建立关系…...
采购文件中 RFI、RFQ、RFP、IFB的区别
【PMBOK的描述】 采购文件用于征求潜在卖方的建议书。如果主要依据价格来选择卖方(如购买商业或标准产品时),通常就使用标书、投标或报价等术语。如果主要依据其他考虑(如技术能力或技术方法)来选择卖方࿰…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...