基于Insightface的人脸识别

news/2024/10/28 16:20:40/

Insightface是在人脸识别方向继facenet:https://github.com/davidsandberg/facenet后又一个比较完善的开源项目。

先给出论文地址:https://arxiv.org/pdf/1801.07698.pdf                           项目源码地址:deepinsight/insightface

这里也提供一个如何运行该项目流程的链接,可以对齐进行参考:https://zhuanlan.zhihu.com/p/33750684

我也会将自己精简版和加注释和理解以及整理好后的训练和测试代码上传自己的Github代码仓库;链接:https://github.com/Danbinabo

InsightFace库是对我们上述论文中提出算法的开源实现. 其中不仅仅包括我们自己的算法, 也包括其他常见的人脸loss, 比如Softmax, SphereFace, AMSoftmax, CosFace, Triplet Loss等等. 除了代码实现以外, 我们还提供了打包对齐好的人脸训练数据供下载, 免除了一大堆数据准备的工作. 研究人员可以专注于人脸识别的算法实验, 工业界也可以方便的根据自己需求训练或者拿我们提供的高精度预训练模型产品化.目前暂列MegaFace榜单第一名。

环境要求

  1. Linux
  2. Python 2.7
  3. 安装MXNet:(模型训练是基于mxnet进行的训练)

配置好训练环境后,先准备好人脸识别的数据集,这里我部分数据集是用的lfw数据集http://vis-www.cs.umass.edu/lfw/lfw.tgz,需要者去对应官网下载。

一般情况下人脸识别的注册库同一个id的人的图片应该不少于2-3张,越好的算法其训练数据应该尽可能的包含每个人不同年龄,不同环境,不同姿态等场景下的人脸图片。

这里因为lfw数据集里有很多人脸id文件夹只有一张或者两者图片,这里我采取的策略是去除这些数据:

# coding:utf-8
#将训练集中同一id但人脸图片数<=2的文件夹删除
import os
import shutil
src = '../lfw'    #lfw数据集
folders_1 = os.listdir(src) # 所有人脸id文件夹
for folder in folders_1:imgs = os.listdir(os.path.join(src,folder)) # 该人脸id文件夹下所有图片if(len(imgs)<=2):#Aaron_Eckhartnew_path = os.path.join(src,folder)#os.rmdir(new_path)#os.remove(new_path)shutil.rmtree(new_path)

整个流程/步奏大概分为以下:

########### part1:数据集准备 ##############
# 1:准备训练用到的数据集,这里用到了lfw数据集,放在data/train目录
########### part2:人脸检测及对齐 ###########
# 2:运行align文件下align_dataset_mtcnn.py进行人脸检测和人脸对齐(统一大小112*112),
     检测和缩放后的人脸图像保存在lfw_112文件夹下,格式和以前一样;
########### part3:Insightface训练集准备 ###########
# 3:在命令行运行im2rec.py文件,生成图像列表lst文件,具体如下:
     在与lfw_112同级的文件夹中打开命令行,
     执行 python C:\Users\HP\Desktop\face_insighrface\get_mx_data\im2rec.py --list 
                    --recursive train C:\Users\HP\Desktop\face_insighrface\data\lfw_112
     # 这样就制作.lsh完成。
# 4:从列表生成rec文件和idx文件
     在与lfw_112同级的文件夹中打开命令行,执行 
          python C:\Users\HP\Desktop\face_insighrface\get_mx_data\im2rec.py --pass-through train.lst C:\Users\HP\Desktop\face_insighrface\data
                            
     这样就生成了train.idx和train.rec用于训练的数据
     
# 5:自己建一个property,里面写入自己训练的数据量 112 112 ###图像数量及大小(N,112,112)
# end:至此,lst、rec、idx文件已全部生成 

########### part4:Insightface验证集bin文件准备 ###########
# 1:运行get_pares.py 生成验证集的pares.txt#[类内和类间个数相同]
     #:这里类内和类间交替写入[例如300对类内,300对类间],一共分别写入3000/6000对类内和类间作验证集,这里生成get_pares.py脚本在后面给出。

# 2:运行python lfw2pack.py --data-dir ../data/valid --image-size "112,112" --output ./val.bin
     # 生成val.bin
