mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2026-05-09 00:42:32 +00:00
157 lines
4.4 KiB
Matlab
157 lines
4.4 KiB
Matlab
function Script_CECLM_menpo_valid()
|
|
|
|
addpath('../PDM_helpers/');
|
|
addpath('../fitting/normxcorr2_mex_ALL');
|
|
addpath('../fitting/');
|
|
addpath('../CCNF/');
|
|
addpath('../models/');
|
|
|
|
[images, detections, labels] = Collect_valid_imgs('D:\Datasets\menpo/');
|
|
|
|
%% loading the patch experts
|
|
|
|
clmParams = struct;
|
|
|
|
clmParams.window_size = [25,25; 23,23; 21,21; 21,21];
|
|
clmParams.numPatchIters = size(clmParams.window_size,1);
|
|
|
|
[patches] = Load_DCLM_Patch_Experts( '../models/cen/', 'cen_patches_*_menpo.mat', [], [], clmParams);
|
|
|
|
%% Fitting the model to the provided image
|
|
|
|
output_root = './menpo_fit_ceclm/';
|
|
|
|
% the default PDM to use
|
|
pdmLoc = ['../models/pdm/pdm_68_aligned_menpo.mat'];
|
|
|
|
load(pdmLoc);
|
|
|
|
pdm = struct;
|
|
pdm.M = double(M);
|
|
pdm.E = double(E);
|
|
pdm.V = double(V);
|
|
|
|
clmParams.regFactor = 0.9 * [35, 27, 20, 20];
|
|
clmParams.sigmaMeanShift = 1.5 * [1.25, 1.375, 1.5, 1.5];
|
|
clmParams.tikhonov_factor = [2.5, 5, 7.5, 7.5];
|
|
|
|
clmParams.startScale = 1;
|
|
clmParams.num_RLMS_iter = 10;
|
|
clmParams.fTol = 0.01;
|
|
clmParams.useMultiScale = true;
|
|
clmParams.use_multi_modal = 1;
|
|
clmParams.multi_modal_types = patches(1).multi_modal_types;
|
|
clmParams.numPatchIters = 4;
|
|
|
|
% for recording purposes
|
|
experiment.params = clmParams;
|
|
|
|
num_points = numel(M)/3;
|
|
|
|
shapes_all = cell(numel(images), 1);
|
|
labels_all = cell(numel(images), 1);
|
|
lhoods = zeros(numel(images),1);
|
|
all_lmark_lhoods = zeros(num_points, numel(images));
|
|
all_views_used = zeros(numel(images),1);
|
|
|
|
% Use the multi-hypothesis model, as bounding box tells nothing about
|
|
% orientation
|
|
multi_view = true;
|
|
verbose = false;
|
|
tic
|
|
for i=29:numel(images)
|
|
|
|
image = imread(images(i).img);
|
|
image_orig = image;
|
|
|
|
if(size(image,3) == 3)
|
|
image = rgb2gray(image);
|
|
end
|
|
|
|
bbox = squeeze(detections(i,:));
|
|
|
|
% have a multi-view version
|
|
if(multi_view)
|
|
|
|
views = [0,0,0; 0,-70,40; 0,70,-40; 0,-30,0; 0,-60,0; 0,-90,0; 0,30,0; 0,60,0; 0,90,0; 0,0,30; 0,0,-30;];
|
|
views = views * pi/180;
|
|
|
|
shapes = zeros(num_points, 2, size(views,1));
|
|
ls = zeros(size(views,1),1);
|
|
lmark_lhoods = zeros(num_points,size(views,1));
|
|
views_used = zeros(size(views,1),1);
|
|
globals = zeros(size(views,1),6);
|
|
% Find the best orientation
|
|
for v = 1:size(views,1)
|
|
[shapes(:,:,v),globals(v,:),~,ls(v),lmark_lhoods(:,v),views_used(v)] = Fitting_from_bb(image, [], bbox, pdm, patches, clmParams, 'orientation', views(v,:));
|
|
end
|
|
|
|
[lhood, v_ind] = max(ls);
|
|
lmark_lhood = lmark_lhoods(:,v_ind);
|
|
glob = globals(v_ind,:);
|
|
shape = shapes(:,:,v_ind);
|
|
view_used = views_used(v_ind);
|
|
|
|
else
|
|
[shape,~,~,lhood,lmark_lhood,view_used] = Fitting_from_bb(image, [], bbox, pdm, patches, clmParams);
|
|
end
|
|
|
|
all_lmark_lhoods(:,i) = lmark_lhood;
|
|
all_views_used(i) = view_used;
|
|
|
|
shapes_all{i} = shape;
|
|
labels_all{i} = labels{i};
|
|
|
|
if(mod(i, 200)==0)
|
|
fprintf('%d done\n', i );
|
|
end
|
|
|
|
lhoods(i) = lhood;
|
|
|
|
if(verbose)
|
|
|
|
actualShape = labels{i};
|
|
f = figure('visible','off');
|
|
% f = figure;
|
|
try
|
|
if(max(image_orig(:)) > 1)
|
|
imshow(double(image_orig)/255, 'Border', 'tight');
|
|
else
|
|
imshow(double(image_orig), 'Border', 'tight');
|
|
end
|
|
axis equal;
|
|
hold on;
|
|
v_points = logical(patches(1).visibilities(view_used,:))';
|
|
plot(shape(v_points,1), shape(v_points,2),'.r','MarkerSize',20);
|
|
plot(shape(v_points,1), shape(v_points,2),'.b','MarkerSize',10);
|
|
% print(f, '-r80', '-dpng', sprintf('%s/%s%d.png', output_root, 'fit', i));
|
|
print(f, '-djpeg', sprintf('%s/%s%d.jpg', output_root, 'fit', i));
|
|
% close(f);
|
|
hold off;
|
|
drawnow expose
|
|
close(f);
|
|
catch warn
|
|
|
|
end
|
|
end
|
|
|
|
end
|
|
toc
|
|
|
|
experiment.lhoods = lhoods;
|
|
experiment.shapes = shapes_all;
|
|
experiment.labels = labels_all;
|
|
experiment.all_lmark_lhoods = all_lmark_lhoods;
|
|
experiment.all_views_used = all_views_used;
|
|
% save the experiment
|
|
if(~exist('experiments', 'var'))
|
|
experiments = experiment;
|
|
else
|
|
experiments = cat(1, experiments, experiment);
|
|
end
|
|
|
|
output_results = 'results/results_ceclm_valid.mat';
|
|
save(output_results, 'experiments');
|
|
|
|
end
|