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.mzph.cn/news/640282.shtml

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

相关文章

2.【SpringBoot3】用户模块接口开发

文章目录 开发模式和环境搭建开发模式环境搭建 1. 用户注册1.1 注册接口基本代码编写1.2 注册接口参数校验 2. 用户登录2.1 登录接口基本代码编写2.2 登录认证2.2.1 登录认证引入2.2.2 JWT 简介2.2.3 登录功能集成 JWT2.2.4 拦截器 3. 获取用户详细信息3.1 获取用户详细信息基本…

爬虫小案例—雪球网行情中心板块数据抓取

雪球网行情中心网址&#xff1a;https://xueqiu.com/hq 目标&#xff1a;市场一览板块、热股榜板块、新股预告板块、关注排行榜板块 源代码如下&#xff1a; import datetimeimport requestsheaders {user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKi…

一周时间,开发了一款封面图生成工具

介绍 这是一款封面图的制作工具&#xff0c;根据简单的配置即可生成一张好看的封面图&#xff0c;目前已有七款主题可以选择。做这个工具的初衷来自平时写文章&#xff0c;都为封面图发愁&#xff0c;去图片 网站上搜索很难找到满意的&#xff0c;而且当你要的图如果要搭配上文…

【JavaEE进阶】 关于⽇志框架(SLF4J)

文章目录 &#x1f333;SLF4j&#x1f332;⻔⾯模式(外观模式)&#x1f6a9;⻔⾯模式的定义&#x1f6a9;⻔⾯模式的优点 &#x1f343;关于SLF4J框架&#x1f6a9;不引⼊⽇志⻔⾯&#x1f6a9;引⼊⽇志⻔⾯ ⭕总结 &#x1f333;SLF4j SLF4J不同于其他⽇志框架,它不是⼀个真正…

构建高效外卖系统:技术实践与代码示例

外卖系统在现代社会中扮演着重要的角色&#xff0c;为用户提供了便捷的用餐解决方案。在这篇文章中&#xff0c;我们将探讨构建高效外卖系统的技术实践&#xff0c;同时提供一些基础的代码示例&#xff0c;帮助开发者更好地理解和应用这些技术。 1. 技术栈选择 构建外卖系统…

自动化运维神器—ansible详解

一、ansible简介 1.ansible定义 ansible是目前最受运维欢迎的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;SaltStack puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功…

[Java并发基础]多进程编程

Java并发基础&#xff1a;多进程编程 在Java编程中&#xff0c;多进程编程是一种并发编程的方法&#xff0c;它允许我们同时执行多个独立的进程。每个进程都有自己的内存空间和执行环境&#xff0c;它们可以独立运行&#xff0c;相互之间不会干扰。 文章目录 Java并发基础&…

【算法详解】力扣415.字符串相加

一、题目描述 力扣链接&#xff1a;力扣415.字符串相加 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串…

BP蓝图映射到C++笔记1

教程链接&#xff1a;示例1&#xff1a;CompleteQuest - 将蓝图转换为C (epicgames.com) 1.常用的引用需要记住&#xff0c;如图所示。 2.蓝图中可以调用C函数&#xff0c;也可以实现C函数 BlueprintImplementableEvent:C只创建&#xff0c;不实现&#xff0c;在蓝图中实现 B…

C++提高编程---模板---类模板

目录 一、类模板 1.模板 2.类模板的作用 3.语法 4.声明 二、类模板和函数模板的区别 三、类模板中成员函数的创建时机 四、类模板对象做函数参数 五、类模板与继承 六、类模板成员函数类外实现 七、类模板分文件编写 八、类模板与友元 九、类模板案例 一、类模板 …

373. 查找和最小的 K 对数字

373. 查找和最小的 K 对数字 题目链接&#xff1a;373. 查找和最小的 K 对数字 代码如下&#xff1a; //参考leetcode官方题解&#xff1a;https://leetcode.cn/problems/find-k-pairs-with-smallest-sums/solutions/1208350/cha-zhao-he-zui-xiao-de-kdui-shu-zi-by-l-z526 …

软件测试的需求人才越来越多,为什么大家还是不太愿意走软件测试的道路?

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【ARMv8M Cortex-M33 系列 5 -- RT-Thread .rti_fn 段简介】

文章目录 .rti_fn 段的作用 .rti_fn 段的作用 在 RT-Thread 实时操作系统中&#xff0c;.rti_fn 代码段通常用于存放初始化函数。RT-Thread 的启动过程中包括了一系列的初始化步骤&#xff0c;这些初始化函数被分配到特定的代码段中&#xff0c;以便操作系统在启动时按照预定的…

【动态规划】【C++算法】801. 使序列递增的最小交换次数

作者推荐 【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径 本文涉及知识点 动态规划汇总 数组 LeetCode801使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 nums1 和 nums2 。在一次操作中&#xff0c;我们可以交换 nums1[i] 和 num…

路飞项目--03

二次封装Response模块 # drf提供的Response&#xff0c;前端想接收到的格式 {code:xx,msg:xx} 后端返回&#xff0c;前端收到&#xff1a; APIResponse(tokneasdfa.asdfas.asdf)---->{code:100,msg:成功,token:asdfa.asdfas.asdf} APIResponse(code101,msg用户不存在) ---…

学习笔记-李沐动手学深度学习(一)(01-07,概述、数据操作、tensor操作、数学基础、自动求导)

个人随笔 第三列是 jupyter记事本 官方github上啥都有&#xff08;代码、jupyter记事本、胶片&#xff09; https://github.com/d2l-ai 多体会 【梯度指向的是值变化最大的方向】 符号 维度 &#xff08;弹幕说&#xff09;2&#xff0c;3&#xff0c;4越后面维度越低 4…

Java 面向对象案例 02 (黑马)

代码&#xff1a; public class foodTest {public static void main(String[] args) {//1、构建一个数组food[] arr new food[3];//2、创建三个商品对象food f1 new food("apple","123",3.2,500);food f2 new food("pear","456",4…

临时工说:AI 人工智能化对于DBA 的工作的影响

这开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共1900人左右 1 2 3 4 5&#xf…

ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切

ChatGPT&#xff1a;关于 OpenAI 的 GPT-4工具&#xff0c;你需要知道的一切 什么是GPT-3、GPT-4 和 ChatGPT&#xff1f;ChatGPT 可以做什么&#xff1f;ChatGPT-4 可以做什么&#xff1f;ChatGPT 的费用是多少&#xff1f;GPT-4 与 GPT-3.5 有何不同&#xff1f;ChatGPT 如何…

开源堡垒机JumpServer本地安装并配置公网访问地址

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…