forked from zbxytx/Multi_feature_MER
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.txt
106 lines (79 loc) · 4.61 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
环境说明:
python 3.6.10
numpy 1.19.0
pandas 1.0.1
sklearn 0.22.1
cv2 3.3.1
scipy 1.4.1
tensorflow 2.2.0
dlib 19.6.1
imutils 0.5.3
pillow 7.2.0
xlrd 1.2.0
CUDA None
1.Local_weighted_mean_register.py
用于裁剪以及配准人脸,包含类LWMRegister(standard_face, predictor_path, width=192, height=192, offset=24)
standard_face: 作为标准人脸的图像,不用经过裁剪
predictor_path: dlib预训练人脸predictor所在地址
width, height: 目标图像的宽与高
offset: 为了避免映射超出图像边缘,在配准前给图像边缘留出的空余
使用方法:调用LWMRegister.run(face_seq, n = 6, amplify = 1.2, aligned=False)
face_seq: 需要裁剪与配准的人脸图像序列
n: 计算LWM时采用的相邻点个数
amplify: 在配准时对图像进行一定比例的放大,避免映射超出图像边缘
aligned: True表示face_seq已经经过裁剪、对齐,False表示没有经过
2.Eulerian_video_magnification.py
用于对视频(图像序列)进行动作放大,包含类EVM(fps=200, low=0.2, high=2.4, level=6, alpha=8, lam_c=16, iq_reduce=0.1)
fps: 视频的帧率
low, high: 动作放大的频率区间
level: 构建拉普拉斯金字塔的层数
alpha: 动作放大的倍数
lam_c: 参数,用于调节被放大的动作大小的上限deta
iq_reduce: 程序将图像转到YIQ颜色空间进行动作放大,iq_reduce表示对IQ通道的缩放倍数,缩小IQ可以减小噪声
使用方法: 调用EVM.run(img_seq)
img_seq: 被放大的图像序列
3.Temporal_interpolation_model.py
用于对图像序列进行时域插值,实现帧数的上采样或下采样,包含类TIM()
使用方法:调用TIM.run(image_seq, target_length)
image_seq: 需要被插值的图像序列
target_length: 目标帧数
4.Features_extraction.py
用于提取图像序列的特征,包括LBP-TOP、3DHOG、HOOF
使用方法:调用函数 get_ep_features(ep, uniform_dict = None, feature='LBP-TOP', t_times=4, y_times=4, x_times=4,
x_radius = 1, y_radius = 1, t_radius = 4, xy_neighbor=8, xt_neighbor=8, yt_neighbor=8,
xy_bins = 8, xt_bins = 12, yt_bins = 12,
bins=8)
ep: 提取特征的图像序列
uniform_dict: 用于减小LBP-TOP特征维度,只有LBP-TOP特征需要
feature: 可选'LBP-TOP', '3DHOG', 'HOOF'
t_times, y_times, x_times: 将图像序列在t, y, x三个维度分成多少子块提取特征,推荐LBP-TOP的t_times=1
x_radius, y_radius, t_radius, xy_neighbor, xy_neighbor, yt_neighbor: LBP-TOP参数
xy_bins, xt_bins, yt_bins: 3DHOG参数
bins: HOOF参数
5.Classification_and_evaluation.py
使用svm评估模型的分类效果,并输出最高的metric以及对应参数,使用方法:
调用函数get_best_average(data, labels, sub_list, kernel='linear', split='loso', average='macro')
data: 特征数据
labels: 数据标签
sub_list: 每条数据属于哪个subject, 在程序中直接设置为df.Subject
kernel: 选择svm的核函数,可选'linear', 'poly', 'rbf'
split: 分割数据方式,可选'loso', '10-fold'
average: 计算Average F1-score的权重选择,可选'macro', 'micro', 'weighted'
查看某一特定参数下的分类效果,调用avg_score(data, label, sub_list, kernel='rbf', C=2, gamma=10, degree=3, decision_function_shape='ovr',
n_splits=10, split='loso', seed=7, average='macro')
data, label, sub_list, kernel, split, average: 同上
C, gamma, degree: svm参数
decision_function_shape: 可选'ovo'与'ovr',推荐'ovr'
n_splits: k-fold验证的fold数
seed: k-fold划分的随机数种子
6.main.py
将上述文件与main.py放在同一目录下,直接运行main.py:
a. 从同目录下的CASME II文件夹中提取数据,文件夹的结构为CASME II/subject_name/ep_name/image
b. 程序所需文件在CASME II文件夹下,分别为CASME2.xlsx, shape_predictor_68_face_landmarks.dat, UniformLBP8.txt
c. 程序将CASME II中第一个表情的第一张图片作为标准面部图像,对所有图像序列进行裁剪与配准,得到192*192的图像序列
d. 将配准后的结果存入result/lwm_result.npy中
e. 随后程序对图像序列进行动作放大,其中放大频率区间为[0.2Hz, 2.4Hz], 放大因子为8
f. 随后对图像序列进行时序插值,目标帧数为10帧
g. 随后对图像序列提取LBP-TOP、3DHOG、HOOF特征,存放于result/features/LBP_feature.npy (或HOG_feature.npy, HOOF_feature.npy)
h. 随后分别对特征使用svm进行分类,输出最好的分类结果与对应的svm参数
注意,main.py中参数并非最优,在实际使用时注意调整参数(包括TIM目标帧数、动作放大因子、特征提取分块数等)