2017年认证杯SPSSPRO杯数学建模B题(第一阶段)岁月的印记全过程文档及程序

2017年认证杯SPSSPRO杯数学建模

跨年龄人脸识别模型的建立与分析

B题 岁月的印记

原题再现:

  对同一个人来说,如果没有过改变面容的疾病、面部外伤或外科手术等经历,年轻和年老时的面容总有很大的相似性。人们在生活中也往往能够分辨出来两张不同年龄段的照片是不是同一个人。当然,年龄段相差越大,识别起来也就越困难。
  第一阶段问题: 请你建立合理的数学模型,当我们给出两张不同年龄段的面部照片时,可以通过算法来自动识别是不是同一个人。为简单起见,我们可以假设两张照片都是标准位置和标准光线下拍摄的,例如都是一寸证件照。

整体求解过程概述(摘要)

  对于同一个人不同年龄的两张照片,如何通过算法来自动识别这两张照片是否来自同一人,这个问题可以看做是人脸识别技术的一个子问题,侧重点在于所设计的算法要能够针对不同年龄段的照片给出准确的判断。为了提高算法的识别率,需要尽可能多地提取能够刻画人脸在不同年龄段状态下的特征。为了准确分析、全面考虑问题,我们从不同的角度出发,分别建立模型、通过实验进行模型有效性及敏感性分析等。本文主要从主成分分析法、人脸特征距离和特征角相似性度量以及使用BP神经网络提取特征向量、训练相似性判断模型等角度对问题进行解决。
  本文首先在传统的基于主成分分析的人脸识别算法的基础上提出一种改进算法(ModPCA_FR),在特征提取之前不需要将人脸图像矩阵展开为一维的向量,减小了后续算法的计算复杂度,同时对每一类训练样本求类内平均脸,计算图像协方差矩阵,并根据图像协方差矩阵求解一组最优特征向量来用于人脸的特征提取。通过在 ORL 人脸数据库中进行 matlab 编程实验验证了该方法在年龄跨度 2 年内准确识别的有效性。其次,由于 ModPCA_FR 模型在人脸识别中对于年龄跨度有一定的敏感性,本文建立了基于提取特征距离及特征角的不同年龄段人脸匹配模型。该模型可以对任意两张跨年龄段的图片进行匹配,不会受到年龄差太大等因素的影响,可以以较高的准确率匹配照片。另外,该模型对人类年龄进行了分类,并最终通过大量实验证明算法不仅可以对同一年龄段人的照片准确识别,而且对于跨年龄段的同一个人的照片依然有较好的匹配效果。同时对非同一人的跨年龄照片也能够准确识别。
  最后,本文提出一种基于 BP 神经网络的人脸判别模型。该模型是基于 PCA 降维模型的推广模型,即在对数据进行降维,提取人脸面部主要特征(奇异特征值)构成照片的特征向量。接着,将不同照片(包含同人不同年龄和不同人不同年龄)的特征向量进行随机组合,形成神经网络输入集,并且控制同人和不同人的比率为 50%。之后,将输入集分为训练集和测试集,用于训练和测试神经网络。最后,给出输入集的识别率,其中总体识别率为 80.81%。

问题分析:

  对于同一个人不同年龄的两张照片,在本人的面部没有遭受过非自然成长损伤的情况下,人们在生活中可以通过观察判断两张照片是否来自同一个人。如果这两张照所拍摄的时间相差越长,则辨别起来就越难。题目要求设计算法来自动识别不同年龄段的两张照片是不是来自同一个人。这个问题可以看做是人脸识别技术的一个子问题,这个问题的侧重点在于所设计的算法要能够准确判断不同年龄段的照片是否来自同一个人。当然,为了突出跨年龄段识别这个重点,我们可以简化问题,如:暂不考虑两张图片的拍摄角度、曝光量等可以影响照片分析的因素。为了提高算法识别率,我们需要尽可能多地提取能够刻画人脸在不同年龄段状态下的特征。为了准确分析、全面考虑问题,我们将从不同的角度出发,分别建立模型、进行实验以及模型有效性分析等。主要将从主成分分析法、人脸特征距离和特征角方面以及使用BP神经网络提取特征向量、训练相似性判断模型等角度进行问题的解决。

模型假设:

  1. 假设两张照片都是标准位置和标准光线下拍摄的;
  2. 假设人脸没有经过任何外在装饰,且在自然表情状态下拍摄;
  3. 假设待识别的人脸是面部对称的;
  4. 假设年龄对所有人的影响是一致的。

论文缩略图:

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

