facenet

mtcnn+FaceNet

本篇文章也可以看我的博客

安装requirements.txt依赖

pip install -r requirements.txt

下载预训练模型:

facenet提供了两个预训练模型,分别是基于CASIA-WebFace和MS-Celeb-1M人脸库训练的,不过需要去谷歌网盘下载,这里给其中一个模型的百度网盘的链接:
链接: 预训练模型百度网盘地址 提取码: zs6u
复制这段内容后打开百度网盘手机App,操作更方便哦
下载完成后,把预训练模型的文件夹拷贝在刚才的文件夹里。用pycharm打开这个工程文件如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KxPCkYCf-1584171391948)(C:\Users\xiahuadong\Pictures\截图\37.png)]
data文件夹也可以创建到其他盘:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vh9HyaRw-1584171391949)(C:\Users\xiahuadong\Pictures\截图\43.png)]

运行人脸比对程序(compare.py)。

facenet可以直接比对两个人脸经过它的网络映射之后的欧氏距离。
-1、在compare.py所在目录下放入要比对的文件1.png和2.png。
-2、运行compare.py文件,但是会报错如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txv1RfQS-1584171391950)(C:\Users\xiahuadong\Pictures\截图\38.png)]
这是因为这个程序需要输入参数,在上方的工具栏里选择Run>EditConfigurations ,在Parameters中配置参数:20170512-110547 1.png 2.png。再次运行程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ck9t6I9E-1584171391950)(C:\Users\xiahuadong\Pictures\截图\39.png)]
可以看到,程序会算出这两个图片的差值矩阵
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HgGRCiNm-1584171391950)(C:\Users\xiahuadong\Pictures\截图\40.png)]

图片预处理——运行人脸对齐程序(align\align_dataset_mtcnn.py)。

我们可以下载LFW数据集用来测试这个程序,也为后边的训练函数做好数据准备。
下载链接:http://vis-www.cs.umass.edu/lfw/。下载后解压在data文件夹中。
或者:链接: 预训练模型百度网盘地址 提取码: fzjp
复制这段内容后打开百度网盘手机App,操作更方便哦
因为程序中神经网络使用的是谷歌的“inception resnet v1”网络模型,这个模型的输入时160160的图像,而我们下载的LFW数据集是250250限像素的图像,所以需要进行图片的预处理。
在运行时需要输入的参数:
input_dir:输入图像的文件夹(C:\Users\xiahuadong\Pictures\dataset\FaceNetData\lfw)
output_dir:输出图像的文件夹(C:\Users\xiahuadong\Pictures\dataset\FaceNetData\lfw_160)
指定裁剪后图片的大小:–image_size 160 --margin 32 --random_order(如果不指定,默认的裁剪结果是182*182像素的)
比如我的是:C:\Users\xiahuadong\Pictures\dataset\FaceNetData\lfw C:\Users\xiahuadong\Pictures\dataset\FaceNetData\lfw_160 --image_size 160 --margin 32 --random_order
如果在pycharm中运行,按照同样的方法配置以上参数如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foNPnqhn-1584171391950)(C:\Users\xiahuadong\Pictures\截图\41.png)]

运行训练程序:(train_tripletloss.py)

前边已经下载并处理好了LFW的数据集,现在,可以进行训练了。
运行之前,要在train_tripletloss.py中把加载数据的路径改成自己的数据集所在路径,如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-StW9lFHQ-1584171391950)(C:\Users\xiahuadong\Pictures\截图\42.png)]
注:train_tripletloss.py和train_softmax.py的区别:这是作者对论文做出的一个延伸,除了使用facenet里提到的train_tripletloss三元组损失函数来训练,还实现了用softmax的训练方法来训练。当然,在样本量很小的情况下,用softmax训练会更容易收敛。但是,当训练集中包含大量的不同个体(超过10万)时,最后一层的softmax输出数量就会变得非常大,但是使用train_tripletloss的训练仍然可以正常工作。

程序主要函数介绍

align/ :用于人脸检测与人脸对齐的神经网络
facenet :用于人脸映射的神经网络
util/plot_learning_curves.m:这是用来在训练softmax模型的时候用matlab显示训练过程的程序
二、facenet/contributed/相关函数:
1、基于mtcnn与facenet的人脸聚类
代码:facenet/contributed/cluster.py(facenet/contributed/clustering.py实现了相似的功能,只是没有mtcnn进行检测这一步)
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 对embedding的特征向量使用欧式距离进行聚类
2、基于mtcnn与facenet的人脸识别(输入单张图片判断这人是谁)
代码:facenet/contributed/predict.py
主要功能:
① 使用mtcnn进行人脸检测并对齐与裁剪
② 对裁剪的人脸使用facenet进行embedding
③ 执行predict.py进行人脸识别(需要训练好的svm模型)
3、以numpy数组的形式输出人脸聚类和图像标签
代码:facenet/contributed/export_embeddings.py
主要功能:
① 需要对数据进行对齐与裁剪做为输入数据
② 输出embeddings.npy;labels.npy;label_strings.npy

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch FaceNet是基于PyTorch框架的人脸识别模型,是现代人脸识别领域中最流行和高效的模型之一。 FaceNet模型的目标是将人脸图像映射到高维特征空间,使得同一人的特征向量之间距离较近,不同人的特征向量之间距离较远。这样,通过计算特征向量之间的距离,我们可以实现人脸识别、人脸验证和人脸聚类等任务。 PyTorch是一个开源的深度学习框架,提供了丰富而强大的工具和接口,方便我们构建和训练神经网络模型。FaceNet模型的实现使用PyTorch库中的各种功能,例如卷积神经网络(CNN)构建、梯度优化算法、损失函数和数据增强等。 PyTorch FaceNet使用深度卷积神经网络来提取人脸图像的特征。首先,模型通过多层卷积和池化层来提取图像的低阶特征,然后通过全连接层将这些特征映射到一个高维特征向量。在训练过程中,FaceNet模型使用三元组损失函数来学习特征表示的紧凑性,同时最大化同一人特征向量之间的相似性,最小化不同人特征向量之间的相似性。 利用PyTorch的自动微分功能,我们可以方便地计算模型参数对损失函数的梯度,并使用优化算法(如随机梯度下降)来更新模型参数,从而不断优化模型的性能。 总之,PyTorch FaceNet将PyTorch框架和FaceNet模型结合起来,为人脸识别领域的研究和应用提供了强大的工具和方法。通过PyTorch FaceNet,我们可以方便地构建和训练高效准确的人脸识别模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏华东的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值