From a grid of numbers to a function
Why I stopped storing deformations on a voxel lattice, and what became possible once I did.
Almost every deep registration method predicts a displacement vector at each node of a fixed voxel grid. It is such a default that papers rarely justify it. You have a volume, you have a convolutional network, the network emits three channels, and those three channels are your deformation. Done.
The trouble is that a deformation is not naturally a grid. It is a map from space to space. Discretising it onto the same lattice as the image is a convenience inherited from the data format, and that convenience has costs that only become visible when you go looking.
Three things the lattice takes from you
The field only exists at grid nodes. Ask what the deformation is halfway between two voxels and you are interpolating a quantity you never actually modelled. That is fine when you only ever evaluate on the same grid, and it stops being fine the moment you want a different resolution.
The spatial derivatives are piecewise constant. This one matters more than it sounds, because the Jacobian determinant of the warp is exactly how the field judges whether a deformation is physically plausible. If that determinant goes negative, tissue has passed through itself. Computing it by finite differences on a lattice gives you a staircase approximation of the thing you care most about.
And the discretisation can itself produce folds. Not because the underlying transformation was invalid, but because the representation could not express a valid one at that resolution.
What a function gives you instead
QueryPhi predicts the velocity field as a continuous function of coordinates. A modulated SIREN takes a query point and returns the velocity there. Not a lookup, an evaluation. Scaling and squaring integrates that velocity into a diffeomorphism through its exponential map.
Three things follow immediately. You can evaluate the deformation anywhere, at any resolution, after training is finished. The Jacobian is available analytically through automatic differentiation, at any coordinate, rather than as a finite difference on a grid. And the topology constraint can be applied to the continuous field rather than to its discretisation.
The model is 5.5 million parameters. The transformer baselines it beats are 46.8 million. That ratio is not a vanity metric in medical imaging: a model eight times smaller is one that fits alongside a clinical pipeline instead of replacing it.
The part that took longest
Getting a SIREN to behave inside a registration model was not straightforward. The decoder is zero initialised so training starts exactly at the identity warp, because a registration model that begins by scrambling the image never recovers. The velocity heads are bounded, because unbounded ones diverge and take Dice from 0.41 to 0.02. The conditioning vector is sampled at the corresponded location rather than the query location, which sounds like a detail and is the difference between the decoder seeing relevant evidence and seeing noise.
What came out reaches the highest mean Dice of all ten evaluated methods on IXI atlas registration at 0.7726, keeps folding to roughly one voxel in a million, and transfers to an entirely different cohort with no retraining while posting the best boundary accuracy in that comparison.