PCA(K-L变换)人脸识别(python实现)

article/2025/7/12 22:28:18

数据集分析

ORL数据集, 总共40个人,每个人拍摄10张人脸照片

照片格式为灰度图像,尺寸112 * 92

特点

  1. 图像质量高,无需灰度运算、去噪等预处理

  2. 人脸已经位于图像正中央,但部分图像角度倾斜(可以尝试五点定位进行透射变换统一视角)

任务介绍

人脸识别:将每个人10张图片中的6张用来构建训练集训练模型,10张中的2张作为验证集调参,剩余两张用于测试集验证效果。

分类任务:给出测试集的图片,需要准确判断出是谁的人脸(40类)

总流程介绍

训练过程

  1. 数据集划分

  2. 训练集上找PCA正交基,取前k个主要基

  3. 将训练集图片在这k个基上进行投影,特征向量,并且构建库

测试过程

  1. 新图片输入

  2. 根据训练集得到的正交基,在k个基上进行投影,得到特征向量

  3. 从库中进行匹配,找出最相似的k个,投票得出分类结果(knn)

方法介绍

K-L变换

不严谨的定义:从数据中找到k个正交基,使得以这k个基来表示图像的时候,最容易把图像之间彼此区分开。

推一下学长博客,解析的非常到位:

主成分分析法(离散K-L变换) - RyanXing - 博客园主成分分析法(离散K L变换) '主成分分析法(离散K L变换)' '1. 概述' '2. K L变换方法和原理推导' '2.1 向量分解' '2.2 向量估计及其误差' '2.3 寻找最小误差对应的正交向量系' '3. K L变换高效率的本质' '4. PCA在编、解码应用上的进一步推导' '4.https://www.cnblogs.com/RyanXing/p/PCA.html

假设有一张100 * 100的图像,将图像拉平成一维,共有10000个自由的特征, 最原始的方法是对图像逐像素计算相似度。但是这样的相似度计算并不合理。因为在这1w维的向量里边有很多并不起作用(比如背景像素),也即有很多维度是冗余的。如果能够找到更精炼的匹配方法,分类的效果会更好

什么是数据的主要特征?

使用一组标准正交基表示n维空间里边的向量,大家习以为常:

对列向量x ,使用标准正交基{u} 去描述它,每一个维度的系数就是y

出于特征提取或者数据压缩等目的,常常采用 n维空间里边的一部分项去表示向量,比去取前d项

这样的截取虽然方便了我们去找主要影响因素,但是也损失了一些信息,我们希望损失的信息最少。

在均方损失意义下,损失公式如下(也就是向量每一个维度的估计值减去实际值的平方 最后加和),直观一点就是被舍弃的那些基分量的平方求和

造成损失的最终化简形式如下,中间的R矩阵是 向量 x 的自相关矩阵

数学推导可以证明,这样的损失和选取的正交基有关,当选取R的特征向量构成的正交基的时候,这个误差就最小。

这就是K-L变换,最小均方误差意义下的最优正交变换。

K-L变换的运算方式

可以对上面的R矩阵硬进行分解,但是运算量非常大。

实际使用的时候大多中心化之后利用SVD加速,因为左奇异矩阵和右奇异矩阵的前若干个奇异值是相等的。

特征脸分析

使用PCA找到了前k个正交基,将这些向量还原回矩阵形式,可以观察到图片:这就被称为特征脸

结果展示

数据集划分:train:valid:test = 6:2:2

训练集共240个样本,经过SVD加速后只能取前240个特征向量,使用0.2的pca基保留率,最终剩下48个特征基

112 * 92 个值 压缩为 48 个值

验证集效果:正确率94.9986%

测试集效果:正确率93.7499%

完整代码链接(含数据)

完整代码链接,供交流学习使用,如有不足欢迎批评指正

GitHub - Keith1276/python_DIP_codeContribute to Keith1276/python_DIP_code development by creating an account on GitHub.https://github.com/Keith1276/python_DIP_code/tree/main


http://www.hkcw.cn/article/qWKXYfYNQq.shtml

相关文章

资源预加载+懒加载组合拳:从I/O拖慢到首帧渲染的全面优化方案

简介 在移动应用开发领域,首帧渲染性能已成为用户体验的关键指标之一。根据2025年最新行业数据,首屏加载时间每延迟1秒,用户跳出率可能增加32%,直接影响应用评分和留存率。当应用启动时,布局解析、图片解码等I/O操作往往成为首帧渲染的主要瓶颈,导致用户看到白屏或黑屏时…

【Doris基础】Apache Doris中的Coordinator节点作用详解

目录 1 Doris架构概述 2 Coordinator节点的核心作用 2.1 查询协调与调度 2.2 执行计划生成与优化 2.3 资源管理与负载均衡 2.4 容错与故障恢复 3 Coordinator节点的关键实现机制 3.1 两阶段执行模型 3.2 流水线执行引擎 3.3 分布式事务管理 4 Coordinator节点的高可…

【基于阿里云搭建数据仓库(离线)】IDEA导出Jar包(包括第三方依赖)

1.双击"package”即可进行打包呈jar 2.双击后就会自动打包生成jar了, 生成的jar在这个目录下 3.右击,点击“复制路径/引用”,即可获得“绝对路径”、“根路径”等相关信息

id()函数:窥探Python变量内存地址的奥秘

在Python程序设计中,变量、对象和内存是紧密相连的核心概念。理解变量的内存地址,是理解Python变量本质、内存管理与性能优化的关键。Python内置函数id(),作为变量与对象身份(identity)的“指纹识别器”,为…

MySQL中的事务

