计算机视觉之人脸识别(Yale数据集)--HOG和ResNet两种方法实现

2023-11-14

1.问题描述

在给定Yale数据集上完成以下工作:在给定的人脸库中,通过算法完成人脸识别,算法需要做到能判断出测试的人脸是否属于给定的数据集。如果属于,需要判断出测试的人脸属于数据集中的哪一位。否则,需要声明测试的人脸不属于数据集。
这是一个一对多的人脸比对问题。

数据集为给定Yale人脸数据集。数据集中共涉及15个人,每人11张黑白人脸图像,图像大小为100*100。每张图像已剪裁好位置至正对人脸。该数据集的特点就是,数据少,图像小。如下图:
在这里插入图片描述

2.模型建立

2.1第一种是传统方法(HOG+KNN)

HOG(Histogram of Oriented Gridients)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符。其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓。
HOG特征提取分为以下几个步骤:
1)色彩和伽马归一化:为了减少光照因素的影响,首先需要将整个图像进行规范化(归一化)。在图像的纹理强度中,局部的表层曝光贡献的比重较大,所以,这种压缩处理能够有效地降低图像局部的阴影和光照变化。
2)计算图像梯度:计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值;求导操作不仅能够捕获轮廓,人影和一些纹理信息,还能进一步弱化光照的影响。
3)构建方向的直方图:将图像划分成cell,cell中的每一个像素点都为某个基于方向的直方图通道投票。
4)将细胞单元组合成大的区间:将相邻的小cell组成block,统计每个block的cell信息,将其归一化,组成新的特征向量。
5)收集HOG特征:将整幅图的block特征向量整合成一个特征向量。

KNN是K nearest neighbor的缩写,中文名称是k-近邻算法。邻近样本,就是离它最近的k个样本,通过计算其与所有已知样本的距离来确定。一般使用的是欧氏距离, 即两点间的空间距离,为两点向量差的L2范数。两个n维向量A(x11,x12,…,x1n)和B(x21,x22,…,x2n)间的欧氏距离为:
在这里插入图片描述
分类过程:
1,计算已训练集中样本与待测样本之间的距离
2,按距离排序
3,选取与当前样本距离最小的k个邻居样本
4,确定此k个样本中各个类别的频率
5,频率最高的类别作为该样本的预测分类

注意事项
KNN算法的三要素:k值选择、距离度量和分类决策规则都会对分类结果产生重要影响;
K值选择:K值的选择与样本分布有关,一般选择一个较小的K值,可以通过交叉验证来选择一个比较优的K值,默认值是5;
距离度量:不同的距离度量方法所确定的k个邻近点是不同的,会对结果产生影响,一般选用欧氏距离;
分类决策规则:一般是多数表决,即k个邻居中多的说的算。可以根据不同距离的邻居对该样本产生的影响赋予不同的权重。

在本实验中,我们采用HOG+KNN的方法对我们人脸识别问题进行建模。通过HOG提特征,送入KNN进行分类。具体模型流程如下:
a)预处理图片
b)分配数据:将数据集data划分为不同的train与test(详见数据集处理)
c)对data(train和test)贴标签(1-11)
d)train训练出一个model
e)传入test,计算acc_class

2.2第一种是深度学习(ResNet+相似度)

在本实验中,采用的一个初始网络如下:
在这里插入图片描述
2次3*3卷积,然后maxpooling一次,后面加6个残差块,一共15层。每个残差块2次卷积,每次卷积后都进行BN(批量归一化)+ReLU激活。残差块结构图如下:
在这里插入图片描述
设置训练参数:

超参数 数值设置
Batch_size 64
Learning rate 0.001
Iteration 100000
num_images_per_id 4

batch_size=16,num_images_per_id=4,则表示每个iteration都随机抽取16个id,每个id4张图来训练。

本实验选择了余弦相似性度量,为什么不是常用的softmax分类器?
给定一个具有N张训练图像的数据集,其中,相关的类标签为L,深度网络的标准方法是使用卷积神经网络处理输入图像,并在网络顶部放置一个softmax分类器,用于计算每个类的得分,softmax分类器将会选择概率最大的类作为输出。通过训练ResNet模型实现对同一类物体的关联性度量,对于若干张同类物体的图片,由softmax分类器所获得的后验概率并不能用来表征这些图片中物体的相似性。

本实验首先利用基于余弦相似性度量的ResNet模型对人脸的外观进行线下预训练,得到表征人脸外观的128维特征向量作为外观描述子,然后在线上跟踪过程中,为每一个图片库创建一个特征向量集,存储最近成功关联的100帧图片的特征向量,其中=100。并提出深度关联度量的概念,即将100个由深度学习得到的特征向量中与当前帧的检测目标集之间余弦距离最小的结果作为外观匹配度,对图片库集和检测目标集进行关联。

