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

Fix linear operator in regularized iterative SENSE #610

Merged
merged 8 commits into from
Jan 20, 2025

Conversation

ckolbPTB
Copy link
Collaborator

For the regularized iterative SENSE reconstruction we allow the following to be minimised:
1/2*||Ex - y||2^2 + reg_weight/2 * ||B x - x_reg||_2^2
with B a LinearOperator.

If we calculate the derivative and rearrange we get
(E^H E + reg_weight* B^H B) x = E^H y + B^H x_reg
(c) Andreas Kofler

In our current implementation we were missing the B^H part.

@ckolbPTB ckolbPTB requested a review from koflera January 16, 2025 18:11
Copy link
Contributor

github-actions bot commented Jan 16, 2025

Coverage

Coverage Report
FileStmtsMissCoverMissing
src/mrpro/algorithms/csm
   inati.py24196%44
   walsh.py16194%34
src/mrpro/algorithms/dcf
   dcf_voronoi.py53492%15, 48–49, 76
src/mrpro/algorithms/optimizers
   adam.py20195%69
   pdhg.py79396%177–178, 184
src/mrpro/algorithms/reconstruction
   DirectReconstruction.py281643%51–71, 85
   IterativeSENSEReconstruction.py13192%76
   Reconstruction.py502256%42, 54–56, 80–87, 104–113
   RegularizedIterativeSENSEReconstruction.py411759%96–100, 114–139
src/mrpro/data
   AcqInfo.py128398%26, 169, 207
   CsmData.py29390%15, 82–84
   DcfData.py45882%18, 66, 78–83
   IData.py67987%119, 125, 129, 159–167
   IHeader.py75791%75, 109, 127–131
   KData.py2142588%111–112, 127, 134, 144, 152, 206–207, 245, 250–251, 270–281, 435, 437, 500, 515, 552, 583, 592
   KHeader.py1531789%25, 119–123, 150, 199, 210, 217–218, 221, 228, 260–271
   KNoise.py311552%39–52, 56–61
   KTrajectory.py811285%108–113, 116–118, 203–207
   MoveDataMixin.py1401887%15, 113, 129, 143–145, 207, 323–325, 338, 417, 437–438, 440, 455–456, 458
   QData.py39782%42, 65–73
   Rotation.py6743595%100, 198, 335, 433, 477, 495, 581, 583, 592, 626, 628, 691, 768, 773, 776, 791, 808, 813, 889, 1077, 1082, 1085, 1109, 1113, 1240, 1242, 1250–1251, 1315, 1397, 1690, 1846, 1881, 1885, 1996
   SpatialDimension.py2322191%34, 104, 141, 148, 154, 274–276, 289–291, 325, 343, 356, 369, 382, 395, 404–405, 420, 429
   acq_filters.py12192%47
src/mrpro/data/traj_calculators
   KTrajectoryCalculator.py25292%23, 45
   KTrajectoryIsmrmrd.py13285%41, 50
   KTrajectoryPulseq.py23196%55
src/mrpro/operators
   CartesianSamplingOp.py89397%118, 157, 280
   ConstraintsOp.py60297%46, 48
   EndomorphOperator.py65297%228, 234
   FiniteDifferenceOp.py27293%40, 105
   FourierOp.py158398%263, 381, 386
   Functional.py71593%20–22, 117, 119
   GridSamplingOp.py136993%72–73, 82–83, 90–91, 94, 96, 98
   LinearOperator.py168995%55, 91, 190, 220, 261, 270, 278, 295, 320
   LinearOperatorMatrix.py1581690%82, 119, 152, 161, 166, 175–178, 191–194, 203, 215, 304, 331, 359
   MultiIdentityOp.py13285%43, 48
   Operator.py78297%25, 74
   ProximableFunctionalSeparableSum.py39392%50, 103, 110
   SliceProjectionOp.py173895%44, 61, 63, 69, 206, 227, 260, 300
   WaveletOp.py119596%151, 169, 204, 209, 232
   ZeroPadOp.py16194%30
src/mrpro/utils
   filters.py62297%44, 49
   reshape.py60198%191
   slice_profiles.py46687%20, 36, 113–116, 149
   sliding_window.py34197%34
   split_idx.py10280%43, 47
   summarize_tensorvalues.py11918%20–29
   typing.py181139%8–23
   zero_pad_or_crop.py31681%26, 30, 54, 57, 60, 63
TOTAL496936293% 

Tests Skipped Failures Errors Time
2300 0 💤 0 ❌ 0 🔥 1m 9s ⏱️

Copy link
Contributor

github-actions bot commented Jan 16, 2025

📚 Documentation

📁 Download as zip
🔍 View online

@koflera
Copy link
Collaborator

koflera commented Jan 17, 2025

a few other comments:

@ckolbPTB
Copy link
Collaborator Author

I would also maybe change the capital L to l, to better distinguish scalars from linear operators

@koflera should the regularization strength then actually always be a float and not float | torch.Tensor?

@fzimmermann89
Copy link
Member

please keep it as tensor or float.

@koflera
Copy link
Collaborator

koflera commented Jan 17, 2025

I would also maybe change the capital L to l, to better distinguish scalars from linear operators

@koflera should the regularization strength then actually always be a float and not float | torch.Tensor?

I think it doesn't hurt to keep the option to have both. If the intention was to make it possible to have an entire Lambda-Map, I would say we can still update the code later on.

Copy link
Collaborator

@koflera koflera left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

very last comment :)

@fzimmermann89
Copy link
Member

Why not \lambda?

It is a latex equation.
The parameter is named differently anyways..?

@ckolbPTB ckolbPTB added the pre-commit.ci autofix run autofix in this PR label Jan 18, 2025
@pre-commit-ci pre-commit-ci bot removed the pre-commit.ci autofix run autofix in this PR label Jan 18, 2025
@ckolbPTB ckolbPTB changed the title Fix lin op reg sense Fix linear operator in RegularizedSENSEReco Jan 18, 2025
@fzimmermann89 fzimmermann89 changed the title Fix linear operator in RegularizedSENSEReco Fix linear operator in regularized SENSE Jan 20, 2025
@fzimmermann89 fzimmermann89 enabled auto-merge (squash) January 20, 2025 21:32
@fzimmermann89 fzimmermann89 force-pushed the fix_lin_op_reg_sense branch 2 times, most recently from 7d1e607 to 7e1949e Compare January 20, 2025 22:56
@fzimmermann89 fzimmermann89 changed the title Fix linear operator in regularized SENSE Fix linear operator in regularized iterative SENSE Jan 20, 2025
@fzimmermann89 fzimmermann89 enabled auto-merge (squash) January 20, 2025 23:24
@fzimmermann89 fzimmermann89 enabled auto-merge (squash) January 20, 2025 23:25
@fzimmermann89 fzimmermann89 merged commit ee37528 into main Jan 20, 2025
21 checks passed
@fzimmermann89 fzimmermann89 deleted the fix_lin_op_reg_sense branch January 20, 2025 23:26
@fzimmermann89 fzimmermann89 mentioned this pull request Jan 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants