matlab快速实现人脸识别

一、基于matlab应用程序快速实现人脸识别

首先准备好人脸数据和类别标签,在我的基于PCA和SVM的人脸识别博客中有讲解,得到数据和标签后,将标签栏加在数据栏的最后一列,降维后的人脸数据是205*20,标签是205*1,则最后得到的数据和标签的组合数据data为205*21。依次点击应用程序,数学、统计和优化,Classification Learner,添加一个新的会议New Session,选择组合数据data,选择把列当作变量即特征,将最后一列column21选为response即相应的类别,进行开始,如下图:

matlab快速实现人脸识别_第1张图片

在跳出来的界面中选择一个分类器模型进行训练,我这里选择CubicSVM精度达87.3%,结果如下图所示(可选择多种模型进行比较,最后选择一个最优的):

matlab快速实现人脸识别_第2张图片

导出模型Export Model,在工作空间就有了训练好的模型,在命令行中根据指示,随便拿一组数据进行预测,这里拿第一个人的第二张脸进行预测,得到类别为1,预测准确,结果如下图所示:

matlab快速实现人脸识别_第3张图片

二、基于matlab神经网络快速实现人脸识别

首先准备数据集和类别标签,神经网络是用softmax分类器完成多分类任务的,其标签采用的是one-hot编码方式,这里有41类,每一个数据样本的标签即有41列,该数据属于哪一列,哪一列为1,其余都为0,构造类别标签label这里为205*41:

label = zeros(205,41);
for i=0:40
    label(5*i+1:5*i+5,i+1) = 1;    
end

在命令行输入nnsatrt进入神经网络工具箱,选择模式识别(Pattern Recognition app)或者在应用程序里找。

输入Input选择数据集,样本按行,Targets为类别标签,下一步,这里样本样本比较少,各选择%5的验证集和测试集,下一步训练,一直下一步到最后,点击Simple Script,训练模型的程序将在主界面显示,自动生成的程序如下:

% Solve a Pattern Recognition Problem with a Neural Network
% Script generated by Neural Pattern Recognition app
% Created 26-Aug-2018 10:03:04
%
% This script assumes these variables are defined:
%
%   pcaA - input data.
%   label - target data.

x = pcaA';
t = label';

% Choose a Training Function
% For a list of all training functions type: help nntrain
% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.
% 'trainscg' uses less memory. Suitable in low memory situations.
trainFcn = 'trainscg';  % Scaled conjugate gradient backpropagation.

% Create a Pattern Recognition Network
hiddenLayerSize = 10;
net = patternnet(hiddenLayerSize);

% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 90/100;
net.divideParam.valRatio = 5/100;
net.divideParam.testRatio = 5/100;

% Train the Network
[net,tr] = train(net,x,t);

% Test the Network
y = net(x);
e = gsubtract(t,y);
performance = perform(net,t,y)
tind = vec2ind(t);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind);

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotconfusion(t,y)
%figure, plotroc(t,y)

运行后随便拿一个数据进行预测,这里选择第1个人的第2张脸,运行结果如下,第1个人脸的概率最大为0.9416,所以判定为第1个人的脸,预测准确。


>> x = pcaA(2,:)';
>> y = net(x)

y =

    0.9416
    0.0000
    0.0001
    0.0002
    0.0038
    0.0103
    0.0000
    0.0000
    0.0000
    0.0000
    0.0001
    0.0000
    0.0020
    0.0000
    0.0000
    0.0282
    0.0000
    0.0035
    0.0091
    0.0001
    0.0000
    0.0000
    0.0000
    0.0002
    0.0000
    0.0001
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0002
    0.0000
    0.0000
    0.0000
    0.0002
    0.0000
    0.0000
    0.0000
    0.0002
    0.0000

 

 

你可能感兴趣的:(matlab)