级联匹配算法流程:
在这里插入图片描述

3.实验结果

HOG+KNN实验在matlab 2014b 上进行。
ResNet的实验环境如下:
在这里插入图片描述
在这里插入图片描述
数据集的划分:
对于数据集的15个人,我们按不同的比例分成训练集(train)和测试集(test)两部分。分配比例如下:
train : test = 10:1
train : test = 9:2
train : test = 8:3
train : test = 7:4
train : test = 6:5
train : test = 5:6
train : test = 4:7
train : test = 3:8

HOG+KNN实验结果:
在这里插入图片描述
可以看到,随着每个人测试图片数量的上升,预测的准确率大部分都在逐渐升高,但是在训练集数目为8时(每人),预测的准确率却低于在训练集数目为7时(每人)的准确率。

噪声集测试:
取前5个人的10张图片作训练集,而5个人的其中一张图片加剩下10个人的全部图片做测试集,测试结果如下图:
在这里插入图片描述
该图为误差图,其中横坐标为每个人的图片编号,纵坐标为每个人的编号,蓝色代表预测正确,黄色代表预测错误。

ResNet实验结果:
在这里插入图片描述
训练迭代图及误差匹配如下图:
在这里插入图片描述
具体错误信息如下图:
在这里插入图片描述
具体匹配错误信息矩阵:
在这里插入图片描述

4.结果分析

4.1传统方法分析

本实验中首先对传统手工提取特征进行了分析。HOG提取特征如下图:
在这里插入图片描述

4.2 深度学习方法分析

实验中对级联匹配进行了分析,对匹配算法的过程可视化:外观特征的余弦度量矩阵:两张图的每个脸之间都有一个相似性度量值,蓝色的是每行每列中最小的,对于大于外观阈值的匹配点,统一赋予一个大于外观阈值的值, 这里外观阈值为0.5,如下图:
在这里插入图片描述
使用匈牙利算法,获取最小成本的分配,返回得到两张图的最小成本匹配对之间的索引,如下图:
在这里插入图片描述
总而言之,这两种方法都在给定的数据集上达到了很好的效果。HOG+KNN是一种较为传统且有效的人脸识别方式,鉴于数据量较小,与深度学习的方法相比,也得到了和深度学习相当的效果。但当数据集大的时候,深度网络的优势能体现得更明显。

