Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fast, differentiable fingerprinting dictionary matching #465

Open
fzimmermann89 opened this issue Oct 22, 2024 · 1 comment
Open

Fast, differentiable fingerprinting dictionary matching #465

fzimmermann89 opened this issue Oct 22, 2024 · 1 comment
Labels
enhancement New feature or request

Comments

@fzimmermann89
Copy link
Member

fzimmermann89 commented Oct 22, 2024

It would be nice to have a Module that does cosine similiary and dotproduct dictionary matching.
It should take care of batched simulation of the data.
It should use a (GPU) efficient matching, maybe LSH or using faiss.
It should implement two different versions of for the backward:

  • running the signal model again at the match to obtain gradients
  • using a trick such as softmax/gaussian weighting/... over k nearest neighbours or something similar.

This can then be used for MRF or as initial value estimator for other reconstruction methods.

Ideally, it should keep track how often a dictionary entry was matched and have prune version that removes unused matches.
This would make it really useful for qMRI networks that work with epg signal models

@fzimmermann89 fzimmermann89 added enhancement New feature or request priority: low labels Oct 22, 2024
@fzimmermann89 fzimmermann89 changed the title Feature: Fast, differentiable fingerprinting dictionary matching Fast, differentiable fingerprinting dictionary matching Oct 22, 2024
@fzimmermann89
Copy link
Member Author

First would be a simple dictionary module.

On creation, we specify a signal function in the init.
Then, we have a function to append new simulations to the dictionary.
This function takes in as many tensors as the signal function has parameters, simulates the signals, and stores signals and parameters.
The forward would then do the matching by dotproduct and argmax.
The reason for the split of signal function and creation of the dictionary is to allow here for future expandability.

We should try to use this function in the qMRI example notebooks and maybe add a fingerprinting example using a phantom.
For this, I think it would make sense to start the development onto of either the epg or the cmrf branch and once it is working nicely, move to code over to main.

(As a warning: Please be carfule not to commit large files to git, such as raw data, images, etc)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant