【实作】CNN-微表情识别
微表情识别
一、数据集说明
使用的数据集是FER2013
kaggle FER2013 https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data
该数据集官方的下载链接目前失效了,可通过这个链接下载:https://www.kaggle.com/shawon10/facial-expression-detection-cnn/data?select=fer2013.csv
FER2013数据集下载下来是一个总 3w5k 行左右的csv文件:
......
......
第一列emotion是图像标签,即 y:[0, 6]。分别代表7种emotion:0 - ‘angry’,1 - ‘disgusted’,2 - ‘feaful’,3 - ‘happy’,4 - ‘sad’,5 - ‘surprised’,6 - ‘neutral’
第二列是人脸图像的灰度像素值:[0, 255]
第三列是图像用途分类。根据第三列将图像分为 训练集(training),验证集(public test),测试集(private test)
二、预处理数据
读数据:
import pandas as pd import numpy as np data_path = "../DATA/fer2013.csv" df = pd.read_csv(data_path)
其中pixel列是一个字符串,将pixel列转为 int型 的list,表示像素灰度值
1 df[‘pixels‘] = df[‘pixels‘].str.split(‘ ‘).apply(lambda x: [int(i) for i in x])
也可在此步直接将pixel reshape成48*48的:
df[‘pixels‘] = df[‘pixels‘].str.split(‘ ‘).apply(lambda x: np.array([int(i) for i in x]).reshape(48,48))
将FER2013.csv根据用途(usage)分为train、val、test
分完后记得把原来的dataframe的index重设,否则val、test的dataframe序号不连续,后面y_val转成torch.LongTensor时会报错
def devide_x_y(my_df): return my_df[‘pixels‘].reset_index(drop=True), my_df[‘emotion‘].reset_index(drop=True) # 分别筛选出training、publictest、privatetest对应的行 training = df[‘Usage‘]=="Training" publicTest = df[‘Usage‘] == "PublicTest" privateTest = df["Usage"] == "PrivateTest" # 读取对应行的数据 train = df[training] public_t = df[publicTest] private_t = df[privateTest] # 分为 X 和 y train_x, train_y = devide_x_y(train) val_x, val_y = devide_x_y(public_t) test_x, test_y = devide_x_y(private_t)
分完后,各数据集的行数如下:
train:28709
val:3589
test:3589
len(train_x[0])每个图片长度为 2304 --> 48 * 48
画一张出来看一下
import matplotlib.pyplot as plt img_test = train_x[0].reshape(48,48) plt.figure() plt.imshow(img_test,cmap=‘gray‘) plt.show()
显示如下:
注:如果没有注明是灰度图:cmap=gray,则会显示如下:
参考:https://blog.csdn.net/mathlxj/article/details/87920084
数据集获取:
中科院数据CASME II:http://fu.psych.ac.cn/CASME/casme2.php 已发邮件
SAMM datset:http://www2.docm.mmu.ac.uk/STAFF/m.yap/dataset.php
SMIC (下载的SMIC-VIS):http://www.cse.oulu.fi/SMICDatabase 已发邮件
CK, CK+:http://www.pitt.edu/~emotion/ck-spread.htm
参考:
https://github.com/tgpcai/Microexpression_recognition