基于LVQ神經網絡的人臉朝向識別

1案例背景

1.1人臉識別概述

????????人臉識別作為一個復雜的模式識別問題,近年來受到了廣泛的關注,識別領域的各種方法在這個問題上各顯所長,而且發展出了許多新方法,大大豐富和拓寬了模式識別的方向。人臉識別、檢測,跟蹤、特征定位等技術近年來一直是研究的熱點。人臉識別是人臉應用研究中重要的第一步,目的是從圖像中分割出不包括背景的人臉區域。由于人臉形狀的不規則性以及光線和背景條件多樣性,現有的人臉研究算法都是在試圖解決某些特定實驗環境下的一些具體問題,對人臉位置和狀態都有一定的要求。而在實際應用中,大量圖像和視頻源中人臉的位置、朝向和旋轉角度都不是固定的,這就大大增加了人臉識別的難度。
????????在人臉識別領域的眾多研究方向中,人臉朝向分析一直是一個少有人涉及的領域。在以往的研究成果中,一些研究者談及了人臉朝向問題,但其中絕大多數都是希望在人臉識別過程中去除人臉水平旋轉對識別過程的不良影響。但是,實際問題要復雜得多,人臉朝向是一個無法回避的問題。因此,對于人臉朝向的判斷和識別,將會是一件非常有意義的工作。

1.2問題描述

????????現采集到一組人臉朝向不同角度時的圖像,圖像來自不同的10個人,每人5幅圖像,人臉的朝向分別為:左方、左前方、前方、右前方和右方,如圖27-1所示。試創建一個LVQ神經網絡,對任意給出的人臉圖像進行朝向預測和識別。

2模型建立

2.1 設計思路

????????通過觀察不難發現,當人臉面朝不同方向時 ,眼睛在圖像中的位置差別較大 。因 此,可以考慮將圖片中描述眼睛位置的特征信息提取出來作為LVQ神經網絡的輸人,5個朝向分別用1,2,3,4,5表示,作為LVQ神經網絡的輸出。通過對訓練集的圖像進行訓練,得到具有預測功能的網絡,便可以對任意給出的人臉圖像進行朝向判斷和識別。

2.2設計步驟

????????根據上述設計思路,設計步驟主要包括以下幾個部分,如圖27-2所示。

?

????????1)人臉特征向量提取
????????如設計思路中所述,當人臉朝向不同時,眼睛在圖像中的位置會有明顯的差別。因此,只需要將描述人眼位置信息的特征向量提取出來即可。方法是將整幅圖像劃分成6行8列,人眼的位置信息可以用第2行的8個子矩陣來描述(注意:針對不同大小的圖像,劃分的網格需稍作修改),邊緣檢測后8個子矩陣中的值為“1”的像素點個數與人臉朝向有直接關系,只要分別統計出第2行的8個子矩陣中的值為“1”的像素點個數即可。
????????2)訓練集/測試集產生
????????為了保證訓練集數據的隨機性,隨機選取圖像庫中的30幅人臉圖像提取出的特征向量作為訓練集數據,剩余的20幅人臉圖像提取出來的特征向量作為測試集數據。
????????3)LVQ 網絡創建
????????LVQ神經網絡的優點是不需要將輸人向量進行歸一化、正交化,利用MATLAB自帶的神經網絡工具箱函數newlvq()可以構建一個LVQ神經網絡,關于該函數的用法及說明在第26章中已作詳細說明,此處不再贅述。
????????4)LVO網絡訓練
????????網絡創建完畢后,便可以將訓練集輸入向量送入到網絡中,利用LVQ1或LVQ2算法對網絡的權值進行調整,直到滿足訓練要求迭代終止。

????????5.人臉識別測試
????????網絡訓練收斂后,便可以對測試集數據進行預測,即對測試集的圖像進行人臉朝向識別。對于任意給出的圖像,只需要將其特征向量提取出來,便可對其進行識別。

3 MATLAB實現

????????利用MATLAB神經網絡工具箱提供的函數可以方便地在 MATLAB環境下實現上述設計步驟,代碼如下:

