目录
人脸识别是一种生物识别技术,通过分析和比较人脸的视觉特征来识别人或验证人的身份。人脸识别技术通常包括以下几个步骤:1.人脸检测:从图像或视频流中检测并定位人脸。2.特征提取:从检测到的人脸中提取关键特征,如眼睛、鼻子、嘴巴等区域的形状和位置。3.特征匹配:将提取到的特征与数据库中的已知人脸特征进行比较,以确认身份或进行分类。4.决策:根据匹配结果做出最终决策,如身份确认、访问控制等。
1.L2正则化项
L2正则化是在模型训练过程中引入的一个惩罚项,它通过对权重向量的欧几里得范数进行平方并乘以一个小的正数λ(称为正则化系数),来防止过拟合。这种正则化的形式可以写作:
其中ED(w) 是数据拟合项,即模型在训练集上的误差损失;λ/2∥w∥2则是正则化项,用于控制模型复杂度,防止过拟合。
2.PCA(主成分分析)
PCA是一种降维技术,通过找到数据集方差最大的方向来进行降维处理。给定一组高维数据 X,PCA的目标是找到一组新的基,使得在这个新基下的投影能够最大化保留原始数据的方差。PCA可以表示为求解协方差矩阵 C 的特征值和特征向量的问题:
3.Fisher准则
Fisher准则是一种用于分类器设计的方法,它通过最大化类间散度与类内散度之比来实现特征选择或特征提取。具体来说,假设我们有两个类别的数据,分别用SW 和SB 表示类内散度矩阵和类间散度矩阵,则Fisher准则可以定义为:
4.正交人脸识别算法
正交人脸识别算法结合了PCA和Fisher准则的优点,通过PCA进行降维处理,再利用Fisher准则进行特征选择,从而实现高效的人脸识别。在这个过程中,我们还可以加入L2正则化来进一步提升模型的泛化能力。假设我们已经得到了PCA后的特征向量U,那么我们可以通过以下步骤来构建最终的分类器:
- 计算每个类别的均值向量μi 在PCA空间中的表示;
- 使用Fisher准则优化目标函数J(w) 来找到最优的特征向量w;
- 在测试阶段,将新的样本x 投影到PCA空间,并使用w 进行分类决策。
5.MATLAB程序
% 定义正则化系数 lmda
% 正则化
lmda=1;
% 读取数据集并划分训练集和测试集(各占50%)
% func_read_images 是一个假设存在的函数,用于读取图像数据
[Ptrain,Ttrain,Ptest,Ttest]=func_read_images('Yale/');
%测试样本中加入干扰
Ptest = Ptest+200*randn(size(Ptest));
% 计算 Mat_face 矩阵,用于后续的预测
Mat_face=inv(Ptrain'*Ptrain+lmda*eye(size(Ptrain,2)))*Ptrain'*Ptest;
% 对每个测试样本执行识别过程
for i=1:size(Ptest,2)
% 获取当前测试样本
Labs = Ptest(:,i);
% 估计当前样本在训练集中的表示
Lab_est = Mat_face(:,i);
% 使用 func_face_reg 函数来估计最相似的人脸类别
[Yest,Vsames] = func_face_reg(Ptrain,Lab_est,Labs,Ttrain);
% 存储预测结果
Predict(i,1) = Yest;
% 存储相似度得分
S(i,:) = Vsames;
Rate(i) = mean(Predict(1:i)==Ttest(1:i));
% 输出当前识别率
fprintf('%g 识别率 : %f \n' ,i, Rate(i))
end
figure;
plot(Rate)
xlabel('NO.');
ylabel('识别率');
%ROC曲线
% label 是类别标签
label=1:size(S,2);
for i=1:size(S,2)
% 构建指示向量 I,I 中的 1 表示当前类别,0 表示其他类别
Test_labs = Ttest==i;
% 提取当前类别的得分
Test_score(:,1) = S(:,i);
% 提取其他类别的最小得分
Test_score(:,2) = min(S(:,(label~=i))')';
% 构建目标向量 tt,其中 1 表示当前类别,0 表示其他类别
Lab_reg = zeros(size(S,1),2);
Lab_reg(Test_labs) = 1;
% 计算 ROC 曲线
[tpr,fpr,~] = roc(Lab_reg',-Test_score');
% 存储 TPR 和 FPR
TPR(i,:)=tpr{1};
FPR(i,:)=fpr{1};
end
% 绘制多类别 ROC 曲线
figure
plot(mean(FPR,1),mean(TPR,1),'linewidth',2)
title('Roc曲线');
xlabel('FP');
ylabel('TP');
%混淆矩阵
TT1=zeros(size(S));
TT2=zeros(size(S));
% 根据实际类别和预测类别构建混淆矩阵
for i=1:size(S,1)
TT1(i,Ttest(i))=1;
TT2(i,Predict(i))=1;
end
% 计算混淆矩阵
[c,cm,ind,per] = confusion(TT1',TT2');
% 显示混淆矩阵
figure;
imagesc(cm);
title('混淆矩阵');
xlabel('真实分类');
ylabel('预测');
up4183
6.仿真结果
该方法通过结合PCA和Fisher准则,并利用L2正则化来提高模型的鲁棒性和泛化能力,在人脸识别任务中取得了良好的效果。