极智项目 | 实战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的描述】 采购文件用于征求潜在卖方的建议书。如果主要依据价格来选择卖方(如购买商业或标准产品时),通常就使用标书、投标或报价等术语。如果主要依据其他考虑(如技术能力或技术方法)来选择卖方࿰…...
linux升级gcc版本详细教程
0.前言一般linux操作系统默认的gcc版本都比较低,例如centos7系统默认的gcc版本为4.8.5。gcc是从4.7版本开始支持C11的,4.8版本对C11新特性的编译支持还不够完善,因此如果需要更好的体验C11以及以上版本的新特性,需要升级gcc到一个…...
NBA Top Shot 跌落神坛
近日,美国职业篮球联盟(NBA)授权的NFT 项目“NBA Top Shot Moments”被纽约法院初步裁定为“可能符合证券的定义”,虽然这不是对2021年用户指控该项目违法的最终判决,但这个裁定引发了市场担忧,部分NFT的地…...
状态管理Pinia使用详解(带你入门)
状态管理Pinia使用详解(带你从入门到入神) 序: 如果你之前使用过 vuex 进行状态管理的话,那么 pinia 就是一个类似的插件。它是最新一代的轻量级状态管理插件。你可以通过defineStore来简单创建一个存储管理。 与 vuex 相比,pinia 提…...
Linux系统基础命令(一)
一、图形界面和终端界面 图形界面:是指采用图形方式显示的计算机操作用户界面。 终端界面:是指黑底白字的命令行界面。 什么是tty呢? tty:终端设备的统称。 tty一词源于Teletypes,或者teletypewriters,…...
djvu批量转换为pdf的工具和djvu阅读器(附下载链接)
简介 DjVuToy是一款美观易用、功能强大的DjVu处理工具,DjVuToy官方版功能包括图像文件转DjVu,支持PDG、BMP、GIF等格式。转换的同时可以进行OCR,生成双层DjVu。可以插入、删除、移动、旋转多页DjVu中的页面。还可以将多个DjVu文件合并成一个&…...
Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】
文章目录一、前言二、有关git的相关历史介绍三、Git版本管理1、感性理解 —— 大学生实验报告2、程序员与产品经理3、张三的CEO之路 —— 版本管理工具的诞生四、如何在Linux上使用Git1、创建仓库2、将仓库克隆到本地3、git三板斧① git add② git commit③ git push4、有关git…...
FFmpeg 编译和集成
背景FFmpeg 是一款知名的开源音视频处理软件,它提供了丰富而友好的接口支持开发者进行二次开发。FFmpeg 读作 “ef ef em peg” ,其中的 “FF” 指的是 “Fast Forward”,“mpeg” 则是 “Moving Picture Experts Group” (动态图…...
OOM的俩种情况---主动kill/被动kill
出现OOM, 有两种处理方式:1. 主动Kill; 2. 被动Kill 例:HBase Region Server OOM定位问题复盘 现象 在HBase资源隔离项目中,对测试集群进行压测时,发现region server会出现崩溃的情况,单机请求量从>200到~50每秒都…...
ssh远程连接ECS实例连接失败
尝试通过 SSH 远程连接服务来连接ECS云服务器实例时,收到“连接被拒”或“连接超时”的错误信息,可能的原因分析如下: 错误信息描述 1、错误消息:“ssh: connect to ecs-X-X-X-X.compute-xxxxxxxxx.com port 22: Connection tim…...
[框架设计] MVVM 的介绍,应用及优缺点
介绍 MVVM(Model-View-ViewModel)是一种架构模式,用于将应用程序分离为三个部分: Model(模型):负责处理应用程序的数据和业务逻辑。View(视图):负责呈现用户…...
无锡网站公司电话/emlog友情链接代码
首先我们来看下hbase 的架构图 1、hbase在Hadoop集群中的物理架构 由图中可以看出,存储模块主要包括了ZooKeeper集群、HMaster、HRegionServer。 ZooKeeper: Hbase是强依赖于ZooKeeper,我们读或写一个表的数据,都会优先访问Zoo…...
河南平台网站建设哪里有/百度推广后台登录入口
一、maven打war包到指定目录下 初步解决方法: maven中更改target目录可以用<build>子目录<directory>,但是<directory>只能是相对于当前项目的目录, 虽然也能将war包打到项目外的目录下面,但是项目下会出现一…...
wordpress图像描述/如何优化搜索引擎的准确性
理解AdamW 我们先弄清楚什么是weight decay 其实是在损失函数求导后,放在正则项前面的系数,比如L2正则,我们看一下weight decay的位置 我们可以认为λ就是weightdecayminwL2(w)minwf(w)λ2n∑i1nwi2L2′(w)f′(w)λn∑i1nwi我们可以认为…...
国土局网站建设情况/上海不限关键词优化
作者:赵泽鹏 腾讯社交网络开发工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:https://wetest.qq.com/lab/view/406.html WeTest 导读 2018年8月7日,Google对外发布最新 Android 9.0 正式版系统…...
网站改版对seo影响/品牌传播策略
[url]http://my.oschina.net/u/2416019/blog/633804[/url] 使用WebServlet就不需要web.xml配置了。当标注与web.xml同时配置时,标注无效。 使用配置描述符(命名:web.xml)的好处是:如果需要修改配置值,如&am…...
网站是做百度快照推广好/关键词排名 收录 查询
Struts 是一个开源的 Java Web MVC 框架,也是 Apache 软件基金会的一个开源项目,包括 Struts 1 和 Struts 2,Struts 1 早已被淘汰,现在市面上说的 Struts 主要是指 Struts 2。 很不幸,现在 Struts 2 也是被淘汰的框架…...