SPARC β reconstruction models
Sixteen SPARC models that reconstruct a 256Β³ CT volume from four or eight X-ray projections, one per dataset and view count. They are the models behind every reconstruction result in the manuscript A foundation model recovers three-dimensional anatomy and clinical findings from sparse X-ray projections (2026). Each was adapted from the pretrained backbone in lyqun/SPARC.
Code, installation and data preparation: HORIZONHealthcare/SPARC.
Access. Log in, fill in the short form on this page, and access is granted straight away. Then log in on your machine with hf auth login before downloading.
Performance
Mean over each test set, with patient-level bootstrap 95% confidence intervals (10,000 resamples). PSNR and SSIM (Γ 100) are computed over [β1,024, 1,024] HU. The last column is SPARC's paired lead in PSNR over DeepSparse, the strongest of five competing methods retrained under the same protocol in the paper; its interval excluded zero in every setting.
| Dataset | Projections | Test volumes | PSNR (dB) | SSIM (Γ 100) | Lead over DeepSparse (dB) |
|---|---|---|---|---|---|
| CT-RATE | 4 | 602 | 29.41 (29.25β29.56) | 87.15 (86.76β87.53) | +2.25 (+2.16 to +2.35) |
| CT-RATE | 8 | 602 | 31.39 (31.25β31.54) | 89.18 (88.85β89.50) | +2.07 (+2.01 to +2.14) |
| TotalSegmentator | 4 | 79 | 29.37 (28.98β29.76) | 87.46 (86.74β88.17) | +2.74 (+2.59 to +2.89) |
| TotalSegmentator | 8 | 79 | 31.37 (31.03β31.72) | 90.46 (89.86β91.05) | +2.62 (+2.50 to +2.73) |
| Medical Segmentation Decathlon | 4 | 209 | 30.27 (29.98β30.55) | 86.98 (86.51β87.42) | +1.84 (+1.76 to +1.92) |
| Medical Segmentation Decathlon | 8 | 209 | 32.74 (32.43β33.03) | 92.09 (91.66β92.50) | +1.88 (+1.81 to +1.96) |
| AbdomenCT-1K | 4 | 158 | 29.74 (29.44β30.04) | 88.45 (87.90β88.99) | +1.70 (+1.62 to +1.79) |
| AbdomenCT-1K | 8 | 158 | 32.23 (31.91β32.53) | 90.17 (89.82β90.50) | +1.58 (+1.49 to +1.67) |
| AMOS (CT) | 4 | 75 | 29.65 (29.37β29.91) | 90.18 (89.78β90.57) | +1.65 (+1.49 to +1.81) |
| AMOS (CT) | 8 | 75 | 31.67 (31.40β31.93) | 92.18 (91.84β92.50) | +0.83 (+0.72 to +0.94) |
| CQ500 | 4 | 71 | 30.86 (30.42β31.24) | 95.59 (94.65β96.21) | +1.37 (+1.19 to +1.56) |
| CQ500 | 8 | 71 | 33.06 (32.66β33.40) | 96.89 (96.14β97.37) | +1.10 (+0.94 to +1.30) |
| ToothFairy3 | 4 | 77 | 30.82 (30.47β31.16) | 95.46 (95.09β95.80) | +1.46 (+1.34 to +1.58) |
| ToothFairy3 | 8 | 77 | 33.30 (32.94β33.66) | 96.64 (96.35β96.90) | +1.70 (+1.57 to +1.82) |
| VerSe | 4 | 50 | 27.61 (26.75β28.50) | 81.43 (79.33β83.52) | +2.07 (+1.88 to +2.27) |
| VerSe | 8 | 50 | 29.48 (28.73β30.25) | 86.23 (84.48β87.90) | +2.21 (+1.98 to +2.46) |
Thirteen test volumes that repeat a training scan, or come from a subject with a training volume, were removed from the test sets before evaluation (3 MSD, 1 AbdomenCT-1K, 3 ToothFairy3, 6 VerSe); they are listed in splits/excluded_test_volumes.csv.
Files
Each checkpoint (544 MB) holds the weights of the 2D projection encoder, the 3D feature volume and the point decoder (136.1 M parameters, float32), the training configuration (config), and the epoch and validation PSNR of the checkpoint, which was selected on validation PSNR. It loads with torch.load(..., weights_only=True).
| File | Epoch | Validation PSNR (dB) | SHA-256 |
|---|---|---|---|
ctrate_v4.pth |
380 | 29.23 | b6728802b21dc2cd397b50189417f2db453bbfd39d4edfb81d56baef8880ad51 |
ctrate_v8.pth |
400 | 31.14 | c965b28bb87d6db002fe0637a299dc8bf991b0f1b27d0d3ebaeb9b1b1649a917 |
totalsegmentator_v4.pth |
380 | 30.03 | 4377e98910f3e7d37d46503cc088dddd2898b291afd974a17def9e3d6b219a87 |
totalsegmentator_v8.pth |
400 | 31.90 | 17cf829df910a697ca37975719c497f5c69f23b5b2e770edf3c1cde535ceeaff |
msd_v4.pth |
180 | 29.90 | 64da7d6e8e3a46059dcd5ad9d0cf4c6a9e4960d7b9bd3b27d18808fb13cd54f6 |
msd_v8.pth |
240 | 32.28 | 72eb874fbcb5257fb098dabd27831796ef1d17de9b936c66af801697e686aef0 |
abdomenct1k_v4.pth |
240 | 29.58 | 830b79fff54b3a98b02003ab867804972e6963602c8c066c16318102ddfba300 |
abdomenct1k_v8.pth |
240 | 32.11 | 6b2c17fc3844565554ac2da90056fd9d6a9aeb389732d95b88c72a397040dfbe |
amos_v4.pth |
360 | 29.65 | 1ee20863aac055871ab731c02ce6dd1ef775b89f8ee392f5281cdaec7a6f2277 |
amos_v8.pth |
400 | 31.68 | d60d040ec5af2896f67db1bb13b95a1ef27733cd303009d928566e23e3cf2b8f |
cq500_v4.pth |
360 | 30.32 | 4ef547394eeb70a50881fa4784b29cde28b0dafac68995dcbcbb6df7d6c3eacc |
cq500_v8.pth |
360 | 32.76 | 62e6d30249c83dbff7f48e16f3e37ff61b090e79468bbcfd898015c01ad41c98 |
toothfairy3_v4.pth |
360 | 30.81 | 133d21ac82593aa3e95ecbb28ef3a5d42c0d954ff6d90da1c461b8f8cdd1cecc |
toothfairy3_v8.pth |
400 | 33.30 | 8f7ecb8db40f87aed2e8ae4b7a79f2b6dc81e2f3d4a3804ea5091b69acaba634 |
verse_v4.pth |
80 | 27.81 | 3d7bd5d1017733f6533e0ed3838e42e875e62b8d94553f616dafd75748d89175 |
verse_v8.pth |
80 | 29.63 | d4bba3d07ff0d251abdec811f2f3b6b5453b16a38a08bcd25b8ee83566204c05 |
Usage
git clone https://github.com/HORIZONHealthcare/SPARC.git && cd SPARC
conda create -n sparc python=3.11 -y && conda activate sparc
pip install torch==2.5.1 --index-url https://download.pytorch.org/whl/cu124
pip install -r requirements.txt
hf auth login # after filling in the form on this page
hf download lyqun/SPARC sparc_stage2_backbone.pth --local-dir weights
hf download lyqun/SPARC-reconstruction cq500_v8.pth --local-dir weights
export DATA_ROOT=/path/to/data OUTPUT_ROOT=/path/to/outputs PYTHONPATH=.
cp -r splits "$DATA_ROOT/"
python finetune_foundation_recon.py --config configs/cq500_v8.yaml \
--init_ckpt weights/sparc_stage2_backbone.pth --eval_ckpt weights/cq500_v8.pth \
--metrics_manifest "$DATA_ROOT/splits/cq500_test.csv" --metrics_csv cq500_v8_metrics.csv
The backbone file supplies the architecture; the reconstruction file supplies the weights. Use --export_dir <folder> instead of --metrics_csv to save reconstructed volumes in Hounsfield units. Each model expects its own view count and the acquisition geometry of its dataset, which the config sets:
| Files | Config | Test split |
|---|---|---|
ctrate_v{4,8}.pth |
configs/ctrate_v{4,8}.yaml |
splits/ctrate_test.csv |
totalsegmentator_v{4,8}.pth |
configs/totalsegmentator_v{4,8}.yaml |
splits/totalsegmentator_test.csv |
msd_v{4,8}.pth |
configs/msd_v{4,8}.yaml |
splits/msd_test.csv |
abdomenct1k_v{4,8}.pth |
configs/abdomenct1k_v{4,8}.yaml |
splits/abdomenct1k_test.csv |
amos_v{4,8}.pth |
configs/amos_v{4,8}.yaml |
splits/amos_test.csv |
cq500_v{4,8}.pth |
configs/cq500_v{4,8}.yaml |
splits/cq500_test.csv |
toothfairy3_v{4,8}.pth |
configs/toothfairy3_v{4,8}.yaml |
splits/toothfairy3_test.csv |
verse_v{4,8}.pth |
configs/verse_v{4,8}.yaml |
splits/verse_test.csv |
The volumes must first be converted as described in preprocessing/README.md.
With the released code, weights and split files, all sixteen models reproduce the per-volume results used in the paper.
Training data
Each model was finetuned on the training split of one dataset, starting from the pretrained backbone, for at most 400 epochs with early stopping on validation PSNR. The splits are in splits/.
| Dataset | Anatomy | Source | Licence |
|---|---|---|---|
| CT-RATE | Chest | source | CC BY-NC-SA 4.0 |
| TotalSegmentator v2.0.1 | Multiple regions | source | CC BY 4.0 |
| Medical Segmentation Decathlon | Abdomen and chest | source | CC BY-SA 4.0 |
| AbdomenCT-1K | Abdomen | source | see source |
| AMOS (CT) | Abdomen | source | CC BY 4.0 |
| CQ500 | Head (unseen in pretraining) | source; we used the Kaggle mirror | CC BY-NC-SA 4.0 |
| ToothFairy3 | Dental CBCT (unseen in pretraining) | source | CC BY-NC-SA 4.0 |
| VerSe | Spine (unseen in pretraining) | source; we used the copy in CADS (0010_verse) |
CC BY-SA 4.0 |
Limitations
- Trained and evaluated on projections rendered from CT (digitally reconstructed radiographs), not on radiographs acquired on an X-ray system. Scatter, detector response and beam hardening on a real system differ from the rendering.
- Each model assumes the acquisition geometry of its dataset and view count; a miscalibrated geometry degrades it sharply (in the paper's simulations, up to 13.3 dB in PSNR for a 5% source-to-detector distance error or a 90Β° arc).
- A model trained on one dataset has not been validated on scanners, populations or anatomies outside it.
- For research use only. They are not medical devices.
License
The weights are released under CC BY-NC 4.0, the same licence as the code. Commercial use is not permitted. Use of the weights must also respect the terms of the datasets each model was trained on. The models are for research use only and are not medical devices.
Citation
@misc{lin2026sparc,
title = {A foundation model recovers three-dimensional anatomy and clinical findings from sparse X-ray projections},
author = {Lin, Yiqun and Xu, Jiayang and Ju, Lie and Wang, Hualiang and Guo, Jiarong and Yao, Huifeng and Sun, Haoran and Zhou, Yukun},
year = {2026},
note = {Manuscript}
}
Please also cite the dataset each model was trained on.
Model tree for lyqun/SPARC-reconstruction
Base model
lyqun/SPARC