########### part5:Insightface网络训练 ###########
# src-->运行train_softmax.py

完成上述工作后就完成了所有所有用于训练Insightface人脸识别模型的准备工作,运行train_softmax.py即开始训练模型,这里要说的是Insightface提供了多种人脸识别的loss函数,这里可以自己选择,训练过程中模型收敛很慢很慢,公司在训练这个模型时在几百万id的数据集上进行迭代,8张卡训练一个acc较高的模型花了半个月,后续还要进行不断的改进迭代,所以刚开始训练很长一段时间acc为0是再正常不过的事了。

########### part6:Insightface模型测试和验证 ###########
test_run-->1:1_align_face.py --- 对注册库进行人脸检测、裁剪和对齐:这里人脸注册库文件夹和训练时文件夹一样,一个文件夹人脸id注册时放至少>=2-3张人脸图像。
              -->2:2_demo.py       --- 调用摄像头进行测试

这里给出两张测试效果图:纳摩问题来了,在很多实际应用中,如测试图2所示的用手机图像进行人脸检测和识别是不能通过和识别的,那就引入了活体检测的概念,之前也做了一段时间这方面的研究,有兴趣的朋友可以去试试。


http://www.ppmy.cn/news/662013.html

相关文章

RetinaFace最强开源人脸识别算法

最近这几天&#xff0c;美国国家标准与技术研究院&#xff08;NIST&#xff09;公布了全球最权威的人脸识别算法测试&#xff08;FRVT&#xff09;的最新结果&#xff0c; 国内知名视觉算法公司格灵深瞳取得了优异成绩&#xff1a;在最具挑战的“非约束性自然环境人脸照片”测…

人脸识别开源库face_recognition

原文出处: https://blog.xugaoxiang.com/ai/face-recognition-cnn.html 软硬件环境 ubuntu 18.04 64bitGTX 1070Tianaconda with python 3.6face_recognition 1.2.3dlibopencv face_recognition简介 face_recognition号称是世界上最简单的基于python的人脸识别库&#xff0…

人脸识别:特征脸(Eigenface)

Eigenface就是将人脸图像进行编码&#xff0c;映射到低维子空间上&#xff0c;在低维空间计算两幅人脸图像的距离&#xff0c;以此来进行人脸识别。映射到低维子空间的方法采用主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09; &#xff11;&a…

人脸识别(Facenet)

人脸识别是目前应用非常广泛的一种生物识别技术&#xff0c;与其他生物识别技术&#xff08;指纹识别&#xff0c;掌形识别&#xff0c;眼虹膜识别和声音识别&#xff09;相比&#xff0c;人脸识别具有以下优势&#xff1a; 其他每种生物识别方法都需要一些人的配合动作&#x…

face_recognition人脸识别

face_recognition人脸识别 face_recognition简介 这是世界上最简单的人脸识别库了。你可以通过Python引用或者命令行的形式使用它&#xff0c;来管理和识别人脸。 该软件包使用dlib中最先进的人脸识别深度学习算法&#xff0c;使得识别准确率在《Labled Faces in the world》…

人脸检测——RetinaFace

RetinaFace: Single-stage Dense Face Localisation in the Wild 作者&#xff1a; 帝国理工&#xff0c;伦敦米德尔塞克斯大学&#xff0c;InsightFace paper&#xff1a; https://arxiv.org/pdf/1905.00641.pdf github&#xff1a; https://github.com/deepinsight/insightf…

人脸识别——FaceBook的DeepFace、Google的FaceNet、DeepID

DeepFace--Facebook的人脸识别 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 目录(?)[] 连续看了DeepID和FaceNet后&#xff0c;看了更早期的一篇论文&#xff0c;即FB的DeepFace。这篇论文早于DeepID和FaceNet&#xff0c;但其所使用的方法在…

Face-recognition实现人脸识别

文章目录 1.前置知识点&#xff08;1&#xff09;Opencv中矩形&#xff0c;绘制文本&#xff08;2&#xff09;Opencv中基础的知识点&#xff08;3&#xff09;face_recognition.face_locations(img1ToRGB)&#xff08;4&#xff09;face_recognition.face_encodings(img1ToRGB…