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
繁體地址,請注明出處:http://hk.pswp.cn/web/82420.shtml
英文地址,請注明出處:http://en.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防火墻 &#…