极智项目 | 实战pytorch arcface人脸识别

Posted 极智视界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极智项目 | 实战pytorch arcface人脸识别相关的知识,希望对你有一定的参考价值。

欢迎关注我的公众号 [极智视界],获取我的更多经验分享

大家好,我是极智视界,本文介绍 实战pytorch arcface人脸识别,并提供完整项目源码。

本文介绍的实战arcface人脸识别项目,提供完整的可以一键训练、测试的项目工程源码,获取方式有两个:

(1) 本文工程项目资源下载,链接:https://download.csdn.net/download/weixin_42405819/87501128

(2) 加入我的知识星球「极智视界」,星球内有更多项目源码下载,链接:https://t.zsxq.com/0aiNxERDq

ArcFace是一种基于深度学习的人脸识别算法,可以将不同的人脸图像映射到高维特征空间中,并通过计算特征向量之间的距离或相似度来实现人脸识别。与传统的人脸识别算法相比,ArcFace主要有以下两个优点:

  1. 针对人脸特征进行归一化处理。通过将人脸特征向量进行L2归一化处理,可以使得特征向量具有更好的可比性和稳定性,从而提高了人脸识别的准确率。
  2. 对特征向量和权重向量进行角度度量。传统的人脸识别算法使用的是欧式距离度量方法,而ArcFace则采用余弦相似度度量方法,这样可以使得特征向量之间的相似度更加准确。

ArcFace的核心是通过多层卷积和池化操作来提取人脸图像的特征,最后将特征向量进行归一化和角度度量。在训练时,使用大量的人脸图像和对应的标签,通过反向传播算法来优化网络参数。ArcFace的网络结构主要包括以下几个部分:

  1. 前置网络(Backbone Network):用于提取人脸图像的特征,通常使用的是一些经典的卷积神经网络,如ResNet、Inception等。
  2. 人脸对齐模块(Face Alignment Module):用于将人脸图像进行对齐,使得不同角度、姿态、表情等情况下的人脸图像具有一致的表征。常用的对齐方法包括仿射变换、人脸关键点定位等。
  3. 特征表示模块(Feature Representation Module):用于将对齐后的人脸图像特征映射到高维特征空间中,通常使用的是全连接层或卷积层。
  4. 损失函数(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_import

from 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人脸识别的主要内容,如果未能解决你的问题,请参考以下文章

极智AI | pytorch改变tensor维度的方法

极智AI | pytorch改变tensor维度的方法

pytorch优化器传入两个模型的参数/保存和加载两个模型的参数

pytorch优化器传入两个模型的参数/保存和加载两个模型的参数

极智开发 | ubuntu 安装 libtorch

极智开发 | ubuntu 安装 libtorch