#问题分析

#问题描述

在给定的Yale人脸数据集上进行人脸识别. 输入一张待测试的人脸图片, 判断其属于数据库中哪个人的脸.

#数据集分析

Yale人脸数据集中包含有165张bmp格式的黑白人脸图像, 图像大小为100*100像素, 这些图像分别属于15个人, 每人11张图像.

#现有方法

#传统方法

传统的方法是先对图像进行处理后, 对图像的特征进行提取, 然后用分类器对图像进行分类, 最后识别出图像的方法.

#特征提取

  • 弹性模版[1]

为人脸建立属性拓扑图来表示人脸各器官之间的拓扑结构, 实际上是基于几何特征和对灰度分布信息进行小波纹理分析相结合的方法.

该方法对初始参数要求高, 实现较复杂

  • 特征脸(PCA)[2]

将图像由高维投影到低维形成特征矢量, 所有子空间的正交基被称为特征脸.

该方法速度快, 但鲁棒性较差, 受表情、光强和视角的变化影响较大.

  • 尺度不变特征变换(SIFT)[3]

在每个特征点周围的领域内, 在选定的尺度上测量图像的局部梯度, 计算梯度直方图生成具有独特性的向量.

具有尺度不变性的优点, 并且抗遮挡. 缺点是计算量较大, 如果不借助硬件加速或专门的图像处理器很难实现.

  • 方向梯度直方图(HOG)[4]

将图像分割成cell, 然后采集cell中各像素点梯度方向的直方图, 把直方图组合起来就可以构成图像特征.

该方法对图像的颜色信息和光学变化具有不变性, 但对噪声比较敏感.

  • 局部二值模式(LBP)[5]

将某中心像素的灰度值和其相邻的8个像素作比较, 生成LBP码用来反映纹理信息.

它具有旋转和灰度不变性的优点, 对方向信息比较敏感, 一般用于处理8位或16位的图片.

#分类器

  • 最邻近分类器[6]

定义一个距离度量, 以测试样本最近的k个样本的主要类别作为测试样本的类别.

  • 线性判别式分析(LDA)[7]

假设数据为均值不同、方差相同的高斯分布, 找出最优决策面.

  • 逻辑回归(Logistic Regression)[8]

假设后验概率为Logistics 分布, 根据贝叶斯理论计算某一类的概率.

  • 支持向量机(SVM)[9]

最小化类间的最大间隔得到最优决策面. 对数据分布的要求低, 适用性更广.

#神经网络方法

神经网络方法需要大量的数据, 不符合本实验的条件.

#结论

综合以上分析, 我们最终选择了HOG+SVM的方法.

#实验过程

#编程语言介绍

本实验所选择的编程语言为Matlab, 编程软件为Matlab 2018b.

#数据集预处理

对每个人选取1张作为测试样本, 其余10张作为训练样本. 因此最终的训练集包含150张图像, 测试集为15张.

#程序编写

#SVM构造15个二分类器

构造15个分类器, 每一个分类器用10张作为正样本, 其余140张作为该分类器的负样本, 然后进行训练. 最终得到15个分类器, 用于分别识别是否为15个人的图像.

#HOG+SVM构造15个二分类器

和之前的方法相同, 在图像被加入分类器中进行训练之前, 先将图像的大小转换为256*256, 然后提取出HOG特征, 重复上述实验.
extractHOGFeatures[10]是Matlab预先实现好的方法, 选取cell8*8, block2*2.
图一为s1.bmp和它的HOG特征图:

原图以及HOG特征图

图1 原图以及HOG特征图

#HOG+SVM构造多分类器

在训练图像开始之前, 将HOG特征图和特征图对应的标签(即对应的人脸的标号1-15)传入fitcecoc[11]函数即可训练得到一个多标签的SVM, 对于给定的测试样例, 可以给出样例所对应的标签.

#实验结果

#实验过程说明

由于前一个实验方法并不能到达理想的100%准确率, 所以改变了不同的方法重新实现, 最终有三种不同的实验方法.
下述实验结果如无特殊说明, 都是按照训练集10:测试集1进行的实验, 实验结果为1次实验的结果.

#不同实验方法结果对比

表1 实验结果
实验方法 准确率 程序运行时间
SVM 93.333% 27.485s
SVM+HOG binary 93.333% 4.928s
SVM+HOG 100% 11.556s

实验结果如表1所示, 在准确率上, SVM+HOG多分类的方法在准确率上初步达到了100%, 但仍需要后续的多次实验证明; 在程序运行时间上, SVM+HOG二分类的方法耗时最少, 与第一种方法相对比, 提取的特征图较原图像相比, 更容易得到特征, 更容易训练, 与第三种方法相对比, 二分类器只需要判断是或不是的问题, 较是哪个这个问题来说相对简单, 故消耗时间最少.

#SVM+HOG多分类

一次实验的结果具有随机性, 故取10次实验的平均值并改变训练集与测试集的比例, 得到的结果如表2所示.

表2 10次随机实验结果平均值
训练集:测试集 准确率 程序运行时间
10:1 100.00% 7.7176s
9:2 99.50% 8.1220s
8:3 99.78% 8.4686s
7:4 99.50% 9.2287s
6:5 95.73% 9.7408s

#实验结果分析

SVM分类方法训练的分类器未能识别的图像都是单侧光照下的图像, 故后续改进时增加了对光照不敏感的HOG特性来进行训练; HOG+SVM二分类方法存在着样本不对称的问题, 也未能达到理想的实验效果; SVM+HOG多分类器方法在对光照不敏感的同时, 也不存在样本不对称的问题, 最终达到了预期的实验结果, 即100%的准确率.


  1. 人脸识别研究综述 ↩︎

  2. 人脸识别主要算法原理 ↩︎

  3. Scale-Invariant Feature Taransform ↩︎

  4. Histogram of Oriented Gradient ↩︎

  5. Local Binary Pattern ↩︎

  6. 最邻近分类器 ↩︎

  7. Linear Discriminant Analysis ↩︎

  8. Logistic Regression ↩︎

  9. Support Vector Machine ↩︎

  10. Extract histogram of oriented gradients (HOG) features ↩︎

  11. Fit multiclass models for support vector machines or other classifierscollapse ↩︎