one shot similarity
i wanted to try the one shot similarity kernelfor same, not-same problems like the lfw challenge.
so, we first train once on background data only, then, for each pair a,b :
1. retrain with a added to negatives, check distance against b.
2. do the reverse, retrain with b added to negatives, check distance against a
3. mix results.
here is some opencv code
speed improved a lot by applying the power method to find the largest eigenvalue, instead of a full eigen decomposition.
so, all time spent in the inversion !
what can be done ?
* i don't have to invert it and multiply my vectors with A.inv() * x = y
. i can use solve(A, x, y)
instead.
(still slow, but does not need the inversion)
* instead of the solve(), i can decompose it with SVD (once) and use the backsubstitution.
(also saves the inversion, but takes ~3times more time than a mat mult)
in the end, for 120000 comparisons, using smaller features (and keep the inverse) turned out to be the best solution.