NSP-GS Stage-A FusionCNN β 25-view DeepSparse prior, 4 datasets
Stage-A FusionCNN trained with the released NSP_R2GS training entry
(deployment/nsp_gs_abc_v1, branch migration/gmrb-r2fine-20260907, commit 4714de6),
on four datasets instead of LUNA16 only.
Inputs per case
| Input | Source |
|---|---|
| V1 | DeepSparse 25-view output (logs/<dst>+25v+n250+s2/ep_400.pth, see Potestates/DeepSparse-25v), GT-free inference |
| V2 | prior-assisted RΒ²-GS (V6 train.py, RUN_COMMANDS 3.2 NSP-only: lambda_null 0.05, null loss 10kβ20k), 20k iterations, prior = V1, same 25 views |
| features / labels | released pair β features β labels chain (75D F+M+D patch features, gate = actionable, beta = beta_unclipped) |
25 views = uniform over 180Β° (indices 0,12,β¦,288 of a 300-view cone-beam bank). All four datasets use their official DeepSparse projector geometry.
Cohort
One model for all four datasets. Cases were never used to train the DeepSparse 25v models.
| Dataset | train | validation |
|---|---|---|
| LUNA16 (lung) | 40 | 5 |
| PENGWIN (pelvis) | 35 | 5 |
| PANORAMA (abdomen) | 40 | 5 |
| ToothFairy (tooth) | 40 | 5 |
| total | 155 | 20 |
Lists: cohort/STAGEA_SPLIT.json, frozen manifest cohort/TRAINING_DATASET.json.
Training
Released formal defaults (AdamW lr 1e-3, wd 1e-4, batch 64, 30 epochs, patience 8, 2048 patches/patient/epoch, AMP, seed 20260911, patient-balanced), with one override: --num-workers 16 (loader throughput only; the fixed sampler makes the data order identical). The run is therefore labelled EXPLICIT_NONFORMAL_OVERRIDE.
- best validation patch loss 0.06130 (epoch 29 of 30), 956 s on one RTX PRO 6000 Blackwell, peak CUDA memory 0.46 GB
- use
fusion_cnn_run_001/best.pttogether withfusion_cnn_run_001/PREPROCESSING.npz(fit on the train split only)
Results β validation (20 cases, in-sample: used for checkpoint selection)
3D PSNR (dB) vs GT, skimage, data_range 1:
| Dataset | V1 DeepSparse 25v | V2 RΒ²-GS 20k | V_A | V_A β V1 |
|---|---|---|---|---|
| LUNA16 | 31.64 | 30.47 | 33.15 | +1.51 |
| PENGWIN | 30.45 | 29.84 | 31.16 | +0.71 |
| PANORAMA | 29.48 | 28.22 | 29.61 | +0.12 |
| ToothFairy | 34.52 | 33.89 | 36.75 | +2.22 |
| all | 31.52 | 30.60 | 32.67 | +1.14 |
Per-case: fusion_cnn_run_001/scores_validation.csv. 18/20 cases improve; PENGWIN 032 (β3.00) and PANORAMA 101749 (β0.85) do not.
Results β held-out test (15 cases, never used for training or checkpoint selection)
5 LUNA16 + 5 PANORAMA + 5 ToothFairy (every non-training PENGWIN case is already in train/validation). V2 and features were built GT-free; GT was opened only for scoring.
| Dataset | V1 DeepSparse 25v | V2 RΒ²-GS 20k | V_A | V_A β V1 |
|---|---|---|---|---|
| LUNA16 | 30.06 | 28.45 | 31.44 | +1.38 |
| PANORAMA | 29.71 | 29.30 | 30.80 | +1.08 |
| ToothFairy | 33.78 | 33.47 | 35.86 | +2.08 |
| all | 31.19 | 30.41 | 32.70 | +1.52 |
All 15/15 cases improve over V1 (+0.53 to +2.37 dB). Per-case: fusion_cnn_run_001/scores_test_heldout.csv.
Local changes to the released code
patches/build_training_labels_nonneg_fix.diff: clamps the patch sums of squares (d2,target2,p1_sq,p2_sq) at 0. The summed-area-table subtraction returned β5.3eβ23 for one all-air patch (PENGWIN 004), which madecosineNaN and aborted the case. No other label value changes (175/175 label files finite; only that one patch was clamped).patches/r2gs_cuda_headers_blackwell.diff:#include <cfloat>/<cstdint>so the RΒ²-GS CUDA extensions build with CUDA 12.9 (torch 2.7.1+cu128).
License
Research use. Weights derive from LUNA16, PENGWIN (CC BY 4.0), PANORAMA (CC BY-NC 4.0, non-commercial) and ToothFairy; check each dataset's terms.