open source pkg v1
This commit is contained in:
57
pkg/OpenFace/matlab_version/CCNF/CalcSigmaCCNFflat.m
Normal file
57
pkg/OpenFace/matlab_version/CCNF/CalcSigmaCCNFflat.m
Normal file
@@ -0,0 +1,57 @@
|
||||
function [ SigmaInv] = CalcSigmaCCNFflat(alphas, betas, n, precalcQ2withoutBeta, precalc_eye, precalc_zeros)
|
||||
%CALCSIGMAPRF Summary of this function goes here
|
||||
% Detailed explanation goes here
|
||||
% constructing the sigma
|
||||
|
||||
% A = zeros(n);
|
||||
%
|
||||
% for i=1:n
|
||||
%
|
||||
% A(i,i) = alphas' * mask(i,:)';
|
||||
%
|
||||
% end
|
||||
|
||||
% this is simplification of above code
|
||||
% if(useIndicators)
|
||||
% A = diag(mask * alphas);
|
||||
% else
|
||||
|
||||
% A = sum(alphas) .* eye(n);
|
||||
A = sum(alphas) .* precalc_eye;
|
||||
% A = sum(alphas) * eye(n);
|
||||
% not faster
|
||||
% a = mtimesx(sum(alphas), eye(n), 'SPEED');
|
||||
% a2 = mtimesx(sum(alphas), eye(n), 'SPEEDOMP');
|
||||
% end
|
||||
|
||||
% calculating the B from the paper
|
||||
|
||||
% for i=1:n
|
||||
% for j=1:n
|
||||
%
|
||||
% if(i == j)
|
||||
% q2(i,j) = beta * (sum(S(i,:)) - S(i,i));
|
||||
% else
|
||||
% q2(i,j) = -beta * S(i,j);
|
||||
% end
|
||||
% end
|
||||
% end
|
||||
|
||||
% the above code can be simplified by the following lines of code
|
||||
% using the precalculated lower triangular elements of B without beta
|
||||
Btmp = precalcQ2withoutBeta * betas;
|
||||
% not faster
|
||||
% Btmp = mtimesx(precalcQ2withoutBeta, betas, 'SPEED');
|
||||
% Btmp = mtimesx(precalcQ2withoutBeta, betas, 'SPEEDOMP');
|
||||
% now make it into a square symmetric matrix
|
||||
% B = zeros(n,n);
|
||||
B = precalc_zeros;
|
||||
on = tril(true(n,n));
|
||||
B(on) = Btmp;
|
||||
B = B';
|
||||
B(on) = Btmp;
|
||||
|
||||
SigmaInv = 2 * (A + B);
|
||||
|
||||
end
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
function [ Similarities, PrecalcQ2s, PrecalcQ2sFlat, PrecalcYqDs ] = CalculateSimilarities_sparsity( n_sequences, x, similarityFNs, sparsityFNs, y, const)
|
||||
%CALCULATESIMILARITIES Summary of this function goes here
|
||||
% Detailed explanation goes here
|
||||
|
||||
K = numel(similarityFNs);
|
||||
K2 = numel(sparsityFNs);
|
||||
|
||||
%calculate similarity measures for each of the sequences
|
||||
Similarities = cell(n_sequences, 1);
|
||||
PrecalcQ2s = cell(n_sequences,1);
|
||||
PrecalcQ2sFlat = cell(n_sequences,1);
|
||||
|
||||
PrecalcYqDs = zeros(n_sequences, K + K2);
|
||||
|
||||
if(iscell(x))
|
||||
for q = 1 : n_sequences
|
||||
|
||||
xq = x{q};
|
||||
|
||||
n = size(xq, 1);
|
||||
Similarities{q} = zeros([n, n, K+K2]);
|
||||
|
||||
PrecalcQ2s{q} = cell(K+K2,1);
|
||||
|
||||
PrecalcQ2sFlat{q} = zeros((n*(n+1))/2,K+K2);
|
||||
% go over all of the similarity metrics and construct the
|
||||
% similarity matrices
|
||||
|
||||
if(nargin > 4)
|
||||
yq = y{q};
|
||||
end
|
||||
|
||||
for k=1:K
|
||||
Similarities{q}(:,:,k) = similarityFNs{k}(xq);
|
||||
S = Similarities{q}(:,:,k);
|
||||
D = diag(sum(S));
|
||||
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||||
PrecalcQ2s{q}{k} = D - S;
|
||||
B = D - S;
|
||||
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||||
PrecalcQ2sFlat{q}(:,k) = B(logical(tril(ones(size(S)))));
|
||||
if(nargin > 4)
|
||||
PrecalcYqDs(q,k) = -yq'*B*yq;
|
||||
end
|
||||
end
|
||||
for k=1:K2
|
||||
Similarities{q}(:,:,K+k) = sparsityFNs{k}(xq);
|
||||
S = Similarities{q}(:,:,K+k);
|
||||
D = diag(sum(S));
|
||||
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||||
PrecalcQ2s{q}{K+k} = D + S;
|
||||
B = D + S;
|
||||
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||||
PrecalcQ2sFlat{q}(:,K+k) = B(logical(tril(ones(size(S)))));
|
||||
if(nargin > 4)
|
||||
PrecalcYqDs(q,K+k) = -yq'*B*yq;
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif(~const)
|
||||
sample_length = size(x,2)/n_sequences;
|
||||
|
||||
similarities = cell(K, 1);
|
||||
sparsities = cell(K2, 1);
|
||||
|
||||
for q = 1 : n_sequences
|
||||
|
||||
beg_ind = (q-1)*sample_length + 1;
|
||||
end_ind = q*sample_length;
|
||||
|
||||
% don't take the bias term
|
||||
xq = x(2:end, beg_ind:end_ind);
|
||||
|
||||
Similarities{q} = zeros([sample_length, sample_length, K+K2]);
|
||||
|
||||
PrecalcQ2s{q} = cell(K+K2,1);
|
||||
|
||||
PrecalcQ2sFlat{q} = zeros((sample_length*(sample_length+1))/2,K+K2);
|
||||
|
||||
% go over all of the similarity metrics and construct the
|
||||
% similarity matrices
|
||||
|
||||
if(nargin > 4)
|
||||
yq = y(:,q);
|
||||
end
|
||||
|
||||
for k=1:K
|
||||
if(q==1)
|
||||
similarities{k} = similarityFNs{k}(xq);
|
||||
end
|
||||
Similarities{q}(:,:,k) = similarities{k};
|
||||
S = Similarities{q}(:,:,k);
|
||||
D = diag(sum(S));
|
||||
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||||
PrecalcQ2s{q}{k} = D - S;
|
||||
B = D - S;
|
||||
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||||
PrecalcQ2sFlat{q}(:,k) = B(logical(tril(ones(size(S)))));
|
||||
if(nargin > 4)
|
||||
PrecalcYqDs(q,k) = -yq'*B*yq;
|
||||
end
|
||||
end
|
||||
for k=1:K2
|
||||
% this is constant so don't need to recalc
|
||||
if(q==1)
|
||||
sparsities{k} = sparsityFNs{k}(xq);
|
||||
end
|
||||
|
||||
Similarities{q}(:,:,K+k) = sparsities{k};
|
||||
S = Similarities{q}(:,:,K+k);
|
||||
D = diag(sum(S));
|
||||
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||||
PrecalcQ2s{q}{K+k} = D + S;
|
||||
B = D + S;
|
||||
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||||
PrecalcQ2sFlat{q}(:,K+k) = B(logical(tril(ones(size(S)))));
|
||||
if(nargin > 4)
|
||||
PrecalcYqDs(q,K+k) = -yq'*B*yq;
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
else
|
||||
sample_length = size(x,2)/n_sequences;
|
||||
|
||||
similarities = cell(K, 1);
|
||||
sparsities = cell(K2, 1);
|
||||
|
||||
PrecalcQ2s = {cell(K+K2,1)};
|
||||
PrecalcQ2sFlat = {zeros((sample_length*(sample_length+1))/2,K+K2)};
|
||||
Similarities = {zeros([sample_length, sample_length, K+K2])};
|
||||
|
||||
beg_ind = 1;
|
||||
end_ind = sample_length;
|
||||
|
||||
% don't take the bias term
|
||||
xq = x(2:end, beg_ind:end_ind);
|
||||
|
||||
% go over all of the similarity metrics and construct the
|
||||
% similarity matrices
|
||||
for k=1:K
|
||||
similarities{k} = similarityFNs{k}(xq');
|
||||
|
||||
Similarities{1}(:,:,k) = similarities{k};
|
||||
S = Similarities{1}(:,:,k);
|
||||
D = diag(sum(S));
|
||||
PrecalcQ2s{1}{k} = D - S;
|
||||
B = D - S;
|
||||
% flatten the symmetric matrix to save space
|
||||
PrecalcQ2sFlat{1}(:,k) = B(logical(tril(ones(size(S)))));
|
||||
if(nargin > 4)
|
||||
PrecalcYqDs(:,k) = diag(-y'*B*y);
|
||||
end
|
||||
end
|
||||
for k=1:K2
|
||||
% this is constant so don't need to recalc
|
||||
sparsities{k} = sparsityFNs{k}(xq');
|
||||
|
||||
Similarities{1}(:,:,K+k) = sparsities{k};
|
||||
S = Similarities{1}(:,:,K+k);
|
||||
D = diag(sum(S));
|
||||
% PrecalcQ2s{q}(:,:,k) = D - S;
|
||||
PrecalcQ2s{1}{K+k} = D + S;
|
||||
B = D + S;
|
||||
% PrecalcQ2sFlat{q}{k} = PrecalcQ2s{q}{k}(logical(tril(ones(size(S)))));
|
||||
PrecalcQ2sFlat{1}(:,K+k) = B(logical(tril(ones(size(S)))));
|
||||
if(nargin > 4)
|
||||
PrecalcYqDs(:,K+k) = diag(-y'*B*y);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
67
pkg/OpenFace/matlab_version/CCNF/similarity_neighbor_grid.m
Normal file
67
pkg/OpenFace/matlab_version/CCNF/similarity_neighbor_grid.m
Normal file
@@ -0,0 +1,67 @@
|
||||
function [ SimilarityMatrix ] = similarity_neighbor_grid( x, side, types)
|
||||
%SIMILARITYNEIGHBOR Summary of this function goes here
|
||||
% Detailed explanation goes here
|
||||
|
||||
% this assumes that the patch is laid out with first column, then second
|
||||
% column, ... final column (column major)
|
||||
|
||||
SimilarityMatrix = eye(side*side);
|
||||
|
||||
% types - 1 - horizontal, 2 - vertical, 3 - diagonal (bl-tr), 4 -
|
||||
% diagonal (br - tl)
|
||||
for t=1:numel(types)
|
||||
|
||||
if(types(t) == 1)
|
||||
|
||||
% for horizontal we want to link both neighbours
|
||||
% (which are offset from the points by height)
|
||||
i = 1:(side*side-side);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i, i+side)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i+side, i)) = 1;
|
||||
|
||||
% visualise
|
||||
% vis = zeros(height, width)
|
||||
% [i, j] = ind2sub([sz, sz], find(SimilarityMatrix(:)==1));
|
||||
% i_2 = mod(i-1, width)+1;
|
||||
% j_2 = floor((j-1)/height)+1;
|
||||
% vis(sub2ind([width, height], i_2, j_2) = 1;
|
||||
% imagesc(vis);
|
||||
end
|
||||
if(types(t) == 2)
|
||||
|
||||
% for vertical we want to link both neighbours except at edge
|
||||
% cases which are mod(y_loc,side) = 0 as they are at the edges
|
||||
i = 1:side*side;
|
||||
i_to_rem = i(mod(i, side) == 0);
|
||||
i_both = setdiff(i, i_to_rem);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both+1, i_both)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+1)) = 1;
|
||||
|
||||
end
|
||||
if(types(t) == 3)
|
||||
|
||||
% for diagonal to top right, and bottom left don't use right most column
|
||||
i = 1:(side^2)-side;
|
||||
i_to_rem = i(mod(i-1, side) == 0);
|
||||
i_both = setdiff(i, i_to_rem);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both+side-1, i_both)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+side-1)) = 1;
|
||||
end
|
||||
if(types(t) == 4)
|
||||
|
||||
% for diagonal to top left, and bottom right don't use right most column
|
||||
i = 1:(side^2)-side;
|
||||
i_to_rem = i(mod(i, side) == 0);
|
||||
i_both = setdiff(i, i_to_rem);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both+side+1, i_both)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+side+1)) = 1;
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
assert(isequal(SimilarityMatrix, SimilarityMatrix'));
|
||||
end
|
||||
@@ -0,0 +1,77 @@
|
||||
function [ SimilarityMatrix ] = similarity_neighbor_grid_further( x, side, types, dist)
|
||||
%SIMILARITYNEIGHBOR Summary of this function goes here
|
||||
% Detailed explanation goes here
|
||||
|
||||
% this assumes that the patch is laid out with first column, then second
|
||||
% column, ... final column (column major)
|
||||
|
||||
% dist = 2;
|
||||
SimilarityMatrix = eye(side*side);
|
||||
|
||||
% types - 1 - horizontal, 2 - vertical, 3 - diagonal (bl-tr), 4 -
|
||||
% diagonal (br - tl)
|
||||
for t=1:numel(types)
|
||||
|
||||
if(types(t) == 1)
|
||||
|
||||
% for horizontal we want to link both neighbours
|
||||
% (which are offset from the points by height)
|
||||
i = 1:(side*side-side*dist);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i, i+side*dist)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i+side*dist, i)) = 1;
|
||||
|
||||
% visualise
|
||||
% vis = zeros(height, width)
|
||||
% [i, j] = ind2sub([sz, sz], find(SimilarityMatrix(:)==1));
|
||||
% i_2 = mod(i-1, width)+1;
|
||||
% j_2 = floor((j-1)/height)+1;
|
||||
% vis(sub2ind([width, height], i_2, j_2) = 1;
|
||||
% imagesc(vis);
|
||||
end
|
||||
if(types(t) == 2)
|
||||
|
||||
% for vertical we want to link both neighbours except at edge
|
||||
% cases which are mod(y_loc,side) = 0 as they are at the edges
|
||||
i = 1:side*side;
|
||||
i_to_rem =[];
|
||||
for s=1:dist
|
||||
i_to_rem = union(i_to_rem, i(mod(i+s-1, side) == 0));
|
||||
end
|
||||
i_both = setdiff(i, i_to_rem);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both+dist, i_both)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+dist)) = 1;
|
||||
|
||||
end
|
||||
if(types(t) == 3)
|
||||
|
||||
% for diagonal to top right, and bottom left don't use right most column
|
||||
i = 1:(side^2)-dist * side;
|
||||
i_to_rem = [];
|
||||
for s=1:dist
|
||||
i_to_rem = union(i_to_rem,i(mod(i-s, side) == 0));
|
||||
end
|
||||
i_both = setdiff(i, i_to_rem);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both+dist*side-dist, i_both)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+dist*side-dist)) = 1;
|
||||
end
|
||||
if(types(t) == 4)
|
||||
|
||||
% for diagonal to top left, and bottom right don't use right most column
|
||||
i = 1:(side^2)-dist*side;
|
||||
i_to_rem = [];
|
||||
for s=1:dist
|
||||
i_to_rem = union(i_to_rem, i(mod(i+s-1, side) == 0));
|
||||
end
|
||||
i_both = setdiff(i, i_to_rem);
|
||||
% create the neighboring links for i
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both+dist*side+dist, i_both)) = 1;
|
||||
SimilarityMatrix(sub2ind([side^2, side^2], i_both, i_both+dist*side+ dist)) = 1;
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
assert(isequal(SimilarityMatrix, SimilarityMatrix'));
|
||||
end
|
||||
21
pkg/OpenFace/matlab_version/CCNF/sparsity_grid.m
Normal file
21
pkg/OpenFace/matlab_version/CCNF/sparsity_grid.m
Normal file
@@ -0,0 +1,21 @@
|
||||
function [ SparsityMatrix ] = sparsity_grid( x, side, width, width_end)
|
||||
%SIMILARITYNEIGHBOR Summary of this function goes here
|
||||
% Detailed explanation goes here
|
||||
|
||||
% this assumes that the patch is laid out with first column, then second
|
||||
% column, ... final column (column major)
|
||||
|
||||
SimilarityMatrix = zeros(side*side);
|
||||
for i=1:width
|
||||
SimilarityMatrix = (similarity_neighbor_grid_further(x, side, [1,2,3,4], i) | SimilarityMatrix);
|
||||
end
|
||||
|
||||
SimilarityMatrix_end = zeros(side*side);
|
||||
for i=1:width_end
|
||||
SimilarityMatrix_end = (similarity_neighbor_grid_further(x, side, [1,2,3,4], i) | SimilarityMatrix_end);
|
||||
end
|
||||
|
||||
SparsityMatrix = double(SimilarityMatrix_end & (~SimilarityMatrix));
|
||||
|
||||
assert(isequal(SparsityMatrix, SparsityMatrix'));
|
||||
end
|
||||
Reference in New Issue
Block a user