人脸识别face recognition

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

0 简介

人脸识别大致分为如下三个部分:

  1. 人脸检测 face detection
  2. 人脸对齐 face alignment
  3. 人脸识别 face recognition,包括:
    • face verification:两张图片相似程度。
    • face identification: 在图片库中检索与当前图片相似度最高的图片。

1 人脸检测

face detection通常认为是在图片中找到人脸的过程,这个过程常用的办法有用openCV调用’haarcascade_frontalface_default.xml’或者其他xml文件构建分类器对象,通过detectMultiScale函数返回人脸框坐标,在图像中框出人脸。也可以通过深度学习的方法定位人脸。

1.1 openCV-haarcascade检测

1.2 faster-RCNN 检测人脸

  • github : face-py-faster-rcnn
  • 参考http://blog.csdn.net/zengdong_1991/article/details/66475821
  • 编译过程中如果出现问题,参考faster rcnn +cudnn V5方法2,Caffe + CUDNN V5:

    1. 用最新caffe源码(https://github.com/BVLC/caffe)的以下文件替换掉faster rcnn 的对应文件
      include/caffe/layers/cudnn_relu_layer.hpp,
      src/caffe/layers/cudnn_relu_layer.cpp,
      src/caffe/layers/cudnn_relu_layer.cu
      include/caffe/layers/cudnn_sigmoid_layer.hpp, src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cu
      include/caffe/layers/cudnn_tanh_layer.hpp, src/caffe/layers/cudnn_tanh_layer.cpp,
      src/caffe/layers/cudnn_tanh_layer.cu
    2. 用caffe源码中的这个文件替换掉faster rcnn 对应文件
      include/caffe/util/cudnn.hpp
    3. 将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有v3版本的函数名称替换为v5版本
      cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData
      cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter
  • 在根目录下运行python ./tools/run_face_detection_on_fddb.py,可返回坐标

1.3 SSD-face 检测人脸

  • github: ssd-face

1.4 MTCNN 检测人脸

facenet正是利用MTCNN检测人脸和inception-resnet-v1来识别。
- github: facenet
需要配合识别3.4节一起使用,自己修改后可以利用opencv读入摄像头直接识别人脸。

2 人脸对齐

face alignment指在标定人脸位置后对人脸上的特征进一步定位,可以对人脸检测的侧脸进行校正,旋转,3d变换等,也可以对特征点进行特定的表情变化。常用的有5点和68点特征。如DCNN,TCDCN,MTCNN等方法。

2.1 DCNN

https://github.com/luoyetx/deep-landmark
下载LFW数据进行训练和测试

3 人脸识别

人脸识别是由CNN提取人脸的特征,将两张待测图片输入至训练好的CNN,提取全连接层的特征。模型一般是由预训练的分类模型演变,如1000个人,每个人50张图片训练的CNN模型。

3.1 face verification

两张待测图片在训练好的模型上提取全连接层特征,如vgg的fc7层的4096维特征,进行cosin距离计算。利用vgg-facecaffemodel,如果角度光照相同,可以达到0.93左右的准确率,戴眼镜的影响很大。经过测试vgg-face在0.71至0.73表现最好。

3.2 face identification

将图片库的每张图片(小规模100人至大规模上百万)在训练好的模型上提取全连接特征,将待测图片同样提取特征,对所有特征进行相似度计算,排序后得到相似度最大的图片。vgg-face,GTX970排序一个特征约 105s 10 − 5 s 。在大规模数据集的排序可使用LSH等方法。

3.3 vgg-face 实现

http://www.cppblog.com/guijie/archive/2015/10/14/212015.html
下载caffe模型,作为model,可以直接进行测试。也可以进行finetune。verification和identification都可以利用vgg-face实现。利用CASIA测试,最佳阈值约0.71至0.73。

3.4 facenet的inception-resnet-v1实现

  • github: facenet

可以利用triplet loss 或 softmax loss + center loss 训练,最终的结果呈现为128维特征。可以自行修改为opencv读入摄像头直接识别版本。其LFW验证率为99.2%。

4 整合实现

  • 测试中,CASIA经过openCV的haarcascade cropface后,丢进vgg-face,30类top1约 96%,top5 97.3%。
  • vggface的LFW在98%以上。
  • 对vgg-face的finetune效果很差,正在尝试resnet50
  • 利用openCV的haarcascade + vgg-face识别速度很快,但检测精度不高
  • 利用face-faster-rcnn检测+vgg-face识别速度较慢,约5.5fps,但是测量也可以检测。
  • 利用facenet,即MTCNN+inception-resnet-v1组合的人脸识别系统,在LFW上可以达到99.2%的准确率。在970下测试跑,可以达到10帧以上。

tips

  1. 可以利用import Image,ImageFont,ImageDraw以及drwa.text在输出照片添加中文。
  2. 可以添加注册功能。
  3. 可以添加距离转换百分比功能。
  4. 可以预存特征值。
  5. 可添加判断人脸库可以根据是直接保存在一个大文件夹下,还是保存在对应人姓名的文件夹下,通过程序的FLAG(0,1)来判断如何输出以及检测特征。
  6. 可添加连续帧判断。

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

相关文章

FaceScape: a Large-scale High Quality 3D Face Dataset and Detailed Riggable 3D Face Prediction

目录 1. 简介1.1 本文贡献1.2 方法概述 2. 相关研究介绍2.1 三维人脸数据集2.2 关于3DMM的研究2.3 关于单视图人脸形状重建 3. 本文数据集——FaceScape3.1 面部捕捉3.2 拓扑一致性模型3.3 双线性模型 4. 人脸重建4.1 基模型拟合4.2 位移贴图预测4.2.1 位移贴图介绍4.2.2 位移贴…

基于Insightface的人脸识别

Insightface是在人脸识别方向继facenet:https://github.com/davidsandberg/facenet后又一个比较完善的开源项目。 先给出论文地址:https://arxiv.org/pdf/1801.07698.pdf 项目源码地址:deepinsight/insightface 这里也提供一…

RetinaFace最强开源人脸识别算法

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

人脸识别开源库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就是将人脸图像进行编码,映射到低维子空间上,在低维空间计算两幅人脸图像的距离,以此来进行人脸识别。映射到低维子空间的方法采用主成分分析(Principal Component Analysis,PCA) 1&a…

人脸识别(Facenet)

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

face_recognition人脸识别

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

人脸检测——RetinaFace

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