基于PCA和SVM的人脸识别系统的设计与实现

该博客介绍了一个基于PCA和SVM的人脸识别系统的设计。首先,使用LFW人脸数据集,通过PCA进行降维,然后利用SVM进行训练和测试。最终,通过对6000对人脸的测试,得出人脸识别的准确率。分析了特征脸并讨论了影响准确率的因素,如样本数量和参数设置。
摘要由CSDN通过智能技术生成

  基于PCA和SVM的人脸识别系统的设计与实现

1.1 题目的主要研究内容

  1. 工作的主要描述

          下载人脸数据集,将其划分为训练集和测试集,对所有数据进行pca降维,将经过降维的训练集特征向量送入svm进行训练,然后将训练好的svm分类器用于测试集的评估。

  1. 系统流程图

      

1.2 题目研究的工作基础或实验条件

  1. 硬件环境

           PC

(2)软件环境

     Pycharm   python3.6

1.3 数据集描述

    LFW (Labeled Faces in the Wild) 人脸数据库是由美国马萨诸塞州立大学阿默斯特分校计算机视觉实验室整理完成的数据库,主要用来研究非受限情况下的人脸识别问题。LFW 数据库主要是从互联网上搜集图像,而不是实验室,一共含有13000 多张人脸图像,每张图像都被标识出对应的人的名字,其中有1680 人对应不只一张图像,即大约1680个人包含两个以上的人脸。

    LFW (Labled Faces in the Wild)人脸数据集是目前人脸识别的常用测试集,其中提供的人脸图片均来源于生活中的自然场景,因此识别难度会增大,尤其由于多姿态、光照、表情、年龄、遮挡等因素影响导致即使同一人的照片差别也很大。并且有些照片中可能不止一个人脸出现,对这些多人脸图像仅选择中心坐标的人脸作为目标,其他区域的视为背景干扰。LFW数据集共有13233张人脸图像,每张图像均给出对应的人名,共有5749人,且绝大部分人仅有一张图片。每张图片的尺寸为250X250,绝大部分为彩色图像,但也存在少许黑白人脸图片。

    LFW数据集主要测试人脸识别的准确率,该数据库从中随机选择了6000对人脸组成了人脸辨识图片对,其中3000对属于同一个人2张人脸照片,3000对属于不同的人每人1张人脸照片。测试过程LFW给出一对照片,询问测试中的系统两张照片是不是同一个人,系统给出“是”或“否”的答案。通过6000对人脸测试结果的系统答案与真实答案的比值可以得到人脸识别准确率。

1.4 特征提取过程描述

    (1)将训练集的每一个人脸图像都拉长成一行,将他们组合在一起形成一个大矩阵A。假设每个人脸图像是MxN大小,那么拉成一行后每个人脸样本的维度就是D=MxN大小了。假设有Z个人脸图像,那么样本矩阵A的维度就是ZxD了。

(2)将所有的Z个人脸在对应维度上加起来,然后求个平均,就得到了一个“平均脸”。

(3)将Z个图像都减去那个平均脸图像,得到差值图像的数据矩阵Φ。

(4)计算协方差矩阵C=ΦTΦ。再对其进行特征值分解。就可以得到想要的特征向量(特征脸)了。

(5)将120个最大特征值对应的特征向量归一化,然后堆叠成矩阵,将训练数据和测试数据与该矩阵相乘,这样人脸数据的维数就降低到了120维。

1.5 分类过程描述

    先使用SVC函数得到一个svm分类器。其中参数kernel代表分类器使用的核函数,本次实验使用的是高斯核函数。参数C是一个对错误的部分的惩罚;gamma表示使用多少比例的特征点,因为我们不知道哪些参数会产生最好的结果,本次实验使用了5种C值和6种gamma值,一共30种组合。然后将降维后的训练集特征向量和标签值送入SVC.fit()函数训练,得到最佳分类器。然后将测试集特征向量送入SVC.predict(),得到测试集的分类结果。

1.6 主要程序代码

from __future__ import print_function

from time import time

import logging

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.model_selection import GridSearchCV

from sklearn.datasets import fetch_lfw_people

from sklearn.metrics import classification_report

from sklearn.metrics import confusion_matrix

from sklearn.decomposition import PCA

from sklearn.svm import SVC

# #############################################################################

# 下载图像数据

lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李逍遥敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值