(ps:实验做过挺久了,参考了一些博主的文章,若有博主介意私信我一一列举。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机视觉之人脸识别(Yale数据集)--HOG和ResNet两种方法实现 的相关文章

随机推荐

  • React Native-自定义组件之Slider

    一 背景 最近在进行原生模块改造RN的时候需要用到一个定制的可拖动进度条 但发现react native自带的Slider仅仅是在iOS平台上支持 所以决定自己来定制一个 二 设计思路 组合基础组件和View和Image 搭配PanResp
  • v-model数据绑定到对象的小技巧

    在前面写了v model obj a 后 下面的对象内不用写a这个属性 直接用空对象abj js这类弱语言 会自动将a这个属性set到obj的对象中去 例如 前面绑定了对象中的属性 在后面写对象的时候 可以不写对象属性 直接写一个空对象 在
  • 脑电特征中的微分熵(DE)计算

    最近参加了一个脑电相关的竞赛 其中有一个赛道是情绪识别 根据脑电数据将情绪进行4分类 查了一些文献 使用了包括时域 频域 空间域的一些特征 最后发现微分熵作为特征的分类效果最好 相关参考文献整理下载 https download csdn
  • vcruntime140.dll丢失的解决方法,vcruntime140.dll下载安装教程

    文件vcruntime140 dll需要在电脑打开一个浏览器才能下载顶部输入 dll修复程序 site 按下键盘的回车键打开 然后点击进入下载dll文件安装包 dll文件安装包下载需要点击解压 然后把解压好的文件点击打开 开始安装丢失的vc
  • android 复制文件速度,memcpy速度太慢?掌握这个技术让内存拷贝效率成倍提升

    memcpy是C C 的一个标准函数 原型void memcpy void dest const void src size t n 用于从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 neon是
  • 华为OD机试真题B卷 Java 实现【字符串分隔】,附详细解题思路

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 本专栏收录于 华为OD机试 JAVA 真题 A卷 B卷 刷的越多 抽
  • 如何使用Blender建3D汉字(保姆级别的详细)

    未来的游戏开发程序媛 现在的努力学习菜鸡 本专栏是我关于建模的学习笔记 本篇是如何使用Blender建3D汉字 这是这个专栏的第一篇 因为不知道把这篇放到哪里 就开了个新的 如何使用Blender建3D汉字 就这种的 如果是的话可以接着往下
  • 计算机科学和PYTHON编程导论_15_概率与分布

    随机程序 掷骰子 import random def rollDie 返回一个1 6的随机整数 return random choice 1 2 3 4 5 6 def rollN n result for i in range n res
  • Matlab回归分析

    线性回归 在实际中 对于情况较复杂的实际问题 因素不易化简 作用机理不详 可直接使用数据组建模 寻找简单的因果变量之间的数量关系 从而对未知的情形作预报 这样组建的模型为拟合模型 拟合模型的组建主要是处理好观测数据的误差 使用数学表达式从数
  • 用gdb.attach()在gdb下断点但没停下的情况及解决办法

    在python中 如果导入了pwntools 就可以使用里面的gdb attach io 的命令来下断点 但是这一次鼠鼠遇到了一个情况就是下了断点 但是仍然无法在断点处开始运行 奇奇怪怪 这是我的攻击脚本 我们运行一下 可以看到其实已经运行
  • Python入门--with语句

    with语句 上下文管理器 with语句可以自动管理上下文资源 不论什么原因跳出with块 都能确保文件的正确关闭 以此来达到释放资源的目的 with open 上下文管理器 with open a txt r as file as起个别名
  • Unity3d-游戏中的小地图制作

    方法一 利用NGJ MiniMap插件 1 导入该插件后 在Mesh Version gt Prefabs中 将NJG MiniMap 2D 拖入到场景中 2 在Hierarchy中点击MiniMap 位于NJG MiniMap 2D gt
  • inc si指令的作用_到底什么是链接,它起到了什么作用?

    几十年以前 计算机刚刚诞生 人们编写程序时 将所有的代码都写在同一个源文件中 经过长期的积累 程序包含了数百万行的代码 以至于人们无法维护这个程序了 于是人们开始寻找新的方法 迫切地希望将程序源代码分散到多个文件中 一个文件一个模块 以便更
  • 如何 debug (调试) maven 插件?

    用惯了 IntelliJ IDEA debug 功能 你知道如何在 IntelliJ IDEA 上调试 maven 插件吗 哈哈哈 那就是这篇文章准没错了 1 准备源码 准备你想要进行 debug 的 maven 插件的源代码 我这里以 m
  • ARM常用汇编指令

    目录 一 汇编基本语法 1 汇编指令的最典型书写模式 二 常用汇编指令 1 push压栈指令 2 pop出栈指令 3 sub指令 4 add指令 5 movs数据传输指令 6 str指令 7 ldr指令 8 bl指令 9 MOVW指令 10
  • C++不定参数,模板函数,模板类详解附实例

    前言 在 C 中 有时我们在写一个函数时并不知道参数的数量和类型 这时需要用到不定参数 模板函数 正文 不定参数 不定参数怎么表示 对于不定参数的表示 就是三个点 注意是英文的点 那么我们在正常使用时函数参数写成这样 funtionType
  • Python 容器序列切片

    视频版教程 Python3零基础7天入门实战视频教程 序列是指内容连续且有序的一类数据容器 前面学的列表 元组 字符串都是序列 并且支持下标索引 切片是指从一个序列中 取出一个子序列 语法 序列 起始下标 结束下标 步长 返回一个新的序列
  • 短文阅读3:Variational Autoencoders (VAEs)

    深度生成网络 VAEs introduction 降维方法 PCA and Autoencoders 降维架构 PCA 问题1 什么是自动编码器autoencoder PCA和Autoencoders之间的关系 Variational Au
  • 【建议收藏】数据库 SQL 入门——数据查询操作(内附演示)

    引言 在上一节中 我们讨论了DML的使用方法 本节我们继续开始DQL的学习 首先回归一下DQL的基于定义 DQL Data Query Language 数据查询语言 用来查询数据库中表的记录 在本节中我们主要讨论DQL的用法以及基本语法
  • 计算机视觉之人脸识别(Yale数据集)--HOG和ResNet两种方法实现

    1 问题描述 在给定Yale数据集上完成以下工作 在给定的人脸库中 通过算法完成人脸识别 算法需要做到能判断出测试的人脸是否属于给定的数据集 如果属于 需要判断出测试的人脸属于数据集中的哪一位 否则 需要声明测试的人脸不属于数据集 这是一个