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名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 方法中参数类型后写了三个点?什么意思?

1、...代表什么意思&#xff1f; 2、如何使用 3、注意事项 4、两个list&#xff0c;一个新的&#xff0c;一个旧的&#xff0c;旧列表中可能有新列表中存在的数据&#xff0c;也可能存在新列表中不存在的数据&#xff08;注&#xff1a;新旧列表中都不存在重复元素&#xff09;…

7.6 MySQL基本函数的使用(❤❤❤)

7.6 MySQL基本函数的使用 1. 提要2. 数字函数3. 字符函数3.1 替换字符3.2 左填充字符及截取字符串 4. 日期函数4.1 日期函数4.2 表达式占位符4.3 日期偏移计算4.4 日期间隔 5. 条件函数5.1 IF语句5.2 case...when语句 1. 提要 2. 数字函数 3. 字符函数 3.1 替换字符 -- INSERT…

水电站智能监测泄洪预警系统介绍

一、背景 近年来由于危险河道管理措施不到位&#xff0c;调峰电站泄水风险长期存在&#xff0c;信息通报制度缺失以及民众安全警觉性不高等因素导致的水电站在泄洪时冲走下游河道游客以及人民财产的事故频发。 二、系统介绍 水电站智能监测泄洪预警系统是一种集成了物联网、云…

C/C++ BM5 合并K个已排序的链表

文章目录 前言题目1 解决方案一1.1 思路阐述1.2 源码 2 解决方案二2.1 思路阐述2.2 源码 总结 前言 在接触了BM4的两个链表合并的情况&#xff0c;对于k个已排序列表&#xff0c;其实可以用合并的方法来看待问题。 这里第一种方法就是借用BM4的操作&#xff0c;只不过是多个合…

腾讯云服务器的介绍_云主机概览——腾讯云

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

workflow源码解析:GoTask

关于go task 提供了另一种更简单的使用计算任务的方法&#xff0c;模仿go语言实现的go task。 使用go task来实计算任务无需定义输入与输出&#xff0c;所有数据通过函数参数传递。 与ThreadTask 区别 ThreadTask 是有模板&#xff0c;IN 和 OUT&#xff0c; ThreadTask 依赖…

分布式Erlang/OTP(学习笔记)(一)

Erlang分布式基础 假设你在机器A和机器B上各跑着一个Simple Cache应用的实例。要是在机器A的缓存上插人一个键/值对之后&#xff0c;从机器B上也可以访问&#xff0c;那可就好了。显然&#xff0c;要达到这个目的&#xff0c;机器A必须以某种方式将相关信息告知给机器B。传递该…

力扣309. 买卖股票的最佳时机含冷冻期(动态规划,Java C++解法)

Problem: 309. 买卖股票的最佳时机含冷冻期 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 Problem: 714. 买卖股票的最佳时机含手续费 该题目可以看作是上述题目的改编&#xff0c;该题目添加了一个冷冻期使得动态转移方程更加复杂&#xff0c;具体思路如下&#xf…

【MyBatis-Plus】逻辑删除

对于一些比较重要的数据&#xff0c;我们通常采用逻辑删除。&#xff08;即用一个字段表示是否删除&#xff0c;实际上始终在数据库没有被删除&#xff09; 当逻辑删除字段为 true&#xff0c;业务处理的时候会自动把该数据当做一个“不存在”的数据处理。&#xff08;即不处理…

uniapp让图片缩小

image{width: 500rpx;height:500rpx;} 在图片属性设置为image{}宽高改变但是大小不改变&#xff0c;解决办法是改成下面的代码 & > img {width: 50px; height: auto; } 如图&#xff1a;

最优解:阿里云服务器地域如何选择?

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

【计算机网络】(1)OSI七层模型、协议、交换技术、路由器技术

文章目录 计算机网络功能与分类计算机网络的定义计算机网络的功能计算机网络的指标计算机网络的性能指标计算机网络的非性能指标 计算机网络的分布范围以及拓扑结构划分图计算机网络分类总线型拓扑星型拓扑环形图拓扑树型拓扑分布式拓扑 通信技术信道物理信道逻辑信道 发信机OS…

vue3-事件处理

事件监听 DOM 事件监听指令 v-on 简写 v-on:click"handler" 或者 click"handler"事件处理器 (handler) 的值可以是&#xff1a; 内联事件处理器&#xff1a;比如 click 方法事件处理器&#xff1a;一个指向组件上定义的方法的属性名或是路径。 在内联…

搭建属于自己的内容付费平台:开发知识付费APP教学

近期知识付费的热度非常高&#xff0c;本篇文章小编将为你提供一份关于如何搭建属于自己的内容付费平台的简要教程&#xff0c;让你能够逐步实现一个功能完备的知识付费APP。 1.明确目标和功能需求 在开始开发之前&#xff0c;首先需要确定你的APP是面向哪个领域的用户&#x…

JSONObject - 用最通俗的讲解,教你玩转 JSON 数据的解析和修改

目录 一、JSONObject 1.1、为什么要使用他&#xff1f; 1.2、应用 1.2.1、依赖 1.2.2、JSON 数据示例 1.2.3、JSON 数据的构建 1.2.4、JSON 数据的解析 一、JSONObject 1.1、为什么要使用他&#xff1f; 在还没有接触过这个东西的时候&#xff0c;一直是通过 ObjectMap…

保护国家机密:Java国密加解密算法在信息安全中的应用与挑战

目录 1、简介 1.1 信息安全的重要性 1.2 Java国密加解密算法的概述 2、Java国密加解密算法的应用 2.1 数据加密与解密 2.2 网络通信加密 2.3 数字签名与验证 2.4 安全存储与传输 3、Java国密加解密算法的特点 3.1 安全性强 3.2 效率高 3.3 弹性可调 4、Java国密加…

(2024,密集量子电路,量子 U-Net,幺正单采样)量子去噪扩散模型

Quantum Denoising Diffusion Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 相关工作 2.1. 扩散模型 2.2. 变分量子电路 2.3. 量子扩散模型 3. 量子去噪扩散模…

HarmonyOS 转场动画 ForEach控制

本文 我们继续说组件的专场特效 上文 HarmonyOS 转场动画 我们通过if控制了转场效果 本文 我们通过 ForEach 控制它的加载和删除 这时候就有人会好奇 ForEach 怎么控制删除呢&#xff1f; 很简单 循环次数不同 例如 第一次 10个 第二次 5个 那么后面的五个就相当于删除啦 我们…

JVM垃圾回收机制及思维导图

一、Java垃圾回收机制 在java中&#xff0c;程序员是不需要显示的去释放一个对象的内存的&#xff0c;而是由虚拟机自行执行。在JVM中&#xff0c;有一个垃圾回收线程&#xff0c;它是低优先级的&#xff0c;在正常情况下是不会执行的&#xff0c;只有在虚拟机空闲或者当前堆内…

【Alibaba工具型技术系列】「EasyExcel技术专题」实战技术针对于项目中常用的Excel操作指南

这里写目录标题 EasyExcel教程Maven依赖 EasyExcel API分析介绍EasyExcel 注解通用参数ReadWorkbook&#xff08;理解成excel对象&#xff09;参数ReadSheet&#xff08;就是excel的一个Sheet&#xff09;参数注解参数通用参数 WriteWorkbook&#xff08;理解成excel对象&#…