%% LVQ神經網絡的預測——人臉識別%% 清除環境變量
clear all
clc%% 人臉特征向量提取 
% 人數
M = 10;
% 人臉朝向類別數
N = 5; 
% 特征向量提取
pixel_value = feature_extraction(M,N);%% 訓練集/測試集產生
% 產生圖像序號的隨機序列
rand_label = randperm(M*N);  
% 人臉朝向標號
direction_label = repmat(1:N,1,M);
% 訓練集
train_label = rand_label(1:30);
P_train = pixel_value(train_label,:)';
Tc_train = direction_label(train_label);
T_train = ind2vec(Tc_train);
% 測試集
test_label = rand_label(31:end);
P_test = pixel_value(test_label,:)';
Tc_test = direction_label(test_label);%% 創建LVQ網絡
for i = 1:5rate{i} = length(find(Tc_train == i))/30;
end
net = newlvq(minmax(P_train),20,cell2mat(rate),0.01,'learnlv1');
% 設置訓練參數
net.trainParam.epochs = 100;
net.trainParam.goal = 0.001;
net.trainParam.lr = 0.1;%% 訓練網絡
net = train(net,P_train,T_train);%% 人臉識別測試
T_sim = sim(net,P_test);
Tc_sim = vec2ind(T_sim);
result = [Tc_test;Tc_sim]%% 結果顯示
% 訓練集人臉標號
strain_label = sort(train_label);
htrain_label = ceil(strain_label/N);
% 訓練集人臉朝向標號
dtrain_label = strain_label - floor(strain_label/N)*N;
dtrain_label(dtrain_label == 0) = N;
% 顯示訓練集圖像序號
disp('訓練集圖像為:' );
for i = 1:30 str_train = [num2str(htrain_label(i)) '_'...num2str(dtrain_label(i)) '  '];fprintf('%s',str_train)if mod(i,5) == 0fprintf('\n');end
end
% 測試集人臉標號
stest_label = sort(test_label);
htest_label = ceil(stest_label/N);
% 測試集人臉朝向標號
dtest_label = stest_label - floor(stest_label/N)*N;
dtest_label(dtest_label == 0) = N;
% 顯示測試集圖像序號
disp('測試集圖像為:');
for i = 1:20 str_test = [num2str(htest_label(i)) '_'...num2str(dtest_label(i)) '  '];fprintf('%s',str_test)if mod(i,5) == 0fprintf('\n');end
end
% 顯示識別出錯圖像
error = Tc_sim - Tc_test;
location = {'左方' '左前方' '前方' '右前方' '右方'};
for i = 1:length(error)if error(i) ~= 0% 識別出錯圖像人臉標號herror_label = ceil(test_label(i)/N);% 識別出錯圖像人臉朝向標號derror_label = test_label(i) - floor(test_label(i)/N)*N;derror_label(derror_label == 0) = N;% 圖像原始朝向standard = location{Tc_test(i)};% 圖像識別結果朝向identify = location{Tc_sim(i)};str_err = strcat(['圖像' num2str(herror_label) '_'...num2str(derror_label) '識別出錯.']);disp([str_err '(正確結果:朝向' standard...';識別結果:朝向' identify ')']);end
end
% 顯示識別率
disp(['識別率為:' num2str(length(find(error == 0))/20*100) '%']);

? ? ? ? 上述為主函數代碼,完整代碼和數據集下載方式:

【免費】基于LVQ神經網絡的人臉朝向識別matlab代碼

運行結果:
result =

? ? ?2 ? ? 5 ? ? 1 ? ? 3 ? ? 4 ? ? 4 ? ? 5 ? ? 1 ? ? 1 ? ? 3 ? ? 2 ? ? 4 ? ? 3 ? ? 4 ? ? 4 ? ? 3 ? ? 4 ? ? 5 ? ? 5 ? ? 2
? ? ?2 ? ? 5 ? ? 1 ? ? 3 ? ? 4 ? ? 4 ? ? 5 ? ? 1 ? ? 1 ? ? 3 ? ? 2 ? ? 4 ? ? 3 ? ? 4 ? ? 4 ? ? 3 ? ? 4 ? ? 5 ? ? 5 ? ? 2

訓練集圖像為:
1_3 ?1_5 ?2_1 ?2_2 ?2_3 ?
3_1 ?3_4 ?4_1 ?4_2 ?5_1 ?
5_2 ?5_5 ?6_3 ?6_4 ?6_5 ?
7_1 ?7_2 ?7_3 ?7_4 ?7_5 ?
8_2 ?8_3 ?8_5 ?9_1 ?9_2 ?
9_5 ?10_1 ?10_2 ?10_3 ?10_4 ?
測試集圖像為:
1_1 ?1_2 ?1_4 ?2_4 ?2_5 ?
3_2 ?3_3 ?3_5 ?4_3 ?4_4 ?
4_5 ?5_3 ?5_4 ?6_1 ?6_2 ?
8_1 ?8_4 ?9_3 ?9_4 ?10_5 ?
識別率為:100%

