【实作】CNN-微表情识别

submarineas 2020-07-05

微表情识别

一、数据集说明

使用的数据集是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文件:

【实作】CNN-微表情识别

 ......

【实作】CNN-微表情识别

......

【实作】CNN-微表情识别

第一列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()

显示如下:

【实作】CNN-微表情识别

 注:如果没有注明是灰度图:cmap=gray,则会显示如下:

 【实作】CNN-微表情识别

参考: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

相关推荐