极智项目 | 实战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的描述】 采购文件用于征求潜在卖方的建议书。如果主要依据价格来选择卖方(如购买商业或标准产品时),通常就使用标书、投标或报价等术语。如果主要依据其他考虑(如技术能力或技术方法)来选择卖方࿰…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