????????從以上結果可以看出,當訓練目標 net, trainPararm. goal 設置為0.0001時,識別準確率可以達到100%。因此,利用LVQ神經網絡對人臉作識別是可行且有效的。要注意的一點是,當訓練集較少時,比如說只取1~2個人臉的圖像特征向量參與訓練,識別率會相對較低些。因此,在防止出現過擬合的同時,應盡量增加訓練集的樣本數目。

4案例擴展

????????由于無需對數據進行預處理、可以處理復雜模型且對噪聲干擾有一定的抑制,LVQ神經網絡的應用也越來越廣泛。近年來,許多專家學者將LVQ神經網絡與其他方法相結合,成功地解決了很多現實問題。例如,由于傳統LVQ神經網絡存在神經元未被充分利用以及算法對初值敏感的問題,利用遺傳算法優化網絡的初始值可以迅速得到最佳的神經網絡初始權值向量,從而使得分析速度和精度都有較大的提高。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40072.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40072.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【制作npm包1】申請npm賬號、認識個人包和組織包

概述 在開發當中經常有一種現象,重復代碼寫了N多遍,再次寫同樣的邏輯就再次翻查以前的代碼邏輯。效率低下且容易出錯,封裝一個npm包的價值也不僅僅是給別人用,封裝一套屬于自己或者本部門的npm包也是相當有必要。 也許經常看到一…

RabbitMQ的5種消息隊列

RabbitMQ的5種消息隊列 1、七種模式介紹與應用場景 1.1 簡單模式(Hello World) 一個生產者對應一個消費者,RabbitMQ 相當于一個消息代理,負責將 A 的消息轉發給 B。 應用場景:將發送的電子郵件放到消息隊列,然后郵件服務在隊列…

【JS學習】Object.assign 用法介紹

