极智项目 | 实战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的描述】 采购文件用于征求潜在卖方的建议书。如果主要依据价格来选择卖方(如购买商业或标准产品时),通常就使用标书、投标或报价等术语。如果主要依据其他考虑(如技术能力或技术方法)来选择卖方࿰…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...