%读入人脸图片,并将其转换成为灰度矩阵,然后将灰度矩阵进行切割,再用SVD分解,
并提取图片特征
%返回参数
%feature为指向装载后的数据文件的变量
%num的值为特征值向量的第几维
%函数声明
function [feature] = allFeature(num)
%用户输入特征维数数目
panDuan = 1;
while panDuan
featureNumber = input('请输入特征维数(仅限于8, 16,24, 32,48,64,80):');
%如果输入的是8.16.24.32.48.64.80,则继续执行代码
if(featureNumber == 8||featureNumber == 16 || featureNumber == 24|| featureNumber == 32 || featureNumber == 48 || featureNumber == 64 || featureNumber == 80 )
panDuan = 0;
disp('开始装载图像文件,请等待.......')
%如果输入的是其它数字,提示输入有误,请用户重新输入
else
fprintf('你输入的不是这5个数中的任何一个,请重新输入!\n\n')
end
end
%得出图片的路径,并自动读入每张图片
dir = ['\1.jpg '
'\2.jpg '
'\3.jpg '
'\4.jpg '
'\5.jpg '
'\6.jpg '
'\7.jpg '
'\8.jpg '
'\9.jpg '
'\10.jpg'];
for x=1:10,
%将数字转换成字符,便于把两个字符连接,组成图片的完整路径
a = int2str(x);
b = ['s'];
d = [b a];
for i=1:10,
%得到每张图片的文件名
e = [d dir(i,1:7)];
% 将图片转化成为灰度矩阵
M = double(imread(e));
%如果用户输入的是8,则执行下段代码,把数据处理得到8维的特征向量
if (featureNumber == 8)
for j=1:4,
for k=1:2,
%将图片的灰度矩阵划分成8块小矩阵
temp=M((j-1)*28+1:j*28,(k-1)*46+1:k*46);
%对每个小矩阵进行SVD变换
[u,temp1,v]=svd(temp);
%提取一个的SVD系数作为特征值
temp2=temp1(num,num);
%得到所有图片的特征矩阵
feature((x-1)*10+i,(j-1)*2+k)=temp2;
end
end
end
%如果用户输入的是16,则执行下段代码,把数据处理得到16维的特征向量
end
end
%输出提示信息,说明图片处理完毕
fprintf('图片装载完毕,请继续下面的操作\n\n');
function [c] = Distance( D1,D2 )
%DRULE D1,D2位两个D数表示,该函数求D1与D2之间的距离
[m1,n1]=size(D1);
[m2,n2]=size(D2);
% D1(:,2)=D1(:,2)*10000;
% D2(:,2)=D2(:,2)*10000;
C=0;
if (sum(D1(:,2))+1)-1==1 && (sum(D1(:,2))+1)-1==1
for i=1:m1
for j=1:m2
C=C+(D1(i,2)+D2(j,2))/2;
end
end
end
ccc=0;
if (sum(D1(:,2))+1)-1<1 && (sum(D1(:,2))+1)-1==1
for i=1:m1
for j=1:m2
C=C+(D1(i,2)+D2(j,2))/2;
end
end
vc1=1-sum(D1(:,2));
for j=1:m2
ccc=ccc+(vc1+D2(j,2))/2;
end
C=C+ccc;
ccc=0;
end
if (sum(D1(:,2))+1)-1==1 && (sum(D1(:,2))+1)-1<1
disp('ccc');
for i=1:m1
for j=1:m2
C=C+(D1(i,2)+D2(j,2))/2;
end
end
vc2=1-sum(D2(:,2));
for j=1:m1
ccc=ccc+(D1(j,2)+vc2)/2;
end
C=C+ccc;
end
ccc1=0;
ccc2=0;
if (sum(D1(:,2))+1)-1<1 && (sum(D1(:,2))+1)-1<1
for i=1:m1
for j=1:m2
C=C+(D1(i,2)+D2(j,2))/2;
end
end
vc1=1-sum(D1(:,2));
vc2=1-sum(D2(:,2));
for j=1:m2
ccc1=ccc1+(vc1+D2(j,2))/2;
end
for j=1:m1
ccc2=ccc2+(D1(j,2)+vc2)/2;
end
C=C+ccc1+ccc2+(vc1+vc2)/2;
end
hang=1;
for i=1:m1
for j=1:m2
D(hang,1)=(D1(i,1)+D2(j,1))/2;
D(hang,2)=((D1(i,2)+D2(j,2))/2)/C;
hang=hang+1;
end
end
[Cf,IA,IC] = unique(D(:,1),'sorted');
c(:,1) = Cf;
for k=1:length(Cf)
d = find(D(:,1)==Cf(k));
c(k,2) = sum(D(d,2));
end
End
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413749.html

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

