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

数据集分析

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.pswp.cn/web/82420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】View Submitted Updates——diff、show、log

在 Git 中查看更新的内容(即工作区、暂存区或提交之间的差异)是日常开发中的常见操作。以下是常用的命令和场景说明: 文章目录 1、查看工作区与暂存区的差异2、查看提交历史中的差异3、查看工作区与最新提交的差异4、查看两个提交之间的差异5…

deepseek原理和项目实战笔记2 -- deepseek核心架构

混合专家(MoE) ​​混合专家(Mixture of Experts, MoE)​​ 是一种机器学习模型架构,其核心思想是通过组合多个“专家”子模型(通常为小型神经网络)来处理不同输入,从而提高模型的容…

GPU层次结构(Nvidia和Apple M芯片,从硬件到pytorch)

这里写目录标题 0、驱动pytorch环境安装验证1.window环境2.Mac Apple M芯片环境 1、Nvidia显卡驱动、CUDA、cuDNN关系汇总1**1. Nvidia显卡驱动(Graphics Driver)****2. CUDA(Compute Unified Device Architecture)****3. cuDNN&a…

OpenWrt 搭建 samba 服务器的方法并解决 Windows 不允许访问匿名服务器(0x80004005的错误)的方法

文章目录 一、安装所需要的软件二、配置自动挂载三、配置 Samba 服务器四、配置 Samba 访问用户和密码(可选)新建 Samba 专门的用户添加无密码的 Samba 账户使用root账户 五、解决 Windows 无法匿名访问Samba方案一 配置无密码的Samba账户并启用匿名访问…

CentOS 7镜像源替换

更换为阿里云镜像源(适用于 CentOS 7) 1、备份原来的 repo 文件: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下载阿里云的 CentOS 7 repo 文件: curl -o /etc/yum.repos.d/CentOS-Base…

功能结构整理

C# Sxer Sxer.Base:基础子功能 Sxer.Base.Debug:打印 Sxer.Utility:工具类 Sxer.CustomFunction:独立功能点开发 Unity

云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)

云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作) 目录 云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)1、虚拟机VMware安装Rocky2、Linux命令行3、Linux Rocky修改字体大小和背景颜…

【论文阅读】《PEACE: Empowering Geologic Map Holistic Understanding with MLLMs》

目录 前言一、研究背景与问题1-1、地质图的重要性1-2、现有MLLMs的不足 二、 主要贡献2-1、GeoMap-Bench:首个地质图理解评估基准2-2、GeoMap-Agent:首个地质图专用AI代理2-3、实验验证与性能优势 三、关键技术3-1、 数据构建与预处理3-2、分层信息提取&…

计算机网络通信技术与协议(八)----关于IS-IS的基础概念

关于IS-IS最早是ISO为CLNP(Connectionless Network Protocol,无连接网络协议)而设计的一种动态路由协议。 目录 这里提到了CLNP这个概念,在这里解释一下: CLNS由以下三个协议构成: 那么为什…

网络原理1

协议 在网络通信中,协议是非常重要的概念。协议是在网络通信过程中的约定。发送方和接收方需要提前商量好数据的格式,才能确保正确进行沟通。 应用层协议 应用层,对应着应用程序,是跟我们程序员打交道最多的一层。调用操作系统…

【运维】统信UOS操作系统aarch64自制OpenSSH 9.6p1 rpm包(含ssh-copy-id命令)修复漏洞

为修复如下OpenSSH漏洞,openssh从8.2升级至9.6,然而并未找到统信9.6的rpm源,所以自己动手制作,折腾了一天,在此记录一下 准备工作 检查版本 cat /etc/os-releaseuname -a如图当前环境为aarch64架构,在其…

CI/CD 持续集成、持续交付、持续部署

CI/CD 是 持续集成(Continuous Integration) 和 持续交付/持续部署(Continuous Delivery/Deployment) 的缩写,代表现代软件开发中通过自动化流程快速、可靠地构建、测试和发布代码的实践。其核心目标是 减少人工干预、…

Spring Boot 应用中实现配置文件敏感信息加密解密方案

Spring Boot 应用中实现配置文件敏感信息加密解密方案 背景与挑战 🚩一、设计目标 🎯二、整体启动流程 🔄三、方案实现详解 ⚙️3.1 配置解密入口:EnvironmentPostProcessor3.2 通用解密工具类:EncryptionTool 四、快速…

OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数创建一个 基于最小特征值(Minimum Eigenvalue)的角点响应计算对象,这是另一种经典的角点检测方法&…

性能优化 - 理论篇:CPU、内存、I/O诊断手段

文章目录 Pre引言1. CPU 性能瓶颈1.1 top 命令 —— 多维度 CPU 使用率指标1.2 负载(load)——任务排队情况1.3 vmstat 命令 —— CPU 繁忙与等待 2. 内存性能瓶颈2.1 操作系统层面的内存分布2.2 top 命令 —— VIRT / RES / SHR 三个关键列2.3 CPU 缓存…

GPIO的内部结构与功能解析

一、GPIO总体结构 总体构成 1.APB2(外设总线) APB2总线是微控制器内部连接CPU与外设(如GPIO)的总线,负责CPU对GPIO寄存器的读写访问,支持低速外设通信 2.寄存器 控制GPIO的配置(输入/输出模式、上拉/下拉等&#x…

汽车总线分析总结(CAN、LIN、FlexRay、MOST、车载以太网)

目录 一、汽车总线技术概述 二、主流汽车总线技术对比分析 1. CAN总线(Controller Area Network) 2. LIN总线(Local Interconnect Network) 3. FlexRay总线 4. MOST总线(Media Oriented Systems Transport&#x…

WordPress 6.5版本带来的新功能

WordPress 6.5正式上线了!WordPress团队再一次为我们带来了许多新的改进。在全球开发者的共同努力下,WordPress推出了许多新的功能,本文将对其进行详细总结。 Hostease的虚拟主机现已支持一键安装最新版本的WordPress。对于想要体验WordPres…

【vue+ts】找不到模块“./App.vue”或其相应的类型声明

报错&#xff1a;找不到模块“./App.vue”或其相应的类型声明。 原因&#xff1a;typescript只能理解.ts文件&#xff0c;无法理解.vue文件。 解决&#xff1a;在src/env.d.ts下添加&#xff1a; /// <reference types"vite/client" /> // 三斜线引用告诉编译…

Nginx+Tomcat 负载均衡群集

目录 一&#xff0c;部署Tomcat 1&#xff0c;案例概述 2&#xff0c;案例前置知识点 &#xff08;1&#xff09;Tomcat简介 &#xff08;2&#xff09;应用场景 3&#xff0c;案例实施 3.1&#xff0c;实施准备 &#xff08;1&#xff09;关闭firewalld防火墙 &#…