zoukankan      html  css  js  c++  java
  • 基于机器学习人脸识别face recognition具体的算法和原理

    引自:http://blog.csdn.net/eclipsesy/article/details/78388468?utm_source=debugrun&utm_medium=referral

    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,可返回坐标

    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。在大规模数据集的排序可使用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。

    4 整合实现

    • 测试中,CASIA经过openCV的haarcascade cropface后,丢进vgg-face,30类top1约 96%,top5 97.3%。
    • 对vgg-face的finetune效果很差,正在尝试resnet50
    • 利用openCV的haarcascade + vgg-face识别速度很快,但检测精度不高
    • 利用face-faster-rcnn检测+vgg-face识别速度较慢,约5.5fps,但是测量也可以检测。
     
     
  • 相关阅读:
    弹框只弹一次(cookie)
    多个列表求笛卡尔积的几种方法
    mysqlrouter 8.0.17启动失败
    Eclipse启动项目成功,IDEA报错java.lang.ClassNotFoundException: javax.servlet.Filter
    java的回调机制,讲得很清楚
    Java 命令行 -D
    spring boot项目中,webservice生成客户端,wsdl可配置
    一个老项目的高并发改造,遇到的redis连接不释放问题。
    ExecuterService实现线程池
    子线程获取不到请求中变量的问题
  • 原文地址:https://www.cnblogs.com/Anita9002/p/7798907.html
Copyright © 2011-2022 走看看