样本图片
简介
表情数据由48x48像素的人脸灰度图像组成;
根据面部表情中显示的情绪将每张脸分为七类(0=愤怒,1=厌恶,2=恐惧,3=高兴,4=悲伤,5=惊讶,6=中性)
FER数据集主要包含以下文件:
-
train.csv:包含两列,“emotion”和“pixels”。“emotion”列包含一个数字代码,范围从0到6(含6),表示图像中存在的情绪。“pixels”列则为48x48的灰度图像的一维形式,共含有28709个图像
-
test.csv:只包含“pixels”列,共含有7178个测试图像
另外还有用于排行榜的公共测试集
数据集调用
函数data_generate主要对原始数据进行预处理,生成48x48g格式的训练图像x_train和图像标签y_train。值得说明的是,该函数简单地将所有训练图像以及标签一次性读取到内存中,考虑性能的同学可以采用批量读取的方式降低内存负荷。
import csv
import numpy as np
import matplotlib.pyplot as plt
path = "G:\\train.csv"
def data_generate(file_path):
samples = []
with open(file_path, "r") as train_file:
csv_reader = csv.reader(train_file) # 使用csv.reader读取csvfile中的文件
next(csv_reader) # 去掉首行
for row in csv_reader: # 将csv 文件中的数据保存到samples中
samples.append(row)
images = [[i[1]] for i in samples]
x_train = []
for image in images:
x_train.append(np.array([int(i) for i in image[0].split(" ")]).reshape(48, 48))
labels = [[i[0]] for i in samples]
y_train = []
for label in labels:
y_train.append(int(label[0]))
return x_train, y_train
下面的函数可以实现不同面部表情都有哪些图片,一起来看看吧
#获取指定表情和个数的面部图像
def facial_expression_required(label, num):
x_train, y_train = data_generate(path)
images = []
y = 0
for i in range(len(y_train)):
if y_train[i] == label:
images.append(x_train[i])
y += 1
if y == num:
break
return images
#show出指定表情和个数的面部图像
def facial_expression_show(label, num=9):
images = facial_expression_required(label, num)
for i in range(num):
plt.subplot(1, num, 1 + i)
plt.imshow(images[i], "gray")
plt.xticks([])
plt.yticks([])
plt.show()
if __name__ == "__main__":
facial_expression_show(0, 9)
比如愤怒(0)
或者高兴(3)
再或者惊讶(5)
Citation:
"Challenges in Representation Learning: A report on three machine learning contests." I Goodfellow, D Erhan, PL Carrier, A Courville, M Mirza, B Hamner, W Cukierski, Y Tang, DH Lee, Y Zhou, C Ramaiah, F Feng, R Li, X Wang, D Athanasakis, J Shawe-Taylor, M Milakov, J Park, R Ionescu, M Popescu, C Grozea, J Bergstra, J Xie, L Romaszko, B Xu, Z Chuang, and Y. Bengio. arXiv 2013.
See fer2013.bib for a bibtex entry.
关注后,后台回复 ferc 即可获得