September 10, 2013

In the past, we've formulated the branching prior covariance matrix by starting with an independent-curve block-diagonal covariance matrix and multiplying by an "attachment matrix." This works when the branching point appears in the index set, but we'd like to allow branching from any continuous point along the curve. Stated differently, we currently model branching using a discritized model, but we'd prefer to express branching using the underlying continuous gaussian process. This means modelling branching using the covariance function, rather than by manipulating the covariance matrix.

The key observation here is that in addition to each point's smooth curvature variance, it inherits the covariance of its parent's branch point. In order to model correlation between curves, we extend the definition of "index" to add the curve index, \(c_i\), in addition to point index and time/view index. Thus, index is now a triple: (c_i, p_i, t_i). Note that we've changed our notation; previously point index was \(t_i\) and time/view index was \(v_i\). The new notation uses \(p_i\) and \(t_i\) respectively, to avoid confusion between spacial and temporal dimensions.

Let's introduce two functions, \(\text{branch_curve}(c_i)\) and \(\text{branch_point}(c_i)\), which return the curve index and point index of curve \(c_i\)'s branch point, resepectively, or zero if \(c_i\) is a root curve. We'll also use the convenience function \(\text{branch}(i)\), which is shorthand for full branch index, i.e. the tuple \(\text{branch_curve}(c_i), \text{branch_point}(p_i), t_i)\). Note that the time-index \(t_i\) is preserved when getting the branch index.

Without loss of generality, we'll assume curves are indexed in topological order, with parents appearing occurring before descendants. If there are multiple connected components in the graph, it will be important that all root nodes have a lower index than non-root nodes, so we can add a sentinal node with index \(c_i = 0\), and attach all root curves to it before ordering. (Note to self: breadth-first search order might be simpler to describe). The branching covariance function is now:

\[ \begin{align} k\left( i, j \right) &= k\left( (c_i, p_i, t_i), (c_j, p_j, t_j) \right) \\ &= \begin{cases} k(j, i) & \text{if } c_i > c_j = 0 \\ k_\text{base} ( i, j ) + k_o(ti, tj) & \text{if } \text{isroot}(c_i) \text{ and } \text{isroot}(c_j) \text{ and } c_i = c_j && \\ k_\text{base} ( i, j ) + 0 & \text{if } \text{isroot}(c_i) \text{ and } \text{isroot}(c_j) \text{ and } c_i \neq c_j \\ k_\text{base} ( i, j ) + k(i, \text{branch}(j)) & \text{otherwise} \end{cases} \end{align} \]For convenience, we've used the \(k(i,j) \) to stand-in for \(k\left((c_i, p_i, t_i), (c_j, p_j, t_j)\right)\). Here, \(k_\text{base}(i,j)\) is the independent curve covariance (e.g. cubic spline covariance w/ perturbations). In our case, \(k_\text{base}(\dot)\) is zero if \(c_i \neq c_j\), but this isn't necessarilly required.

Here, \(k_o\) is to marginal covariance of the first curve point. All points in the plant are measured relative to this point, so this covariance ends up in every element of the covariance matrix. Since it only measures covariance of a specific point with respect to itself, curve and point index are irrelevant to \(k_o\). Only the temporal is received, which allows us to model how the point moves over time. In the case of the Ornstein Uhlenbech process, \(k_o\) is \[ k_o = \sigma_o + \exp(|t_i - t_j|) \sigma_{o,b}) \]

Lets examine each case in the piecewise function.

- The first case just simplifies the definition by ensuring that if i and j are related, the ancestor always appears in the first position.
- The second case handles the offset variance that allow root curves to translate away from the origin.
- The third case ensures zero covariance between disconnected trees.
- The fourth case inherits covariance from the second parameter's parent curve. Note that \(c_j\) is always a non-root curve; if it were, one of the first three cases would handle it.

- Finish tracing wacv datasets 7 through 11.
- Test the new covariance function against a matrix-based approach.
- Test the new covariance function by reconstructing 9-view sequence using WACV datasets.
- implement attachment-based ml using new covariance function