事物特性 原子性:事物时最小的执行单位,不允许分割。事物的原子性确保动作要么全部完成,要么完全不起作用,如果在执行过程中发生错误,会被回滚到事物开始前的状态,就像这个事务从来没有执行过一样。一致性&#xff1a…

像素转换案例实战

本案例介绍像素单位的基本知识与像素单位转换API的使用。通过像素转换案例,向开发者讲解了如何使用像素单位设置组件的尺寸、字体的大小以及不同像素单位之间的转换方法。主要功能包括: 展示了不同像素单位的使用。展示了像素单位转换相关API的使用。 …

结构型设计模式之桥接模式

文章目录 1. 桥接模式概述2. 模式结构3. 桥接模式的优缺点优点缺点 4. 桥接模式的应用场景5. C#代码示例5.1 简单示例 - 形状与颜色5.2 更复杂的示例 - 跨平台消息发送系统 6. 桥接模式与其他模式的比较7. 真实世界中的桥接模式应用7.1 数据库驱动7.2 UI框架中的渲染机制 8. 桥…

RAG系统中如何检测幻觉?

虽然我们的 RAG 系统通过将答案基于真实的医学证据来减少幻觉,但我们发现了一个关键的差距:即使有引用,系统仍然可能产生不可靠的输出。 想想看:仅仅因为一个系统可以引用来源,并不意味着它正确地使用了这些来源。 模型可能会: 从检索到的文档中提取不相关的信息不适当…

world quant教程学习

Understanding Corporate Fundamental Data 🔍 了解企业基本面数据 Lets explore fundamental data😊 Fundamentals capture the underlying business, financial and operational health of a company, usually reported every quarter. This data is t…

详解鸿蒙仓颉开发语言中的计时器

今天又到了大家喜闻乐见的科普环节,也可以说是踩坑环节,哈哈哈。今天聊一聊仓颉开发语言中的计时器,这部分可老有意思了。 为什么这么说呢,因为关于仓颉的计时器你几乎搜不到任何的文档,也没有相关的代码提示&#xf…

70多套创业商业融资计划书PPT模板分享

70多套创业商业融资计划书PPT模板分享,商业计划书、融资计划书为主的欧美风格PPT模板。 70多套创业商业融资计划书PPT模板分享:创业商业融资计划书PPT模板https://pan.quark.cn/s/e09456cd487b

基于 StarRocks + Iceberg,TRM Labs 构建 PB 级数据分析平台实践

作者: Vijay Shekhawat:TRM Labs 数据平台团队核心成员,精通实时流处理、数据湖仓架构及构建安全、高吞吐的数据分析管道,在推动 PB 级数据处理能力方面发挥了关键作用。 Andrew Fisher:TRM Labs 资深软件工程师&…

Python----目标检测(使用YOLO 模型进行线程安全推理和流媒体源)

一、线程安全推理 在多线程环境中运行YOLO 模型需要仔细考虑,以确保线程安全。Pythons threading 模块允许您同时运行多个线程,但在这些线程中使用YOLO 模型时,需要注意一些重要的安全问题。本页将指导您创建线程安全的YOLO 模型推理。 1.1、…

机器学习知识图谱——朴素贝叶斯算法

目录 一、图解朴素贝叶斯算法知识图谱 二、基本概念 三、核心思想 四、为什么叫“朴素”? 五、算法流程图 六、常见模型类型 七、优点 与 缺点 八、实战代码 (以文本分类为例) 九、应用举例 机器学习知识图谱——朴素贝叶斯算法 一、图解朴素贝叶斯算法知识图谱 该…

ollama+open-webui,本地部署自己的大模型

目录 一、效果预览 二、部署ollama 1.ollama说明 2.安装流程 2.1 windows系统 2.1.1下载安装包 2.1.2验证安装结果 2.1.3设置模型文件保存地址 2.1.4拉取大模型镜像 2.2linux系统 2.2.1下载并安装ollama 2.2.2设置环境变量 2.2.3拉取模型文件 三、部署open-webui…

大模型赋能:2D 写实数字人开启实时交互新时代

在数字化浪潮席卷全球的当下,人工智能技术不断突破创新,其中大模型驱动的 2D 写实数字人正成为实时交互领域的一颗新星,引领着行业变革,为人们带来前所未有的交互体验。 一、2D 写实数字人概述 2D 写实数字人是通过计算机图形学…

效率工具- git rebase 全解

一、前言 对于git rebase 一直不太了解,这几天想着提高下git提交质量,就发现了这个好用的指令,顺便记录一下,好加深记忆 贴出官方文档以便大家进一步学习 Git 二、rebase是作用 rebase 官方解释为变基,可以理解为移动你的分支根节点,维护一个更好的提交记录。rebase把你当前…

【开源】Python打造高效剪贴板历史管理器:实现跨平台生产力工具

📋【开源】Python打造高效剪贴板历史管理器:实现跨平台生产力工具 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自…

π0的微调——如何基于各种开源数据集、以及私有数据集微调openpi(含我司七月的微调实践及在机械臂上的部署)

前言 25年2.4日,几个月前推出π0的公司Physical Intelligence (π)宣布正式开源π0及π0-FAST,如之前所介绍的,他们对用超过 10,000 小时的机器人数据进行了预训练 该GitHub代码仓库「 π0及π0-FAST的GitHub地址:github.com/Ph…

开源模型应用落地-qwen模型小试-Qwen3-8B-融合VLLM、MCP与Agent(七)

一、前言 随着Qwen3的开源与技术升级,其在企业中的落地场景正加速拓展至多个垂直领域。依托Agent智能体能力 和MCP协议的工具调用接口 ,Qwen3可深度融入企业业务流程,为企业提供从需求解析到自动化开发的全链路支持。 本篇将介绍如何实现Qwen3-8B模型集成MCP实现智能体交互。…