open source pkg v1

This commit is contained in:
Vijay Yadev
2020-08-04 19:12:31 -04:00
parent bef213dba9
commit c389fc2c47
3708 changed files with 1624220 additions and 1 deletions

View File

@@ -0,0 +1,106 @@
% collect the training data annotations (from the menpo challenge)
clear
train_data_loc = 'D:\Datasets\menpo/';
dataset_locs = {[train_data_loc, '/train/'];};
% Mapping all the points (profile and semi-frontal) to the same 68 point
% annotation scheme
left_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,32; 23,39; 24,38; 25,37; 26,42; 27,41;
28,52; 29,51; 30,50; 31,49; 32,60; 33,59; 34,58;
35,63; 36,62; 37,61; 38,68; 39,67];
right_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,36; 23,44; 24,45; 25,46; 26,47; 27,48;
28,52; 29,53; 30,54; 31,55; 32,56; 33,57; 34,58;
35,63; 36,64; 37,65; 38,66; 39,67];
all_pts = [];
mirr_pts = [];
add_flip = true;
mirror_inds = [1,17;2,16;3,15;4,14;5,13;6,12;7,11;8,10;18,27;19,26;20,25;21,24;22,23;...
32,36;33,35;37,46;38,45;39,44;40,43;41,48;42,47;49,55;50,54;51,53;60,56;59,57;...
61,65;62,64;68,66];
for i=1:numel(dataset_locs)
landmarkLabels = dir([dataset_locs{i} '\*.pts']);
landmarkImgs = dir([dataset_locs{i} '\*.jpg']);
for p=1:numel(landmarkLabels)
landmarks = importdata([dataset_locs{i}, landmarkLabels(p).name], ' ', 3);
img = imread([dataset_locs{i}, landmarkImgs(p).name]);
landmarks = landmarks.data;
landmark_labels = -ones(68,2);
if(size(landmarks,1) == 39)
% Determine if the points are clock-wise or counter clock-wise
% Clock-wise points are facing left, counter-clock-wise right
sum = 0;
for k=1:11
step = (landmarks(k+1,1) - landmarks(k,1)) * (landmarks(k+1,2) + landmarks(k,2));
sum = sum + step;
end
if(sum > 0)
% First need to resample the face outline as there are 9
% points in the near-frontal and 10 points in profile for
% the outline of the face
outline = iterate_piece_wise(landmarks(1:10,:), 9);
brow = iterate_piece_wise(landmarks(13:16,:), 5);
landmark_labels(1:9,:) = outline;
landmark_labels(18:22,:) = brow;
landmark_labels(left_to_frontal_map(:,2),:) = landmarks(left_to_frontal_map(:,1),:);
else
outline = iterate_piece_wise(landmarks(10:-1:1,:), 9);
brow = iterate_piece_wise(landmarks(16:-1:13,:), 5);
landmark_labels(9:17,:) = outline;
landmark_labels(23:27,:) = brow;
landmark_labels(right_to_frontal_map(:,2),:) = landmarks(right_to_frontal_map(:,1),:);
end
else
landmark_labels = landmarks;
end
all_pts = cat(3, all_pts, landmark_labels);
if(add_flip)
mirror_lbls = landmark_labels;
mirror_lbls(mirror_lbls ==-1) = nan;
mirror_lbls(:,1) = -mirror_lbls(:,1);
tmp1 = mirror_lbls(mirror_inds(:,1),:);
tmp2 = mirror_lbls(mirror_inds(:,2),:);
mirror_lbls(mirror_inds(:,2),:) = tmp1;
mirror_lbls(mirror_inds(:,1),:) = tmp2;
mirror_lbls(isnan(mirror_lbls)) = -1;
mirr_pts = cat(3, mirr_pts, mirror_lbls);
end
end
end
all_pts_old = all_pts;
%%
xs = squeeze(all_pts(:,1,:));
ys = squeeze(all_pts(:,2,:));
all_pts = cat(2,xs,ys)';
save('menpo_68_pts', 'all_pts');
%%
all_pts = all_pts_old ;
all_pts = cat(3, all_pts, mirr_pts);
xs = squeeze(all_pts(:,1,:));
ys = squeeze(all_pts(:,2,:));
all_pts = cat(2,xs,ys)';
save('menpo_68_pts_flip', 'all_pts');

View File

@@ -0,0 +1,74 @@
% collect the training data annotations (from the menpo challenge)
clear
train_data_loc = 'D:\Datasets\menpo/';
dataset_locs = {[train_data_loc, '/valid/'];};
left_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,32; 23,39; 24,38; 25,37; 26,42; 27,41;
28,52; 29,51; 30,50; 31,49; 32,60; 33,59; 34,58;
35,63; 36,62; 37,61; 38,68; 39,67];
right_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,36; 23,44; 24,45; 25,46; 26,47; 27,48;
28,52; 29,53; 30,54; 31,55; 32,56; 33,57; 34,58;
35,63; 36,64; 37,65; 38,66; 39,67];
all_pts = [];
for i=1:numel(dataset_locs)
landmarkLabels = dir([dataset_locs{i} '\*.pts']);
landmarkImgs = dir([dataset_locs{i} '\*.jpg']);
for p=1:numel(landmarkLabels)
landmarks = importdata([dataset_locs{i}, landmarkLabels(p).name], ' ', 3);
img = imread([dataset_locs{i}, landmarkImgs(p).name]);
landmarks = landmarks.data;
landmark_labels = -ones(68,2);
if(size(landmarks,1) == 39)
% Determine if the points are clock-wise or counter clock-wise
% Clock-wise points are facing left, counter-clock-wise right
sum = 0;
for k=1:11
step = (landmarks(k+1,1) - landmarks(k,1)) * (landmarks(k+1,2) + landmarks(k,2));
sum = sum + step;
end
if(sum > 0)
% First need to resample the face outline as there are 9
% points in the near-frontal and 10 points in profile for
% the outline of the face
outline = iterate_piece_wise(landmarks(1:10,:), 9);
brow = iterate_piece_wise(landmarks(13:16,:), 5);
landmark_labels(1:9,:) = outline;
landmark_labels(18:22,:) = brow;
landmark_labels(left_to_frontal_map(:,2),:) = landmarks(left_to_frontal_map(:,1),:);
else
outline = iterate_piece_wise(landmarks(10:-1:1,:), 9);
brow = iterate_piece_wise(landmarks(16:-1:13,:), 5);
landmark_labels(9:17,:) = outline;
landmark_labels(23:27,:) = brow;
landmark_labels(right_to_frontal_map(:,2),:) = landmarks(right_to_frontal_map(:,1),:);
end
else
landmark_labels = landmarks;
end
all_pts = cat(3, all_pts, landmark_labels);
end
end
%%
xs = squeeze(all_pts(:,1,:));
ys = squeeze(all_pts(:,2,:));
all_pts = cat(2,xs,ys)';
save('menpo_68_pts_valid', 'all_pts');

View File

