【人脸识别】SVM和PCA人脸识别【含GUI Matlab源码 369期】

news/2024/11/23 16:45:57/

⛄一、简介

1 PCA-SVM原理
1.1 主成分分析PCA
本文处理的所有原始图片都是112x 92大小的pgm格式图片, 每幅图片包含10304个像素点, 每一行代表一个样本,维数就是10304维。维数过大使得数据处理工作十分复杂,同时,图片特征之间的强相关性还会导致“维数灾难”。快速高效的人脸识别,其关键在于提取到精准表征人脸的特征。从人脸图像中找出最能表征人脸的特征空间,是主成分分析(Principal Component Analysis, PC A) [2] 在人脸特征提取中的基本思想。在这个过程中, 不能表征人脸的属性会被剔除(降维的过程),也就是在一个高维特征空间中利用一组系数对特征加权,来重新表示一张人脸图片。PCA过程的数学描述如下:
在这里插入图片描述
在这里插入图片描述
1.2 支持向量机SVM
给定训练集,在特征空间上找到一个分类超平面,将样本点分到不同的类。存在唯一的分类超平面,使得样本点距离分类超平面的距离最大。其中,距离超平面最近的点为该超平面的支持向量。找到该超平面后,对于待测点,通过计算该点相对于超平面的位置进行分类。其中,一个点距离分类超平面的距离越大,表明分类预测的确信程度越高。
支持向量机(Support Vector Machine, SVM) 需要做的就是找出一个超平面, 使得在两类样本点能完全分离的情况下,尽可能使样本边界的距离最大。
在这里插入图片描述
SVM是一个两类分类器, 而大多数实际分类问题都是多类分类问题, 那么就需要利用SVM这个二分类器去实现一个多类问题的分类。本文人脸识别程序中, 采用的是一对一的投票策略, 即在任意两类样本之间设计一个SVM分类器,分类为得票最多的类。

2 MATLAB工具软件
本文通过MATLAB工具软件, 对PC A-SVM人脸识别方法进行仿真计算。MATLAB人脸识别程序的使用界面上分为三个按钮:“测试准确率”“选择照片”和“图像匹配”,既可以方便操作,又可以使识别结果直观地显示出来。点击“开始运行”按钮调用的是主函数face.m, 对人脸数据进行处理; 点击“选择照片”按钮调用子函数GUl open, 用户可以在相应的文件路径下选择人脸照片; 点击“人脸识别”按钮调用子函数GUI reg, 通过每张图片所对应的标签来进行匹配, 从而得出识别结果。

3 PCA-SⅤM人脸识别模型的建立
3.1人脸库构建
人脸识别模型的建立首先需要适当的人脸库。本文分两步构建人脸库。
(1) 选择OR L人脸数据库加入本文人脸库, 其中包含40个人的每人10张人脸图片, 一共400张图片, 每张大小是112×92像素, 图片格式是pgm。
(2) 作者利用电脑摄像头拍了10张本人的照片, 将这10张图片的格式转化为pgm格式, 同时大小也转化为112×92像素,加入本文人脸库。
3.2训练集数据处理
这里将每个人的前5张人脸图片作为训练集,后5张人脸图片作为测试集。训练集数据处理步骤如下:
(1) 读入训练集数据, 储存在矩阵f_matrix(205*10304) 中。
(2) 对训练集数据进行PC A降维, 本文选择的降维维数是100。
(3)规范化特征数据,将同一个样本中的不同维度归一化,从而对于不同的属性之间也可以进行比较。
这里特别增加了一个显示特征脸的步骤。由于数据降至100维,在低维空间中的基就是100张特征脸,其他所有经过降维的脸都可以通过这100张特征脸线性表示。图1显示了前10个特征脸。
在这里插入图片描述
图1 特征脸显示
3.3 参数选择
在PCA-SVM人脸识别模型建立中, 参数取值如下:
(1) n persons:样本包含41个人的人脸, 将n persons设置为41。
(2)flag:flag为0时子函数ReadFace.m读取训练样本数据, flag为1时读取测试样本数据。
(3) k:表示降维至k维。该参数在子函数fast PC A.m中以输入参数出现, 在后面的SVM训练中也有用处。k值与gamma值有很大关联, 这里经过反复调整将k设置为100。
(4) low vec:经过降维后的图像数据pc a face的最小值, 通过设置low new,即新的边界的下限,对数据进行归一化处理。
(5) up vec:经过降维后的图像数据pc a face的最大值, 通过设置up new, 即新的边界的上限, 对数据进行归一化处理。
(6)核函数:本文选择的是高斯核函数。
(7) gamma:参数gamma是选择高斯核函数RBF作为核函数后该函数自带的一个参数。它隐含地决定了数据映射到新的特征空间后的分布。gamma越大, 支持向量越少, 反之支持向量越多。支持向量的个数直接影响到训练与预测的速度。gamma如果设置得很大, 会使得高斯分布显得高而窄,只作用于支持向量样本附近,对于未知样本的分类效果很差,最终会导致训练准确率很高,而识别准确率很低的结果,即过拟合。而gamma设置过小, 则会造成平滑效应过大, 对于噪声不敏感。本文设置参数gamma时, 在10-3~103的范围依次尝试,最终设置为0.01。
(8)c:参数c可以理解为惩罚参数,类似于正则化中一的作用。c越大,意味着拟合非线性的能力越强,但是容易入出现过拟合的情况,而c过小会导致出现欠拟合的情况,总而言之,c过大或者过小,泛化能力都会变差。本文设置参数c为1。

