First Coding Week: Benchmarking and MI Study#
Hello everyone once again!
After the Community Bonding period, it is time to start coding and implementing. This was a very busy week for me, since I attended the CEIG 2026 conference to present my paper, DesigNet: Learning to draw vector graphics as designers do, which I developed during my Master’s thesis. Still, I found some time to get things started.
My main goals for this past week, as well as for the next one, are:
Continue studying how to create a fair benchmarking baseline between DIPY and other registration frameworks.
Study DIPY’s Mutual Information implementation and compare it with the SyN-compatible Mutual Information implementation available in ANTs/ITK to further refine the implementation plan.
Open a new PR I to fix a potential bug in DIPY’s CCMetric.
Benchmarking strategy#
While studying the codebases of DIPY and other frameworks, I compared their registration interfaces in order to build a fair parameter-matching strategy for running SyN registration algorithms under conditions that are as similar as possible. In particular, I looked at ANTs and ITK, focusing on how their interfaces work.
I built a first approximation of this benchmarking strategy in a new branch of my DIPY fork, named registration-benchmark. There is still work to do, but the current pipeline looks like a strong starting point. The branch is documented with Markdown files explaining the data I am currently using (OASIS 2), the preprocessing steps, including skull stripping with SynthSeg and rigid prealignment, and an in-depth study of both interfaces.
MI Study#
I also carried out an in-depth study of the Mutual Information implementation in both frameworks, which helped me begin to formalize an implementation plan for DIPY’s SyN registration.
In principle, the short-term GSoC scope will include implementing Mutual
Information as a new SimilarityMetric class, reusing as much of the
existing code as possible. It will also involve refactoring any
global-deformation assumptions made during the computation of derivatives
with respect to the deformation parameters.
New PR#
I also opened a new PR named
Update CCMetric energy after backward step.
In this fix, I store the energy computed during the
CCMetric.compute_backward() call in the self.energy variable. The
value was previously being saved in a local variable inside the function,
so the class-level energy value was not being updated correctly.
Additionally, I added a couple of tests to make sure the energy values
from both CCMetric and SSDMetric are updated properly after the
backward and forward steps.
What’s Next?#
For the next week, during which I expect to have more time, I have the following goals:
Finalize the implementation plan for Mutual Information in deformable registration.
Potentially begin coding the new Mutual Information implementation, or at least a first approximation.
Run several benchmarking experiments to compare optimization outcomes against other frameworks, independently of the metric used during optimization.
Find Me Online#
GitHub: TomasGuija
LinkedIn: Tomás Guija Valiente
Thank you very much for reading! See you next week.