Current task: implementing clique tree algorithm when noise distribution is improper.
Why do we need this now? Didn't this work in the Matlab version of the code?
No, in matlab, we did reconstruction by inverting a matrix containing all points in all views. This worked when correspondences are known, and reconstruction was the only goal, but it's hugely inefficient when sampling over correspondences.
Why do we need a reconstruction at each MCM iteration?
What's the current difficulty?
The main difficulty is arising when constructing the conditional posterior distribution $p(x_2 | x_1, y_2)$, wher $x_i$ and $y_i$ are the curve in view $i$ and its observations. In implementation, the covariance of the matrix is not positive definite, suggesting there is a bug somewhere, or we're suffering from numerical instability. In either case, the issue need to be addressed or the inference will fail.
I wrote up a unit test for this, and the issue isn't arising in the test. But in practice, some match proposals encounter this problem (currently the 5th such match out of ~300 is suffering this issue, so it seems prevalent).
I also coded up two different implementations to construct the conditional posterior, one that performs the matrix operations directly, and another less efficient version that uses the functionality from the Canonical_gaussian class. The latter is much less likely to contain math errors, as it's well tested. Both implementations exhibit this problem, suggesting the issue is with the matrices themselves. I've exported all of the matrices involved and imported them into matlab. The same issue is arising there.
Should I test the prior matrices to make sure they are PD? Maybe they are almost singular because indices are nearly overlapping? I think I have an old blog where I derive an alternative implementation for this situation...
Posted by Kyle Simek