Object.assign 是ES6中的一個方法。該方法能夠實現對象的淺復制以及對象合并。Object.assign 并不會修改目標對象本身,而是返回一個新的對象,其中包含了所有源對象的屬性。 例1 2個對象合并 const target { a: 1, b: 2 }; const source { b: 3, c: 4…

【git】初次使用git上傳代碼到github遠程倉庫

目錄 0.前言1.新建代碼庫2.添加SSH公鑰2.1 前置準備2.2 Git 基本信息設置2.3 添加SSH Key 3.本地倉庫上傳到github3.1 建立本地倉庫并初始化3.2 初始化倉庫3.3 建立本地與github上新建項目鏈接3.4 同步github新建項目到本地3.5 添加本地文件到緩存區3.6 為上傳文件添加注釋3.7 …

注冊中心Eureka和Nacos,以及負載均衡Ribbon

1.初識微服務 1.1.什么是微服務 微服務,就是把服務拆分成為若干個服務,降低服務之間的耦合度,提供服務的獨立性和靈活性。做到高內聚,低耦合。 1.2.單體架構和微服務架構的區別: 單體架構:簡單方便&#…

TS基本語法

一、安裝 npm install -g typescript 或者 cnpm install -g typescript 或者 yarnlobal add typescript二、運行 tsc xxxx.ts注意:如果電腦上面沒有安裝過cnpm,請先安裝cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org注意&…

數字圖像處理-AWB跳變

1、自動白平衡(AWB)算法是相機中常用的圖像處理技術,它能夠自動調整圖像中的白平衡,使得圖像中的顏色更加真實、自然。然而,在實際應用中,AWB算法也存在著一些問題,例如AWB跳變(Whit…

DevExpress WinForms數據編輯器組件,提供豐富的數據輸入樣式!(一)

DevExpress WinForms超過80個高影響力的WinForms編輯器和多用途控件,從屏蔽數據輸入和內置數據驗證到HTML格式化,DevExpress數據編輯庫提供了無與倫比的數據編輯選項,包括用于獨立數據編輯或用于容器控件(如Grid, TreeList和Ribbon)的單元格。…

云原生 envoy xDS 動態配置 java控制平面開發 支持restful grpc實現 EDS 動態endpoint配置

envoy xDS 動態配置 java控制平面開發 支持restful grpc 動態endpoint配置 大綱 基礎概念Envoy 動態配置API配置方式動靜結合的配置方式純動態配置方式實戰 基礎概念 Envoy 的強大功能之一是支持動態配置,當使用動態配置時,我們不需要重新啟動 Envoy…

spring boot 整合mongodb

1、安裝依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>2、配置數據庫連接 spring:data:mongodb:host: localhostport: 27017username: xxxxxxp…

2682. 找出轉圈游戲輸家

題目描述&#xff1a; n 個朋友在玩游戲。這些朋友坐成一個圈&#xff0c;按 順時針方向 從 1 到 n 編號。從第 i 個朋友的位置開始順時針移動 1 步會到達第 (i 1) 個朋友的位置&#xff08;1 < i < n&#xff09;&#xff0c;而從第 n 個朋友的位置開始順時針移動 1 步…

“華為杯”研究生數學建模競賽2018年-【華為杯】F題:中轉航班調度:從 MILP 模型到啟發式算法

目錄 摘 要 1 問題描述 2 模型假設 3 符號定義及數據預處理 3.1 符號定義

【廣州華銳視點】帆船航行VR模擬實操系統

帆船航行VR模擬實操系統由廣州華銳視點開發&#xff0c;是一種創新的教學工具&#xff0c;它利用虛擬現實技術&#xff0c;為學生提供了一個沉浸式的學習環境。通過這種系統&#xff0c;學生可以在虛擬的環境中進行帆船航行的實訓&#xff0c;從而更好地理解和掌握帆船航行的技…

Maven(四)常用命令大全

目錄 一、mvn 命令參數二、mvn 插件命令1.介紹2.查看插件的使用文檔3.常用的插件命令 官網地址&#xff1a; https://maven.apache.org/官方插件清單&#xff1a; https://maven.apache.org/plugins/index.html Maven 是一個強大的構建工具&#xff0c;它提供了許多命令來進行項…

使用Python統計字符內容的占比

說明&#xff1a;如果有自己動手做過字符動畫&#xff0c;會知道字符動畫的“靈動性”核心在于使用的字符集。 簡單來說&#xff0c;動畫轉為字符動畫&#xff0c;原理是將動畫轉為灰階圖&#xff0c;灰度范圍是0~255&#xff0c;然后將對應灰度的像素點轉為對應比值的字符。這…

linux github 倉庫管理常用操作

linux 的常用操作 linux 本地 ssh驗證連接github賬號本地倉庫連接遠程私有倉庫push/pull操作 Connecting to Github with ssh git local configuration If you are using git for the first time, configure the user name and email in the device. git config --global u…

R語言ggplot2 | R語言繪制物種組成面積圖(三)

&#x1f4cb;文章目錄 面積圖簡介準備數據集加載數據集數據處理數據可視化 利用R語言繪制物種組成圖。本文以堆疊面積圖的方式與大家分享。 面積圖簡介 面積圖又叫區域圖。它是在折線圖的基礎之上形成的, 它將折線圖中折線與自變量坐標軸之間的區域使用顏色或者紋理填充&…

設計模式之單例設計模式

單例設計模式 2.1 孤獨的太陽盤古開天&#xff0c;造日月星辰。2.2 餓漢造日2.3 懶漢的隊伍2.4 大道至簡 讀《秒懂設計模式總結》 單例模式(Singleton)是一種非常簡單且容易理解的設計模式。顧名思義&#xff0c;單例即單一的實例&#xff0c;確切地講就是指在某個系統中只存在…

【算法題】螺旋矩陣III (求解n階蛇形矩陣)

一、問題的提出 n階蛇形矩陣的特點是按照圖1所示的方式排列元素。n階蛇形矩陣是指矩陣的大小為nn&#xff0c;其中n為正整數。 題目背景 一個 n 行 n 列的螺旋矩陣可由如圖1所示的方法生成&#xff0c;觀察圖片&#xff0c;找出填數規律。填數規則為從 1 開始填到 nn。 圖1 …

【配置環境】Linux下安裝MySQL

目錄 一&#xff0c;環境 二&#xff0c;安裝步驟 1.使用包管理器安裝MySQL 2.配置MySQL的安全選項 3.設置root用戶使用密碼進行身份驗證&#xff08;可選&#xff09; 三&#xff0c;拓展知識 1.如何修改MySQL的密碼策略&#xff1f; 2.實現連接MySQL數據庫的測試代碼…