经典人脸数据集的可视化AR,Yale,YaleB

Posted Huthan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典人脸数据集的可视化AR,Yale,YaleB相关的知识,希望对你有一定的参考价值。

将人脸数据集中的数据可视化


大部分人脸数据集的数据量都比较大,在进行处理时,因为无法可视化操作,因此不方便用户进行数据的选择。因此,采用python中的matplotlib、numpy等库对人脸数据集进行可视化操作。方法涉及到Yale、AR等知名的人脸数据集。

首先是导入需要的库

import numpy as np
import scipy
from scipy.io import loadmat
import matplotlib.pyplot as plt
import pandas as pd

numpy用来处理矩阵,scipy用于科学计算,matplotlib用于可视化,pandas用于查看数据。

因为部分人脸数据集采用matlab中的.mat格式文件存储,在python中处理时,会将.mat文件读取成dict格式,所以需要使用字典的方法知道具体数据对应的键,方便取出数据。

# 使用scipy.io中的loadmat加载mat文件
data = scipy.io.loadmat("F:\\datasets\\Yale_32x32.mat")
# 加载后的数据是字典类型
print(type(data))
# 使用。keys()查看字典的键
data.keys()

# 以下为输出结果,复制请删除
<class 'dict'>
dict_keys(['__header__', '__version__', '__globals__', 'fea', 'gnd'])

根据字典的键可以看出,'fea'对应数据,'gnd'对应标签。

# 根据字典的键可知,‘fea’存储数据,‘gnd’存储标签
X = data['fea']
# 使用pandas.DataFrame查看一下数据
pd.DataFrame(X)

X.shape
# 使用.shape可知样本个数有165个,有1024个特征点组成图像

# 以下为输出结果,复制请删除
(165, 1024)

获取到数据集的shape165x1024,1024是数据集的维度,也是数据存储的像素点,165是样本的个数,因此,需要查看数据集的介绍。

Yale数据集中共涉及15个人,每人11张黑白人脸图像,图像大小为100*100。每张图像已剪裁好位置至正对人脸。该数据集的特点就是,数据少,图像小。

获取需要获得图像数

row,col = X.shape
print(row,col)

# 以下为输出结果,复制请删除
165 1024

首先,我们要获取数据的行和列,前面提到行对应样本的个数,列对应样本的特征数。

下面利用循环,创建一个数组,将每一个样本的数据存储到一个1x1024的矩阵中,并将其调整为32x32大小的矩阵,对每一个矩阵进行转置运算,否则图像是偏的,添加到一个列表中。循环结束后,将列表转成数组的形式。

images = []
# 循环建立图像
for i in range(row):
    img = np.array(col) # 创建一个数组存储数据
    img = X[i]
    img = img.reshape(32,32).T # 将一个样本转成32x32的矩阵
    images.append(img) # 将样本添加到一个列表中
    
images = np.array(images) # 将列表转成数组形式

最后使用matplotlib对数据进行可视化操作,首先是创建画布,并且创建一定数量的子图,子图的创建可根据数据集的描述填写参数,整体画布的大小figsize自由设定,然后对子图进行循环操作,将对应的数据填充到子图中,即可显示最后的效果。

# 15,11为创建子图的个数,根据数据集包含的信息填写
# 例如Yale数据集包含15个人的11张图像,因此可以写15,11,每一行是一个样本的信息
fig,axes = plt.subplots(2,11
                      ,figsize=(16,9)
                      ,subplot_kw="xticks":[],"yticks":[]
                      )

for i,ax in enumerate(axes.flat):
    ax.imshow(images[i]
             ,cmap="gray"
             )

下面为可视化的结果

将方法封装成一个函数进行调用

定义一个getphoto()的函数,参数fname为要读取的数据集的本机地址。

def getPhoto(fname):
    
    data = scipy.io.loadmat(fname)
    
    X = data['fea']
    
    row,col = X.shape
    images = []
    for i in range(row):
        img = np.array(col)
        img = X[i]
        img = img.reshape(32,32).T
        images.append(img)
        
    images = np.array(images)
    
    # 15,11为创建子图的个数,根据数据集包含的信息填写
    # 例如Yale数据集包含15个人的11张图像,因此可以写15,11,每一行是一个样本的信息
    fig,axes = plt.subplots(10,28
                      ,figsize=(16,9)
                      ,subplot_kw="xticks":[],"yticks":[]
                      )

    for i,ax in enumerate(axes.flat):
        ax.imshow(images[i]
                 ,cmap="gray"
                 )
        
    return fig

下面进行演示,将AR数据进行可视化。

fname = 'F:\\datasets\\AR_32x32.mat'
fig = getPhoto(fname)

以上即是本次文章的主要内容,getPhoto()函数可以直接调用,使用过程中注意在子图中调整子图的个数即可,后续优化再进行更新。

论文 数据集总结

1、Yale人脸库(美国):耶鲁大学,15人,每人11张照片,主要包括光照条件的变化,表情的变化等。

2、ORL人脸库(英国):剑桥大学,40人,每人10张照片,包括表情变化,微小姿态变化,20%以内的尺度变化

3、CMU PIE人脸库(美国):卡耐基梅隆大学,所谓PIE就是姿态(POSE),光照(ILLUMINATION)和表情(EXPRESSION)的缩写,CMU PIE人脸库建立于2000年11月,它包括来自68个人的40000张照片,其中包括了每个人的13种姿态条件,43种光照条件和4种表情下的照片,现 有的多姿态人脸识别的文献基本上都是在CMU PIE人脸库上测试的。

4、AR人脸库(美国):Purdue 大学,126人的彩色照片,光照,尺度和表情变化。

5,Semeion    该数据集一共有1593个样本,样本大小为16*16,样本数据为0/1布尔值,该数据格式简单
 
6, MNIST    该数据集包括60000个训练样本和10000个测试样本以及对应的labels,每个样本的大小是16*16,样本数据是0-255的值。
 
7, COIL-100 数据集是彩色图片集合,包含对 100 个物体从不同角度的拍摄,每隔 5 度拍摄一副图像,每个物体 72 张图像。每张图像大小进行了统一处理为 128x128。
8, JAFFE数据集一共有213张图像.选取了10名日本女学生,每个人做出7种表情.7种表情包括: Angry,Disgust,Fear,Happy,Sad,Surprise,Neutral.(愤怒,厌恶,恐惧,高兴,悲伤,惊讶,中性)

以上是关于经典人脸数据集的可视化AR,Yale,YaleB的主要内容,如果未能解决你的问题,请参考以下文章

论文 数据集总结

可视化丨福尔摩斯探案集的数据分析

基于Python PCA+SVM+KFold方法人脸识别(AR人脸数据集)

AR人脸数据库pgm图片转换jpg,matlab实现程序

毕业设计/Matlab系列基于PCA和BP神经网络的人脸识别系统(基于AR人脸库)

毕业设计/Matlab系列基于PCA和BP神经网络的人脸识别系统(基于AR人脸库)