Strategies to Minimize Out-of-Distribution Effects in Data-Driven MRS Quantification
Paper β’ 2511.23135 β’ Published
A multi-layer perceptron that reads concentrations and signal parameters off a spectrum.
An MRSuite model, mrsuite.models.mlp.MLP. Paper: https://arxiv.org/abs/2511.23135
import mrsuite.models
model = mrsuite.models.load("MRSuite/mlp-supervised-7t-slaser")
results = model(data) # one spectrum as NIfTI-MRS, or a batch as NIfTI-MRS+
It runs as a step in any MRSuite pipeline, and each result's provenance records its exact
weights (SHA-256 45a62ce6c27b96d48c1cd425a1ddd88e4ce7232ecf867395fb9c754ff6b142c4).
It takes single spectra acquired as its training data, and refuses others:
| Acquisition | |
|---|---|
| Bandwidth [Hz] | 3000.0 |
| Centre [ppm] | 4.65 |
| Spectrometer frequency [MHz] | 298.200012 |
| Points | 1024 |
{
"model": "mrsuite.models.mlp.MLP",
"checkpoint": {
"path": "data/checkpoints/mlp_super/epoch=0-step=7537664.ckpt",
"sha256": "7ef95bb4916e915ce5847cf17229f18ca15742e9cb87dddc5f9a0991dd9f829c"
},
"job": {
"model": "mlp",
"basis": "7T_sLASER_OIT_TE34.basis",
"basisFmt": "7tslaser",
"ppmlim": [
0.5,
4.0
],
"dataType": "aumc2",
"width": 512,
"depth": 3
},
"converted with": {
"ood-robust-mrs": "451cf71"
},
"run": {
"id": "wyoo5p40",
"settings": {
"activation": "elu",
"adaptMode": "per_spec",
"arch": "mlp",
"basisFmt": "7tslaser",
"batch": 16,
"callback": "val_conc_loss",
"check_val_every_n_epoch": null,
"checkpoint_path": "",
"conv_depth": 3,
"dataType": "aumc2",
"decomModel": "unet",
"depth": 3,
"device": "cuda:0",
"dropout": 0,
"flow_args": {
"beta": 0,
"flow": "SNFVAE",
"num_flows": 8
},
"gpu_selection": 0,
"gradient_clip_val": 0,
"initMethod": "nn",
"innerEpochs": 100,
"innerLoss": "mse_specs",
"innerLr": 0.001,
"kernel_size": 3,
"load_model": false,
"loss": "mae_all_scale",
"lr": 0.0001,
"max_epochs": -1,
"max_steps": -1,
"maxIter": 10,
"model": "nn",
"num_workers": 4,
"online": true,
"optimizer": "theseus",
"path2basis": "../Data/BasisSets/7T_sLASER_OIT_TE34.basis",
"path2vae": "",
"ppmlim": [
0.5,
4
],
"project": "ComparisonDD",
"reg_l1": 0,
"reg_l2": 0,
"shuffle": true,
"skip_train": false,
"specType": "auto",
"stepSize": 0.1,
"stride": 1,
"trueBatch": 16,
"val_check_interval": 256,
"val_size": 1024,
"width": 512
}
}
}
How the training spectra were made, reported as the MRSsynMRS minimum standard for synthetic
MRS data asks (LaMaster et al., arXiv 2602.23463). The full recipe is in recipe.json.
| MRSsynMRS | Value |
|---|---|
| Experiment | |
| ID | OoD-Robust-MRS-Quantification dataType 'aumc2' (aumcParams2, aumcConcs), runs wyoo5p40 (supervised) and 48ke5d6u (self-supervised) |
| Nucleus | 1H |
| Software | |
| Basis Set Simulation | |
| Name | 7T_sLASER_OIT_TE34.basis (LCModel) |
| Repository (Link, DOI, or RRID) | https://github.com/CIC-methods/FID-A (the simulator, per the basis header's source path 7T_FIDA_sLASER_OIT_TE34) |
| Signal Model | |
| Name | VoigtModel (simulation/sigModels.py): each basis FID times exp(-(1jeps + gamma + sigma^2t)t), FFT, times its amplitude and exp(-1j(phi0 + phi1*f)), plus a polynomial baseline |
| Repository (Link, DOI, or RRID) | https://github.com/julianmer/OoD-Robust-MRS-Quantification (451cf71), arXiv:2511.23135 |
| Additional Code | |
| Name | simulation/simulation.py, simulation/dataModules.py (SynthDataModule.get_batch), utils/components.py; FSL-MRS reads the basis |
| Repository (Link, DOI, or RRID) | https://github.com/julianmer/OoD-Robust-MRS-Quantification (451cf71) |
| Purpose | draws the parameters and adds the noise and any random walk and random peaks; simulated online, fresh spectra for every training batch |
| Pulse Sequence | |
| Field Strength [T] | 7 |
| Localization | sLASER (OIT pulses, per the basis name) |
| Spectral Width [Hz] | 3000 |
| Number of Points | 1024 |
| Voxel Size (X, Y, Z) [mm] | β |
| Sequence Timing(s) | |
| Repetition Time(s) [ms] | β |
| Echo Time(s) [ms] | 34 |
| Mixing Time(s) [ms] | β |
| Inversion Time(s) [ms] | β |
| Water Suppression | |
| Method | β |
| Bandwidth(s) [Hz] | β |
| Shimming Method | β |
| Radio Frequency Pulse(s) | |
| Shape | β |
| Duration(s) | β |
| Delay(s) | β |
| Slice-Select Gradients | |
| Shape | β |
| Duration(s) | β |
| Delay(s) | β |
| Crusher/Rephasing Gradients | |
| Shape | β |
| Duration(s) | β |
| Delay(s) | β |
| Editing | |
| Type of editing | none |
| Number of subexperiments | 1 |
| Editing bands per subexperiment | β |
| Metabolites | |
| Population | |
| Age Range | β |
| Sex | β |
| Healthy included | β |
| Clinical included | β |
| Region of interest | β |
| Distribution | uniform: each parameter drawn independently and uniformly over its [low, high] (numpy.random.uniform) |
| Component dropout probability | 0 |
| Units | a.u.: the amplitude multiplying each basis FID as FSL-MRS reads the LCModel .basis (inverse FFT, conjugated) and resamples it to 3000 Hz and 1024 points, not rescaled (each metabolite's function also holds a reference peak at 0 ppm, outside the model's window); not mM |
| Sources of Parameter Values | |
| Concentration Ranges (Link or DOI) | per name the widest of LCModel and FSL-MRS (Newton) fits of the AUMC 7 T data and de Graaf 2019's literature ranges (simulation/simulationDefs.py: aumcConcs over aumcConcsLCM, aumcConcsNewton, normConcs); arXiv 2511.23135 |
| T2 Relaxation Ranges (Link or DOI) | β |
| T1 Relaxation Ranges (Link or DOI) | β |
| Concentration Ranges | |
| Ala | 0 β 1.6 |
| Asc | 0 β 4.9 |
| Asp | 0 β 4.8 |
| Cr | 3.9 β 12.3 |
| GABA | 0 β 4 |
| Gln | 0 β 6.8 |
| Glu | 6 β 17.9 |
| Gly | 0 β 1 |
| GPC | 0 β 3.6 |
| GSH | 0 β 3.6 |
| mIns | 4 β 12.1 |
| Lac | 0 β 3.1 |
| NAAG | 0 β 2.5 |
| NAA | 7.5 β 16.3 |
| PCh | 0 β 2.4 |
| PCr | 0 β 5.5 |
| PE | 0 β 5.2 |
| Scyllo | 0 β 0.6 |
| Ser | 0 β 7.3 |
| Tau | 1.2 β 6 |
| MM_CMR | 0 β 400 |
| T2 Relaxation Ranges | not per metabolite: one Lorentzian decay for all basis functions, exp(-gamma*t) with gamma in [2, 25] 1/s (1/gamma 40-500 ms, FWHM gamma/pi 0.6366-7.958 Hz), on top of each basis function's own linewidth |
| T1 Relaxation Ranges | not applied |
| Metabolite-Level Frequency Shifts | not applied: one global shift (see Artifacts) |
| Components | |
| Number Spectral Averages | 1 |
| Number of Acquisitions per Excitation | 1 |
| Dynamic Experiment | |
| Diffusion B-values | β |
| Diffusion Model (Name, DOI) | β |
| fMRS Target Metabolites and Percent Changes | β |
| Macromolecule | |
| Available in Isolation | yes |
| Simulated, Modeled, Experimental, or Mixture | the basis function MM_CMR (header ID 7T_MM_CMRR, from MM_295.1_MHz_CMRR_4kHz.RAW), sampled like the metabolites; measured or modelled is not stated |
| Description | MM_CMR |
| Spectral Baseline - nonMMBG | |
| Model Used (Equation, Description, or DOI) | second-order polynomial added to the frequency-domain spectrum, real and imaginary parts separately: coefficients of 1, x and x^2 (less its mean), x from -1 to 1 across the model's input window 0.50-3.99 ppm, zero outside it; a coefficient is its term's amplitude in a.u. |
| Available in Isolation | yes |
| Applied | yes |
| If Analytical, Parameter Ranges (added) | |
| Re 1 | -600 β 200 |
| Im 1 | -800 β 300 |
| Re x | -1000 β 600 |
| Im x | -600 β 1000 |
| Re x^2 | -1600 β 200 |
| Im x^2 | -400 β 1000 |
| Noise | |
| Available in Isolation | yes |
| Distribution | additive complex Gaussian in the frequency domain (on the unnormalised FFT spectrum), real and imaginary parts independent |
| Amplitude Scaling | |
| std of each of the real and imaginary parts, a.u., uniform per spectrum | 10 β 7071.07 |
| B0 Map | |
| B0 Map Model Used | β |
| Available in Isolation | β |
| Applied | no |
| Tissue Segmentation | |
| Brain Map Model Used | β |
| Voxel Percentage(s) | β |
| Applied | no |
| Artifacts | |
| Zero-Order Phase | |
| Phase Range | |
| rad, as exp(-1j*phi0) | -0.5 β 0.5 |
| deg | -28.65 β 28.65 |
| Applied | yes |
| First-Order Phase | |
| Phase Range | |
| rad/Hz, as exp(-1jphi1f) | -1e-05 β 1e-05 |
| deg/ppm | -0.1709 β 0.1709 |
| Amplitude Range | β |
| PPM Reference [ppm] | -0.38 |
| Applied | yes |
| Frequency Shifts - Global | |
| Frequency Shift Range | |
| rad/s, as exp(-1jepst) | -10 β 10 |
| Hz | -1.592 β 1.592 |
| ppm | -0.005337 β 0.005337 |
| Applied | yes |
| Residual Water | |
| Model Used (Equation, Description, or DOI) | β |
| If Analytical, Parameter Ranges | β |
| Available in Isolation | β |
| Applied | no |
| Chemical Shift [ppm] | β |
| Number of Subcomponents | β |
| Amplitude Scaling [a.u.] | β |
| Unsuppressed Water | |
| Model Used (Equation, Description, or DOI) | β |
| Available in Isolation | β |
| Applied | no |
| Lipid | |
| Model Used (Equation, Description, or DOI) | β |
| Available in Isolation | β |
| Applied | no |
| Eddy Currents | |
| Model Used (Equation, Description, or DOI) | β |
| If Analytical, Parameter Ranges | β |
| Available in Isolation | β |
| Applied | no |
| Out-of-Voxel | |
| Model Used (Equation, Description, or DOI) | β |
| If Analytical, Parameter Ranges | β |
| Available in Isolation | β |
| Applied | no |
| Motion | |
| Model Used (Equation, Description, or DOI) | β |
| If Analytical, Parameter Ranges | β |
| Available in Isolation | β |
| Applied | no |
| Data Quality | |
| Signal Noise Ratio Range [a.u.] | |
| Range | 8.9 β 1384.8 |
| Metabolite-level SNRs recorded | no |
| Definition of SNR used | maximum of the real part of the noise-free spectrum (no phases, baseline or artifacts) in 1.9-2.1 ppm, the NAA singlet, over the standard deviation of the noise's real part; 1st-99th percentile of 2000 spectra drawn with the original code (numpy seed 0) |
| Linewidths | |
| Metabolite-level Linewidths recorded | no, per spectrum: gamma and sigma (1/s) in the returned parameters; they add FWHM gamma/pi 0.6366-7.958 Hz (Lorentzian) and 2*sqrt(ln2)*sigma/pi 1.06-13.25 Hz (Gaussian) |
| Reference Metabolite and Moiety | NAA, CH3 singlet (2.01 ppm) |
| Reference Metabolite Linewidth Range [Hz] | 3.2 β 19.7 |
{
"acquisition": {
"bandwidth": 3000.0,
"centre": 4.65,
"frequency": 298.200012,
"points": 1024
},
"depth": 3,
"first": 602,
"last": 957,
"metabolites": [
"Ala",
"Asc",
"Asp",
"Cr",
"GABA",
"Gln",
"Glu",
"Gly",
"GPC",
"GSH",
"mIns",
"Lac",
"NAAG",
"NAA",
"PCh",
"PCr",
"PE",
"Scyllo",
"Ser",
"Tau",
"MM_CMR"
],
"model": "mrsuite.models.mlp.MLP",
"width": 512
}