103 lines
No EOL
3.1 KiB
Matlab
103 lines
No EOL
3.1 KiB
Matlab
function WriteOutFaceCheckersNNbinary(locationTxt, faceCheckers)
|
|
|
|
addpath('..\PDM_helpers\');
|
|
|
|
% use little-endian
|
|
faceCheckerFile = fopen(locationTxt, 'w', 'l');
|
|
|
|
views = numel(faceCheckers);
|
|
|
|
% Type 0 - linear SVR, 1 - feed forward neural net
|
|
fwrite(faceCheckerFile, 1, 'uint'); % 4 bytes
|
|
|
|
% Number of face checkers
|
|
fwrite(faceCheckerFile, views, 'uint'); % 4 bytes
|
|
|
|
% Matrices representing view orientations
|
|
for i=1:views
|
|
% this indicates that we're writing a 3x1 double matrix
|
|
writeMatrixBin(faceCheckerFile, faceCheckers(i).centres', 6);
|
|
end
|
|
|
|
for i = 1:views
|
|
|
|
% The normalisation models
|
|
% Mean of images
|
|
writeMatrixBin(faceCheckerFile, faceCheckers(i).mean_ex, 6);
|
|
|
|
% Standard deviation of images
|
|
writeMatrixBin(faceCheckerFile, faceCheckers(i).std_ex, 6);
|
|
|
|
nn = faceCheckers(i).nn;
|
|
|
|
num_depth_layers = numel(nn.size) - 1;
|
|
% Get the number of layers
|
|
fwrite(faceCheckerFile, num_depth_layers, 'uint'); % 4 bytes
|
|
|
|
% The activation function used 0 - sigmoid, 1 - tanh, 2 - ReLu
|
|
act_fun = 0;
|
|
if(strcmp(nn.activation_function, 'tanh_opt'))
|
|
act_fun = 1;
|
|
elseif(strcmp(nn.activation_function, 'ReLu'))
|
|
act_fun = 2;
|
|
end
|
|
|
|
fwrite(faceCheckerFile, act_fun, 'uint'); % 4 bytes
|
|
|
|
% The activation function used 0 - sigmoid, 1 - tanh, 2 - ReLu
|
|
out_fun = 0;
|
|
if(strcmp(nn.output, 'tanh_opt'))
|
|
out_fun = 1;
|
|
elseif(strcmp(nn.output, 'ReLu'))
|
|
out_fun = 2;
|
|
end
|
|
|
|
fwrite(faceCheckerFile, out_fun, 'uint'); % 4 bytes
|
|
|
|
for layers=1:num_depth_layers
|
|
|
|
W = nn.W{layers};
|
|
writeMatrixBin(faceCheckerFile, W, 6);
|
|
end
|
|
|
|
|
|
% Piecewise affine warp
|
|
|
|
nPix = faceCheckers(i).nPix;
|
|
minX = faceCheckers(i).minX;
|
|
minY = faceCheckers(i).minY;
|
|
|
|
destination = reshape(faceCheckers(i).destination, numel(faceCheckers(i).destination), 1);
|
|
triangulation = faceCheckers(i).triangulation;
|
|
triX = faceCheckers(i).triX;
|
|
mask = faceCheckers(i).mask;
|
|
alphas = faceCheckers(i).alphas;
|
|
betas = faceCheckers(i).betas;
|
|
|
|
fwrite(faceCheckerFile, nPix, 'uint'); % 4 bytes
|
|
fwrite(faceCheckerFile, minX, 'float64'); % 8 bytes
|
|
fwrite(faceCheckerFile, minY, 'float64'); % 8 bytes
|
|
|
|
% Destination shape
|
|
writeMatrixBin(faceCheckerFile, destination, 6);
|
|
|
|
% Triangulation
|
|
writeMatrixBin(faceCheckerFile, triangulation, 4);
|
|
|
|
% Triangle map
|
|
writeMatrixBin(faceCheckerFile, triX, 4);
|
|
|
|
% Mask
|
|
writeMatrixBin(faceCheckerFile, mask, 4);
|
|
|
|
% Alphas
|
|
writeMatrixBin(faceCheckerFile, alphas, 6);
|
|
|
|
% Betas
|
|
writeMatrixBin(faceCheckerFile, betas, 6);
|
|
|
|
end
|
|
|
|
fclose(faceCheckerFile);
|
|
|
|
end |