diff --git a/matlab_version/AU_training/data extraction/extract_features_FERA_2011.m b/matlab_version/AU_training/data extraction/extract_features_FERA_2011.m index 5523778..6f82b27 100644 --- a/matlab_version/AU_training/data extraction/extract_features_FERA_2011.m +++ b/matlab_version/AU_training/data extraction/extract_features_FERA_2011.m @@ -9,10 +9,11 @@ end find_FERA2011; output_dir = 'E:\datasets\face_datasets_processed\fera2011'; +FERA2011_dir = [FERA2011_dir, '/../']; % Go two levels deep -fera_dirs = dir([FERA2011_dir, '/train*']); - +fera_dirs = dir([FERA2011_dir, '*']); +fera_dirs = fera_dirs(3:end); parfor f1=1:numel(fera_dirs) fera_dirs_level_2 = dir([FERA2011_dir, fera_dirs(f1).name]); diff --git a/matlab_version/AU_training/data extraction/extract_features_SEMAINE.m b/matlab_version/AU_training/data extraction/extract_features_SEMAINE.m index 71d6e7b..4eea5ab 100644 --- a/matlab_version/AU_training/data extraction/extract_features_SEMAINE.m +++ b/matlab_version/AU_training/data extraction/extract_features_SEMAINE.m @@ -10,7 +10,7 @@ find_SEMAINE; % Go two levels deep semaine_dirs = train_recs; -output_dir = 'E:\datasets\face_datasets_processed\semaine'; +output_dir = 'E:\datasets\face_datasets_processed\semaine\train'; parfor f1=1:numel(semaine_dirs) @@ -33,7 +33,7 @@ end %% semaine_dirs = devel_recs; -out_loc = [SEMAINE_dir, '../processed_data/devel/']; +output_dir = 'E:\datasets\face_datasets_processed\semaine\devel'; parfor f1=1:numel(semaine_dirs) diff --git a/matlab_version/AU_training/data extraction/find_Bosphorus.m b/matlab_version/AU_training/data extraction/find_Bosphorus.m index 86d6bbd..4ef82df 100644 --- a/matlab_version/AU_training/data extraction/find_Bosphorus.m +++ b/matlab_version/AU_training/data extraction/find_Bosphorus.m @@ -6,7 +6,7 @@ else fprintf('Bosphorus dataset location not found (or not defined)\n'); end -hog_data_dir = ['D:\Datasets\face_datasets']; +hog_data_dir = ['E:\Datasets\face_datasets_processed\bosph']; all_recs = dir([Bosphorus_dir, '/BosphorusDB/BosphorusDB/bs*']); all_recs_mat = cat(1, all_recs.name); diff --git a/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic.m b/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic.m index 1e56805..ecd47de 100644 --- a/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic.m +++ b/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic.m @@ -1,5 +1,5 @@ function [data_train, labels_train, data_devel, labels_devel, raw_devel, PC, means_norm, stds_norm, valid_ids_test] = ... - Prepare_HOG_AU_data_generic(train_users, devel_users, au_train, bp4d_dir, hog_data_dir, pca_file) + Prepare_HOG_AU_data_generic(train_users, devel_users, au_train, bp4d_dir, features_dir) %% addpath(genpath('../../data extraction/')); @@ -11,9 +11,9 @@ labels_other = cat(1, labels_other{:}); % First extracting the labels [ labels_train, valid_ids_train, vid_ids_train ] = extract_BP4D_labels(bp4d_dir, train_users, au_train); -train_geom_data = Read_geom_files(train_users, hog_data_dir); +train_geom_data = Read_geom_files(train_users, features_dir); % Reading in the HOG data (of only relevant frames) -[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files(train_users, hog_data_dir); +[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files(train_users, features_dir); train_appearance_data = cat(2, train_appearance_data, train_geom_data); % Subsample the data to make training quicker @@ -67,8 +67,8 @@ vid_ids_train_string = vid_ids_train_string(reduced_inds,:); [ labels_devel, valid_ids_devel, vid_ids_devel ] = extract_BP4D_labels(bp4d_dir, devel_users, au_train); % Reading in the HOG data (of only relevant frames) -devel_geom_data = Read_geom_files(devel_users, hog_data_dir); -[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files(devel_users, hog_data_dir); +devel_geom_data = Read_geom_files(devel_users, features_dir); +[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files(devel_users, features_dir); devel_appearance_data = cat(2, devel_appearance_data, devel_geom_data); labels_devel = cat(1, labels_devel{:}); diff --git a/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity.m b/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity.m index dae8fba..6ea5891 100644 --- a/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity.m +++ b/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity.m @@ -1,5 +1,5 @@ function [data_train, labels_train, vid_ids_train_string, data_devel, labels_devel, vid_ids_devel_string, raw_devel, PC, means_norm, stds_norm, success_devel] = ... - Prepare_HOG_AU_data_generic_intensity(train_users, devel_users, au_train, bp4d_dir, hog_data_dir) + Prepare_HOG_AU_data_generic_intensity(train_users, devel_users, au_train, bp4d_dir, features_dir) %% addpath(genpath('../data extraction/')); @@ -10,10 +10,10 @@ au_other = setdiff([6, 10, 12, 14, 17], au_train); [ labels_other, ~, ~ ] = extract_BP4D_labels_intensity(bp4d_dir, train_users, au_other); labels_other = cat(1, labels_other{:}); -train_geom_data = Read_geom_files(train_users, hog_data_dir); +train_geom_data = Read_geom_files(train_users, features_dir); % Reading in the HOG data (of only relevant frames) -[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files(train_users, hog_data_dir); +[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files(train_users, features_dir); train_appearance_data = cat(2, train_appearance_data, train_geom_data); % Subsample the data to make training quicker @@ -65,9 +65,9 @@ end % First extracting the labels [ labels_devel, valid_ids_devel, vid_ids_devel ] = extract_BP4D_labels_intensity(bp4d_dir, devel_users, au_train); -devel_geom_data = Read_geom_files(devel_users, hog_data_dir); +devel_geom_data = Read_geom_files(devel_users, features_dir); % Reading in the HOG data (of only relevant frames) -[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files(devel_users, hog_data_dir); +[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files(devel_users, features_dir); devel_appearance_data = cat(2, devel_appearance_data, devel_geom_data); valid_ids_devel = logical(cat(1, valid_ids_devel{:})); diff --git a/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity_dynamic.m b/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity_dynamic.m index 8dc4ca7..c2eaa91 100644 --- a/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity_dynamic.m +++ b/matlab_version/AU_training/experiments/BP4D/Prepare_HOG_AU_data_generic_intensity_dynamic.m @@ -1,5 +1,5 @@ function [data_train, labels_train, vid_ids_train_string, data_devel, labels_devel, vid_ids_devel_string, raw_devel, PC, means_norm, stds_norm, success_devel] = ... - Prepare_HOG_AU_data_generic_intensity_dynamic(train_users, devel_users, au_train, bp4d_dir, hog_data_dir) + Prepare_HOG_AU_data_generic_intensity_dynamic(train_users, devel_users, au_train, bp4d_dir, features_dir) %% addpath(genpath('../data extraction/')); @@ -10,10 +10,10 @@ au_other = setdiff([6, 10, 12, 14, 17], au_train); [ labels_other, ~, ~ ] = extract_BP4D_labels_intensity(bp4d_dir, train_users, au_other); labels_other = cat(1, labels_other{:}); -train_geom_data = Read_geom_files_dynamic(train_users, hog_data_dir); +train_geom_data = Read_geom_files_dynamic(train_users, features_dir); % Reading in the HOG data (of only relevant frames) -[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files_dynamic_pp(train_users, hog_data_dir); +[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files_dynamic_pp(train_users, features_dir); train_appearance_data = cat(2, train_appearance_data, train_geom_data); % Subsample the data to make training quicker @@ -65,9 +65,9 @@ end % First extracting the labels [ labels_devel, valid_ids_devel, vid_ids_devel ] = extract_BP4D_labels_intensity(bp4d_dir, devel_users, au_train); -devel_geom_data = Read_geom_files_dynamic(devel_users, hog_data_dir); +devel_geom_data = Read_geom_files_dynamic(devel_users, features_dir); % Reading in the HOG data (of only relevant frames) -[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files_dynamic_pp(devel_users, hog_data_dir); +[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files_dynamic_pp(devel_users, features_dir); devel_appearance_data = cat(2, devel_appearance_data, devel_geom_data); valid_ids_devel = logical(cat(1, valid_ids_devel{:})); diff --git a/matlab_version/AU_training/experiments/BP4D/Read_geom_files.m b/matlab_version/AU_training/experiments/BP4D/Read_geom_files.m index 9e59c44..0a18698 100644 --- a/matlab_version/AU_training/experiments/BP4D/Read_geom_files.m +++ b/matlab_version/AU_training/experiments/BP4D/Read_geom_files.m @@ -7,10 +7,10 @@ function [geom_data, valid_ids] = Read_geom_files(users, hog_data_dir) for i=1:numel(users) - geom_files = dir([hog_data_dir, '/train/', users{i} '*.params.txt']); + geom_files = dir([hog_data_dir, '/train/', users{i} '*.csv']); geom_dir = [hog_data_dir, '/train/']; if(isempty(geom_files)) - geom_files = dir([hog_data_dir, '/devel/', users{i} '*.params.txt']); + geom_files = dir([hog_data_dir, '/devel/', users{i} '*.csv']); geom_dir = [hog_data_dir, '/devel/']; end @@ -20,14 +20,25 @@ function [geom_data, valid_ids] = Read_geom_files(users, hog_data_dir) m_file = [geom_dir, '/' nm '.params.mat']; if(~exist(m_file, 'file')) + if(i == 1) + tab = readtable(geom_file); + column_names = tab.Properties.VariableNames; + valid_ind = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'valid')); + shape_inds = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'p_')); + end + res = dlmread(geom_file, ',', 1, 0); - save(m_file, 'res'); + + valid = res(:, valid_ind) > 0.7; + res = res(:, shape_inds); + + % Do not consider global parameters + res = res(:, 7:end); + + save(m_file, 'res', 'valid'); else load(m_file); end - - valid = res(:, 4); - res = res(:, 11:end); actual_locs = res * V'; res = cat(2, actual_locs, res); diff --git a/matlab_version/AU_training/experiments/BP4D/Read_geom_files_dynamic.m b/matlab_version/AU_training/experiments/BP4D/Read_geom_files_dynamic.m index 1ccb970..195260b 100644 --- a/matlab_version/AU_training/experiments/BP4D/Read_geom_files_dynamic.m +++ b/matlab_version/AU_training/experiments/BP4D/Read_geom_files_dynamic.m @@ -7,10 +7,10 @@ function [geom_data, valid_ids] = Read_geom_files_dynamic(users, hog_data_dir) for i=1:numel(users) - geom_files = dir([hog_data_dir, '/train/', users{i} '*.params.txt']); + geom_files = dir([hog_data_dir, '/train/', users{i} '*.csv']); geom_dir = [hog_data_dir, '/train/']; if(isempty(geom_files)) - geom_files = dir([hog_data_dir, '/devel/', users{i} '*.params.txt']); + geom_files = dir([hog_data_dir, '/devel/', users{i} '*.csv']); geom_dir = [hog_data_dir, '/devel/']; end @@ -22,15 +22,26 @@ function [geom_data, valid_ids] = Read_geom_files_dynamic(users, hog_data_dir) m_file = [geom_dir, '/' nm '.params.mat']; if(~exist(m_file, 'file')) + if(i == 1) + tab = readtable(geom_file); + column_names = tab.Properties.VariableNames; + valid_ind = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'valid')); + shape_inds = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'p_')); + end + res = dlmread(geom_file, ',', 1, 0); - save(m_file, 'res'); + + valid = res(:, valid_ind) > 0.7; + res = res(:, shape_inds); + + % Do not consider global parameters + res = res(:, 7:end); + + save(m_file, 'res', 'valid'); else load(m_file); end - valid = res(:, 4); - res = res(:, 11:end); - actual_locs = res * V'; res = cat(2, actual_locs, res); diff --git a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_dynamic.m b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_dynamic.m index 5cfd4d9..f0a384d 100644 --- a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_dynamic.m +++ b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_dynamic.m @@ -32,7 +32,7 @@ for a=1:numel(aus) rest_aus = setdiff(all_aus, au); % load the training and testing data for the current fold - [train_samples, train_labels, valid_samples, valid_labels, ~, PC, means, scaling] = Prepare_HOG_AU_data_generic_dynamic(train_recs, devel_recs, au, BP4D_dir, hog_data_dir_BP4D, pca_loc); + [train_samples, train_labels, valid_samples, valid_labels, ~, PC, means, scaling] = Prepare_HOG_AU_data_generic_dynamic(train_recs, devel_recs, au, BP4D_dir, hog_data_dir_BP4D); train_samples = sparse(train_samples); valid_samples = sparse(valid_samples); diff --git a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_static.m b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_static.m index 8590542..aea4b41 100644 --- a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_static.m +++ b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVM_static.m @@ -32,7 +32,7 @@ for a=1:numel(aus) rest_aus = setdiff(all_aus, au); % load the training and testing data for the current fold - [train_samples, train_labels, valid_samples, valid_labels, ~, PC, means, scaling] = Prepare_HOG_AU_data_generic(train_recs, devel_recs, au, BP4D_dir, hog_data_dir_BP4D, pca_loc); + [train_samples, train_labels, valid_samples, valid_labels, ~, PC, means, scaling] = Prepare_HOG_AU_data_generic(train_recs, devel_recs, au, BP4D_dir, hog_data_dir_BP4D); train_samples = sparse(train_samples); valid_samples = sparse(valid_samples); diff --git a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_dynamic_shift.m b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_dynamic_shift.m index 06aa882..c230aa6 100644 --- a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_dynamic_shift.m +++ b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_dynamic_shift.m @@ -35,7 +35,7 @@ for a=1:numel(aus) rest_aus = setdiff(all_aus, au); % load the training and testing data for the current fold - [train_samples, train_labels, ~, valid_samples, valid_labels, vid_ids_devel, ~, PC, means, scaling, success_devel] = Prepare_HOG_AU_data_generic_intensity(train_recs, devel_recs, au, BP4D_dir_int, hog_data_dir_BP4D, pca_loc); + [train_samples, train_labels, ~, valid_samples, valid_labels, vid_ids_devel, ~, PC, means, scaling, success_devel] = Prepare_HOG_AU_data_generic_intensity(train_recs, devel_recs, au, BP4D_dir_int, hog_data_dir_BP4D); ignore = valid_labels == 9; diff --git a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_static_shift.m b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_static_shift.m index 06aa882..c230aa6 100644 --- a/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_static_shift.m +++ b/matlab_version/AU_training/experiments/BP4D/Script_HOG_SVR_static_shift.m @@ -35,7 +35,7 @@ for a=1:numel(aus) rest_aus = setdiff(all_aus, au); % load the training and testing data for the current fold - [train_samples, train_labels, ~, valid_samples, valid_labels, vid_ids_devel, ~, PC, means, scaling, success_devel] = Prepare_HOG_AU_data_generic_intensity(train_recs, devel_recs, au, BP4D_dir_int, hog_data_dir_BP4D, pca_loc); + [train_samples, train_labels, ~, valid_samples, valid_labels, vid_ids_devel, ~, PC, means, scaling, success_devel] = Prepare_HOG_AU_data_generic_intensity(train_recs, devel_recs, au, BP4D_dir_int, hog_data_dir_BP4D); ignore = valid_labels == 9; diff --git a/matlab_version/AU_training/experiments/BP4D/shared_defs.m b/matlab_version/AU_training/experiments/BP4D/shared_defs.m index 15871e7..fe6d995 100644 --- a/matlab_version/AU_training/experiments/BP4D/shared_defs.m +++ b/matlab_version/AU_training/experiments/BP4D/shared_defs.m @@ -28,7 +28,7 @@ else end if(exist('BP4D_dir', 'var')) - hog_data_dir = [BP4D_dir, '../processed_data/']; + hog_data_dir = 'E:\datasets\face_datasets_processed\bp4d/'; end train_recs = {'F001', 'F003', 'F005', 'F007', 'F009', 'F011', 'F013', 'F015', 'F017', 'F019', 'F021', 'F023', 'M001', 'M003', 'M005', 'M007', 'M009', 'M011', 'M013', 'M015' 'M017'}; diff --git a/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data.m b/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data.m index a8c4e83..5a70b0a 100644 --- a/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data.m +++ b/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data.m @@ -1,5 +1,5 @@ function [data_train, labels_train, data_devel, labels_devel, raw_devel, PC, means_norm, stds_norm, devel_ids, devel_success] = ... - Prepare_HOG_AU_data(train_users, devel_users, au_train, rest_aus, Bosphorus_dir, hog_data_dir) + Prepare_HOG_AU_data(train_users, devel_users, au_train, rest_aus, Bosphorus_dir, params_data_dir) %% addpath(genpath('../data extraction/')); @@ -10,9 +10,8 @@ addpath(genpath('../data extraction/')); [ labels_other, ~, ~ ] = extract_Bosphorus_labels(Bosphorus_dir, train_users, rest_aus); % Reading in the HOG data (of only relevant frames) -[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files(filenames, [hog_data_dir, '/hog_aligned_rigid_b']); +[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files(filenames, params_data_dir); -params_data_dir = [hog_data_dir, '/model_params_b']; [train_geom_data] = Read_geom_files(filenames, params_data_dir); % Subsample the data to rebalance it @@ -60,7 +59,7 @@ end [ labels_devel, valid_ids_devel, filenames_devel ] = extract_Bosphorus_labels(Bosphorus_dir, devel_users, au_train); % Reading in the HOG data (of only relevant frames) -[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files(filenames_devel, [hog_data_dir, '/hog_aligned_rigid_b']); +[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files(filenames_devel, params_data_dir); devel_success = valid_ids_devel_hog; devel_ids = vid_ids_devel_string; diff --git a/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data_dynamic.m b/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data_dynamic.m index a6a877e..83b824c 100644 --- a/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data_dynamic.m +++ b/matlab_version/AU_training/experiments/Bosphorus/Prepare_HOG_AU_data_dynamic.m @@ -1,5 +1,5 @@ function [data_train, labels_train, data_devel, labels_devel, raw_devel, PC, means_norm, stds_norm, devel_ids, devel_success] = ... - Prepare_HOG_AU_data_dynamic(train_users, devel_users, au_train, rest_aus, Bosphorus_dir, hog_data_dir) + Prepare_HOG_AU_data_dynamic(train_users, devel_users, au_train, rest_aus, Bosphorus_dir, params_data_dir) %% addpath(genpath('../data extraction/')); @@ -10,9 +10,8 @@ addpath(genpath('../data extraction/')); [ labels_other, ~, ~ ] = extract_Bosphorus_labels(Bosphorus_dir, train_users, rest_aus); % Reading in the HOG data (of only relevant frames) -[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files_dynamic(filenames, [hog_data_dir, '/hog_aligned_rigid_b']); +[train_appearance_data, valid_ids_train_hog, vid_ids_train_string] = Read_HOG_files_dynamic(filenames, params_data_dir); -params_data_dir = [hog_data_dir, '/model_params_b']; [train_geom_data] = Read_geom_files_dynamic(filenames, params_data_dir); if(numel(train_users) > 0) @@ -59,7 +58,7 @@ end [ labels_devel, valid_ids_devel, devel_files ] = extract_Bosphorus_labels(Bosphorus_dir, devel_users, au_train); % Reading in the HOG data (of only relevant frames) -[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files_dynamic(devel_files, [hog_data_dir, '/hog_aligned_rigid_b']); +[devel_appearance_data, valid_ids_devel_hog, vid_ids_devel_string] = Read_HOG_files_dynamic(devel_files, params_data_dir); devel_success = valid_ids_devel_hog; devel_ids = vid_ids_devel_string; diff --git a/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files.m b/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files.m index 902f203..a937cd6 100644 --- a/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files.m +++ b/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files.m @@ -6,14 +6,25 @@ function [geom_data, valid_ids] = Read_geom_files(users, model_param_data_dir) load('../../pca_generation/pdm_68_aligned_wild.mat'); for i=1:numel(users) - - geom_file = [model_param_data_dir, '/' users{i} '.txt']; - + + geom_file = [model_param_data_dir, '/' users{i} '.csv']; + + if(i == 1) + tab = readtable(geom_file); + column_names = tab.Properties.VariableNames; + valid_ind = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'confidence')); + shape_inds = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'p_')); + end + res = dlmread(geom_file, ',', 1, 0); - valid = res(:, 4); - res = res(:, 11:end); - + % Check the confidence of detection + valid = res(:, valid_ind) > 0.7; + res = res(:, shape_inds); + + % Do not consider global parameters + res = res(:, 7:end); + actual_locs = res * V'; res = cat(2, actual_locs, res); diff --git a/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files_dynamic.m b/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files_dynamic.m index d406283..a74ca5c 100644 --- a/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files_dynamic.m +++ b/matlab_version/AU_training/experiments/Bosphorus/Read_geom_files_dynamic.m @@ -9,17 +9,25 @@ function [geom_data, valid_ids] = Read_geom_files_dynamic(users, model_param_dat for i=1:numel(users) - geom_file = [model_param_data_dir, '/' users{i} '.txt']; - + geom_file = [model_param_data_dir, '/' users{i} '.csv']; + user_files = cat(1, user_files, str2num(users{i}(3:5))); + + if(i == 1) + tab = readtable(geom_file); + column_names = tab.Properties.VariableNames; + valid_ind = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'confidence')); + shape_inds = cellfun(@(x) ~isempty(x) && x==1, strfind(column_names, 'p_')); + end - m_file = [model_param_data_dir, '/', users{i}, '.mat']; - - res = dlmread(geom_file, ',', 1, 0); - - valid = res(:, 4); - res = res(:, 11:end); + res = dlmread(geom_file, ',', 1, 0); + valid = res(:, valid_ind) > 0.7; + res = res(:, shape_inds); + + % Do not consider global parameters + res = res(:, 7:end); + actual_locs = res * V'; res = cat(2, actual_locs, res); diff --git a/matlab_version/AU_training/experiments/Bosphorus/Script_HOG_SVR_train_dyn.m b/matlab_version/AU_training/experiments/Bosphorus/Script_HOG_SVR_train_dyn.m index 287a8e5..cc24471 100644 --- a/matlab_version/AU_training/experiments/Bosphorus/Script_HOG_SVR_train_dyn.m +++ b/matlab_version/AU_training/experiments/Bosphorus/Script_HOG_SVR_train_dyn.m @@ -51,9 +51,9 @@ for a=1:numel(aus) svs = bsxfun(@times, PC, 1./scaling') * w; - name = sprintf('models/AU_%d_dyn_intensity.dat', au); + name = sprintf('models/AU_%d_static_intensity.dat', au); - write_lin_dyn_svr(name, means, svs, b); + write_lin_dyn_svr(name, means, svs, b, 0); name = sprintf('results_Bosphorus_devel/AU_%d_dyn_intensity.mat', au); diff --git a/matlab_version/AU_training/pca_generation/createGenericFaceModel.m b/matlab_version/AU_training/pca_generation/createGenericFaceModel.m index 6811d1c..fb2487e 100644 --- a/matlab_version/AU_training/pca_generation/createGenericFaceModel.m +++ b/matlab_version/AU_training/pca_generation/createGenericFaceModel.m @@ -1,48 +1,93 @@ clear; +face_processed_dir = 'E:\datasets\face_datasets_processed'; -%% CK+, FERA2011 and UNBC datasets -hog_dir = 'D:\Datasets/face_datasets/hog_aligned_rigid/'; -hog_files = dir([hog_dir, '*.hog']); - +%% CK+ +hog_dir = [face_processed_dir, '/ck+/']; +hog_files = dir([hog_dir '*.hog']); [appearance_data, valid_inds, vid_ids_train] = Read_HOG_files_small(hog_files, hog_dir); appearance_data = appearance_data(valid_inds,:); vid_ids_train = vid_ids_train(valid_inds,:); +%% Bosphorus +hog_dir = [face_processed_dir, '/bosph/']; +hog_files = dir([hog_dir '*.hog']); + +% Remove non-frontal +frontal = true(size(hog_files)); +for i = 1:numel(frontal) + if(~isempty(strfind(hog_files(i).name, 'YR')) || ~isempty(strfind(hog_files(i).name, 'PR'))|| ~isempty(strfind(hog_files(i).name, 'CR'))) + frontal(i) = false; + end +end + +hog_files = hog_files(frontal); + +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); + +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); + +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); + +%% FERA2011 +hog_dir = [face_processed_dir, '/fera2011/']; +hog_files = dir([hog_dir '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); + + appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); + +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); + +%% UNBC +hog_dir = [face_processed_dir, '/unbc/']; +hog_files = dir([hog_dir '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); + +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); + +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); + + + %% DISFA -hog_dir = 'D:\Datasets\DISFA\hog_aligned_rigid/'; -hog_files = dir([hog_dir, '*.hog']); +hog_dir = [face_processed_dir, '/disfa/']; +hog_files = dir([hog_dir '*.hog']); -[appearance_data_disfa, valid_inds, vid_ids_train_disfa] = Read_HOG_files_small(hog_files, hog_dir, 100); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); -appearance_data_disfa = appearance_data_disfa(valid_inds,:); -vid_ids_train_disfa = vid_ids_train_disfa(valid_inds,:); +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); -appearance_data = cat(1,appearance_data, appearance_data_disfa); -vid_ids_train = cat(1,vid_ids_train, vid_ids_train_disfa); +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); -%% BP4D -hog_dir = 'D:\Datasets\FERA_2015\bp4d\processed_data/train/'; -hog_files = dir([hog_dir, '*.hog']); +%% BP4D train +hog_dir = [face_processed_dir, '/bp4d/train/']; +hog_files = dir([hog_dir '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); -[appearance_data_bp, valid_inds, vid_ids_train_bp] = Read_HOG_files_small(hog_files, hog_dir, 50); +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); -appearance_data_bp = appearance_data_bp(valid_inds,:); -vid_ids_train_bp = vid_ids_train_bp(valid_inds,:); +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); -appearance_data = cat(1,appearance_data, appearance_data_bp); -vid_ids_train = cat(1,vid_ids_train, vid_ids_train_bp); +%% SEMAINE train +hog_dir = [face_processed_dir, '/semaine/train/']; +hog_files = dir([hog_dir '*.hog']); -%% SEMAINE -hog_dir = 'D:\Datasets\FERA_2015\semaine\processed_data\train\'; -hog_files = dir([hog_dir, '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); -[appearance_data_semaine, valid_inds, vid_ids_train_semaine] = Read_HOG_files_small(hog_files, hog_dir, 300); +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); -appearance_data_semaine = appearance_data_semaine(valid_inds,:); -vid_ids_train_semaine = vid_ids_train_semaine(valid_inds,:); - -appearance_data = cat(1,appearance_data, appearance_data_semaine); -vid_ids_train = cat(1,vid_ids_train, vid_ids_train_semaine); +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); %% means_norm = mean(appearance_data); diff --git a/matlab_version/AU_training/pca_generation/createSubFaceModels.m b/matlab_version/AU_training/pca_generation/createSubFaceModels.m index 38f0f30..7956c38 100644 --- a/matlab_version/AU_training/pca_generation/createSubFaceModels.m +++ b/matlab_version/AU_training/pca_generation/createSubFaceModels.m @@ -1,60 +1,93 @@ clear; +face_processed_dir = 'E:\datasets\face_datasets_processed'; -%% CK+, FERA2011, and UNBC datasets -hog_dir = 'D:\Datasets/face_datasets/hog_aligned_rigid/'; -hog_files = dir([hog_dir, '*.hog']); - +%% CK+ +hog_dir = [face_processed_dir, '/ck+/']; +hog_files = dir([hog_dir '*.hog']); [appearance_data, valid_inds, vid_ids_train] = Read_HOG_files_small(hog_files, hog_dir); appearance_data = appearance_data(valid_inds,:); vid_ids_train = vid_ids_train(valid_inds,:); -%% Bosphorus dataset -hog_dir = 'D:\Datasets/face_datasets/hog_aligned_rigid_b/'; -hog_files = dir([hog_dir, '*.hog']); +%% Bosphorus +hog_dir = [face_processed_dir, '/bosph/']; +hog_files = dir([hog_dir '*.hog']); -[appearance_data_bosph, valid_inds, vid_ids_train_bosph] = Read_HOG_files_small(hog_files, hog_dir); +% Remove non-frontal +frontal = true(size(hog_files)); +for i = 1:numel(frontal) + if(~isempty(strfind(hog_files(i).name, 'YR')) || ~isempty(strfind(hog_files(i).name, 'PR'))|| ~isempty(strfind(hog_files(i).name, 'CR'))) + frontal(i) = false; + end +end + +hog_files = hog_files(frontal); + +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); + +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); + +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); + +%% FERA2011 +hog_dir = [face_processed_dir, '/fera2011/']; +hog_files = dir([hog_dir '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); + + appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); + +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); + +%% UNBC +hog_dir = [face_processed_dir, '/unbc/']; +hog_files = dir([hog_dir '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); + +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); + +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); -appearance_data_bosph = appearance_data_bosph(valid_inds,:); -vid_ids_train_bosph = vid_ids_train_bosph(valid_inds,:); -appearance_data = cat(1,appearance_data, appearance_data_bosph); -vid_ids_train = cat(1,vid_ids_train, vid_ids_train_bosph); %% DISFA -hog_dir = 'D:\Datasets\DISFA\hog_aligned_rigid/'; -hog_files = dir([hog_dir, '*.hog']); +hog_dir = [face_processed_dir, '/disfa/']; +hog_files = dir([hog_dir '*.hog']); -[appearance_data_disfa, valid_inds, vid_ids_train_disfa] = Read_HOG_files_small(hog_files, hog_dir, 100); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); -appearance_data_disfa = appearance_data_disfa(valid_inds,:); -vid_ids_train_disfa = vid_ids_train_disfa(valid_inds,:); +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); -appearance_data = cat(1,appearance_data, appearance_data_disfa); -vid_ids_train = cat(1,vid_ids_train, vid_ids_train_disfa); +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); -%% BP4D -hog_dir = 'D:\Datasets\FERA_2015\bp4d\processed_data/train/'; -hog_files = dir([hog_dir, '*.hog']); +%% BP4D train +hog_dir = [face_processed_dir, '/bp4d/train/']; +hog_files = dir([hog_dir '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); -[appearance_data_bp, valid_inds, vid_ids_train_bp] = Read_HOG_files_small(hog_files, hog_dir, 50); +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); -appearance_data_bp = appearance_data_bp(valid_inds,:); -vid_ids_train_bp = vid_ids_train_bp(valid_inds,:); +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); -appearance_data = cat(1,appearance_data, appearance_data_bp); -vid_ids_train = cat(1,vid_ids_train, vid_ids_train_bp); +%% SEMAINE train +hog_dir = [face_processed_dir, '/semaine/train/']; +hog_files = dir([hog_dir '*.hog']); -%% SEMAINE -hog_dir = 'D:\Datasets\FERA_2015\semaine\processed_data\train\'; -hog_files = dir([hog_dir, '*.hog']); +[appearance_data_tmp, valid_inds_tmp, vid_ids_train_tmp] = Read_HOG_files_small(hog_files, hog_dir); -[appearance_data_semaine, valid_inds, vid_ids_train_semaine] = Read_HOG_files_small(hog_files, hog_dir, 300); +appearance_data_tmp = appearance_data_tmp(valid_inds_tmp,:); +vid_ids_train_tmp = vid_ids_train_tmp(valid_inds_tmp,:); -appearance_data_semaine = appearance_data_semaine(valid_inds,:); -vid_ids_train_semaine = vid_ids_train_semaine(valid_inds,:); - -appearance_data = cat(1,appearance_data, appearance_data_semaine); -vid_ids_train = cat(1,vid_ids_train, vid_ids_train_semaine); +appearance_data = cat(1,appearance_data, appearance_data_tmp); +vid_ids_train = cat(1,vid_ids_train, vid_ids_train_tmp); %% means_norm = mean(appearance_data); diff --git a/matlab_version/AU_training/pca_generation/generic_face_lower.mat b/matlab_version/AU_training/pca_generation/generic_face_lower.mat index 1cb1729..5b5cabf 100644 Binary files a/matlab_version/AU_training/pca_generation/generic_face_lower.mat and b/matlab_version/AU_training/pca_generation/generic_face_lower.mat differ diff --git a/matlab_version/AU_training/pca_generation/generic_face_rigid.mat b/matlab_version/AU_training/pca_generation/generic_face_rigid.mat index 7107e84..2f17b5c 100644 Binary files a/matlab_version/AU_training/pca_generation/generic_face_rigid.mat and b/matlab_version/AU_training/pca_generation/generic_face_rigid.mat differ diff --git a/matlab_version/AU_training/pca_generation/generic_face_upper.mat b/matlab_version/AU_training/pca_generation/generic_face_upper.mat index 3c9652f..d0c77bf 100644 Binary files a/matlab_version/AU_training/pca_generation/generic_face_upper.mat and b/matlab_version/AU_training/pca_generation/generic_face_upper.mat differ