open source pkg v1
This commit is contained in:
50
pkg/OpenFace/model_training/CCNF/CCRF/lib/CalcSigmaCCRF.m
Normal file
50
pkg/OpenFace/model_training/CCNF/CCRF/lib/CalcSigmaCCRF.m
Normal file
@@ -0,0 +1,50 @@
|
||||
function [ SigmaInv] = CalcSigmaCCRF(alphas, betas, precalcBwithoutBeta )
|
||||
%CALCSIGMAPRF Summary of this function goes here
|
||||
% Detailed explanation goes here
|
||||
% constructing the sigma
|
||||
|
||||
% the number of elements in a current sequence
|
||||
n = size(precalcBwithoutBeta{1},1);
|
||||
|
||||
q1 = sum(alphas) * eye(n);
|
||||
|
||||
% the above code can be simplified by the following 2 lines of the
|
||||
% inner loop, we want to do that for every beta however
|
||||
K2 = numel(betas);
|
||||
|
||||
q2 = zeros([n,n]);
|
||||
|
||||
% calculating the q2 from the paper
|
||||
for i=1:K2
|
||||
|
||||
% We're basically performing the following calculation, but use
|
||||
% precalculated D - S instead of doing it every iteration
|
||||
% S = Similarities(:,:,i);
|
||||
% D = diag(sum(S));
|
||||
% q = betas(i) * D - betas(i) * S;
|
||||
% q2s(:,:,i) = q;
|
||||
% q2 = q2 + betas(i)*precalcQ2withoutBeta(:,:,i);
|
||||
q2 = q2 + betas(i)*precalcBwithoutBeta{i};
|
||||
end
|
||||
% This is another alternative, does not seem to be faster
|
||||
% q2old = sum(bsxfun(@times, precalcQ2withoutBeta, reshape(betas,[1,1,K2])),3);
|
||||
|
||||
% q2 = sum(q2s, 3);
|
||||
% % An alternative way of calculating the above could be using bsxfun,
|
||||
% but this seems to be actually slower than using it
|
||||
% S = bsxfun(@times, Similarities, -reshape(betas,[1,1,K2]));
|
||||
%
|
||||
% % now need the diagonals
|
||||
% d = sum(Similarities);
|
||||
%
|
||||
% I = repmat(eye(n), [1, 1, K2]);
|
||||
% I = bsxfun(@times, I, reshape(betas,[1,1,K2]));
|
||||
% D = bsxfun(@times, I, d);
|
||||
%
|
||||
% q2s = D + S;
|
||||
% q2 = sum(q2s2,3);
|
||||
|
||||
SigmaInv = 2 * (q1 + q2);
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user