mirror of
https://gitcode.com/gh_mirrors/ope/OpenFace.git
synced 2026-05-14 11:17:53 +00:00
86 lines
2.3 KiB
Matlab
86 lines
2.3 KiB
Matlab
load('menpo_mtcnn.mat')
|
|
|
|
% Find the ground truth bboxes
|
|
bboxes_gt = bboxes;
|
|
|
|
bboxes_det = dets;
|
|
|
|
non_detected = bboxes_det(:,3) == 0;
|
|
|
|
% Removing the outliers
|
|
widths_gt = bboxes_gt(:,3) - bboxes_gt(:,1);
|
|
widths_det = bboxes_det(:,3) - bboxes_det(:,1);
|
|
|
|
heights_gt = bboxes_gt(:,4) - bboxes_gt(:,2);
|
|
heights_det = bboxes_det(:,4) - bboxes_det(:,2);
|
|
|
|
tx_gt = bboxes_gt(:,1);
|
|
ty_gt = bboxes_gt(:,2);
|
|
|
|
tx_det = bboxes_det(:,1);
|
|
ty_det = bboxes_det(:,2);
|
|
|
|
bad_det_1 = abs(1 - widths_gt ./ widths_det) > 0.5;
|
|
bad_det_2 = abs(1 - heights_gt ./ heights_det) > 0.5;
|
|
|
|
bad_det_3 = abs((tx_gt - tx_det) ./ widths_det) > 0.4;
|
|
bad_det_4 = abs((ty_gt - ty_det) ./ heights_det) > 0.5;
|
|
|
|
non_detected = non_detected | bad_det_1 | bad_det_2 | bad_det_3 | bad_det_4;
|
|
|
|
% if the width is quite different from detection then it failed
|
|
|
|
bboxes_gt = bboxes_gt(~non_detected,:);
|
|
bboxes_det = bboxes_det(~non_detected,:);
|
|
|
|
%% some visualisations
|
|
% a = 1;
|
|
% plot(gt_labels(a,:,1), gt_labels(a,:,2), '.r');
|
|
% hold on;
|
|
% bbox = bboxes_detector(a,:);
|
|
% % bbox(2) = -bbox(2);
|
|
% rectangle('Position', bbox);
|
|
% hold off;
|
|
% axis equal;
|
|
|
|
% Want to find out what scaling and translation would lead to the smallest
|
|
% RMSE error between initialised landmarks and gt landmarks TODO
|
|
|
|
% Find the width and height mappings
|
|
widths_gt = bboxes_gt(:,3) - bboxes_gt(:,1);
|
|
widths_det = bboxes_det(:,3) - bboxes_det(:,1);
|
|
|
|
heights_gt = bboxes_gt(:,4) - bboxes_gt(:,2);
|
|
heights_det = bboxes_det(:,4) - bboxes_det(:,2);
|
|
|
|
s_width = widths_det \ widths_gt;
|
|
s_height = heights_det \ heights_gt;
|
|
|
|
tx_gt = bboxes_gt(:,1);
|
|
ty_gt = bboxes_gt(:,2);
|
|
|
|
tx_det = bboxes_det(:,1);
|
|
ty_det = bboxes_det(:,2);
|
|
|
|
s_tx = median((tx_gt - tx_det) ./ widths_det);
|
|
s_ty = median((ty_gt - ty_det) ./ heights_det);
|
|
|
|
%%
|
|
new_widths = widths_det * s_width;
|
|
new_heights = heights_det * s_height;
|
|
new_tx = widths_det * s_tx + tx_det;
|
|
new_ty = heights_det * s_ty + ty_det;
|
|
|
|
overlaps = zeros(numel(widths_det), 1);
|
|
new_overlaps = zeros(numel(widths_det), 1);
|
|
|
|
for i=1:numel(widths_det)
|
|
bbox_gt = bboxes_gt(i,:);
|
|
bbox_old = bboxes_det(i,:);
|
|
overlaps(i) = overlap(bbox_gt, bbox_old);
|
|
bbox_new = [new_tx(i), new_ty(i), new_tx(i) + new_widths(i), new_ty(i) + new_heights(i)];
|
|
new_overlaps(i) = overlap(bbox_gt, bbox_new);
|
|
end
|
|
|
|
fprintf('Orig - %.3f, now - %.3f\n', mean(overlaps), mean(new_overlaps));
|