@@ -0,0 +1,101 @@
clear;
addpath('../PDM_helpers/');
Reconstruct_Torresani;
%% Create the PDM using PCA, from the recovered 3D data
clear
load('Torr_menpo_wild.mat');
% need to still perform procrustes though
x = P3(1:end/3,:);
y = P3(end/3+1:2*end/3,:);
% To make sure that PDM faces the right way (positive Z towards the screen)
z = P3(2*end/3+1:end,:);
[ normX, normY, normZ, meanShape, Transform ] = ProcrustesAnalysis3D(x,y,z, true);
observations = [normX normY normZ];
[princComp, score, eigenVals] = princomp(observations,'econ');
% Keeping most variation
totalSum = sum(eigenVals);
count = numel(eigenVals);
for i=1:numel(eigenVals)
if ((sum(eigenVals(1:i)) / totalSum) >= 0.999)
count = i;
break;
end
end
V = princComp(:,1:count);
E = eigenVals(1:count);
M = meanShape(:);
% Now normalise it to have actual world scale
lPupil = [(M(37) + M(40))/2; (M(37 + 68) + M(40 + 68))/2];
rPupil = [(M(43) + M(46))/2; (M(43 + 68) + M(46 + 68))/2];
dist = norm(lPupil - rPupil,2);
% average human interocular distance is 65mm
scaling = 65 / dist;
% normalise the mean values as well
M(1:end/3) = M(1:end/3) - mean(M(1:end/3));
M(end/3+1:2*end/3) = M(end/3+1:2*end/3) - mean(M(end/3+1:2*end/3));
M(2*end/3+1:end) = M(2*end/3+1:end) - mean(M(2*end/3+1:end));
M = M * scaling;
E = E * scaling .^ 2;
% orthonormalise V
scalingV = sqrt(sum(V.^2));
V = V ./ repmat(scalingV, numel(M),1);
E = E .* (scalingV') .^ 2;
%% Also align the model to a Multi-PIE one for accurate head orientation
% also align the mean shape model (an aligned 68 point PDM from Multi-PIE dataset)
M_wild = M;
load('pdm_68_multi_pie.mat', 'M');
M_align = M;
n_points = numel(M)/3;
M_wild = reshape(M_wild, n_points, 3);
% work out the translation and rotation needed
[ R, T ] = AlignShapesKabsch(M_wild, reshape(M_align, n_points,3));
% Transform the wild one to be in the same reference as the Multi-PIE one
M_aligned = (R * M_wild')';
M_aligned(:,1) = M_aligned(:,1) + T(1);
M_aligned(:,2) = M_aligned(:,2) + T(2);
M_aligned(:,3) = M_aligned(:,3) + T(3);
M_aligned = M_aligned(:);
V_aligned = V;
% need to align the principal components as well
for i=1:size(V,2)
V_aligned_pie_curr = (R * reshape(V(:,i), n_points, 3)')';
V_aligned(:,i) = V_aligned_pie_curr(:);
end
V = V_aligned;
M = M_aligned;
save('pdm_68_aligned_menpo.mat', 'E', 'M', 'V');
writePDM(V, E, M, 'pdm_68_aligned_menpo.txt');
% also save this to model location
if(exist('../../models/pdm/', 'file'))
save('../../models/pdm/pdm_68_aligned_menpo.mat', 'E', 'M', 'V');
end

View File

@@ -0,0 +1,48 @@
clear
load('Noise_PDM/noise_0.2.mat');
addpath('../PDM_helpers');
xs_orig = data_orig(:,1:end/2);
ys_orig = data_orig(:,end/2+1:end);
xs_noise = data_noise(:,1:end/2);
ys_noise = data_noise(:,end/2+1:end);
num_imgs = size(xs_noise, 1);
errs_orig = zeros(1,num_imgs);
errs_noise = zeros(1,num_imgs);
probs_orig = zeros(1,num_imgs);
probs_noise = zeros(1,num_imgs);
pdmLoc = ['pdm_68_aligned_menpo_v5.mat'];
load(pdmLoc);
pdm = struct;
pdm.M = double(M);
pdm.E = double(E);
pdm.V = double(V);
for i=1:num_imgs
labels_curr_orig = cat(2, xs_orig(i,:)', ys_orig(i,:)') * 100;
labels_curr_orig(labels_curr_orig==-200) = 0;
[ a, R, T, ~, l_params, err, shapeOrtho] = fit_PDM_ortho_proj_to_2D(pdm.M, pdm.E, pdm.V, labels_curr_orig);
errs_orig(i) = err/a;
probs_orig(i) = sum(log(exp((-l_params.^2)./(pdm.E.^2))./(sqrt(2*pi.*pdm.E))));
labels_curr_noise = cat(2, xs_noise(i,:)', ys_noise(i,:)') * 100;
labels_curr_noise(labels_curr_orig==0) = 0;
[ a, R, T, ~, l_params, err, shapeOrtho] = fit_PDM_ortho_proj_to_2D(pdm.M, pdm.E, pdm.V, labels_curr_noise);
errs_noise(i) = err/a;
probs_noise(i) = sum(log(exp((-l_params.^2)./(pdm.E.^2))./(sqrt(2*pi.*pdm.E))));
end
% Current error is 2.1728 on the training data
% After cleanup and smaller steps it is 1.5388
% After training on it we have 1.1999
% V2 - 1.1392
% V3 - 1.1406

View File

@@ -0,0 +1,110 @@
% This is the final model used for 3D PDM, it contains both Menpo and 300W
% data
clear
% Combining 300W and Menpo data for PDM
load('menpo_68_pts_flip');
num_pts = size(all_pts,1)/2;
xs_m = all_pts(1:num_pts,:);
ys_m = all_pts(num_pts+1:end,:);
load('wild_68_pts');
num_pts = size(all_pts,1)/2;
xs_w= all_pts(1:num_pts,:);
ys_w = all_pts(num_pts+1:end,:);
all_pts = cat(1, xs_m, xs_w, ys_m, ys_w);
pdmLoc = ['../../models/pdm/pdm_68_aligned_wild.mat'];
load(pdmLoc);
% Before plugging into NRSFM, align the points in 2D
num_pts = size(all_pts,1)/2;
num_lmks = numel(M) / 3;
m = reshape(M, num_lmks, 3)';
width_model = max(m(1,:)) - min(m(1,:));
height_model = max(m(2,:)) - min(m(2,:));
for i=1:size(all_pts,1)/2
shape2D = cat(2, all_pts(i,:)', all_pts(i+num_pts,:)');
M_n = M;
if(sum(shape2D(:)==-1) > 0)
hidden = true;
% which indices to remove
inds_to_rem = shape2D(:,1) == -1 | shape2D(:,2) == -1;
shape2D = shape2D(~inds_to_rem,:);
inds_to_rem = repmat(inds_to_rem, 3, 1);
M_n = M(~inds_to_rem);
end
% To deal with really extreme cases of roll
M2D = cat(2, M_n(1:end/3), M_n(end/3+1:2*end/3));
[ A, t, error, alignedShape, s ] = AlignShapesWithScale(M2D, shape2D);
R = A/s;
% Transform the shape
shape2D(:,1) = shape2D(:,1) - t(1);
shape2D(:,2) = shape2D(:,2) - t(2);
shape2D = (R' * shape2D')/s;
shape2D = shape2D';
all_pts(i,all_pts(i,:)~=-1) = shape2D(:,1);
all_pts(i+num_pts,all_pts(i+num_pts,:)~=-1) = shape2D(:,2);
end
%%
% to_rem = randperm(round(0.1*num_pts)); % Remove 10% to break some symmetry
% all_pts([to_rem, to_rem+num_pts],:) = [];
num_pts = size(all_pts,1)/2;
left_ids = all_pts(1:num_pts,10) == -1;
right_ids = all_pts(1:num_pts,8) == -1;
frontal = true(num_pts,1);
frontal(left_ids | right_ids) = false;
%%
xs = all_pts(1:num_pts,:);
ys = all_pts(num_pts+1:end,:);
% Randperm the data, as a test
xs_f = xs(frontal,:);
ys_f = ys(frontal,:);
scatter(xs_f(:), -ys_f(:));
%% Perform NRSFM by Torresani
addpath('../nrsfm-em');
% (T is the number of frames, J is the number of points)
J = size(all_pts,2);
T = size(all_pts,1)/2;
use_lds = 0; % not modeling a linear dynamic system here
max_em_iter = 200;
tol = 0.001;
K = 30; % number of deformation shapes
MD = all_pts(1:end/2,:)==-1;
[P3, S_hat, V, RO, Tr, Z] = em_sfm(all_pts, MD, K, use_lds, tol, max_em_iter);
save('Torr_menpo_wild', 'P3', 'S_hat', 'V', 'RO', 'Tr', 'Z');
%%
% xs = P3(1:num_pts,:);
% ys = P3(num_pts+1:2*num_pts,:);
% zs = P3(2*num_pts+1:end,:);
% %
% xs_f = xs(left_ids,:);
% ys_f = ys(left_ids,:);
% zs_f = zs(left_ids,:);
% scatter3(xs_f(:), ys_f(:), zs_f(:));

View File

@@ -0,0 +1,97 @@
clear
load('menpo_68_pts_flip');
pdmLoc = ['../../models/pdm/pdm_68_aligned_wild.mat'];
load(pdmLoc);
% Before plugging into NRSFM, align the points in 2D
num_pts = size(all_pts,1)/2;
num_lmks = numel(M) / 3;
m = reshape(M, num_lmks, 3)';
width_model = max(m(1,:)) - min(m(1,:));
height_model = max(m(2,:)) - min(m(2,:));
for i=1:size(all_pts,1)/2
shape2D = cat(2, all_pts(i,:)', all_pts(i+num_pts,:)');
M_n = M;
if(sum(shape2D(:)==-1) > 0)
hidden = true;
% which indices to remove
inds_to_rem = shape2D(:,1) == -1 | shape2D(:,2) == -1;
shape2D = shape2D(~inds_to_rem,:);
inds_to_rem = repmat(inds_to_rem, 3, 1);
M_n = M(~inds_to_rem);
end
% To deal with really extreme cases of roll
M2D = cat(2, M_n(1:end/3), M_n(end/3+1:2*end/3));
[ A, t, error, alignedShape, s ] = AlignShapesWithScale(M2D, shape2D);
R = A/s;
% Transform the shape
shape2D(:,1) = shape2D(:,1) - t(1);
shape2D(:,2) = shape2D(:,2) - t(2);
shape2D = (R' * shape2D')/s;
shape2D = shape2D';
all_pts(i,all_pts(i,:)~=-1) = shape2D(:,1);
all_pts(i+num_pts,all_pts(i+num_pts,:)~=-1) = shape2D(:,2);
end
%%
% to_rem = randperm(round(0.1*num_pts)); % Remove 10% to break some symmetry
% all_pts([to_rem, to_rem+num_pts],:) = [];
num_pts = size(all_pts,1)/2;
left_ids = all_pts(1:num_pts,10) == -1;
right_ids = all_pts(1:num_pts,8) == -1;
frontal = true(num_pts,1);
frontal(left_ids | right_ids) = false;
%%
xs = all_pts(1:num_pts,:);
ys = all_pts(num_pts+1:end,:);
% Randperm the data, as a test
% xs_f = xs(frontal,:);
% ys_f = ys(frontal,:);
% scatter(xs_f(:), -ys_f(:));
%% Perform NRSFM by Torresani
addpath('../nrsfm-em');
% (T is the number of frames, J is the number of points)
J = size(all_pts,2);
T = size(all_pts,1)/2;
use_lds = 0; % not modeling a linear dynamic system here
max_em_iter = 200;
tol = 0.001;
K = 30; % number of deformation shapes
MD = all_pts(1:end/2,:)==-1;
[P3, S_hat, V, RO, Tr, Z] = em_sfm(all_pts, MD, K, use_lds, tol, max_em_iter);
save('Torr_menpo', 'P3', 'S_hat', 'V', 'RO', 'Tr', 'Z');
%%
% xs = P3(1:num_pts,:);
% ys = P3(num_pts+1:2*num_pts,:);
% zs = P3(2*num_pts+1:end,:);
% %
% xs_f = xs(left_ids,:);
% ys_f = ys(left_ids,:);
% zs_f = zs(left_ids,:);
% scatter3(xs_f(:), ys_f(:), zs_f(:));

View File

@@ -0,0 +1,163 @@
function [P3, S_bar, V, RO, Tr, Z, sigma_sq, phi, Q, mu0, sigma0] = em_sfm(P, MD, K, use_lds, tol, max_em_iter)
% Non-Rigid Structure From Motion with Gaussian/LDS Deformation Model
% Copyright (c) by Lorenzo Torresani, Stanford University
%
% Based on the following paper:
%
% Lorenzo Torresani, Aaron Hertzmann and Christoph Bregler,
% Learning Non-Rigid 3D Shape from 2D Motion, NIPS 16, 2003
% http://cs.stanford.edu/~ltorresa/projects/learning-nr-shape/
%
% Please refer to this publication if you use this program for
% research or for technical applications.
%
%
% INPUT:
%
% P - (2*T) x J tracking matrix: P([t t+T],:) contains the 2D projections of the J points at time t
% MD - T x J missing data binary matrix: MD(t, j)=1 if no valid data is available for point j at time t, 0 otherwise
% K - number of deformation basis
% use_lds - set to 1 to model deformations using a linear dynamical system; set to 0 otherwise
% tol - termination tolerance (proportional change in likelihood)
% max_em_iter - maximum number of EM iterations
%
%
% OUTPUT:
%
% P3 - (3*T) x J 3D-motion matrix: ( P3([t t+T t+2*T],:) contains the 3D coordinates of the J points at time t )
% S_bar - shape average: 3 x J matrix
% V - deformation shapes: (3*K) x J matrix ( V((n-1)*3+[1:3],:) contains the n-th deformation basis )
% RO - rotation: cell array ( RO{t} gives the rotation matrix at time t )
% Tr - translation: T x 2 matrix
% Z - deformation weights: T x K matrix
% sigma_sq - variance of the noise in feature position
% phi - LDS transition matrix
% Q - LDS state noise matrix
% mu0 - initial state mean
% sigma0 - initial state variance
if mod(size(P,1), 1) ~= 0,
fprintf('Error: size(P) must be (2*T)xJ\n');
return;
end
if (size(P,1)/2 ~= size(MD,1)) | (size(P,2) ~= size(MD,2))
fprintf('Error: Size incompatibility between P and MD\n');
return;
end
if mod(K, 1) ~= 0,
fprintf('Error: K must be an integer value\n');
return;
end
[T, J] = size(MD);
r = 3*(K + 1); % motion rank
P_hat = P; % if any of the points are missing, P_hat will be updated during the M-step
% uses rank 3 factorization to get a first initialization for rotation and S_bar
[R_init, Trvect, S_bar] = rigidfac(P_hat, MD);
Tr(:,1) = Trvect(1:T);
Tr(:,2) = Trvect(T+1:2*T);
R = zeros(2*T, 3);
% enforces rotation constraints
for t = 1:T,
Ru = R_init(t,:);
Rv = R_init(T+t,:);
Rz = cross(Ru,Rv); if det([Ru;Rv;Rz])<0, Rz = -Rz; end;
RO_approx = apprRot([Ru;Rv;Rz]);
RO{t} = RO_approx;
R(t,:) = RO_approx(1,:);
R(t+T,:) = RO_approx(2,:);
end;
% given the initial estimates of rotation, translation and shape average, it initializes
% deformation shapes and weights through LSQ minimization of the reprojection error
[V, Z] = init_SB(P_hat, Tr, R, S_bar, K);
% initializes sigma_sq
E_zz_init = cov(Z);
E_zz_init = repmat(E_zz_init, T, 1);
sigma_sq = mstep_update_noisevar(P_hat, S_bar, V, Z', E_zz_init, RO, Tr);
if use_lds,
[phi, mu0, sigma0, Q] = init_lds(P_hat, S_bar, V, R, Tr, sigma_sq);
else
phi = [];
mu0 = [];
sigma0 = [];
Q = [];
end
loglik = 0;
% annealing_const = 60;
annealing_const = 100;
max_anneal_iter = round(max_em_iter/2);
for em_iter=1:max_em_iter,
if use_lds,
[E_z, E_zz, y, M, xt_n, Pt_n, Ptt1_n, xt_t1, Pt_t1] = estep_lds_compute_Z_distr(P_hat, S_bar, V, R, Tr, phi, mu0, sigma0, Q, sigma_sq);
[phi, Q, sigma_sq, mu0, sigma0] = mstep_lds_update(y, M, xt_n, Pt_n, Ptt1_n);
else
% computes the hidden variables distributions
[E_z, E_zz] = estep_compute_Z_distr(P_hat, S_bar, V, R, Tr, sigma_sq); % (Eq 17-18)
end
Z = E_z';
% updates shape basis
[S_bar, V] = mstep_update_shapebasis(P_hat, E_z, E_zz, R, Tr, S_bar, V); % (Eq 21)
% fills in missing points
if sum(MD(:))>0,
P_hat = mstep_update_missingdata(P_hat, MD, S_bar, V, E_z, RO, Tr); % (Eq 25)
end
% updates rotation
[RO, R] = mstep_update_rotation(P_hat, S_bar, V, E_z, E_zz, RO, Tr); % (Eq 24)
% updates translation
Tr = mstep_update_transl(P_hat, S_bar, V, E_z, RO); % (Eq 23)
if ~use_lds,
% updates noise variance
sigma_sq = mstep_update_noisevar(P_hat, S_bar, V, E_z, E_zz, RO, Tr); % (Eq 22)
if em_iter < max_anneal_iter,
sigma_sq = sigma_sq * (1 + annealing_const*(1 - em_iter/max_anneal_iter));
end
oldloglik = loglik;
% computes log likelihood
loglik = compute_log_lik(P_hat, S_bar, V, E_z, E_zz, RO, Tr, sigma_sq);
fprintf('LogLik(%d): %f\n', em_iter, loglik);
if (em_iter <= 2),
loglikbase = loglik;
elseif (loglik < oldloglik)
fprintf('Violation');
% keyboard;
elseif 0 & ((loglik-loglikbase)<(1 + tol)*(oldloglik-loglikbase)),
fprintf('\n');
break;
end
else
fprintf('Iteration %d/%d\n', em_iter, max_em_iter);
end
end
P3 = zeros(3*T, J);
for t = 1:T,
z_t = Z(t,:);
Rf = [R(t,:); R(t+T,:)];
S = S_bar;
for kk = 1:K,
S = S+z_t(kk)*V((kk-1)*3+[1:3],:);
end;
S = RO{t}*S;
P3([t t+T t+2*T], :) = S + [Tr(t, [1 2]) -mean(S(3,:))]'*ones(1,J);
end

View File

@@ -0,0 +1,373 @@
function [ a, R, T, T3D, params, error, shapeOrtho ] = fit_PDM_ortho_proj_to_2D( M, E, V, shape2D, f, cx, cy)
%FITPDMTO2DSHAPE Summary of this function goes here
% Detailed explanation goes here
params = zeros(size(E));
hidden = false;
% if some of the points are unavailable modify M, V, and shape2D (can
% later infer the actual shape from this)
if(sum(shape2D(:)==0) > 0)
hidden = true;
% which indices to remove
inds_to_rem = shape2D(:,1) == 0 | shape2D(:,2) == 0;
shape2D = shape2D(~inds_to_rem,:);
inds_to_rem = repmat(inds_to_rem, 3, 1);
M_old = M;
V_old = V;
M = M(~inds_to_rem);
V = V(~inds_to_rem,:);
end
num_points = numel(M) / 3;
m = reshape(M, num_points, 3)';
width_model = max(m(1,:)) - min(m(1,:));
height_model = max(m(2,:)) - min(m(2,:));
bounding_box = [min(shape2D(:,1)), min(shape2D(:,2)),...
max(shape2D(:,1)), max(shape2D(:,2))];
a = (((bounding_box(3) - bounding_box(1)) / width_model) + ((bounding_box(4) - bounding_box(2))/ height_model)) / 2;
tx = (bounding_box(3) + bounding_box(1))/2;
ty = (bounding_box(4) + bounding_box(2))/2;
% correct it so that the bounding box is just around the minimum
% and maximum point in the initialised face
tx = tx - a*(min(m(1,:)) + max(m(1,:)))/2;
ty = ty - a*(min(m(2,:)) + max(m(2,:)))/2;
% To deal with really extreme cases of roll
M3D = cat(2, M(1:end/3), M(end/3+1:2*end/3), zeros(numel(M(1:end/3)),1));
shape3D = cat(2, shape2D, zeros(numel(M(1:end/3)),1));
[ A, T, error, alignedShape, s ] = AlignShapesWithScale(M3D, shape3D);
R = A/s;
% R = eye(3);
T = [tx; ty];
currShape = getShapeOrtho(M, V, params, R, T, a);
currError = getRMSerror(currShape, shape2D);
reg_rigid = zeros(6,1);
regFactor = 20;
regularisations = [reg_rigid; regFactor ./ E]; % the above version, however, does not perform as well
regularisations = diag(regularisations)*diag(regularisations);
red_in_a_row = 0;
for i=1:0
shape3D = M + V * params;
shape3D = reshape(shape3D, numel(shape3D) / 3, 3);
% Now find the current residual error
currShape = a * R(1:2,:)*shape3D' + repmat(T, 1, numel(M)/3);
currShape = currShape';
error_res = shape2D - currShape;
eul = Rot2Euler(R);
p_global = [a; eul'; T];
% get the Jacobians
J = CalcJacobian(M, V, params, p_global);
% RLMS style update
p_delta = (J'*J + regularisations) \ (J'*error_res(:) - regularisations*[p_global;params]);
% Take smaller steps
p_delta = 0.25 * p_delta;
[params, p_global] = CalcReferenceUpdate(p_delta, params, p_global);
% Make sure the params do not get out of hand
params = ClampPDM(params, E);
a = p_global(1);
R = Euler2Rot(p_global(2:4));
T = p_global(5:6);
shape3D = M + V * params;
shape3D = reshape(shape3D, numel(shape3D) / 3, 3);
currShape = a * R(1:2,:)*shape3D' + repmat(T, 1, numel(M)/3);
currShape = currShape';
error = getRMSerror(currShape, shape2D);
if(0.999 * currError < error)
red_in_a_row = red_in_a_row + 1;
if(red_in_a_row == 5)
break;
end
end
currError = error;
end
if(hidden)
shapeOrtho = getShapeOrtho(M_old, V_old, params, R, T, a);
else
shapeOrtho = currShape;
end
if(nargin == 7)
Zavg = f / a;
Xavg = (T(1) - cx) / a;
Yavg = (T(2) - cy) / a;
T3D = [Xavg;Yavg;Zavg];
else
T3D = [0;0;0];
end
end
function [shape2D] = getShapeOrtho(M, V, p, R, T, a)
% M - mean shape vector
% V - eigenvectors
% p - parameters of non-rigid shape
% R - rotation matrix
% T - translation vector (tx, ty)
shape3D = getShape3D(M, V, p);
shape2D = a * R(1:2,:)*shape3D' + repmat(T, 1, numel(M)/3);
shape2D = shape2D';
end
function [shape2D] = getShapeOrthoFull(M, V, p, R, T, a)
% M - mean shape vector
% V - eigenvectors
% p - parameters of non-rigid shape
% R - rotation matrix
% T - translation vector (tx, ty)
T = [T; 0];
shape3D = getShape3D(M, V, p);
shape2D = a * R*shape3D' + repmat(T, 1, numel(M)/3);
shape2D = shape2D';
end
function [shape3D] = getShape3D(M, V, params)
shape3D = M + V * params;
shape3D = reshape(shape3D, numel(shape3D) / 3, 3);
end
function [error] = getRMSerror(shape2Dv1, shape2Dv2)
error = sqrt(mean(reshape(shape2Dv1 - shape2Dv2, numel(shape2Dv1), 1).^2));
end
% This calculates the combined rigid with non-rigid Jacobian
function J = CalcJacobian(M, V, p, p_global)
n = size(M, 1)/3;
non_rigid_modes = size(V,2);
J = zeros(n*2, 6 + non_rigid_modes);
% now the layour is
% ---------- Rigid part -------------------|----Non rigid part--------|
% dx_1/ds, dx_1/dr1, ... dx_1/dtx, dx_1/dty dx_1/dp_1 ... dx_1/dp_m
% dx_2/ds, dx_2/dr1, ... dx_2/dtx, dx_2/dty dx_2/dp_1 ... dx_2/dp_m
% ...
% dx_n/ds, dx_n/dr1, ... dx_n/dtx, dx_n/dty dx_n/dp_1 ... dx_n/dp_m
% dy_1/ds, dy_1/dr1, ... dy_1/dtx, dy_1/dty dy_1/dp_1 ... dy_1/dp_m
% ...
% dy_n/ds, dy_n/dr1, ... dy_n/dtx, dy_n/dty dy_n/dp_1 ... dy_n/dp_m
% getting the rigid part
J(:,1:6) = CalcRigidJacobian(M, V, p, p_global);
% constructing the non-rigid part
R = Euler2Rot(p_global(2:4));
s = p_global(1);
% 'rotate' and 'scale' the principal components
% First reshape to 3D
V_X = V(1:n,:);
V_Y = V(n+1:2*n,:);
V_Z = V(2*n+1:end,:);
J_x_non_rigid = s*(R(1,1)*V_X + R(1,2)*V_Y + R(1,3)*V_Z);
J_y_non_rigid = s*(R(2,1)*V_X + R(2,2)*V_Y + R(2,3)*V_Z);
J(1:n, 7:end) = J_x_non_rigid;
J(n+1:end, 7:end) = J_y_non_rigid;
end
function J = CalcRigidJacobian(M, V, p, p_global)
n = size(M, 1)/3;
% Get the current 3D shape (not affected by global transform, as this
% is how the Jacobian was derived (for derivation please see
% ../derivations/orthoJacobian
shape3D = GetShape3D(M, V, p);
% Get the rotation matrix corresponding to current global orientation
R = Euler2Rot(p_global(2:4));
s = p_global(1);
% Rigid Jacobian is laid out as follows
% dx_1/ds, dx_1/dr1, dx_1/dr2, dx_1/dr3, dx_1/dtx, dx_1/dty
% dx_2/ds, dx_2/dr1, dx_2/dr2, dx_2/dr3, dx_2/dtx, dx_2/dty
% ...
% dx_n/ds, dx_n/dr1, dx_n/dr2, dx_n/dr3, dx_n/dtx, dx_n/dty
% dy_1/ds, dy_1/dr1, dy_1/dr2, dy_1/dr3, dy_1/dtx, dy_1/dty
% ...
% dy_n/ds, dy_n/dr1, dy_n/dr2, dy_n/dr3, dy_n/dtx, dy_n/dty
J = zeros(n*2, 6);
% dx/ds = X * r11 + Y * r12 + Z * r13
% dx/dr1 = s*(r13 * Y - r12 * Z)
% dx/dr2 = -s*(r13 * X - r11 * Z)
% dx/dr3 = s*(r12 * X - r11 * Y)
% dx/dtx = 1
% dx/dty = 0
% dy/ds = X * r21 + Y * r22 + Z * r23
% dy/dr1 = s * (r23 * Y - r22 * Z)
% dy/dr2 = -s * (r23 * X - r21 * Z)
% dy/dr3 = s * (r22 * X - r21 * Y)
% dy/dtx = 0
% dy/dty = 1
% set the Jacobian for x's
% with respect to scaling factor
J(1:n,1) = shape3D * R(1,:)';
% with respect to angular rotation around x, y, and z axes
% Change of x with respect to change in axis angle rotation
dxdR = [ 0, R(1,3), -R(1,2);
-R(1,3), 0, R(1,1);
R(1,2), -R(1,1), 0];
J(1:n,2:4) = s*(dxdR * shape3D')';
% with respect to translation
J(1:n,5) = 1;
J(1:n,6) = 0;
% set the Jacobian for y's
% with respect to scaling factor
J(n+1:end,1) = shape3D * R(2,:)';
% with respect to angular rotation around x, y, and z axes
% Change of y with respect to change in axis angle rotation
dydR = [ 0, R(2,3), -R(2,2);
-R(2,3), 0, R(2,1);
R(2,2), -R(2,1), 0];
J(n+1:end,2:4) = s*(dydR * shape3D')';
% with respect to translation
J(n+1:end,5) = 0;
J(n+1:end,6) = 1;
end
% This updates the parameters based on the updates from the RLMS
function [non_rigid, rigid] = CalcReferenceUpdate(params_delta, current_non_rigid, current_global)
rigid = zeros(6, 1);
% Same goes for scaling and translation parameters
rigid(1) = current_global(1) + params_delta(1);
rigid(5) = current_global(5) + params_delta(5);
rigid(6) = current_global(6) + params_delta(6);
% for rotation however, we want to make sure that the rotation matrix
% approximation we have
% R' = [1, -wz, wy
% wz, 1, -wx
% -wy, wx, 1]
% is a legal rotation matrix, and then we combine it with current
% rotation (through matrix multiplication) to acquire the new rotation
R = Euler2Rot(current_global(2:4));
wx = params_delta(2);
wy = params_delta(3);
wz = params_delta(4);
R_delta = [1, -wz, wy;
wz, 1, -wx;
-wy, wx, 1];
% Make sure R_delta is orthonormal
R_delta = double(OrthonormaliseRotation(R_delta));
% Combine rotations
R_final = R * R_delta;
% Extract euler angle
euler = real(Rot2Euler(R_final));
rigid(2:4) = euler;
if(length(params_delta) > 6)
% non-rigid parameters can just be added together
non_rigid = params_delta(7:end) + current_non_rigid;
else
non_rigid = current_non_rigid;
end
end
function R_ortho = OrthonormaliseRotation(R)
% U * V' is basically what we want, as it's guaranteed to be
% orthonormal
[U, ~, V] = svd(R);
% We also want to make sure no reflection happened
% get the orthogonal matrix from the initial rotation matrix
X = U*V';
% This makes sure that the handedness is preserved and no reflection happened
% by making sure the determinant is 1 and not -1
W = eye(3);
W(3,3) = det(X);
R_ortho = U*W*V';
end
% This clamps the non-rigid parameters to stay within +- 3 standard
% deviations
function [non_rigid_params] = ClampPDM(non_rigid, E)
stds = sqrt(E);
non_rigid_params = non_rigid;
lower = non_rigid_params < -3 * stds;
non_rigid_params(lower) = -3*stds(lower);
higher = non_rigid_params > 3 * stds;
non_rigid_params(higher) = 3*stds(higher);
end

View File

@@ -0,0 +1,34 @@
% A script for visualizing the orientations in the menpo data, allows to
% see the distributions of the data
clear
load('../menpo_68_pts.mat');
addpath('../../PDM_helpers');
xs = all_pts(1:end/2,:);
ys = all_pts(end/2+1:end,:);
num_imgs = size(xs, 1);
rots = zeros(3, num_imgs);
errs = zeros(1,num_imgs);
pdmLoc = ['../pdm_68_aligned_menpo.mat'];
load(pdmLoc);
pdm = struct;
pdm.M = double(M);
pdm.E = double(E);
pdm.V = double(V);
errs_poss = [];
for i=1:num_imgs
labels_curr = cat(2, xs(i,:)', ys(i,:)');
labels_curr(labels_curr==-1) = 0;
[ a, R, T, ~, l_params, err, shapeOrtho] = fit_PDM_ortho_proj_to_2D(pdm.M, pdm.E, pdm.V, labels_curr);
errs(i) = err/a;
rots(:,i) = Rot2Euler(R);
end
hist(rots', 100);

View File

@@ -0,0 +1,121 @@
function [images, detections, labels] = Collect_wild_imgs_train(root_test_data)
use_lfpw = true;
use_helen = true;
use_68 = true;
images = [];
labels = [];
detections = [];
if(use_lfpw)
[img, det, lbl] = Collect_LFPW(root_test_data, use_68);
images = cat(1, images, img');
detections = cat(1, detections, det);
labels = cat(1, labels, lbl);
end
if(use_helen)
[img, det, lbl] = Collect_helen(root_test_data, use_68);
images = cat(1, images, img');
detections = cat(1, detections, det);
labels = cat(1, labels, lbl);
end
% convert to format expected by the Fitting method
detections(:,3) = detections(:,1) + detections(:,3);
detections(:,4) = detections(:,2) + detections(:,4);
end
function [images, detections, labels] = Collect_LFPW(root_test_data, use_68)
dataset_loc = [root_test_data, '/lfpw/trainset/'];
landmarkLabels = dir([dataset_loc '\*.pts']);
num_imgs = size(landmarkLabels,1);
images = struct;
if(use_68)
labels = zeros(num_imgs, 68, 2);
else
labels = zeros(num_imgs, 66, 2);
end
detections = zeros(num_imgs, 4);
load([root_test_data, '/Bounding Boxes/bounding_boxes_lfpw_trainset.mat']);
num_landmarks = 68;
for imgs = 1:num_imgs
[~,name,~] = fileparts(landmarkLabels(imgs).name);
landmarks = dlmread([dataset_loc, landmarkLabels(imgs).name], ' ', [3,0,num_landmarks+2,1]);
if(~use_68)
inds_frontal = [1:60,62:64,66:68];
landmarks = landmarks(inds_frontal,:);
end
images(imgs).img = [dataset_loc, name '.png'];
labels(imgs,:,:) = landmarks;
detections(imgs,:) = bounding_boxes{imgs}.bb_detector;
end
detections(:,3) = detections(:,3) - detections(:,1);
detections(:,4) = detections(:,4) - detections(:,2);
end
function [images, detections, labels] = Collect_helen(root_test_data, use_68)
dataset_loc = [root_test_data, '/helen/trainset/'];
landmarkLabels = dir([dataset_loc '\*.pts']);
num_imgs = size(landmarkLabels,1);
images = struct;
if(use_68)
labels = zeros(num_imgs, 68, 2);
else
labels = zeros(num_imgs, 66, 2);
end
detections = zeros(num_imgs, 4);
load([root_test_data, '/Bounding Boxes/bounding_boxes_helen_trainset.mat']);
num_landmarks = 68;
for imgs = 1:num_imgs
[~,name,~] = fileparts(landmarkLabels(imgs).name);
landmarks = dlmread([dataset_loc, landmarkLabels(imgs).name], ' ', [3,0,num_landmarks+2,1]);
if(~use_68)
inds_frontal = [1:60,62:64,66:68];
landmarks = landmarks(inds_frontal,:);
end
images(imgs).img = [dataset_loc, name '.jpg'];
labels(imgs,:,:) = landmarks;
detections(imgs,:) = bounding_boxes{imgs}.bb_detector;
end
detections(:,3) = detections(:,3) - detections(:,1);
detections(:,4) = detections(:,4) - detections(:,2);
end

View File

@@ -0,0 +1,54 @@
clear
load('../menpo_68_pts_valid.mat');
addpath('../../PDM_helpers');
xs = all_pts(1:end/2,:);
ys = all_pts(end/2+1:end,:);
num_imgs = size(xs, 1);
rots_menpo = zeros(3, num_imgs);
errs_menpo = zeros(1,num_imgs);
pdmLoc = ['../pdm_68_aligned_menpo.mat'];
load(pdmLoc);
pdm = struct;
pdm.M = double(M);
pdm.E = double(E);
pdm.V = double(V);
errs_poss = [];
for i=1:num_imgs
labels_curr = cat(2, xs(i,:)', ys(i,:)');
labels_curr(labels_curr==-1) = 0;
[ a, R, T, ~, l_params, err, shapeOrtho] = fit_PDM_ortho_proj_to_2D(pdm.M, pdm.E, pdm.V, labels_curr);
errs_menpo(i) = err/a;
rots_menpo(:,i) = Rot2Euler(R);
if(errs_menpo(i) < 0 || errs_menpo(i) > 4)
fprintf('i - %d, err - %.3f\n', i, errs_menpo(i));
errs_poss = cat(1, errs_poss, i);
end
end
[~, ~, labels] = Collect_wild_imgs_train('D:/Dropbox/Dropbox/AAM/test data/');
num_imgs = size(labels,1);
rots_wild = zeros(3, num_imgs);
errs_wild = zeros(1,num_imgs);
for i=1:num_imgs
labels_curr = squeeze(labels(i,:,:));
labels_curr(labels_curr==-1) = 0;
[ a, R, T, ~, l_params, err, shapeOrtho] = fit_PDM_ortho_proj_to_2D(pdm.M, pdm.E, pdm.V, labels_curr);
errs_wild(i) = err/a;
rots_wild(:,i) = Rot2Euler(R);
end
errs = cat(2, errs_wild, errs_menpo);
fprintf('%.3f, %.3f, %.3f\n', mean(errs_menpo), mean(errs_wild), mean(errs));
% 300W PDM error is 1.537, 1.017, 1.285
% Menpo+300W PDM error is 1.130, 0.985, 1.060

View File

@@ -0,0 +1,157 @@
% If a different type of PDM is to be trained, prepare training data here
clear
load('menpo_68_pts_flip.mat');
addpath('../PDM_helpers');
xs = all_pts(1:end/2,:);
ys = all_pts(end/2+1:end,:);
num_imgs = size(xs, 1);
pdmLoc = ['../../models/pdm/pdm_68_aligned_wild.mat'];
% pdmLoc = ['pdm_68_aligned_menpo_v1.mat'];
load(pdmLoc);
pdm = struct;
pdm.M = double(M);
pdm.E = double(E);
pdm.V = double(V);
errs_poss = [];
all_shapes = -200 * ones(num_imgs, 68 * 2);
min_x = 0;
max_x = 0;
min_y = 0;
max_y = 0;
for i=1:num_imgs
shape2D = cat(2, all_pts(i,:)', all_pts(i+num_imgs,:)');
M_n = M;
ind_rem = find(shape2D(:,1) == -1);
to_keep = setdiff(1:68, ind_rem);
if(sum(shape2D(:)==-1) > 0)
hidden = true;
% which indices to remove
inds_to_rem = shape2D(:,1) == -1 | shape2D(:,2) == -1;
shape2D = shape2D(~inds_to_rem,:);
inds_to_rem = repmat(inds_to_rem, 3, 1);
M_n = M(~inds_to_rem);
end
% To deal with really extreme cases of roll
M2D = cat(2, M_n(1:end/3), M_n(end/3+1:2*end/3));
[ A, t, error, alignedShape, s ] = AlignShapesWithScale(M2D, shape2D);
R = A/s;
% Transform the shape
shape2D(:,1) = shape2D(:,1) - t(1);
shape2D(:,2) = shape2D(:,2) - t(2);
shape2D = (R' * shape2D')/s;
shape2D = shape2D';
% all_pts(i,all_pts(i,:)~=-1) = shape2D(:,1);
% all_pts(i+num_pts,all_pts(i+num_pts,:)~=-1) = shape2D(:,2);
%
all_shapes(i,[to_keep,to_keep+68]) = shape2D(:);
if(min(shape2D(:,1)) < min_x)
min_x = min(shape2D(:,1));
end
if(min(shape2D(:,2)) < min_y)
min_y = min(shape2D(:,2));
end
if(max(shape2D(:,1)) > max_x)
max_x = max(shape2D(:,1));
end
if(max(shape2D(:,2)) > max_y)
max_y = max(shape2D(:,2));
end
end
% Scaling and shifting the model so that all points are from -1 to 1
MD = all_shapes == -200;
xs = 2 * (all_shapes(:,1:68) - min_x)/(max_x-min_x) - 1;
ys = 2 * (all_shapes(:,69:end) - min_y)/(max_y - min_y) - 1;
all_shapes = cat(2, xs, ys);
all_shapes(MD) = -2;
xs = all_shapes(:,1:68);
ys = all_shapes(:,69:end);
save('menpo_train.mat', 'all_shapes');
%%
load('menpo_68_pts_valid.mat');
xs = all_pts(1:end/2,:);
ys = all_pts(end/2+1:end,:);
num_imgs = size(xs, 1);
all_shapes = -200 * ones(num_imgs, 68 * 2);
for i=1:num_imgs
shape2D = cat(2, all_pts(i,:)', all_pts(i+num_imgs,:)');
M_n = M;
ind_rem = find(shape2D(:,1) == -1);
to_keep = setdiff(1:68, ind_rem);
if(sum(shape2D(:)==-1) > 0)
hidden = true;
% which indices to remove
inds_to_rem = shape2D(:,1) == -1 | shape2D(:,2) == -1;
shape2D = shape2D(~inds_to_rem,:);
inds_to_rem = repmat(inds_to_rem, 3, 1);
M_n = M(~inds_to_rem);
end
% To deal with really extreme cases of roll
M2D = cat(2, M_n(1:end/3), M_n(end/3+1:2*end/3));
[ A, t, error, alignedShape, s ] = AlignShapesWithScale(M2D, shape2D);
R = A/s;
% Transform the shape
shape2D(:,1) = shape2D(:,1) - t(1);
shape2D(:,2) = shape2D(:,2) - t(2);
shape2D = (R' * shape2D')/s;
shape2D = shape2D';
% all_pts(i,all_pts(i,:)~=-1) = shape2D(:,1);
% all_pts(i+num_pts,all_pts(i+num_pts,:)~=-1) = shape2D(:,2);
%
all_shapes(i,[to_keep,to_keep+68]) = shape2D(:);
end
% Scaling and shifting the model so that all points are from -1 to 1
MD = all_shapes == -200;
xs = 2 * (all_shapes(:,1:68) - min_x)/(max_x-min_x) - 1;
ys = 2 * (all_shapes(:,69:end) - min_y)/(max_y - min_y) - 1;
all_shapes = cat(2, xs, ys);
all_shapes(MD) = -2;
xs = all_shapes(:,1:68);
ys = all_shapes(:,69:end);
save('menpo_valid.mat', 'all_shapes');

View File

@@ -0,0 +1,32 @@
function [ pts_new ] = iterate_piece_wise( pts_orig, new_num_points )
%ITERATE_PIECE_WISE Summary of this function goes here
% Detailed explanation goes here
% Reinterpolate the new points, but make sure they are still on the
% same lines
num_orig = size(pts_orig,1);
% Divide the number of original segments by number of new segments
step_size = (num_orig - 1) / (new_num_points-1);
pts_new = zeros(new_num_points,2);
% Clamp the beginning and end, as they will be the same
pts_new(1,:) = pts_orig(1,:);
pts_new(end,:) = pts_orig(end,:);
for i=1:new_num_points-2
low_point = floor(1 + i * step_size);
high_point = ceil(1 + i * step_size);
coeff_1 = floor(1 + i * step_size) - i * step_size;
coeff_2 = 1 - coeff_1;
new_pt = coeff_1 * pts_orig(low_point,:) + coeff_2 * pts_orig(high_point,:);
pts_new(i+1,:) = new_pt;
end
end

View File

@@ -0,0 +1,77 @@
% collect the training data annotations (from the menpo challenge)
clear
train_data_loc = 'C:\Users\tbaltrus\Documents\menpo_data_orig/';
dataset_locs = {[train_data_loc, '/train/'];};
left_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,32; 23,39; 24,38; 25,37; 26,42; 27,41;
28,52; 29,51; 30,50; 31,49; 32,60; 33,59; 34,58;
35,63; 36,62; 37,61; 38,68; 39,67];
right_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,36; 23,44; 24,45; 25,46; 26,47; 27,48;
28,52; 29,53; 30,54; 31,55; 32,56; 33,57; 34,58;
35,63; 36,64; 37,65; 38,66; 39,67];
all_pts_left = [];
all_pts_right = [];
all_pts_orig_left = [];
all_pts_orig_right = [];
for i=1:numel(dataset_locs)
landmarkLabels = dir([dataset_locs{i} '\*.pts']);
landmarkImgs = dir([dataset_locs{i} '\*.jpg']);
for p=1:numel(landmarkLabels)
landmarks = importdata([dataset_locs{i}, landmarkLabels(p).name], ' ', 3);
img = imread([dataset_locs{i}, landmarkImgs(p).name]);
landmarks = landmarks.data;
landmark_labels = -ones(68,2);
if(size(landmarks,1) == 39)
% Determine if the points are clock-wise or counter clock-wise
% Clock-wise points are facing left, counter-clock-wise right
sum = 0;
for k=1:11
step = (landmarks(k+1,1) - landmarks(k,1)) * (landmarks(k+1,2) + landmarks(k,2));
sum = sum + step;
end
if(sum > 0)
% First need to resample the face outline as there are 9
% points in the near-frontal and 10 points in profile for
% the outline of the face
outline = iterate_piece_wise(landmarks(1:10,:), 9);
brow = iterate_piece_wise(landmarks(13:16,:), 5);
landmark_labels(1:9,:) = outline;
landmark_labels(18:22,:) = brow;
landmark_labels(left_to_frontal_map(:,2),:) = landmarks(left_to_frontal_map(:,1),:);
all_pts_orig_right = cat(3, all_pts_orig_right, landmarks);
all_pts_right = cat(3, all_pts_right, landmark_labels);
else
outline = iterate_piece_wise(landmarks(10:-1:1,:), 9);
brow = iterate_piece_wise(landmarks(16:-1:13,:), 5);
landmark_labels(9:17,:) = outline;
landmark_labels(23:27,:) = brow;
landmark_labels(right_to_frontal_map(:,2),:) = landmarks(right_to_frontal_map(:,1),:);
all_pts_orig_left = cat(3, all_pts_orig_left, landmarks);
all_pts_left = cat(3, all_pts_left, landmark_labels);
end
end
if(mod(p,50) == 0)
fprintf('%d/%d\n', p, numel(landmarkLabels))
end
end
end
%%
save('menpo_68_pts_train_profile', 'all_pts_orig_right', 'all_pts_right', 'all_pts_orig_left', 'all_pts_left');

View File

@@ -0,0 +1,77 @@
% collect the training data annotations (from the menpo challenge)
clear
train_data_loc = 'C:\Users\tbaltrus\Documents\menpo_data_orig/';
dataset_locs = {[train_data_loc, '/valid/'];};
left_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,32; 23,39; 24,38; 25,37; 26,42; 27,41;
28,52; 29,51; 30,50; 31,49; 32,60; 33,59; 34,58;
35,63; 36,62; 37,61; 38,68; 39,67];
right_to_frontal_map = [17,28; 18,29; 19,30; 20,31;
21,34; 22,36; 23,44; 24,45; 25,46; 26,47; 27,48;
28,52; 29,53; 30,54; 31,55; 32,56; 33,57; 34,58;
35,63; 36,64; 37,65; 38,66; 39,67];
all_pts_left = [];
all_pts_right = [];
all_pts_orig_left = [];
all_pts_orig_right = [];
for i=1:numel(dataset_locs)
landmarkLabels = dir([dataset_locs{i} '\*.pts']);
landmarkImgs = dir([dataset_locs{i} '\*.jpg']);
for p=1:numel(landmarkLabels)
landmarks = importdata([dataset_locs{i}, landmarkLabels(p).name], ' ', 3);
img = imread([dataset_locs{i}, landmarkImgs(p).name]);
landmarks = landmarks.data;
landmark_labels = -ones(68,2);
if(size(landmarks,1) == 39)
% Determine if the points are clock-wise or counter clock-wise
% Clock-wise points are facing left, counter-clock-wise right
sum = 0;
for k=1:11
step = (landmarks(k+1,1) - landmarks(k,1)) * (landmarks(k+1,2) + landmarks(k,2));
sum = sum + step;
end
if(sum > 0)
% First need to resample the face outline as there are 9
% points in the near-frontal and 10 points in profile for
% the outline of the face
outline = iterate_piece_wise(landmarks(1:10,:), 9);
brow = iterate_piece_wise(landmarks(13:16,:), 5);
landmark_labels(1:9,:) = outline;
landmark_labels(18:22,:) = brow;
landmark_labels(left_to_frontal_map(:,2),:) = landmarks(left_to_frontal_map(:,1),:);
all_pts_orig_right = cat(3, all_pts_orig_right, landmarks);
all_pts_right = cat(3, all_pts_right, landmark_labels);
else
outline = iterate_piece_wise(landmarks(10:-1:1,:), 9);
brow = iterate_piece_wise(landmarks(16:-1:13,:), 5);
landmark_labels(9:17,:) = outline;
landmark_labels(23:27,:) = brow;
landmark_labels(right_to_frontal_map(:,2),:) = landmarks(right_to_frontal_map(:,1),:);
all_pts_orig_left = cat(3, all_pts_orig_left, landmarks);
all_pts_left = cat(3, all_pts_left, landmark_labels);
end
end
if(mod(p,50) == 0)
fprintf('%d/%d\n', p, numel(landmarkLabels))
end
end
end
%%
save('menpo_68_pts_valid_profile', 'all_pts_orig_right', 'all_pts_right', 'all_pts_orig_left', 'all_pts_left');

View File

@@ -0,0 +1,34 @@
function [ error_per_image, frontal_ids ] = compute_error_menpo_prof( ground_truth_all, detected_points_all )
%compute_error
% compute the average point-to-point Euclidean error normalized by the
% inter-ocular distance (measured as the Euclidean distance between the
% outer corners of the eyes)
%
% Inputs:
% grounth_truth_all, size: num_of_points x 2 x num_of_images
% detected_points_all, size: num_of_points x 2 x num_of_images
% Output:
% error_per_image, size: num_of_images x 1
num_of_images = numel(ground_truth_all);
error_per_image = zeros(num_of_images,1);
frontal_ids = true(num_of_images,1);
for i =1:num_of_images
detected_points = detected_points_all{i};
ground_truth_points = ground_truth_all{i};
num_of_points = size(ground_truth_points,1);
normalization = (max(ground_truth_points(:,1))-min(ground_truth_points(:,1)))+...
(max(ground_truth_points(:,2))-min(ground_truth_points(:,2)));
normalization = normalization / 2;
sum=0;
for j=1:num_of_points
sum = sum+norm(detected_points(j,:)-ground_truth_points(j,:));
end
error_per_image(i) = sum/(num_of_points*normalization);
end
end

View File

@@ -0,0 +1,75 @@
clear
load('menpo_68_pts_train_profile');
vis_pts_left = all_pts_left(:,1,1) ~= -1;
xs = all_pts_left(vis_pts_left,:,:);
xs = squeeze(cat(1, xs(:,1,:), xs(:,2,:)));
ys = squeeze(cat(1, all_pts_orig_left(:,1,:), all_pts_orig_left(:,2,:)));
a_left = ys /xs;
a_left(abs(a_left)<0.001) = 0;
transformed_left = a_left * xs;
xs_pred_left = transformed_left(1:end/2,:);
ys_pred_left = transformed_left(end/2+1:end,:);
vis_pts_right = all_pts_right(:,1,1) ~= -1;
xs = all_pts_right(vis_pts_right,:,:);
xs = squeeze(cat(1, xs(:,1,:), xs(:,2,:)));
ys = squeeze(cat(1, all_pts_orig_right(:,1,:), all_pts_orig_right(:,2,:)));
a_right = ys /xs;
a_right(abs(a_right)<0.001) = 0;
transformed_right = a_right * xs;
xs_pred_right = transformed_right(1:end/2,:);
ys_pred_right = transformed_right(end/2+1:end,:);
% pred_left = cat(2,transformed_left
%%
num = 110;
plot(all_pts_orig_right(:,1,num), -all_pts_orig_right(:,2,num), '.r');
hold on;
plot(xs_pred_right(:,num), -ys_pred_right(:,num), '.b');
hold off;
%% Evaluate on the validation data (see how much error is added)
load('menpo_68_pts_valid_profile');
xs = all_pts_left(vis_pts_left,:,:);
xs = squeeze(cat(1, xs(:,1,:), xs(:,2,:)));
transformed_left = a_left * xs;
xs_pred_left = transformed_left(1:end/2,:);
ys_pred_left = transformed_left(end/2+1:end,:);
shapes = cell(size(ys_pred_left,1),1);
labels = cell(size(ys_pred_left,1),1);
for i=1:numel(shapes)
shapes{i} = cat(2, xs_pred_left(:,i), ys_pred_left(:,i));
labels{i} = all_pts_orig_left(:,:,i);
end
errors_left = compute_error_menpo_prof(labels, shapes);
xs = all_pts_right(vis_pts_right,:,:);
xs = squeeze(cat(1, xs(:,1,:), xs(:,2,:)));
transformed_right = a_right * xs;
xs_pred_right = transformed_right(1:end/2,:);
ys_pred_right = transformed_right(end/2+1:end,:);
shapes = cell(size(ys_pred_right,1),1);
labels = cell(size(ys_pred_right,1),1);
for i=1:numel(shapes)
shapes{i} = cat(2, xs_pred_right(:,i), ys_pred_right(:,i));
labels{i} = all_pts_orig_right(:,:,i);
end
errors_right = compute_error_menpo_prof(labels, shapes);
save('conversion', 'a_left', 'a_right', 'vis_pts_left', 'vis_pts_right');
% Try with scaling

View File

@@ -0,0 +1 @@
This includes scripts necessary to learn the mapping from the detected points using our PDM to the points expected in menpo (the different face outline and chin points in profile).

View File

@@ -0,0 +1,421 @@
# The mean values of the components (in mm)
204
1
6
-74.409969
-74.137773
-72.056496
-67.915820
-60.492143
-48.932581
-34.280137
-17.760628
0.514393
18.358848
34.248759
48.283175
59.483187
66.851931
71.085235
73.234417
73.635334
-57.908717
-49.068078
-37.656400
-25.729901
-14.795319
14.837927
25.725682
37.468905
48.751250
57.344747
0.388587
0.295350
0.206926
0.135388
-15.498362
-8.047687
0.076176
8.251717
15.588112
-45.515042
-37.079098
-27.956753
-19.734098
-28.329816
-37.307204
19.581417
27.839109
36.880288
45.145696
37.224189
28.382643
-27.977066
-17.476087
-6.663955
0.244789
7.291085
17.947928
28.125385
18.687933
8.539212
0.242857
-7.847825
-18.237373
-24.528857
-7.104831
0.273636
7.739429
24.736241
7.968382
0.229350
-7.397604
-30.248138
-11.542661
7.567939
26.259376
42.866270
56.586917
67.359002
75.143546
77.529037
75.071547
67.393621
56.803934
43.251437
26.710196
8.051821
-10.968992
-29.588592
-52.172718
-59.222312
-61.949207
-61.037213
-57.532329
-57.980133
-61.715278
-62.824686
-60.232398
-53.273185
-40.542060
-30.162960
-20.232369
-9.953997
3.145708
4.856711
5.687939
4.792678
2.997034
-37.288250
-42.119954
-42.362645
-36.532986
-34.532435
-34.563887
-36.758354
-42.734934
-42.649721
-37.900147
-35.115277
-34.873489
27.684553
22.191257
18.679379
20.310742
18.619478
22.094260
27.477987
35.483072
39.911465
40.897777
40.075424
35.645402
27.883771
25.627237
26.352545
25.545734
27.760907
31.094250
32.006269
31.195088
55.141955
51.629462
48.507238
44.913190
38.574081
29.347878
17.493884
5.304010
-1.371218
5.342776
17.851699
30.323049
40.570487
47.890182
52.297654
55.916658
60.074025
13.228242
6.263352
-0.547326
-6.314237
-10.909358
-13.043499
-9.974582
-5.801725
-0.545529
5.625345
-13.691691
-22.845392
-32.311712
-41.584645
-21.080547
-26.294217
-29.003103
-26.743598
-22.061192
9.230938
3.879971
1.219552
1.017579
0.985420
3.658622
-0.023947
-0.773850
0.704347
5.283591
0.421741
-1.190907
-7.844583
-17.491041
-24.300421
-25.186808
-24.409816
-17.587587
-7.690400
-15.385836
-21.456027
-22.469566
-21.062494
-15.340380
-9.728696
-21.188579
-22.512963
-21.275175
-9.282340
-20.462720
-21.609047
-20.300170
# The principal components (eigenvectors) of identity or combined identity and expression model
204
30
6
-0.190469 -0.071184 -0.054685 0.088181 -0.005885 0.117801 -0.017233 -0.027212 -0.081376 -0.065794 0.104253 -0.043337 0.060539 0.027374 -0.030921 0.019905 -0.032263 0.073285 -0.027532 0.067513 -0.106417 -0.052799 0.090934 0.071815 -0.103673 -0.018281 -0.142612 -0.136544 0.104777 -0.059287
-0.181987 -0.077301 -0.040768 0.081699 -0.010115 0.074060 -0.030833 -0.002966 -0.045981 -0.047412 0.056452 -0.056207 0.046458 0.008748 -0.018044 0.054030 -0.035939 0.107036 0.006886 0.061526 -0.048319 -0.066964 0.074145 0.045579 -0.068658 0.034547 -0.074267 -0.093346 -0.011087 -0.057005
-0.173515 -0.088597 -0.030820 0.084278 -0.018017 0.017465 -0.045721 0.022537 -0.010900 -0.021144 0.014483 -0.051229 0.043695 0.007049 0.008784 0.079550 -0.021801 0.121824 0.044955 0.054364 0.003371 -0.068850 0.062924 0.019579 -0.006031 0.059153 0.004337 -0.040960 -0.127230 -0.069391
-0.161922 -0.097905 -0.029552 0.085923 -0.024253 -0.051497 -0.041131 0.032695 0.013614 0.006737 -0.022233 -0.015979 0.044671 0.016456 0.042545 0.100738 0.010838 0.104136 0.059488 0.030909 0.041065 -0.005391 0.037132 0.000199 0.070025 0.027990 0.075888 0.013117 -0.161032 -0.045139
-0.127025 -0.102943 -0.027545 0.074271 -0.037877 -0.128029 -0.020264 0.013901 0.046950 0.027499 -0.019909 0.036689 0.040723 0.031274 0.062878 0.095211 0.070627 0.052483 0.070186 0.002020 0.041430 0.113021 0.010653 -0.018427 0.107179 -0.036024 0.106632 0.053605 -0.091824 0.008829
-0.073496 -0.095531 -0.016800 0.050067 -0.046629 -0.178622 -0.002550 -0.009981 0.073447 0.025813 0.031626 0.083468 0.033074 0.041344 0.067269 0.045120 0.119514 -0.030770 0.072274 -0.032900 0.021413 0.187191 -0.009658 -0.017608 0.058195 -0.076714 0.086848 0.093781 0.020418 0.041344
-0.014336 -0.060707 -0.001135 0.024155 -0.031345 -0.180344 -0.005564 -0.018983 0.082040 -0.001669 0.104994 0.108331 0.040063 0.040731 0.054548 -0.031716 0.100364 -0.115422 0.062475 -0.077651 0.018518 0.152803 -0.023172 0.006727 -0.034741 -0.063271 0.027194 0.112111 0.091212 0.065332
0.033288 -0.029650 0.010784 0.001490 -0.004227 -0.122205 -0.025230 -0.030788 0.060539 -0.045171 0.193095 0.125399 0.079600 0.061105 0.034746 -0.107021 -0.005095 -0.155007 0.019670 -0.119697 0.047390 0.049773 -0.078525 0.043392 -0.131234 -0.023157 -0.050902 0.107143 0.052837 0.100170
0.042466 -0.023240 0.012901 -0.014628 0.013362 -0.027104 -0.033300 -0.036843 0.007515 -0.087840 0.228327 0.134957 0.110228 0.073733 0.007839 -0.116583 -0.133476 -0.130037 -0.026603 -0.136182 0.080216 -0.004143 -0.151400 0.000197 -0.162840 0.037012 -0.063016 0.066786 -0.057942 0.096117
0.042275 -0.027210 0.015916 -0.021138 0.022148 0.080905 -0.031487 -0.040800 -0.036973 -0.122569 0.157395 0.099065 0.077464 0.014712 -0.019067 -0.059201 -0.177906 -0.067693 -0.025927 -0.123735 0.112479 -0.022961 -0.115332 -0.069161 -0.082514 0.084603 -0.009326 -0.012504 -0.166641 -0.008810
0.034992 0.019866 0.016672 -0.026031 0.035146 0.156866 -0.035760 -0.037457 -0.044565 -0.148905 0.070856 0.043275 0.008939 -0.080557 -0.053465 -0.018797 -0.138466 -0.037546 0.015549 -0.104396 0.125055 -0.075197 0.001187 -0.063625 0.014932 0.119950 0.015538 -0.067638 -0.195703 -0.111059
0.022083 0.076666 0.020893 -0.036598 0.041623 0.170524 -0.028483 -0.049185 -0.024061 -0.142174 0.012057 0.000080 -0.053553 -0.151003 -0.080378 -0.028844 -0.061412 -0.068752 0.050127 -0.077572 0.111086 -0.098424 0.097831 -0.028401 0.047053 0.120124 -0.009350 -0.076550 -0.101073 -0.108623
0.000917 0.122188 0.018726 -0.053554 0.031875 0.131996 0.005304 -0.051658 -0.008332 -0.086419 -0.025484 -0.019507 -0.086669 -0.153646 -0.082325 -0.047700 0.026855 -0.100987 0.066018 -0.042915 0.060076 -0.037594 0.127929 -0.011704 0.032725 0.075172 -0.046255 -0.036993 0.042759 -0.027430
-0.015849 0.147622 0.013988 -0.065844 0.023894 0.060816 0.039563 -0.042881 -0.004454 -0.003180 -0.031554 -0.009564 -0.079995 -0.090976 -0.044620 -0.046412 0.085008 -0.104415 0.056154 -0.006056 -0.006052 0.072131 0.082830 -0.023428 0.003381 0.005341 -0.066595 -0.015071 0.173112 0.078035
-0.024307 0.153924 0.015329 -0.068699 0.026456 -0.007556 0.048898 -0.038035 -0.007825 0.073291 -0.016401 0.010907 -0.047848 -0.002683 0.023197 -0.014666 0.080274 -0.065237 0.024079 0.024507 -0.060286 0.128755 0.010244 -0.064376 -0.013535 -0.037682 -0.039532 -0.001064 0.183772 0.090049
-0.036264 0.160721 0.024597 -0.068751 0.026582 -0.065025 0.032341 -0.033475 0.017568 0.128566 0.002109 0.018173 -0.014675 0.052460 0.083642 0.014227 0.048078 -0.019013 -0.012220 0.058774 -0.073209 0.109006 -0.064971 -0.100035 -0.020187 -0.043025 0.008835 0.007521 0.093237 0.015679
-0.046696 0.169704 0.036840 -0.076586 0.027841 -0.112892 0.008739 -0.031926 0.053716 0.165163 0.020429 0.017699 0.003555 0.079056 0.125320 0.034425 0.005298 0.024924 -0.042072 0.097605 -0.059220 0.081114 -0.133639 -0.125511 -0.037272 -0.028366 0.062529 0.011166 -0.004243 -0.068946
0.042291 0.076030 -0.093282 0.067198 0.007215 0.103402 -0.006997 -0.104492 -0.121120 0.016173 -0.008727 0.004814 0.089177 -0.186746 0.011826 0.085202 -0.062554 -0.004803 -0.155804 -0.071192 0.136436 0.102667 -0.034988 0.081817 -0.079375 -0.139207 -0.036352 -0.004241 0.065533 -0.070118
0.052443 0.056537 -0.072345 0.060115 -0.011066 0.080535 0.003019 -0.127387 -0.129043 0.086946 -0.006090 0.118992 0.033195 -0.174404 0.046975 0.039567 -0.034670 -0.049415 -0.144558 -0.041391 0.114681 0.080133 -0.040871 0.019499 0.009455 -0.054976 0.022552 0.063668 -0.004017 -0.084620
0.047463 0.014756 -0.043425 0.051131 -0.020178 0.076732 -0.013818 -0.126892 -0.079018 0.146515 0.035490 0.158779 -0.107349 -0.105306 0.048792 -0.027827 -0.045394 -0.053009 -0.102846 -0.022955 0.069459 0.057348 -0.009400 -0.001550 0.084086 0.050101 0.049623 0.056422 -0.023817 -0.046569
0.048007 -0.024661 -0.015357 0.038002 -0.013363 0.076925 -0.040654 -0.114865 -0.010085 0.183850 0.073473 0.136677 -0.237996 -0.021463 0.034689 -0.088979 -0.089578 -0.022381 -0.064666 -0.022433 0.026354 0.058752 0.041014 0.004505 0.142270 0.148051 0.035265 0.038667 -0.008270 -0.007768
0.051793 -0.056949 0.013723 0.022806 -0.005622 0.072354 -0.068065 -0.092880 0.061062 0.204887 0.090190 0.089521 -0.311144 0.053182 0.022133 -0.132114 -0.136610 0.024535 -0.040255 -0.035124 -0.015640 0.080175 0.084529 0.006064 0.173201 0.219697 0.005246 0.039355 0.007063 0.018692
0.048551 0.012281 0.000290 -0.028771 0.025829 -0.088107 0.006261 -0.091056 -0.034144 -0.191198 -0.047651 -0.077389 0.359607 -0.025798 -0.056870 0.035983 0.055101 -0.032975 -0.068922 0.057166 -0.046956 0.104589 0.095031 -0.085005 0.182852 0.257621 0.107048 0.058628 -0.015172 0.073623
0.007636 0.001957 0.019717 -0.034560 0.014475 -0.086702 -0.015406 -0.080933 0.068802 -0.195883 0.013528 -0.084509 0.246520 -0.043931 -0.056795 0.048090 0.051544 -0.019811 -0.082600 0.076202 0.011676 0.066159 0.082000 -0.049743 0.149956 0.134417 0.078092 0.054942 -0.012085 0.015554
-0.032833 -0.011149 0.036685 -0.038468 0.000077 -0.082118 -0.023279 -0.075403 0.157067 -0.188836 0.065133 -0.077001 0.088676 -0.042061 -0.061185 0.056591 0.038765 -0.019920 -0.081673 0.088792 0.072993 -0.017075 0.067129 -0.018861 0.116261 -0.018749 0.036306 0.017326 -0.008303 -0.012383
-0.071594 -0.029101 0.056928 -0.040265 -0.029169 -0.085809 -0.009701 -0.072193 0.214929 -0.141362 0.092370 -0.037606 -0.063282 -0.008065 -0.069296 0.039686 0.033955 -0.027633 -0.047596 0.103709 0.111083 -0.136264 0.027231 -0.010179 0.075506 -0.157117 0.011433 -0.023525 -0.026937 -0.031782
-0.102902 -0.026645 0.071626 -0.042690 -0.060351 -0.106379 0.034893 -0.067981 0.195447 -0.075360 0.062952 0.051391 -0.105644 0.030290 -0.052445 0.017990 0.040063 -0.047170 0.013324 0.085582 0.104803 -0.234707 -0.056129 -0.043783 0.044242 -0.217184 0.020767 -0.040826 -0.064307 -0.083017
0.073954 -0.033481 0.011348 -0.013852 0.025753 -0.011342 -0.038623 -0.041194 -0.014761 0.040073 0.005668 -0.013876 0.029282 0.054587 0.016941 -0.027225 -0.003344 0.045073 0.053799 -0.010496 -0.011153 0.027733 0.027007 -0.050946 -0.012546 0.028573 -0.020853 0.021921 -0.036245 -0.005055
0.066281 -0.038531 0.010994 -0.010512 0.020687 -0.001944 -0.022969 -0.018157 -0.021210 0.038141 -0.006614 -0.020176 0.026154 0.054925 0.012944 -0.036839 0.007008 0.042922 0.088378 -0.009251 0.051186 0.043168 0.060672 -0.080082 -0.018936 -0.014647 -0.033627 0.036186 -0.029742 -0.008131
0.060145 -0.045291 0.011506 -0.007381 0.015724 0.007401 -0.008034 0.002664 -0.026686 0.036472 -0.014297 -0.025851 0.024334 0.057238 0.010284 -0.047580 0.016618 0.038845 0.116682 -0.003316 0.111662 0.059627 0.093922 -0.109972 -0.023774 -0.055271 -0.047776 0.051498 -0.021311 -0.009858
0.056953 -0.054151 0.013023 -0.004828 0.011346 0.016032 0.006524 0.023821 -0.032325 0.034980 -0.020104 -0.031507 0.021464 0.059350 0.007546 -0.057002 0.026837 0.033675 0.139803 0.005629 0.167677 0.074225 0.127121 -0.138162 -0.026789 -0.093805 -0.061564 0.068483 -0.012682 -0.008529
0.039049 0.004331 0.009235 0.037546 0.049086 -0.014903 -0.025946 0.048417 0.002055 0.023134 -0.020108 -0.066426 0.008865 0.016069 0.004197 -0.017642 0.020358 -0.009648 0.157395 0.134970 0.175886 -0.174092 0.076699 -0.071553 -0.044112 0.040272 0.037466 0.216854 0.252999 -0.172764
0.040038 -0.007091 0.007822 0.021372 0.034784 -0.005405 -0.006969 0.041693 -0.009682 0.028397 -0.020225 -0.048332 0.001538 0.029769 -0.001635 -0.036032 0.019107 -0.005341 0.133339 0.091366 0.152670 -0.085737 0.089831 -0.058282 -0.034860 -0.021070 -0.005042 0.156095 0.149845 -0.083745
0.035957 -0.031162 0.005084 -0.001774 0.007203 0.012038 0.013807 0.035198 -0.033169 0.027079 -0.040665 -0.032007 0.014259 0.037937 -0.001077 -0.043557 0.026802 0.014658 0.081716 0.027843 0.109242 0.034435 0.086752 -0.083719 -0.017238 -0.091026 -0.047042 0.035921 0.012064 0.021800
0.022720 -0.044690 0.002354 -0.026181 -0.020685 0.025054 0.024201 0.023200 -0.039874 0.036060 -0.055478 -0.020999 0.029078 0.031083 0.001968 -0.055754 0.030704 0.028240 0.023472 -0.045850 0.061597 0.146746 0.052607 -0.080053 -0.001522 -0.164709 -0.062616 -0.095005 -0.127602 0.102249
0.016286 -0.048030 -0.001184 -0.039975 -0.034766 0.032752 0.041787 0.015708 -0.046484 0.033420 -0.067307 -0.001994 0.020204 0.026865 -0.000861 -0.056410 0.032940 0.026198 -0.011653 -0.101627 0.003966 0.237505 0.036144 -0.055699 0.015305 -0.218927 -0.065851 -0.200727 -0.222999 0.153512
0.075720 0.056380 -0.059414 0.024517 0.019087 0.077875 -0.100031 -0.030972 0.030338 -0.010825 0.016623 -0.143253 -0.030541 -0.005486 -0.117079 -0.030346 -0.013127 0.022452 0.072919 0.018036 -0.059039 -0.036724 -0.121192 0.015689 0.069917 -0.065978 -0.064873 -0.025976 0.031556 0.022245
0.068039 0.034087 -0.043944 0.009759 0.026481 0.049916 -0.090858 -0.041117 0.025810 0.021895 -0.008543 -0.133490 -0.036091 0.013613 -0.091837 -0.035876 -0.001297 -0.009674 0.054274 -0.034062 -0.083163 -0.057757 -0.134940 -0.031745 0.021981 -0.068496 -0.003268 -0.028335 -0.015878 0.073877
0.050150 0.006059 -0.024573 0.018377 0.027472 0.019785 -0.080324 -0.044483 0.022155 0.038587 -0.021428 -0.120383 -0.050280 0.040006 -0.088464 -0.045091 0.017150 -0.031191 0.019915 -0.051535 -0.079627 -0.096807 -0.081243 -0.091793 -0.117173 -0.034177 0.092763 -0.019522 -0.053013 0.134476
0.033952 -0.019755 -0.012461 0.012433 0.027840 0.006878 -0.069979 -0.042903 0.015715 0.055837 -0.046298 -0.119158 -0.051559 0.049856 -0.046276 -0.044370 0.005964 -0.042713 -0.018983 -0.056325 -0.053581 -0.106128 -0.045745 -0.105085 -0.137515 -0.034382 0.129064 -0.002135 -0.096189 0.151989
0.047280 0.009084 -0.026299 0.013747 0.030614 0.031466 -0.083539 -0.037043 0.029521 0.037780 -0.033683 -0.138624 -0.041837 0.036685 -0.080793 -0.056223 -0.013402 -0.018265 0.011874 -0.041360 -0.058506 -0.095337 -0.088379 -0.060889 -0.071366 -0.066558 0.059649 -0.006309 -0.044524 0.135719
0.067275 0.041769 -0.048367 0.008016 0.030556 0.061809 -0.092514 -0.034013 0.027173 0.021460 -0.022642 -0.149936 -0.026244 0.012890 -0.090023 -0.041676 -0.033809 -0.000930 0.050481 -0.022578 -0.058594 -0.062894 -0.131553 -0.005734 0.052378 -0.089227 -0.020393 -0.016809 -0.013869 0.080783
0.025142 0.001251 0.016565 -0.021801 -0.015814 -0.030528 0.026127 -0.047323 -0.014163 -0.009601 -0.067567 0.045374 0.092771 0.015750 -0.019568 -0.015963 -0.055046 0.098595 0.099420 -0.023551 -0.037654 -0.011608 -0.049887 0.236652 0.072817 0.011553 -0.152551 -0.017929 0.102193 -0.037352
0.005739 -0.025054 0.028815 -0.028219 -0.013819 -0.046503 0.020039 -0.061044 -0.008280 0.001598 -0.074721 0.055569 0.073798 0.023639 0.015239 -0.008259 -0.061998 0.087132 0.084707 -0.067770 -0.040813 -0.037182 -0.072869 0.261121 0.015360 0.018577 -0.103545 -0.025366 0.068124 -0.011636
-0.015805 -0.050892 0.047206 -0.018353 -0.016427 -0.075860 0.030657 -0.075106 -0.005075 0.014944 -0.091793 0.064329 0.058185 0.036443 0.018639 -0.003453 -0.039100 0.062342 0.047846 -0.084276 -0.028001 -0.075754 -0.018709 0.196795 -0.120455 0.034995 -0.004516 -0.026428 0.034617 0.023128
-0.038583 -0.068385 0.061578 -0.031306 -0.017520 -0.100200 0.053688 -0.086437 -0.010096 0.045833 -0.112100 0.072391 0.063069 0.044706 0.057043 0.010307 -0.024131 0.023459 -0.000912 -0.097511 -0.018104 -0.090922 0.003572 0.110167 -0.152591 -0.001824 0.048390 -0.031118 -0.011626 0.024810
-0.021322 -0.051141 0.049264 -0.016899 -0.027514 -0.089685 0.046146 -0.073606 -0.003933 0.031224 -0.099420 0.061318 0.054921 0.051073 -0.006545 -0.028813 -0.037431 0.060368 0.038592 -0.073295 -0.014447 -0.094122 -0.010330 0.193007 -0.138883 0.027769 -0.003818 -0.007939 0.030928 0.035641
0.002855 -0.019624 0.028663 -0.023461 -0.024830 -0.060888 0.037252 -0.058740 -0.012505 0.018445 -0.081704 0.056135 0.070774 0.040713 -0.018203 -0.029022 -0.061647 0.080843 0.076472 -0.048515 -0.022364 -0.059220 -0.051196 0.252939 -0.022188 0.016877 -0.088539 -0.007235 0.061084 0.002476
-0.010870 0.104712 0.029797 0.166451 0.076471 -0.016442 -0.046465 0.149026 0.086557 -0.039502 -0.076114 0.087570 -0.013519 -0.004196 0.034984 -0.007672 0.064149 0.048435 -0.064239 0.043959 0.009896 0.027999 -0.113348 -0.004341 -0.033293 0.065306 0.063698 -0.144347 0.103412 -0.052090
0.017844 0.067857 0.033055 0.100714 0.011414 -0.014526 -0.033114 0.106862 0.028622 -0.032501 -0.064757 0.048714 -0.037980 0.016746 0.018282 0.009878 0.045060 -0.018655 -0.007535 0.079747 0.015679 0.072704 -0.095817 -0.016221 -0.065376 0.085619 -0.038141 -0.091654 0.048842 -0.070910
0.030332 0.020687 0.013949 0.038061 0.013572 -0.000022 0.019596 0.081935 -0.013407 -0.005569 -0.045283 0.004474 -0.030739 0.033013 0.013673 0.045933 0.033542 -0.040870 0.004706 0.073059 0.017863 0.065842 -0.041730 -0.016454 -0.035901 0.063634 -0.059776 -0.067427 0.011136 -0.059024
0.021858 -0.004289 0.000335 0.000132 0.001260 0.013361 0.038052 0.078177 -0.026188 0.004286 -0.020775 -0.007732 -0.015956 0.015308 0.018506 0.031945 0.022084 0.011279 -0.017030 0.020030 -0.026570 0.018856 0.004329 -0.031829 -0.007195 -0.001821 0.001326 -0.039582 0.025319 -0.033323
0.006263 -0.031056 -0.012718 -0.039882 -0.018196 0.027894 0.045726 0.073221 -0.024310 0.025043 0.020388 -0.022822 -0.017723 -0.011411 0.023485 0.008443 0.025824 0.075306 -0.005381 -0.028184 -0.065877 -0.014889 0.056643 -0.045479 0.017933 -0.061061 0.081802 0.003605 0.039520 -0.034431
-0.028803 -0.044499 -0.041397 -0.099367 -0.020188 0.038397 0.082539 0.061655 -0.046445 0.030438 0.054320 -0.049559 -0.018808 -0.037850 0.022436 0.035089 0.010324 0.017405 -0.002013 -0.067517 -0.094251 -0.038230 0.050493 0.019274 0.032527 -0.068609 0.122562 -0.002028 0.019055 -0.069501
-0.065346 -0.030968 -0.056167 -0.162442 -0.087023 0.032999 0.092738 0.054231 -0.092953 0.000349 0.045766 -0.069881 -0.068998 -0.076344 -0.006702 0.064521 -0.013521 -0.110076 0.009722 -0.071902 -0.148699 -0.023199 -0.006040 0.094013 0.008338 -0.027304 0.115529 -0.015983 -0.013156 -0.135132
-0.034679 -0.043523 -0.052291 -0.113822 -0.041847 0.033727 0.099498 0.071348 -0.052046 0.002160 0.018334 -0.034949 -0.022358 -0.056131 0.003802 0.035901 -0.002773 0.023212 -0.080146 -0.058363 -0.159504 -0.044258 0.049508 -0.019479 0.030311 -0.042848 0.040935 0.037282 -0.012424 -0.011143
-0.001188 -0.029947 -0.021378 -0.050264 -0.030362 0.027528 0.074933 0.086762 -0.024414 -0.003290 -0.016840 -0.006605 -0.011018 -0.023567 0.013467 0.010798 -0.011063 0.095323 -0.143006 -0.016337 -0.151915 -0.058152 0.095316 -0.054460 0.058470 -0.041779 -0.029734 0.073772 0.014706 0.112921
0.018355 0.004699 0.002318 -0.001406 -0.014467 0.008747 0.044992 0.098434 -0.018868 -0.002335 -0.035804 -0.007438 -0.029446 0.003799 0.018935 0.034637 -0.007953 0.020178 -0.123839 0.076915 -0.081495 -0.058879 0.032391 0.027460 0.044353 0.047615 -0.077064 0.064515 -0.033796 0.100925
0.033019 0.043835 0.023435 0.044337 -0.001423 -0.011391 0.004388 0.114947 -0.002926 0.000787 -0.038694 -0.007835 -0.062049 0.021805 0.022203 0.051078 0.006535 -0.047992 -0.065916 0.162790 -0.008000 -0.043768 -0.026127 0.112196 0.021601 0.137598 -0.093711 0.055645 -0.082083 0.051915
0.017273 0.084271 0.043289 0.114244 0.018058 -0.016534 -0.041516 0.135901 0.035920 -0.026585 -0.051314 0.042434 -0.054356 0.009469 0.039614 0.025958 0.031490 -0.026176 -0.044059 0.120278 0.010208 -0.004451 -0.068608 0.090021 -0.005751 0.114878 -0.019074 -0.038092 0.008491 0.008537
-0.016626 0.103489 0.036047 0.170977 0.070786 -0.011811 -0.052227 0.158526 0.083324 -0.037709 -0.061632 0.110622 -0.040038 -0.003881 0.016006 -0.042596 0.079501 0.068068 -0.045883 0.078107 -0.000844 0.010056 -0.127653 0.007866 -0.030414 0.027243 0.095718 -0.117872 0.088501 -0.058162
0.034671 0.016690 0.018371 0.038280 0.018539 -0.004089 0.012754 0.086368 -0.009429 0.003495 -0.040590 -0.003348 -0.039763 0.035331 0.008499 0.046292 0.029303 -0.044206 -0.026758 0.127168 0.018570 0.026200 -0.061873 -0.000662 -0.017469 0.071814 -0.064138 -0.056290 -0.028169 -0.050189
0.027182 -0.005360 0.001933 -0.002120 -0.000599 0.009605 0.039104 0.080512 -0.027057 0.004084 -0.023116 -0.008426 -0.017939 0.012235 0.016945 0.036639 0.011825 0.014256 -0.053941 0.040437 -0.040286 -0.001633 0.004695 -0.019027 0.004648 -0.001881 -0.011982 -0.018817 0.009917 -0.001713
0.013662 -0.030688 -0.013993 -0.045674 -0.023338 0.023408 0.050240 0.072713 -0.029837 0.012841 0.007414 -0.020122 -0.015171 -0.024405 0.021587 0.021321 0.007006 0.084412 -0.048291 -0.049120 -0.097299 -0.021608 0.069445 -0.035270 0.021177 -0.063787 0.067497 0.031093 0.039775 0.024742
-0.063276 -0.025452 -0.062397 -0.165996 -0.078886 0.030190 0.102017 0.062863 -0.093828 0.000325 0.035281 -0.089094 -0.047858 -0.081959 0.019795 0.104221 -0.027445 -0.130634 -0.013468 -0.106960 -0.136921 -0.001032 -0.004673 0.081097 0.001390 -0.003926 0.096202 -0.050716 0.004331 -0.141428
0.009040 -0.030850 -0.018624 -0.052646 -0.025465 0.024925 0.059354 0.078963 -0.023758 0.002993 -0.004478 -0.015417 -0.020069 -0.039726 0.024858 0.033557 0.005765 0.100249 -0.090534 -0.037587 -0.141149 -0.045093 0.090303 -0.044298 0.039907 -0.042388 0.028304 0.046166 0.033213 0.077550
0.024602 -0.001576 0.003707 -0.001173 -0.008097 0.009008 0.038778 0.088839 -0.024916 -0.003596 -0.028066 -0.004878 -0.029700 0.001871 0.023320 0.051616 0.010695 0.021845 -0.087960 0.058211 -0.073707 -0.026869 0.019480 -0.002572 0.027466 0.025521 -0.038530 0.015489 -0.018891 0.034746
0.033851 0.026804 0.025613 0.047635 0.006103 -0.006719 0.004629 0.097295 -0.013383 -0.001173 -0.042797 -0.000701 -0.056687 0.031313 0.014096 0.062815 0.029375 -0.044625 -0.051873 0.154272 -0.008023 -0.002000 -0.049674 0.047529 0.008205 0.097629 -0.078808 -0.005855 -0.070467 -0.031403
-0.047961 0.093209 0.003265 -0.046195 0.129364 -0.102661 -0.107139 -0.077072 -0.207712 0.043826 0.041516 0.002694 -0.101096 -0.143447 -0.199436 0.280060 -0.059966 0.222904 0.176204 -0.061353 0.094202 0.015620 -0.091721 0.014665 0.003234 0.037080 0.070471 0.060765 0.068863 0.223408
0.015591 0.066202 0.000466 -0.055129 0.104971 -0.117132 -0.145469 -0.097254 -0.124733 0.065984 0.040786 0.001346 -0.073768 -0.084814 -0.105047 0.205150 0.021672 0.177949 0.122439 -0.035318 0.029959 -0.014803 -0.016775 0.011985 0.022156 0.014810 0.016482 0.022173 -0.007147 0.072586
0.075248 0.038299 -0.006472 -0.057770 0.079234 -0.117493 -0.173452 -0.124616 -0.065209 0.085805 0.043464 0.013280 -0.030767 -0.020266 -0.006488 0.119855 0.093738 0.109988 0.055993 0.005578 -0.040280 -0.030758 0.054947 -0.001917 0.046533 -0.024006 -0.038891 -0.027673 -0.036479 -0.065925
0.120483 0.012097 -0.016978 -0.060845 0.057695 -0.093498 -0.190101 -0.143898 -0.024796 0.083386 0.049099 0.014165 0.013479 0.020865 0.071114 0.035555 0.135863 0.036062 -0.015163 0.037736 -0.101069 -0.044151 0.100665 -0.003043 0.029146 -0.052474 -0.070448 -0.078753 -0.026905 -0.161501
0.139933 -0.009970 -0.033370 -0.060182 0.044890 -0.034069 -0.196608 -0.140680 0.000853 0.052715 0.049924 0.005022 0.048856 0.047123 0.108746 -0.036667 0.128729 -0.021106 -0.075016 0.061149 -0.114590 -0.077483 0.086677 0.039284 -0.008786 -0.048348 -0.050485 -0.111390 -0.007411 -0.159964
0.127349 -0.030754 -0.063498 -0.046493 0.034211 0.046070 -0.183837 -0.122364 0.010019 0.006563 0.043433 0.006138 0.073516 0.082966 0.113144 -0.078262 0.066061 -0.032655 -0.120280 0.088806 -0.077527 -0.091363 0.034158 0.097651 -0.032819 -0.054274 -0.006854 -0.089536 0.015376 -0.086009
0.091647 -0.051086 -0.109411 -0.021640 0.016727 0.125047 -0.137158 -0.097738 0.008104 -0.050609 0.030280 0.028727 0.075621 0.142032 0.081896 -0.072985 -0.016124 0.001182 -0.137944 0.109089 -0.015088 -0.045163 -0.026852 0.123807 -0.039824 -0.071373 0.047268 -0.013109 0.039526 0.026208
0.037734 -0.068199 -0.152408 0.002743 -0.005221 0.184749 -0.056023 -0.058803 0.000079 -0.100872 -0.009278 0.050239 0.023925 0.190397 0.022450 -0.014604 -0.061295 0.061675 -0.099756 0.115791 0.065619 0.074478 -0.086820 0.079713 -0.042578 -0.065624 0.115590 0.090235 0.072581 0.114556
0.005335 -0.065374 -0.178339 0.021993 -0.009750 0.219907 0.007917 -0.025263 -0.026174 -0.151432 -0.068636 0.068063 -0.036603 0.204249 -0.010333 0.077472 -0.058110 0.114683 -0.021601 0.100297 0.094381 0.158266 -0.071317 0.001749 -0.022941 -0.052596 0.154666 0.082033 0.088986 0.101366
-0.017694 -0.020177 -0.173228 0.015658 -0.020889 0.201771 -0.013394 0.041426 -0.003011 -0.106398 -0.096898 0.025251 -0.060957 0.137257 0.040566 0.087226 0.016338 0.124550 0.070381 0.032883 0.090008 0.125352 -0.032893 -0.001077 0.010035 0.002425 0.173421 0.073592 0.008836 -0.012713
-0.045583 0.065863 -0.150586 -0.004698 -0.019784 0.147752 -0.039052 0.122879 0.011238 -0.067095 -0.098236 -0.004236 -0.046488 0.064507 0.102239 0.052923 0.062526 0.069713 0.134455 -0.065098 0.097477 0.018140 0.050997 0.016748 0.031419 0.065554 0.069262 0.049984 -0.107316 -0.056271
-0.064791 0.130743 -0.114224 -0.032004 -0.014633 0.063912 -0.045598 0.177868 0.010467 -0.020958 -0.062875 -0.013081 -0.024540 0.022590 0.115642 -0.006494 0.090701 -0.008540 0.136552 -0.119375 0.087294 -0.047868 0.085050 0.032881 0.002264 0.093251 -0.051055 0.039511 -0.129941 -0.026233
-0.069557 0.160593 -0.080864 -0.052313 -0.007646 -0.023805 -0.031650 0.215543 -0.013424 0.017763 -0.017771 0.005663 -0.003392 0.026401 0.088687 -0.053326 0.093736 -0.072587 0.094140 -0.133131 0.054553 -0.054082 0.070270 0.039797 -0.037413 0.067557 -0.139764 0.037952 -0.103414 0.038027
-0.053517 0.147594 -0.048502 -0.063337 0.008996 -0.093419 -0.023693 0.233132 -0.060622 0.044604 0.028397 0.033322 0.022070 0.054132 0.047446 -0.069260 0.049913 -0.082495 0.034166 -0.103206 0.019681 -0.028623 0.027775 0.022442 -0.051774 0.027490 -0.149326 0.029956 -0.068210 0.055083
-0.020653 0.103733 -0.010655 -0.071903 0.040518 -0.130522 -0.033209 0.224597 -0.113374 0.050689 0.066346 0.043502 0.036927 0.060469 -0.019912 -0.069852 -0.031983 -0.045716 -0.045328 -0.021897 0.023060 -0.018184 -0.006866 -0.001889 -0.035069 -0.007022 -0.078842 0.011285 -0.051878 -0.001704
0.021280 0.045013 0.026989 -0.083221 0.079652 -0.143603 -0.044720 0.191758 -0.177704 0.036307 0.086946 0.043019 0.038864 0.042521 -0.110858 -0.068091 -0.130767 0.001664 -0.124953 0.077152 0.046989 -0.008634 -0.015449 -0.017420 -0.011248 -0.038139 0.027524 0.012795 -0.024354 -0.063614
0.065635 -0.018488 0.061515 -0.088365 0.119386 -0.141281 -0.048132 0.152667 -0.265313 0.018702 0.095882 0.049978 0.047730 0.019882 -0.199261 -0.050768 -0.225388 0.044395 -0.189686 0.176789 0.068785 0.017459 -0.021862 -0.048674 0.019516 -0.083740 0.137119 0.003448 0.025716 -0.098104
-0.047457 0.004826 0.086340 -0.136927 0.003215 0.088356 -0.091942 0.054053 0.300055 0.126842 -0.093633 -0.266702 0.014134 0.109025 -0.145511 -0.094568 -0.133065 0.092700 -0.043392 -0.127601 0.023627 0.124558 0.070196 0.073132 -0.088606 0.089546 -0.033665 -0.056504 0.100204 -0.082697
-0.043093 0.054162 0.063821 -0.126107 -0.014163 0.082007 -0.031381 0.031526 0.175988 0.115797 -0.135266 -0.115958 0.154077 0.045811 -0.107576 -0.020057 -0.105244 -0.000702 -0.047848 -0.077532 0.078558 0.088457 -0.008710 0.022423 -0.020940 -0.003605 0.016126 0.001175 0.058905 -0.128046
-0.049606 0.069200 0.053290 -0.109077 -0.046531 0.083786 0.018246 0.007123 0.096077 0.119081 -0.133557 0.051326 0.172765 0.028501 -0.086385 -0.005934 -0.051025 -0.069052 -0.012008 -0.027332 0.071679 0.012252 -0.050119 -0.015617 0.032504 -0.045614 0.060595 0.018311 0.002522 -0.129035
-0.050327 0.056497 0.052203 -0.091244 -0.070921 0.096400 0.053644 -0.015881 0.055839 0.109643 -0.104617 0.172271 0.109450 0.053063 -0.094297 -0.016023 -0.008077 -0.106474 0.037792 0.020494 0.034454 -0.069321 -0.043290 -0.035857 0.083344 -0.045902 0.084348 -0.008476 -0.015850 -0.075485
-0.045033 0.029609 0.054298 -0.078579 -0.083367 0.108093 0.069142 -0.033561 0.037172 0.099455 -0.048139 0.255389 -0.018561 0.095840 -0.124772 -0.039076 0.018613 -0.124882 0.104486 0.078116 0.002609 -0.162990 -0.015797 -0.015448 0.134282 -0.020490 0.100475 -0.044110 -0.021376 0.012862
0.018337 -0.024647 0.071908 -0.080413 -0.061404 0.121688 0.061343 -0.015781 -0.002231 0.054575 -0.034324 0.267931 -0.023291 0.118740 -0.092321 0.054178 0.078846 -0.085469 0.136116 0.074133 -0.108748 -0.179256 0.011133 -0.049144 0.075315 -0.007033 0.020333 -0.049683 -0.012017 0.130313
0.033647 -0.017865 0.077483 -0.095394 -0.031197 0.118052 0.019863 0.003291 0.013741 0.033189 -0.042590 0.218113 0.082374 0.057508 -0.028366 0.110658 0.081760 -0.082289 0.059756 0.026578 -0.129004 -0.052370 0.011842 -0.062670 0.042701 0.046589 -0.003135 0.011039 -0.018942 0.088763
0.037987 -0.013052 0.079243 -0.111549 0.003707 0.116562 -0.038333 0.029299 0.058843 0.010267 -0.011673 0.140940 0.114290 -0.009354 0.016953 0.164719 0.076837 -0.070848 -0.010215 -0.004144 -0.104697 0.048368 0.011353 -0.033681 -0.005250 0.075743 -0.024358 0.069399 -0.015366 0.052231
0.024571 -0.014004 0.081088 -0.124925 0.039212 0.120645 -0.104834 0.052231 0.161371 -0.029810 0.055543 0.031504 0.051553 -0.080459 0.034547 0.214264 0.064089 -0.057701 -0.093159 -0.032200 -0.032440 0.114309 0.033187 0.029077 -0.074945 0.029941 -0.063097 0.100517 0.012563 0.045334
-0.002837 -0.038231 0.092274 -0.131858 0.049030 0.126598 -0.163394 0.063928 0.305740 -0.046989 0.136958 -0.067484 -0.123285 -0.115755 0.023003 0.209179 0.061858 -0.027002 -0.172347 -0.047980 0.050874 0.104938 0.077753 0.093367 -0.173518 -0.104694 -0.132603 0.087518 0.014903 0.062252
0.035278 0.093079 0.010600 0.011548 -0.002504 -0.023582 0.180448 -0.078628 -0.088358 -0.202506 0.026650 0.100765 -0.085380 0.151737 -0.205276 0.021165 0.026303 0.014300 -0.001564 0.011926 -0.007819 0.011798 0.298873 0.061428 -0.063378 -0.105397 -0.060695 -0.098906 0.122579 -0.008992
0.017390 0.050818 0.013606 0.009554 -0.068511 -0.042936 0.116296 -0.057306 -0.074851 -0.123759 0.038330 0.038347 -0.067773 0.114332 -0.168521 -0.024855 0.124354 0.058855 -0.047706 -0.014747 0.036327 0.017807 0.148729 0.075751 -0.037770 -0.032198 -0.027718 -0.088111 -0.005536 -0.011614
0.001168 0.012468 0.014343 0.005583 -0.136504 -0.058055 0.047533 -0.031252 -0.059431 -0.043098 0.054520 -0.022029 -0.047399 0.069219 -0.133415 -0.070029 0.209996 0.108755 -0.081356 -0.035798 0.082904 0.018707 -0.009269 0.100721 0.000104 0.044993 0.005827 -0.068919 -0.125661 -0.017308
-0.013446 -0.023076 0.014190 0.001928 -0.202312 -0.067740 -0.022495 -0.003279 -0.040029 0.038724 0.069213 -0.077248 -0.031443 0.028175 -0.092024 -0.112996 0.287767 0.157286 -0.112861 -0.058615 0.128308 0.029739 -0.171848 0.132390 0.037112 0.116335 0.032699 -0.048071 -0.248989 -0.017920
-0.004607 -0.002814 0.034971 0.063651 -0.079836 -0.058991 -0.000815 -0.009434 -0.063895 0.008389 -0.015031 -0.095108 -0.011112 0.018624 0.006932 -0.007569 0.083353 -0.063261 -0.116140 -0.083180 0.064087 -0.108477 0.007666 -0.028230 0.104627 0.051982 -0.021014 0.111445 0.196977 -0.008409
-0.018307 -0.033552 0.029480 0.053194 -0.113895 -0.039754 -0.008420 -0.018112 -0.076130 0.009463 -0.016153 -0.081128 -0.021176 0.028977 0.002168 -0.009029 0.118326 -0.018611 -0.135946 -0.117746 0.077541 -0.042099 -0.069344 -0.050713 0.091173 0.039218 -0.023106 0.006241 0.112340 0.031851
-0.031895 -0.072550 0.031542 0.045525 -0.143291 -0.022734 -0.016811 -0.028304 -0.076746 0.021967 0.000082 -0.075735 -0.042067 0.038968 0.005811 -0.019303 0.156584 0.026586 -0.142034 -0.128677 0.090010 -0.004233 -0.127694 -0.078041 0.087218 0.040231 -0.016823 -0.040045 0.073646 0.039582
-0.014161 -0.038147 0.030604 0.054953 -0.110218 -0.038330 -0.013869 -0.026526 -0.074202 -0.003619 0.004746 -0.067246 -0.022840 0.032457 0.009291 0.004525 0.119326 -0.020736 -0.110889 -0.142146 0.072134 -0.026608 -0.087958 -0.063928 0.074964 0.051145 -0.002037 -0.026674 0.118991 -0.010838
-0.004696 -0.012051 0.035134 0.069484 -0.075314 -0.054016 -0.011467 -0.025499 -0.058403 -0.018792 0.026287 -0.062437 -0.033176 0.025773 0.018710 0.024651 0.088722 -0.062940 -0.048949 -0.147240 0.052459 -0.078277 -0.052000 -0.039959 0.056470 0.066799 0.028366 0.029261 0.218751 -0.099509
-0.049581 0.033585 0.057599 -0.052382 0.044515 -0.018327 0.074956 -0.038808 0.008300 -0.013971 -0.093913 -0.123879 -0.001633 -0.052343 0.102658 -0.132508 -0.089045 0.020652 -0.033426 0.034692 0.088334 -0.021309 -0.020739 -0.001398 0.004088 -0.047299 0.025109 0.056241 -0.015862 0.039179
-0.032619 0.050779 0.046419 -0.065647 0.037767 0.008875 0.098799 -0.042597 -0.005152 -0.052716 -0.079103 -0.080974 0.002141 -0.051647 0.146710 -0.167109 -0.114777 0.061824 0.038295 0.058887 0.038151 0.054364 -0.125482 0.061687 0.219252 -0.129146 -0.112676 0.048264 -0.018227 -0.042494
-0.031082 0.042306 0.043899 -0.058791 0.031868 0.009922 0.112119 -0.050662 -0.021540 -0.081705 -0.053208 -0.051498 -0.023552 -0.036828 0.128762 -0.150411 -0.094850 0.057711 0.047094 0.062646 0.019487 0.045503 -0.111206 0.049679 0.194214 -0.119797 -0.107132 0.026785 -0.005012 -0.040908
-0.022489 0.025532 0.055078 -0.035242 0.030775 -0.036223 0.103658 -0.056472 -0.018920 -0.069823 -0.032603 -0.061203 -0.064638 -0.008579 0.031144 -0.098991 -0.011993 -0.020266 -0.015539 0.021713 0.027393 -0.059495 0.061798 -0.026476 -0.095092 -0.007043 0.055712 0.014933 -0.005036 0.060440
-0.030310 0.033513 0.064336 -0.018414 0.034721 -0.048560 0.109454 -0.053871 -0.016464 -0.078713 -0.072262 -0.067361 -0.045979 -0.023773 0.069114 -0.121990 -0.037716 -0.007418 -0.016633 0.044367 0.052566 -0.057098 0.060782 -0.051123 -0.123901 0.021446 0.071002 0.033668 -0.035860 0.069226
-0.043942 0.026216 0.071600 -0.023807 0.037164 -0.046979 0.093011 -0.047115 -0.003050 -0.042657 -0.087662 -0.094068 -0.029746 -0.036867 0.097107 -0.136982 -0.053572 0.001892 -0.027773 0.053083 0.072788 -0.056732 0.024396 -0.049643 -0.104153 0.006579 0.080705 0.050583 -0.054139 0.067745
0.006750 -0.003083 0.064063 -0.036630 0.045616 -0.026923 0.081208 -0.053243 -0.029335 -0.109279 0.018407 -0.023073 -0.083213 -0.020485 0.066702 -0.033207 0.038323 -0.017964 0.018759 -0.001107 -0.045386 -0.031948 0.051387 -0.053143 -0.119762 0.048682 0.076599 -0.028281 0.010670 0.037614
0.021021 -0.006153 0.059366 -0.062042 0.056695 0.023990 0.076039 -0.048741 -0.041687 -0.139957 0.017771 0.003256 -0.043052 -0.050945 0.186826 -0.055048 -0.016978 0.066238 0.097825 0.029590 -0.095129 0.080565 -0.116792 0.024034 0.151924 -0.042052 -0.092912 -0.016833 0.016146 -0.039069
0.023721 -0.009506 0.064424 -0.065985 0.070977 0.030273 0.048462 -0.037688 -0.026275 -0.133367 0.033100 0.000599 -0.041355 -0.074379 0.225882 -0.040265 -0.011023 0.063907 0.100378 0.018538 -0.110506 0.098623 -0.148510 0.028398 0.152254 -0.027240 -0.092449 -0.015261 0.009466 -0.053450
0.019763 -0.036128 0.079128 -0.053098 0.082815 0.005005 0.017600 -0.035142 -0.014838 -0.108518 0.034834 -0.028918 -0.050576 -0.078779 0.193010 0.006929 0.028337 0.015610 0.040762 -0.012010 -0.081863 0.027171 -0.050422 -0.046367 -0.066804 0.074067 0.053057 -0.029078 0.015778 0.002879
0.011938 -0.029503 0.087532 -0.024420 0.069483 -0.027846 0.044993 -0.047368 -0.020828 -0.118975 0.010482 -0.020697 -0.063108 -0.057586 0.166967 -0.021956 0.037222 -0.000269 0.037193 0.000745 -0.066657 -0.017101 -0.011113 -0.079866 -0.162095 0.101422 0.113248 -0.028325 -0.021407 0.036151
0.013043 -0.009330 0.078092 -0.019995 0.058841 -0.036270 0.072063 -0.054900 -0.027719 -0.133535 0.003695 -0.011225 -0.073466 -0.038105 0.120544 -0.033702 0.031235 -0.005709 0.029226 0.006591 -0.056758 -0.025869 0.025826 -0.065962 -0.171734 0.088452 0.102577 -0.031146 -0.007347 0.046178
-0.007658 0.004009 0.025908 0.154403 0.053330 -0.011857 -0.013594 0.056724 0.061838 0.101450 0.018192 -0.052999 0.071364 -0.068356 0.093998 0.018847 -0.115542 -0.055564 -0.072179 0.036748 0.001687 -0.144735 0.108376 0.148961 0.128366 -0.004208 0.109635 0.032357 -0.050662 0.200893
-0.002996 0.005226 0.032797 0.135787 -0.089440 -0.040576 -0.057551 0.032946 0.001834 0.032712 -0.025593 -0.049533 0.022227 -0.047612 0.014361 0.009649 -0.131089 -0.094849 -0.020649 0.086202 -0.039909 -0.001707 0.056046 0.007381 0.033777 -0.002541 -0.034926 -0.004427 -0.026112 0.123944
-0.004291 -0.005543 0.022541 0.113681 -0.173953 -0.041398 -0.084376 0.020405 -0.021779 -0.018671 -0.025165 -0.035068 -0.015855 -0.040666 -0.039493 0.008537 -0.120702 -0.084443 0.035688 0.098020 -0.048034 0.087448 -0.002553 -0.045851 -0.023169 0.006651 -0.103322 -0.059515 -0.002982 0.053502
-0.004726 -0.017325 0.020839 0.120502 -0.184684 -0.030813 -0.080318 0.007868 -0.032129 -0.044198 -0.019700 -0.008229 -0.027685 -0.022684 -0.063155 0.021599 -0.119028 -0.076535 0.072624 0.078086 -0.069180 0.100850 0.025706 -0.061785 -0.040139 -0.018370 -0.106073 -0.066669 0.007369 0.027967
-0.000280 -0.015779 0.023768 0.114944 -0.170625 -0.036464 -0.096963 0.008030 -0.019057 -0.023453 -0.012107 -0.028049 -0.023436 -0.043491 -0.030102 0.016863 -0.097956 -0.080536 0.095216 0.070681 -0.042470 0.108651 -0.007977 -0.072278 -0.048337 0.008349 -0.078533 -0.092741 0.008143 -0.000355
0.001835 -0.014562 0.035395 0.138589 -0.082041 -0.030999 -0.083040 0.009139 0.007790 0.017249 0.017982 -0.022819 0.007465 -0.056808 0.031589 0.035086 -0.080570 -0.087719 0.127579 0.004619 -0.028175 0.053466 0.013858 -0.040136 -0.048417 -0.015858 0.045949 -0.125270 0.015984 -0.035032
0.006921 -0.025647 0.033160 0.154624 0.058888 -0.002069 -0.036401 0.017355 0.058515 0.088564 0.060386 -0.030704 0.068512 -0.065203 0.113409 0.060767 -0.056340 -0.035930 0.137062 -0.085671 0.034591 -0.049785 0.047278 0.057771 0.011576 -0.039723 0.207910 -0.149281 0.010540 -0.014703
-0.018065 -0.076293 -0.069286 0.078198 0.101563 -0.013276 0.078677 0.006820 0.089090 0.096060 0.070680 0.003228 0.021392 -0.088395 -0.008440 0.012816 0.036751 -0.005407 0.105001 -0.058448 -0.008691 0.008147 -0.062581 -0.013663 -0.046333 0.018932 0.094530 -0.020238 -0.044608 -0.178033
-0.023295 -0.105717 -0.130887 0.042172 0.126279 -0.022736 0.153202 -0.009995 0.089795 0.083969 0.040114 0.033834 0.021716 -0.078432 -0.083662 -0.014406 0.064186 0.025477 0.011953 -0.052429 -0.063783 0.018598 -0.086487 -0.094668 -0.053926 0.006797 -0.024294 0.066220 -0.053567 -0.167064
-0.018044 -0.105365 -0.143033 0.038317 0.122695 -0.024418 0.180070 -0.016368 0.080389 0.066925 0.023230 0.050475 0.022090 -0.061951 -0.122699 -0.026327 0.044794 0.048222 -0.037006 -0.034314 -0.083880 0.005961 -0.055945 -0.101092 -0.035779 -0.012444 -0.081835 0.102054 -0.043497 -0.108638
-0.014769 -0.102335 -0.129133 0.038868 0.120484 -0.030852 0.167176 -0.010452 0.086453 0.097577 0.016205 0.019218 0.031039 -0.063618 -0.104403 -0.032292 0.029241 0.036091 -0.070427 0.000187 -0.069704 -0.024270 -0.056930 -0.054254 -0.012952 0.009929 -0.089541 0.151599 -0.081143 -0.050335
-0.009481 -0.070383 -0.068210 0.074523 0.094020 -0.024829 0.096223 0.012112 0.085339 0.121468 0.024542 -0.025869 0.034262 -0.065157 -0.033181 -0.027444 -0.026184 0.003234 -0.078000 0.059224 -0.036972 -0.092057 -0.010613 0.070660 0.038012 0.033748 -0.040853 0.163250 -0.097112 0.068403
-0.006421 -0.000488 0.015258 0.144050 0.033823 -0.016970 -0.006361 0.047553 0.045559 0.085494 0.014984 -0.044455 0.059172 -0.064238 0.064522 0.014732 -0.103781 -0.058687 -0.051086 0.036277 -0.013219 -0.110463 0.090567 0.119696 0.104685 -0.002963 0.082936 0.046848 -0.050252 0.162079
-0.002256 -0.003070 0.031345 0.153930 -0.123343 -0.028048 -0.036352 0.000850 -0.045851 -0.025909 -0.016508 -0.019979 -0.013828 -0.019081 -0.050397 0.011483 -0.100915 -0.088543 0.022607 -0.001025 -0.117985 0.063391 0.067644 0.038103 0.006033 -0.085097 -0.039441 0.146388 -0.041772 -0.051340
0.000239 -0.007604 0.023409 0.154526 -0.136859 -0.023180 -0.025502 -0.012380 -0.055244 -0.058817 -0.011823 0.005713 -0.030494 -0.001273 -0.075493 0.026846 -0.099485 -0.082640 0.049857 -0.020651 -0.130935 0.088740 0.090593 0.008703 -0.018623 -0.108109 -0.053272 0.124024 -0.022554 -0.081954
0.001199 -0.011065 0.032638 0.154798 -0.119491 -0.024075 -0.045495 -0.006920 -0.045810 -0.032928 -0.000337 -0.011610 -0.020302 -0.023645 -0.043698 0.030470 -0.082403 -0.082719 0.076415 -0.033587 -0.114253 0.087562 0.055641 0.003736 -0.017577 -0.091832 -0.005653 0.106889 -0.033713 -0.097238
0.005941 -0.025372 0.021699 0.143992 0.039195 -0.009543 -0.024260 0.012936 0.042846 0.075542 0.052968 -0.023932 0.056747 -0.061245 0.077369 0.051064 -0.054227 -0.041527 0.122572 -0.061339 0.015604 -0.031794 0.034546 0.045040 0.004776 -0.039600 0.169167 -0.117533 0.005141 -0.028689
-0.007357 -0.075194 -0.139004 0.012430 0.082505 -0.022773 0.116595 0.009288 0.080244 0.046904 0.034180 0.024875 0.019728 -0.103957 -0.069610 0.026953 -0.042162 0.047266 0.035200 0.018932 0.033693 0.012070 -0.058543 -0.120564 -0.046493 0.092326 -0.096271 -0.188280 0.093647 0.032039
-0.002783 -0.073032 -0.152808 0.011773 0.075152 -0.022645 0.139977 0.002972 0.078749 0.025628 0.022546 0.044844 0.011951 -0.081888 -0.106012 0.013315 -0.061439 0.061630 -0.001427 0.041373 0.010233 0.008815 -0.021219 -0.121332 -0.039220 0.075509 -0.147920 -0.169837 0.109254 0.075214
-0.003319 -0.072659 -0.138051 0.010696 0.078350 -0.027187 0.124494 0.007657 0.079696 0.059854 0.015961 0.011495 0.027594 -0.090032 -0.079870 0.004849 -0.063277 0.046793 -0.033500 0.067179 0.022644 -0.021069 -0.042023 -0.085950 -0.011708 0.102277 -0.147686 -0.126063 0.083253 0.113313
0.213194 0.016902 0.118495 -0.032098 -0.070767 -0.100405 0.132766 0.009845 0.060037 -0.086622 -0.235538 0.028654 -0.143848 -0.001808 -0.040712 0.204901 -0.125084 -0.041909 -0.094990 -0.087732 0.088228 -0.002044 -0.118188 0.030456 -0.031721 0.036866 0.070312 -0.032136 -0.085564 -0.007507
0.223609 -0.009617 0.159810 -0.030141 -0.084089 -0.041429 0.096320 0.022277 0.062519 -0.019070 -0.108678 0.004209 -0.037498 -0.025240 -0.014830 0.137475 -0.058222 0.081868 -0.016233 0.012772 0.050980 -0.019823 -0.048442 -0.015028 -0.004558 0.035297 -0.001270 0.001153 -0.050428 0.026409
0.218117 -0.040337 0.195755 -0.015467 -0.088445 0.026181 0.045735 0.034464 0.051706 0.051759 0.032196 -0.005602 0.051044 -0.044612 0.005116 0.036107 0.014768 0.179215 0.073844 0.086469 0.024887 -0.032072 0.010939 -0.040091 0.035717 0.005682 -0.063479 0.021971 -0.036761 0.041887
0.162908 -0.066824 0.201691 -0.010338 -0.062296 0.090158 -0.001047 0.073741 0.004624 0.094418 0.148675 -0.009344 0.079161 -0.059963 0.000962 -0.081890 0.074739 0.166268 0.097326 0.114165 0.021648 -0.006801 0.035708 -0.037302 0.022061 -0.021397 -0.049087 0.033870 -0.009254 0.023934
0.081992 -0.072911 0.180235 -0.024173 0.006782 0.122361 -0.024445 0.125018 -0.066064 0.071804 0.152290 -0.025533 0.063364 -0.055950 -0.020966 -0.123691 0.078293 0.051322 0.037715 0.060414 0.025468 0.032247 0.008974 0.006349 -0.012643 -0.028394 0.027379 -0.012245 0.017741 0.007820
0.020482 -0.063116 0.138540 -0.034154 0.084272 0.087832 -0.038205 0.144056 -0.116625 0.032919 0.059064 -0.034380 0.034258 -0.029512 -0.051806 -0.092486 0.056760 -0.054640 -0.037899 -0.005119 -0.008487 0.068641 -0.016545 0.031151 -0.017460 -0.056197 0.093089 -0.030210 0.058728 -0.012908
0.001980 -0.021483 0.086910 -0.018888 0.163524 0.013444 -0.032083 0.137051 -0.118495 0.001522 -0.092606 -0.048554 -0.002407 0.009327 -0.073447 0.000238 0.031210 -0.108458 -0.063692 -0.074288 -0.054189 0.077708 0.004916 0.046374 0.018212 -0.071675 0.101690 0.013387 0.052165 -0.055058
0.013546 0.004061 0.043329 0.008350 0.245832 -0.040721 -0.053514 0.061704 -0.083365 -0.033573 -0.170121 -0.048003 -0.026437 0.073414 -0.080885 0.068634 0.013300 -0.092533 -0.018446 -0.080770 -0.078781 0.021508 -0.015698 0.062437 0.053597 -0.063038 0.001715 0.055785 -0.039040 -0.071381
-0.026354 -0.052503 0.027507 0.058499 0.274687 -0.041930 -0.085198 -0.056231 -0.028839 -0.067498 -0.185807 -0.042463 -0.062363 0.158755 -0.060772 0.089857 0.026691 -0.051203 0.041633 0.003095 -0.026404 -0.060004 -0.095832 -0.012562 0.039131 -0.063598 -0.115453 0.095971 -0.119233 -0.039507
-0.032215 0.002532 0.049309 0.043585 0.238954 -0.016308 -0.086309 -0.057460 -0.032669 -0.081661 -0.032760 0.040641 -0.022658 0.109967 -0.038435 0.039076 -0.012354 -0.053933 0.017739 -0.057454 -0.025240 -0.021745 -0.023133 0.019193 0.022464 0.042062 -0.127528 0.094523 -0.085705 -0.051262
-0.063672 -0.024082 0.092149 0.025700 0.156711 0.034002 -0.079642 -0.055276 -0.054671 -0.058007 0.056388 0.082306 0.001485 0.056641 -0.000306 -0.000920 0.005379 -0.008464 -0.005483 -0.061036 -0.016189 0.033836 0.004116 -0.020099 -0.013899 0.077379 -0.054193 0.049810 -0.006214 -0.017868
-0.114873 -0.017946 0.121477 0.004640 0.079671 0.097418 -0.060013 -0.010595 -0.072383 -0.008388 0.082942 0.061663 0.005892 -0.025134 0.011861 -0.032586 0.032611 0.084530 0.002100 -0.020639 0.007010 0.019946 0.030113 -0.017217 -0.006334 0.046930 0.013312 -0.003984 0.002495 0.005458
-0.161713 0.036804 0.132223 0.003146 0.018287 0.125055 -0.045028 0.018140 -0.055193 0.027281 0.098250 0.043157 0.032736 -0.091279 -0.004958 -0.049990 0.053276 0.121951 0.015398 0.019613 0.017238 -0.016266 -0.002556 0.047021 -0.017725 -0.023010 0.050302 -0.015525 0.019842 0.060720
-0.197473 0.110111 0.120398 0.007391 -0.031582 0.093153 -0.021898 0.020230 -0.017851 0.045035 0.086721 0.029438 0.052576 -0.105257 -0.033246 -0.042674 0.036293 0.092862 0.026553 0.028219 0.004797 -0.030881 -0.074813 0.053443 -0.026511 -0.065759 0.044877 -0.003945 0.038037 0.099186
-0.199969 0.165788 0.110082 -0.004789 -0.051821 0.031355 -0.007567 -0.035291 0.029553 0.025722 0.050284 0.008884 0.056974 -0.071686 -0.038090 0.004839 -0.016414 0.031815 0.005949 0.019357 0.003543 -0.008347 -0.098634 0.021489 -0.011986 -0.035709 0.023491 -0.033810 0.022480 0.073449
-0.167869 0.180658 0.099559 -0.034799 -0.049680 -0.036429 0.004647 -0.127286 0.050381 0.022464 0.018921 -0.009564 0.025678 0.016667 -0.024654 0.057691 -0.069632 0.001448 -0.023741 0.017199 -0.026057 0.057052 -0.048694 -0.062688 -0.008816 0.030878 0.007259 -0.023263 -0.008482 -0.001189
-0.130954 0.183742 0.095354 -0.062048 -0.044137 -0.095424 0.003341 -0.208966 0.060799 0.055058 0.007220 -0.032092 -0.030257 0.116989 -0.006309 0.109845 -0.108615 0.018162 -0.054159 0.039139 -0.081703 0.104814 0.022952 -0.139144 0.018832 0.076335 -0.004454 -0.006528 -0.090810 -0.095068
-0.172160 -0.109927 0.059740 -0.001614 0.039818 -0.014460 -0.039610 0.034901 0.080713 -0.036247 0.103727 -0.033208 -0.169434 0.247337 -0.041876 -0.125255 -0.114848 0.039895 0.004164 -0.084322 -0.159677 0.048388 0.051293 -0.023947 0.112857 0.153517 0.041046 -0.006995 0.080287 0.014792
-0.135198 -0.062752 0.013771 0.014787 0.032795 -0.006058 -0.021059 0.029373 0.026822 -0.048472 0.080595 -0.021820 -0.044075 0.165348 -0.029002 -0.074665 -0.075244 0.011589 0.010367 -0.074738 -0.103821 0.028241 -0.005728 -0.061086 0.100811 0.080125 0.029016 -0.013949 0.037529 0.008324
-0.095515 -0.016528 -0.024351 0.030765 0.024913 0.012079 -0.012422 0.026518 -0.003997 -0.054723 0.055503 -0.011654 0.045417 0.101529 -0.025318 -0.037537 -0.025453 -0.009239 0.030278 -0.061894 -0.064285 0.010310 -0.052396 -0.081756 0.076025 0.011483 0.010863 -0.010729 0.019641 0.007429
-0.060423 0.017210 -0.054034 0.045265 0.014023 0.035755 -0.004354 0.018576 -0.017254 -0.060590 0.020824 -0.008359 0.095678 0.037622 -0.021704 -0.006522 0.035970 -0.033537 0.052688 -0.036741 -0.035840 -0.027931 -0.094169 -0.079403 0.042997 -0.070151 -0.029216 -0.002096 0.009389 0.031239
-0.028657 0.029431 -0.068325 0.054601 0.012282 0.062780 -0.002133 0.013389 -0.025454 -0.056386 -0.011356 0.002951 0.106448 -0.028775 -0.003876 0.024019 0.108897 -0.074610 0.073446 -0.011707 -0.021342 -0.103981 -0.127299 -0.041136 0.015961 -0.150684 -0.060020 -0.007779 0.011458 0.104385
0.063578 -0.013445 -0.036971 0.039821 0.001675 0.036406 0.008455 0.014806 0.012789 -0.060290 0.005833 -0.017255 0.148953 -0.054571 -0.045515 -0.054626 0.052297 -0.089326 0.045593 -0.031234 -0.065034 -0.020746 -0.060929 -0.009637 0.100149 0.091730 0.043765 -0.056615 0.079685 0.025615
0.071794 -0.035989 -0.017350 0.036990 -0.003460 0.016260 0.031031 0.060910 0.012329 -0.084441 0.041786 0.005125 0.109961 -0.055672 -0.038732 -0.010692 0.032560 -0.064027 0.032960 -0.029972 -0.036901 0.013067 -0.042376 0.010142 0.063392 0.038346 0.015748 -0.029226 0.050392 0.010939
0.063759 -0.072482 0.011329 0.033642 -0.003268 -0.003311 0.050037 0.092532 0.026586 -0.086094 0.079641 0.022486 0.031071 -0.042563 -0.036040 0.024477 0.005832 -0.040663 0.028644 -0.032777 0.009618 0.022358 -0.035611 0.038247 0.053143 -0.007266 0.004593 -0.017910 0.040641 -0.012859
0.051630 -0.117181 0.047808 0.024724 -0.004592 -0.020789 0.064649 0.102103 0.068610 -0.083927 0.110570 0.027264 -0.082106 -0.026394 -0.033806 0.052063 -0.018428 -0.022571 0.027617 -0.038539 0.051436 0.017891 -0.037344 0.066231 0.062368 -0.049007 -0.004398 0.002072 0.022906 -0.043357
0.037553 -0.159331 0.094129 0.007582 -0.004139 -0.035834 0.050274 0.093946 0.144177 -0.068344 0.140700 0.034470 -0.232073 -0.011532 -0.037598 0.072213 -0.029598 0.003506 0.025876 -0.030173 0.107089 -0.017808 -0.016450 0.105897 0.059851 -0.155405 -0.048537 0.057366 0.015719 -0.052152
0.087870 0.132848 -0.106554 0.114050 0.038210 0.044132 0.032271 -0.094621 0.019907 -0.012629 -0.009526 -0.097707 -0.099677 -0.074690 -0.098412 -0.073850 0.139562 -0.146851 0.008558 -0.023334 -0.026050 -0.004419 -0.012296 0.065288 0.086510 -0.052834 0.013366 0.022267 -0.018565 0.068817
0.086836 0.145955 -0.069460 0.111975 0.043983 0.032422 0.100857 -0.081404 0.025667 0.022035 0.046275 -0.079727 -0.054927 -0.019261 -0.090570 -0.059888 0.109093 -0.094090 0.031810 0.034953 -0.041590 0.057182 0.024488 0.110023 -0.000851 -0.006638 0.052093 0.039009 -0.033395 0.022106
0.084080 0.154417 -0.034041 0.105690 0.045131 0.023930 0.166083 -0.067288 0.030660 0.053197 0.097038 -0.065522 -0.001021 0.037451 -0.071101 -0.036729 0.070828 -0.034174 0.046568 0.083892 -0.054168 0.115358 0.046615 0.142656 -0.079375 0.029401 0.098207 0.048457 -0.065300 -0.025684
0.081261 0.160882 -0.003245 0.092231 0.029959 0.015570 0.223819 -0.046800 0.037761 0.072737 0.155678 -0.060748 0.055695 0.089959 -0.052061 -0.015172 0.043441 0.057430 0.065570 0.130258 -0.061637 0.173404 0.050991 0.193601 -0.155228 0.070612 0.129626 0.047902 -0.127429 -0.069416
0.036615 0.112465 -0.011870 0.050560 -0.023586 0.056578 0.075251 -0.036631 -0.016501 0.076340 0.043630 -0.054487 0.133027 0.086040 0.092223 0.053764 -0.056705 0.064417 -0.056585 -0.137660 0.031413 -0.033211 0.145916 -0.050020 0.094662 0.028183 -0.158190 0.014984 -0.105505 0.057209
0.034375 0.077035 -0.000712 0.093236 0.006978 0.053717 0.099504 -0.040084 -0.015700 0.079458 0.061602 -0.060225 0.054172 0.136687 0.090498 0.097151 -0.051423 0.032246 -0.057680 -0.057839 0.069192 -0.083088 0.077574 -0.067482 0.030677 -0.009552 -0.072160 0.006569 0.043961 0.017029
0.040684 0.068853 0.009671 0.113473 0.027127 0.051794 0.115783 -0.030462 -0.025635 0.092955 0.099086 -0.070271 0.013242 0.179470 0.140747 0.141755 -0.029324 0.017410 -0.028728 -0.024224 0.109705 -0.144193 0.024627 -0.046970 -0.026776 -0.014468 -0.040679 -0.023585 0.102728 -0.026368
0.046633 0.057103 0.003683 0.104693 0.012417 0.057466 0.110430 -0.019549 -0.020361 0.050433 0.074178 -0.043027 0.016022 0.142928 0.125023 0.156119 -0.034944 0.003438 -0.062517 -0.058566 0.054831 -0.067995 0.003152 -0.089270 -0.000192 -0.033824 -0.040037 -0.070553 0.048853 -0.033546
0.061039 0.064860 -0.005290 0.078749 -0.007805 0.061597 0.110715 0.013244 -0.030184 0.003642 0.055152 -0.030634 0.049493 0.116908 0.140058 0.174449 -0.053516 0.000190 -0.112349 -0.132149 0.000793 -0.040724 -0.061891 -0.068736 0.005926 -0.105995 -0.060387 -0.170157 -0.047231 -0.040790
-0.175799 -0.045261 0.024858 0.038370 0.010499 -0.010330 0.018772 -0.031099 -0.053961 0.038583 -0.102321 0.087246 -0.049020 -0.044092 0.069199 0.011624 -0.010185 -0.018390 -0.149062 0.027037 0.007544 -0.016282 0.047502 -0.012530 -0.120693 -0.109381 0.017728 0.021220 -0.018403 0.033139
-0.150738 -0.038016 -0.005976 0.025580 -0.000282 0.015390 -0.026600 -0.045379 -0.036542 0.013962 -0.087331 0.069087 -0.008413 -0.078009 -0.005205 -0.033280 0.049669 0.006012 -0.091357 0.053438 0.023519 0.013651 0.033399 -0.008797 -0.063309 0.003493 -0.051421 0.038373 -0.008723 -0.024371
-0.136547 -0.040596 -0.023608 0.032877 -0.009103 0.034969 -0.039678 -0.056986 -0.024972 -0.003964 -0.084974 0.047129 -0.022096 -0.085478 -0.024092 -0.032102 0.079757 -0.016028 -0.065426 0.071981 0.047015 0.004380 0.016638 -0.024282 -0.037161 0.028609 -0.064721 0.047046 -0.011783 -0.024815
-0.090047 -0.016193 -0.016122 0.026928 -0.022206 0.045202 -0.035464 -0.047036 0.002742 0.014525 -0.052179 0.016313 -0.012168 -0.076621 0.002176 -0.051683 0.077661 -0.049370 -0.001598 0.072597 0.042840 -0.010636 0.001025 -0.024299 -0.036344 -0.050376 -0.047760 0.035163 -0.038610 -0.003729
-0.131264 -0.034580 -0.013268 0.034774 -0.006934 0.049566 -0.031704 -0.047514 -0.010250 0.009128 -0.078666 0.042389 -0.039003 -0.101736 0.018542 -0.024093 0.062698 -0.027135 -0.071540 0.073475 0.058385 -0.017673 0.017361 -0.002414 -0.023931 -0.011269 -0.073172 0.043355 -0.015340 -0.000193
-0.154356 -0.033249 0.000233 0.028814 0.002312 0.031366 -0.019125 -0.041617 -0.027003 0.020765 -0.078860 0.065972 -0.018866 -0.090342 0.032012 -0.028281 0.033862 -0.002061 -0.102580 0.057186 0.038928 -0.004872 0.035828 0.019269 -0.055821 -0.033986 -0.059101 0.037779 -0.010706 -0.014104
0.033417 -0.072532 0.012568 0.008946 -0.019681 0.027342 -0.018422 -0.021703 -0.005752 0.030767 -0.102117 -0.038138 0.007722 -0.038441 -0.028165 -0.047029 0.045147 -0.041711 -0.000110 0.026793 -0.045698 0.000772 0.024380 0.000760 0.004080 0.014080 0.027246 -0.013313 -0.023959 0.002622
0.039215 -0.137846 0.026101 0.007934 -0.015806 0.010599 -0.027141 -0.026963 -0.019964 0.048780 -0.132766 -0.032062 0.004032 -0.028996 -0.063142 -0.040783 0.045465 0.014486 -0.001545 -0.018229 -0.030509 0.038953 0.014241 -0.004312 -0.039158 0.053120 0.021326 -0.045180 0.027409 0.009402
0.043521 -0.145592 0.040519 0.010506 -0.013667 -0.006286 -0.010463 -0.020166 -0.031415 0.042002 -0.135580 0.015098 0.024166 -0.036230 -0.025575 -0.040553 0.024242 0.005260 0.004310 -0.036449 -0.001093 0.037421 0.040208 -0.003964 -0.056208 0.059177 -0.009590 -0.033246 0.021174 -0.013008
0.046801 -0.169637 0.077587 0.023551 0.002886 -0.035031 0.018323 -0.056422 -0.055888 0.036378 -0.131809 0.063178 0.042467 0.002594 0.074243 -0.025358 -0.016624 -0.042451 0.017027 -0.058671 0.046846 0.011740 0.094474 -0.078083 -0.084720 0.033242 -0.013165 -0.023825 -0.006214 -0.047684
0.047127 -0.148675 0.043016 0.015841 -0.008682 0.009800 -0.012490 -0.031526 -0.026918 0.043809 -0.147540 0.010436 0.022248 -0.041771 0.015715 -0.044134 0.019909 0.003267 0.012343 -0.043093 0.007270 0.028899 0.042830 0.005583 -0.024609 0.043346 -0.020205 -0.020537 0.014459 -0.010947
0.037862 -0.132432 0.028533 0.015229 -0.009476 0.027310 -0.028606 -0.036439 -0.009620 0.058203 -0.140411 -0.033794 0.004687 -0.041138 -0.009726 -0.051973 0.027422 -0.006463 0.000827 -0.017258 -0.011153 0.018941 0.007685 0.000585 -0.000785 0.036124 0.010801 -0.031023 0.025637 0.006657
-0.072053 -0.074598 -0.100711 -0.160392 -0.056590 -0.046253 0.022243 -0.033939 -0.070682 0.062764 0.074060 -0.097748 0.012162 0.038627 0.038864 0.066326 -0.035816 -0.139004 0.083591 0.117267 0.134277 0.020804 0.001839 0.085517 0.010905 0.060183 -0.029659 0.033860 0.004833 0.047905
0.008856 0.022312 -0.093092 -0.096187 -0.110312 -0.030930 -0.023096 -0.007133 -0.029338 0.005534 0.021892 -0.041877 0.024922 -0.025176 0.009405 0.027628 -0.064749 0.029258 0.045688 0.051081 0.010396 -0.039200 -0.007260 -0.072501 0.003076 0.004612 0.027440 -0.007110 -0.028578 -0.055429
0.042419 0.075052 -0.081836 -0.028702 -0.141576 -0.019808 -0.044103 0.022094 0.023906 -0.041791 0.007334 0.020262 0.009451 -0.052770 -0.013873 -0.032374 -0.045137 0.114123 0.003529 0.025807 -0.060978 -0.045002 -0.069777 -0.072668 -0.059290 -0.013371 0.048115 0.047343 -0.008194 -0.095606
0.056245 0.073217 -0.085604 -0.014481 -0.139289 -0.012952 -0.065166 0.021197 0.040232 -0.054156 -0.003544 0.024890 -0.013008 -0.038209 0.002685 -0.040139 -0.023651 0.089468 0.003185 0.028247 -0.061535 -0.064831 -0.076752 -0.083293 -0.081248 0.035841 -0.022897 0.061927 0.006909 -0.072040
0.056430 0.054020 -0.075907 -0.028402 -0.150533 -0.007712 -0.061734 0.021080 0.030544 -0.035952 0.013622 0.019362 0.007588 -0.014823 0.006822 -0.068151 -0.027590 0.106978 0.012945 0.046588 -0.080258 -0.070291 -0.051863 -0.083578 -0.101646 0.031158 -0.023454 0.089560 -0.024262 -0.077726
0.024479 -0.009246 -0.089056 -0.082610 -0.118332 -0.003018 -0.047311 0.022264 -0.024587 -0.005407 0.027436 -0.026817 -0.000381 0.000645 0.030356 -0.021404 -0.042803 -0.008602 0.024542 0.091667 -0.051169 -0.082852 -0.054013 -0.049463 -0.075523 0.039438 -0.024571 -0.002215 -0.035084 -0.052036
-0.012027 -0.136883 -0.081754 -0.149149 -0.055287 -0.009700 0.008094 -0.006322 -0.083587 0.062632 0.030406 -0.119596 -0.044029 0.034376 0.058444 0.083058 0.008314 -0.131333 0.060136 0.135252 0.037775 0.014841 -0.105155 0.067016 -0.042349 0.057074 0.020755 -0.044335 0.016350 0.028098
0.012816 -0.053653 -0.100099 -0.097988 0.007326 -0.063234 -0.044976 0.019100 0.000113 0.020415 0.014232 -0.015097 -0.037545 0.018025 0.050639 -0.026776 0.001709 -0.055574 0.006984 0.107057 -0.015655 -0.009003 0.051013 0.002343 0.006298 -0.027962 0.015854 -0.091353 -0.016346 0.039465
0.035534 0.010285 -0.097093 -0.025993 0.043429 -0.098898 -0.077835 0.037713 0.075033 -0.019078 -0.028117 0.072858 -0.038120 -0.010628 0.052424 -0.079396 0.009461 0.000612 -0.023804 0.043805 -0.006746 -0.000033 0.127073 -0.008097 0.050749 -0.034756 0.026520 -0.083538 -0.050395 0.020636
0.030421 0.040185 -0.107600 -0.020036 0.045443 -0.101940 -0.073577 0.039398 0.089641 -0.036760 -0.037780 0.091039 -0.036830 -0.033786 0.025635 -0.067609 -0.020951 -0.002102 -0.021006 0.006076 0.043247 0.015986 0.090187 0.005710 0.062335 -0.028713 0.040719 -0.131139 -0.025086 0.002108
0.011036 0.047297 -0.102586 -0.035860 0.046121 -0.110718 -0.049199 0.029296 0.077701 -0.015091 -0.022442 0.073219 -0.003970 -0.046326 0.008115 -0.052553 -0.037889 0.005420 -0.025423 -0.027524 0.058565 0.027155 0.082429 0.016126 0.080709 -0.088126 0.109562 -0.159245 -0.006448 -0.016464
-0.023863 -0.001767 -0.112029 -0.110537 0.012159 -0.090593 -0.009916 0.004722 0.005667 0.023478 0.015308 -0.012738 0.005787 -0.017643 0.017190 0.018514 -0.050562 -0.056536 0.012880 0.004994 0.085020 0.028885 0.071570 0.002042 0.074510 -0.049359 0.066226 -0.121898 -0.005946 0.006471
-0.050886 -0.055706 -0.121851 -0.167249 -0.044477 -0.046575 0.028548 -0.042874 -0.061687 0.059400 0.060959 -0.100667 0.005081 0.035377 0.021717 0.060243 -0.030080 -0.150824 0.080442 0.090665 0.113206 0.029119 0.010088 0.105332 -0.006041 0.123141 -0.083657 0.047525 0.028597 0.091883
0.030708 0.078089 -0.080455 -0.012260 -0.109552 -0.041103 -0.041066 0.009557 0.026507 -0.046242 -0.026526 0.046953 0.028301 -0.060457 0.018475 -0.053304 -0.043608 0.094731 0.031432 -0.117133 -0.076221 -0.030731 0.016484 0.046091 -0.039803 -0.002365 0.051830 0.126565 0.100037 -0.043647
0.055139 0.076245 -0.081522 0.004314 -0.107992 -0.039650 -0.063847 0.014757 0.044175 -0.065309 -0.027112 0.053595 -0.026360 -0.046824 0.012100 -0.022947 -0.031940 0.048766 0.001973 -0.055875 -0.071290 -0.061669 -0.018830 -0.025187 -0.043714 0.001550 0.010165 0.155243 0.019864 -0.063997
0.060624 0.046756 -0.072069 -0.012080 -0.112141 -0.035260 -0.050129 0.028093 0.012172 -0.057691 -0.002134 0.044817 -0.014066 -0.049732 0.013478 0.000195 -0.048403 0.116300 -0.003782 -0.070723 -0.092908 -0.053813 0.005494 -0.043911 -0.042773 -0.024812 0.028047 0.200589 0.002444 0.028023
-0.002693 -0.109254 -0.103698 -0.155319 -0.040843 -0.008397 0.025152 -0.004684 -0.075416 0.044165 0.036425 -0.106068 -0.063753 0.008950 0.032720 0.107046 0.006529 -0.150703 0.049184 0.114889 0.065819 0.022378 -0.105813 0.077860 -0.041574 0.066244 0.002608 -0.063551 0.013985 0.008026
0.056392 0.032564 -0.123103 -0.042145 0.014634 -0.085346 -0.045427 0.044037 0.054277 -0.044440 -0.015580 0.091353 -0.020715 -0.046674 0.024152 -0.008198 -0.036096 0.105219 -0.027204 -0.058790 0.022864 0.002164 0.063033 -0.012096 0.021425 -0.015333 0.011114 -0.013654 0.020932 0.125969
0.050734 0.066831 -0.133624 -0.025020 0.025214 -0.086764 -0.052195 0.036576 0.090356 -0.053293 -0.040101 0.097309 -0.028327 -0.042717 0.020156 -0.038668 -0.031980 0.037324 -0.028638 -0.046635 0.037633 0.003905 0.057016 0.012124 0.023034 0.010380 0.012591 -0.047595 0.045870 0.056652
0.024006 0.067660 -0.131503 -0.044887 0.014372 -0.089393 -0.029303 0.029039 0.070116 -0.027935 -0.042161 0.091030 0.024491 -0.049115 0.023052 -0.069348 -0.035778 0.081727 -0.007838 -0.092164 0.033586 0.027022 0.084316 0.076691 0.038307 0.018769 0.032070 -0.086649 0.139818 0.057912
# The variances of the components (eigenvalues) of identity or combined identity and expression model
1
30
6
1260.970668 622.171792 514.701969 368.231621 178.288803 141.373501 123.600203 108.077802 95.536656 70.169455 60.351993 56.235863 49.519216 44.933492 42.272445 39.564849 34.747298 28.830661 26.147964 25.285930 21.833110 18.995127 18.134667 16.329230 13.965430 12.933174 11.705294 11.301406 9.624030 8.423463

View File

@@ -0,0 +1,29 @@
% Script for internal menpo data split, convert the original training data
% to 2/3rds training and 1/3rd validation
menpo_root = 'D:\Datasets\menpo/';
pts_files = dir([menpo_root, '/*.jpg']);
jpg_files = dir([menpo_root, '/*.pts']);
% Do the actual copying to respective folders
out_train = [menpo_root, '/train/'];
out_valid = [menpo_root, '/valid/'];
mkdir(out_train);
mkdir(out_valid);
load('train_valid_split');
for i=1:numel(train_imgs)
copyfile([menpo_root, train_pts(i).name], [out_train, train_pts(i).name]);
copyfile([menpo_root, train_imgs(i).name], [out_train, train_imgs(i).name]);
end
for i=1:numel(valid_imgs)
copyfile([menpo_root, valid_pts(i).name], [out_valid, valid_pts(i).name]);
copyfile([menpo_root, valid_imgs(i).name], [out_valid, valid_imgs(i).name]);
end

View File

@@ -0,0 +1,41 @@
function writePDM( V, E, M, outputFile, Vmorph, Emorph )
%WRITEPDM Summary of this function goes here
% Detailed explanation goes here
fId = fopen(outputFile,'w');
% number of elements
% Comment
fprintf(fId, '# The mean values of the components (in mm)\n');
writeMatrix(fId, M, 6);
fprintf(fId, '# The principal components (eigenvectors) of identity or combined identity and expression model\n');
writeMatrix(fId, V, 6);
fprintf(fId, '# The variances of the components (eigenvalues) of identity or combined identity and expression model\n');
writeMatrix(fId, E', 6);
if(nargin > 4)
fprintf(fId, '# The principal components (eigenvectors) of expression\n');
writeMatrix(fId, Vmorph, 6);
fprintf(fId, '# The variances of the components (eigenvalues) of expression\n');
writeMatrix(fId, Emorph', 6);
end
fclose(fId);
end
% for easier readibility write them row by row
function writeMatrix(fileID, M, type)
fprintf(fileID, '%d\n', size(M,1));
fprintf(fileID, '%d\n', size(M,2));
fprintf(fileID, '%d\n', type);
for i=1:size(M,1)
fprintf(fileID, '%f ', M(i,:));
fprintf(fileID, '\n');
end
end