4 PCA-SⅤM人脸识别模型的测试
测试时,首先读取测试数据,类似于处理训练数据,需要对测试数据进行降维和归一化处理,然后利用训练所得的模型对测试数据集进行分类识别。将识别结果与本身自带的标签(即这是第几个人的人脸图片)进行比对,可以获得识别准确率。测试结果表明, 基于PCA-SVM的人脸识别方法准确率为83.9024%。这里选取第8个人的人脸图片作为示例,可以看到在最终的人脸识别阶段可以准确地进行人脸识别。
备注:简介部分仅作为理论参考,与本文程序和运行结果略有出入。

⛄二、部分源代码

% FR_GUI.m
addpath(genpath(‘./’))
global h_axes1;
global h_axes2;
h_f = figure(‘name’, ‘基于PCA和SVM的人脸识别系统’);

h_textC = uicontrol(h_f, ‘style’, ‘text’, ‘unit’, ‘normalized’, ‘string’, ‘C=’, ‘position’,…
[0.05 0.7 0.1 0.06]);
h_editC = uicontrol(h_f, ‘style’, ‘edit’, ‘unit’, ‘normalized’, ‘position’, [0.05 0.6 0.1 0.06],…
‘callback’, ‘C = str2num(get(h_editC, ‘‘string’’))’);
h_textGamma = uicontrol(h_f, ‘style’, ‘text’, ‘unit’, ‘normalized’, ‘string’, ‘gamma=’, ‘position’,…
[0.05 0.5 0.1 0.06]);
h_editGamma = uicontrol(h_f, ‘style’, ‘edit’, ‘unit’, ‘normalized’, ‘position’, [0.05 0.4 0.1 0.06],…
‘callback’, ‘gamma = str2num(get(h_editGamma, ‘‘string’’))’);

% 取得参数 C 和 gamma 的当前值,即最近一次训练所使用的值
t = dir(‘Mat/params.mat’);
if length(t) == 0
% 没有找到参数文件
C = Inf;
gamma = 1
else
load Mat/params.mat;
end
function [imgRow,imgCol,FaceContainer,faceLabel]=ReadFaces(nFacesPerPerson, nPerson, bTest)
% 读入ORL人脸库的指定数目的人脸前前五张(训练)
%
% 输入:nFacesPerPerson — 每个人需要读入的样本数,默认值为 5
% nPerson — 需要读入的人数,默认为全部 40 个人
% bTest — bool型的参数。默认为0,表示读入训练样本(前5张);如果为1,表示读入测试样本(后5张)
%
% 输出:FaceContainer — 向量化人脸容器,nPerson * 10304 的 2 维矩阵,每行对应一个人脸向量

if nargin==0 %default value
nFacesPerPerson=5;%前5张用于训练
nPerson=40;%要读入的人数(每人共10张,前5张用于训练)
bTest = 0;
elseif nargin < 3
bTest = 0;
end

