引自: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排序一个特征约10−5s。在大规模数据集的排序可使用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,但是测量也可以检测。
 
 

基于机器学习人脸识别face recognition具体的算法和原理的更多相关文章

  1. 基于虹软人脸识别,实现RTMP直播推流追踪视频中所有人脸信息(C#)

    前言 大家应该都知道几个很常见的例子,比如在张学友的演唱会,在安检通道检票时,通过人像识别系统成功识别捉了好多在逃人员,被称为逃犯克星:人行横道不遵守交通规则闯红灯的路人被人脸识别系统抓拍放在大屏上以 ...

  2. Java 基于ArcFace人脸识别2.0 服务端Demo

    源代码传送:https://github.com/itboyst/ArcSoftFaceDemo 开发环境准备: ###开发使用到的软件和工具: Jdk8.mysql5.7.libarcsoft_fa ...

  3. 简单机器学习人脸识别工具face-recognition python小试,一行代码实现人脸识别

    摘要: 1行代码实现人脸识别,1. 首先你需要提供一个文件夹,里面是所有你希望系统认识的人的图片.其中每个人一张图片,图片以人的名字命名.2. 接下来,你需要准备另一个文件夹,里面是你要识别的图片.3 ...

  4. 基于javaweb人脸识别注册登录系统

    ---恢复内容开始--- 现在是2019年,人脸识别技术已经相当成熟了,百度自2017年发布人脸识别技术,已经被广泛应用,不管从现在的iphoneX掀起的面部解锁到手机应用端的各种人脸认证,这一技术已 ...

  5. 机器学习笔记(一)· 感知机算法 · 原理篇

    这篇学习笔记强调几何直觉,同时也注重感知机算法内部的动机.限于篇幅,这里仅仅讨论了感知机的一般情形.损失函数的引入.工作原理.关于感知机的对偶形式和核感知机,会专门写另外一篇文章.关于感知机的实现代码 ...

  6. 使用OpenCV进行人脸识别

    不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...

  7. Python 3 利用 Dlib 19.7 实现摄像头人脸识别

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地: 根据抠取的 ...

  8. C# 图片人脸识别

    此程序基于 虹软人脸识别进行的开发 前提条件从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)将获取到的开发包导入到您的应用中 App_id与SDK_k ...

  9. Python3利用Dlib19.7实现摄像头人脸识别的方法

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地,然后提取构建 ...

随机推荐

  1. PyCharm黄色波浪线提示: Simplify chained comparison

    译过来就是,可简化连锁比较: case 1 if a >= 0 and a <= 9: 1 可简化为: if 0 <= a <= 9: 1 就像我们的数学表达式一样.显然这种情 ...

  2. [转]PostgreSQL教程:系统表详解

    这篇文章主要介绍了PostgreSQL教程(十五):系统表详解,本文讲解了pg_class.pg_attribute.pg_attrdef.pg_authid.pg_auth_members.pg_c ...

  3. webpack 4.0的一些小坑

    一.需要指定开发模式还是生产模式,需要改动两个地方: 1.package.json 中加入 --mode development "scripts": { "dev&qu ...

  4. C#基础第二天-作业-九九乘法表-打印星星

    一.打印九九乘法表图形为下列效果图中的三角型的一种例: 图一效果1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 ...

  5. MySQL设置从库只读模式

    常见现象 运维工作中会经常维护MySQL主从服务器,当然Slave我们只是用于读操作. 一般权限开通也只授权只读账号,但是有时候维护工作可能不是一个人在做,你不能保证其他同事都按照这个标准操作. 有同 ...

  6. Windows 7 添加SSD硬盘后重启卡住正在启动

    楼主办公电脑,原来只配置了一块机械硬盘,用着总很不顺心,于是说服领导给加了块SSD固态硬盘. 操作如下: 1.在PE下分区格式化新固态硬盘,将原来机械硬盘的C盘GHOST备份后还原到新固态硬盘: 2. ...

  7. CSS边框闪烁呼吸样式

    <html> <body> <head> .arrow_box{animation: glow 800ms ease-out infinite alternate; ...

  8. rpx

    rpx(responsive pixel): 可以根据屏幕宽度进行自适应.规定屏幕宽为750rpx.如在iPhone6上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = ...

  9. 【Unity】第5章 3D坐标系和天空盒

    分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 这一张主要介绍3D坐标系的基础知识以及各种形状的天空盒. 二.示例 本章的示例都在ch05Demos工程下.

  10. Maven mvn install 本地jar添加到maven仓库中

    最近在使用支付宝.财付通这样的第三方支付,在使用支付宝过程中需要引入官方SDK方便开发,使用以下命令来将本地的jar装载到maven仓库中. 这里有几点需要注意点,我使用Windows10时,使用po ...