相关文章

2023 IoTDB Summit:北京城建智控科技股份有限公司高级研发主管刘喆《IoTDB在城市轨道交通综合监控系统中的应用》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

HCIP-7

IPV6: 为什么使用IPV6&#xff1a; V4地址数量不够V4使用NAT&#xff0c;破坏了端到端原则 IPV6的优点&#xff1a; 全球单播地址聚合性强&#xff08;IANA组织进行合理的分配&#xff09;多宿主----一个接口可以配置N个地址--且这些地址为同一级别自动配置---1&#xff09;…

AGI即将出现,未来最重要的资源是算力和能源

丨划重点 ① 关于新模型的名字&#xff0c;奥特曼还没有明确的想法&#xff0c;但他称不喜欢像“iPhone 27”这样的命名方式。 ② 奥特曼认为AGI将在不久的将来出现&#xff0c;但对社会和工作的影响程度可能远低于预期。 ③ 奥特曼表示&#xff0c;尽管AI的潜力超过预期&#…

CS8370错误,这是由于使用了C# 7.3中不支持的功能

目录 背景: 第一种方法: 第二种办法: 背景: 在敲代码的时候&#xff0c;程序提示报错消息提示:CS8370错误&#xff0c;那么这是什么原因导致的&#xff0c;这是由于使用了C# 7.3中不支持的功能&#xff0c;不支持该功能&#xff0c;那就是版本太低我们就需要升级更高的版本&…

自动驾驶概述

自动驾驶技术主要解决的问题 无人驾驶分级 L1:巡航定速(ACC),巡航装置可以纵向控制车辆,可以加速减速 L2:车道保持辅助,系统可以纵向控制也可以横向控制汽车,但车是辅助,人才是主导。 L2.5:可以提供简单路况下的变道能力,比如特斯拉。 L3:L2的基础上提供变道能力,…

Apache安全及优化

配置第一台虚拟机 VM1网卡 yum仓库 挂载磁盘 上传3个软件包到/目录 到/目录下进行解压缩 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar -xjf httpd-2.4.29.tar.bz2 mv apr-1.6.2 httpd-2.4.29/srclib/apr mv apr-util-1.6…

电阻表示方法和电路应用

电阻 电阻的表示方法 直标法 直标法是将电阻器的类别及主要技术参数的数值直接标注在电阻器表面上 通常用3位阿拉伯数字来标注片状电阻的阻值&#xff0c;其中第1位数代表阻值的第1位有效数&#xff1b;第2位数代表阻值的第二位有效数字&#xff1b;第3位数代表阻值倍率&…

Stability AI发布全新代码模型Stable Code 3B

Stable Code 3B: Coding on the Edge 要点&#xff1a; Stable Code 3B 是一个包含 30 亿个参数的大型语言模型 (LLM)&#xff0c;可实现准确且响应灵敏的代码补全&#xff0c;其水平与大 2.5 倍的 CodeLLaMA 7b 等模型相当。即使在 MacBook Air 等普通笔记本电脑上没有 GPU&…

蓝桥杯(C++ 整数删除 优先队列 )

优先队列&#xff1a; 优先队列具有队列的所有特性&#xff0c;包括队列的基本操作&#xff0c;只是在这基础上添加了内部的一个排序&#xff0c;它本质是一个堆实现的。 1.头文件&定义 #include <queue> #include <functional> //greater<>// 定义 p…

主动轮廓——计算机视觉中的图像分割方法

​ 一、说明 简单来说&#xff0c;计算机视觉就是为计算机提供类似人类的视觉。作为人类&#xff0c;我们很容易识别任何物体。我们可以很容易地识别山丘、树木、土地、动物等&#xff0c;但计算机没有眼睛&#xff0c;也没有大脑&#xff0c;因此它很难识别任何图像。计算机只…

什么是JavaScript BOM

BOM是Browser Object Model的缩写&#xff0c;即浏览器对象模型。由于BOM是和浏览器相关的一些操作&#xff0c;因此产生的后果就是无数的浏览器厂商各自使用自己的一套方式实现BOM&#xff08;当然现在这个问题基本解决了。。&#xff09; 在网站中有很多针对浏览器的操作&…

C++系列-第1章顺序结构-9-字符类型char

在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客&#xff0c;主要讲述字符类型char 字符类型char 在C编程语言中&#xff0c;char是一种基本的数据类型&#xff0c;它用于存储单个字符。字符可以是字母、数字、标点符号或者…