人脸识别

  • 人脸检测 detection->location->tracking
  • 人脸表征 representation
  • 人脸识别 recognition

对于挑选出来的框,采用rcnn等方法引入一个阈值,而后进行判断是否为人脸

  • 神经网络
  • SVM Osuan
  • Adaboost VJ : 特征值=白块-黑块
    • Gentle: 添加自适应牛顿法,拟合加性logistic模型

原始阶段

  1. 人脸识别最初是按
    1. 可视特征,可视特征: 几何特征/纹理特征(SGLD)/颜色特征(很多种颜色)
    2. 规则定义,通用模板匹配:计算轮廓,眼睛,鼻子//Craw正面/Leung五点
  2. 对于相片光照有MLV,RLI两种处理方式
  3. 机器学习参与为聚类方法
    1. 划分: k-means, k-medoids, CLARANS
    2. 层次hierarchical method : 合并和分解
    3. 密度density-based method: DB-SCAN
    4. 网格grid-based : STING,CLIQUE,WAVE-CLUSTER
    5. 模型聚类

VJ方法

  1. 原始是按金字塔型(区别于树型,叔叔可以有边连接),进行滑动窗口范式

    1. 选择图像上的某个(矩形)区域作为一个观察窗口;
    2. 在选定的窗口中提取一些特征对其包含的图像区域进行描述;
    3. 根据特征描述来判断这个窗口是不是正好框住了一张人脸。
  2. 为了提升效率,将图像缩放到不同的大小,然后用相同大小的窗口去扫描

  3. VJ方法使用三大优化,提升效率

    1. 特征的快速计算方法——积分图

      • Haar特征反映了局部区域之间的相对明暗关系
      • 之后衍生出来各式各样的Haar特征,其中三点,四点各有实际用途
    2. 有效的分类器学习方法——AdaBoost

      采用AdaBoost方法由弱分类器构建强分类器,这是一个顺序执行的过程,换言之,一旦一个弱分类器被选中,其就必定会成为强分类器的组成部分,不允许反悔,这其实是假设增加弱分类器一定会使得强分类器的分类准确度更高,但是,这个假设并不总是成立。[贪心]基于这样的想法,出现了允许回溯的FloatBoost方法。

    3. 以及高效的分类策略——级联结构的设计

  4. 发展

    1. LBP特征是一种二值编码特征,其直接基于像素灰度值进行计算,特点是在编码时考虑的是两个值的相对大小,并且按照一定的空间结构来进行编码,局部组合二值特征就是在LBP特征的启发下设计的;
    2. 简化的SURF特征是一种和Haar特征相类似的特征,但是其计算的是局部区域中像素点的梯度和,并在求和的过程中考虑了梯度方向
    3. HOG特征也是一种基于梯度的特征,其对一个局部区域内不同方向的梯度进行统计,计算梯度直方图来表示这个区域。

难点

旋转/遮挡

旋转通常采用分治的策略(周志华)

遮挡的鲁棒性——Deepid2+

Rcnn

Selective Search方法先基于各种颜色特征将图像划分为多个小块,然后自底向上地对不同的块进行合并

用R-CNN进行目标检测的流程是:先采用如 Selective Search等方法生成候选窗口,然后用学习好的CNN提取候选窗口对应的特征,接着训练分类器基于提取的特征对候选窗口进行分类,最后对判别为人脸的窗口采用边框回归进行修正。

全连接层的坏处就在于其会破坏图像的空间结构

深度学习方法有很多,如:自动编码器、稀疏自动编码器、受限波尔兹曼机(RBM)、深度信念网络(DBN)、卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆递归网络(LSTM)等。

Models

参考图片(来自网络,侵删)

matlab自带

人脸识别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%To detect Face  
FDetect = vision.CascadeObjectDetector();

%Read the input image
I = imread('E:6.jpg');

%Returns Bounding Box values based on number of objects
face_dtect = step(FDetect,I);

figure(1),
imshow(I); hold on
for i = 1:size(face_dtect,1)
rectangle('Position',face_dtect(i,:),'LineWidth',5,'LineStyle','-','EdgeColor','m');
end
title('Face Detection');
hold off;

人眼识别

效果其实挺不错,不过对于眼镜扑街了.

把这一句加一个属性

1
2
%To detect Face  
FDetect = vision.CascadeObjectDetector('EyePairBig');

opencv

<>中windows可执行程序

python版本图片太大泰坦显卡都没imshow出来…….

人脸验证

  • PCA降维+LDA获取类间差值

    • Fisher
    • 2dPCA,CSLDA
  • Gabor变换+SVM

  • SIFT特征:连连看

  • LBP特征: 纹理 ~中值滤波器,高斯滤波器,DOG

思考

对于服装属性而言,通过成熟的人脸去画bb其实是有一定可行性的.但是对比而言有相同或是进一步的困难

  1. 在初期人脸是需要干净环境(受限/部分受限),服装需求度可能更大,因为服饰和背景相比更近
  2. 现有的工业化,港中文等高校的人脸高精度框架没有开源,开源代码除了opencv自带的之外并不好配置,然而opencv对于倾斜度大于15’的图片识别不出来..
  3. 隐形马尔科夫模型也是可以借鉴的一个点,人脸识别中一层一层走的,集体照中可以一排一排推
  4. 但是可以借鉴的是模型select search+RCNN,交替网络方法
    • Haar算子识别边缘信息这一点十分有用
    • 下一周可能开始折腾caffe

Reference

  • 人脸自动机器识别 科学出版社

  • 人脸识别与人体动作识别技术及应用 中国工信出版集团

    readmore:

    15整理

文章目录
  1. 1. 原始阶段
  2. 2. VJ方法
  3. 3. 难点
  4. 4. Rcnn
  5. 5. Models
    1. 5.1. matlab自带
      1. 5.1.1. 人脸识别
      2. 5.1.2. 人眼识别
    2. 5.2. opencv
  6. 6. 人脸验证
  7. 7. 思考
  8. 8. Reference