img=imread(‘Data/ORL/S1/1.pgm’);%为计算尺寸先读入一张
[imgRow,imgCol]=size(img);

FaceContainer = zeros(nFacesPerPersonnPerson, imgRowimgCol);
faceLabel = zeros(nFacesPerPerson*nPerson, 1);

% 读入训练数据
for i=1:nPerson
i1=mod(i,10); % 个位
i0=char(i/10);
strPath=‘Data/ORL/S’;
if( i0~=0 )
strPath=strcat(strPath,‘0’+i0);
end
strPath=strcat(strPath,‘0’+i1);
strPath=strcat(strPath,‘/’);
tempStrPath=strPath;
for j=1:nFacesPerPerson
strPath=tempStrPath;

    if bTest == 0 % 读入训练数据strPath = strcat(strPath, '0'+j);elsestrPath = strcat(strPath, num2str(5+j));endFaceContainer((i-1)*nFacesPerPerson+j, :) = img(:)';faceLabel((i-1)*nFacesPerPerson+j) = i;
end % j

end % i

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]孟逸凡,柳益君.基于PCA-SVM的人脸识别方法研究[J].科技视界. 2021,(07)
[2]张娜,刘坤,韩美林,陈晨.一种基于PCA和LDA融合的人脸识别算法研究[J].电子测量技术. 2020,43(13)
[3]陈艳.基于BP神经网络的人脸识别方法分析[J].信息与电脑(理论版). 2020,32(23)
[4]戴骊融,陈万米,郭盛.基于肤色模型和SURF算法的人脸识别研究[J].工业控制计算机. 2014,27(02)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除


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

相关文章

MySQL基础操作汇总(干货)

数据库操作&#xff1a; 1)创建数据库&#xff1a;create database数据库名; 2)查看所有数据库&#xff1a;show databases; 3)选中指定数据库&#xff1a;use 数据库名; 4)删除数据库&#xff1a; drop database数据库名; 数据表操作 1)创建表&#xff1a;create table表…

ITSS认证流程

ITSS认证流程 ITSS实施的核心是采用建立质量管理体系的PDCA方法论&#xff08;计划-执行-检查-改进&#xff09;实施过程管控&#xff0c;根据ITSS标准的各项要求&#xff0c;对人员、过程、技术和资源四个关键要素进行全面整合&#xff0c;并与IT服务全生命周期的规范化管理相…

Hive DDL 数据定义

文章目录DDL 数据定义一&#xff0c;创建数据库1&#xff09;创建一个数据库&#xff0c;数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db。2&#xff09;避免要创建的数据库已经存在错误&#xff0c;增加 if not exists 判断。&#xff08;标准写法&#xff09;3&…

无形资产评估的9个必要性

必要性一&#xff1a;摸清家底&#xff0c;维护企业资产的完整 有形资产的评估、管理、利用&#xff0c;多年来企业自身已成了一套科学、有效的管理制度&#xff0c;其资产量在相关财务报告中已得到了充分的揭示。但是一个企业到底有哪些无形资产&#xff0c;其价值量如何&…

[附源码]计算机毕业设计Python公益组织登记与查询系统论文(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

大一学生《Web编程基础》HTML实例网页代码 HTML+CSS+JS 黑色横排的个人主页作品

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

tomcat 服务突然停止、日志排查以及解决方案

文章目录一、服务停止调研1. jvm排查2. 日志排查3. 推测与ssh会话有关二、ssh会话强制退出验证2.1. 手动强制关闭进程12.2. 手动强制关闭进程22.3. 总结归纳与解决方案一、服务停止调研 1. jvm排查 有可能是jvm配置参数导致的&#xff0c;然后在/var/log和/app/apache-tomcat…

【Redis技术专题】「高可用技术基础」一同分析一下Redis高可用的“基石”之主从架构的本质原理解析

&#x1f4d5;技术箴言 当心中有更高的山峰去攀登&#xff0c;就不会在意脚下的泥沼。 &#x1f4d5;前提概要 Redis高可用的方案包括&#xff1a;持久化、主从复制&#xff08;及读写分离&#xff09;、哨兵和集群&#xff08;Cluster&#xff09;。 &#x1f4d5;&#x1f…