Peteroos commited on
Commit
266cae6
·
verified ·
1 Parent(s): 5f97114

Add FORCE-Interior and baseline checkpoints

Browse files
README.md ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: cc-by-nc-4.0
3
+ library_name: pytorch
4
+ pipeline_tag: image-to-image
5
+ tags:
6
+ - computed-tomography
7
+ - interior-tomography
8
+ - ct-reconstruction
9
+ - pfgm++
10
+ - diffusion-model
11
+ - medical-imaging
12
+ ---
13
+
14
+ # FORCE-Interior checkpoints
15
+
16
+ Pretrained weights for **FORCE-Interior: Measurement-Consistent Adaptation of a
17
+ Poisson-Flow Generative Prior for Interior CT**, together with the learned baselines
18
+ it is compared against.
19
+
20
+ Code: <https://github.com/Peteroos/FORCE-Interior>
21
+
22
+ ## Files
23
+
24
+ | Path | Size | Model | Used by |
25
+ |---|---|---|---|
26
+ | `checkpoints/model_028.pth` | 2.3 GB | PFGM++ prior of FORCE-Interior | `run_force.py` |
27
+ | `checkpoints/roi_ct_cnn/net-epoch-200.pth` | 62 MB | ROI-CT-CNN U-Net | `run_roicnn.py` |
28
+ | `checkpoints/dds_pretrained/lodochallenge_pixel_diffusion/` | 455 MB | DDS pixel-diffusion prior (third-party, mirrored) | `run_dds.py` |
29
+ | `checkpoints/drunet/drunet_mayo.pth` | 131 MB | DRUNet denoiser for the PnP-ADMM / PnP-HQS baselines | PnP baselines |
30
+
31
+ ## Download
32
+
33
+ This repository mirrors the `checkpoints/` layout that `config.py` expects. Download
34
+ it into the root of the code repository. Keep `--include`; without it this model
35
+ card overwrites the code repository's `README.md`.
36
+
37
+ ```bash
38
+ git clone https://github.com/Peteroos/FORCE-Interior.git
39
+ cd FORCE-Interior
40
+ hf download Peteroos/FORCE-Interior --include "checkpoints/*" --local-dir .
41
+ ```
42
+
43
+ ## Model details
44
+
45
+ ### PFGM++ prior — `checkpoints/model_028.pth`
46
+
47
+ - Unconditional PFGM++ prior on 512 × 512 full-dose CT slices from 8 patients of the
48
+ 2016 AAPM/Mayo Low Dose CT Grand Challenge: L067, L096, L109, L143, L192, L286,
49
+ L291, L310. The test patients L333 and L506 were not used for training.
50
+ - Pixel domain: HU clipped to [-1024, 3071] and mapped linearly to [-1, 1].
51
+ - Architecture: the U-Net in `model/` with `num_res_blocks=3`,
52
+ `channel_mult=1,2,4,8,16` (290 M parameters).
53
+ - Contents: `{"model": state_dict, "ema": [tensors in model.parameters() order]}`.
54
+ Sample with the **EMA** weights; `load_checkpoint()` in `run_force.py` does this.
55
+
56
+ ### ROI-CT-CNN — `checkpoints/roi_ct_cnn/net-epoch-200.pth`
57
+
58
+ - U-Net post-processing of the truncated FBP (Han & Ye, *Med. Phys.* 2019),
59
+ trained by us on full-dose Mayo CT at an ROI radius of 128 px for 200 epochs.
60
+ - Network: `baselines/roi_ct_cnn/unet.py` (`net_type="type1"`, 64 base channels);
61
+ attenuation is scaled so that water = 1.0.
62
+ - Contents: `{"state_dict", "opt", "epoch", "net_type"}`.
63
+ - The training/validation patient split of this checkpoint was not recorded.
64
+
65
+ ### DDS prior — `checkpoints/dds_pretrained/lodochallenge_pixel_diffusion/`
66
+
67
+ - Unmodified copy of
68
+ [`jiayangshi/lodochallenge_pixel_diffusion`](https://huggingface.co/jiayangshi/lodochallenge_pixel_diffusion)
69
+ (revision `b7e291c2`, sha256 of the U-Net weights verified), released under the MIT
70
+ license with [DM4CT](https://github.com/DM4CT/DM4CT) (ICLR 2026). It is mirrored
71
+ here only so that all baselines can be fetched from one place; the upstream model
72
+ card is kept in the folder. Please cite DM4CT when using it.
73
+ - According to the DM4CT split, L333 is in this prior's training set and L506 in
74
+ its test set.
75
+ - Intensity normalisation used by our adapter: `baselines/dds/dm4ct_norm.json`.
76
+
77
+ ### DRUNet — `checkpoints/drunet/drunet_mayo.pth`
78
+
79
+ - DRUNet (Zhang et al., DPIR, *TPAMI* 2021) with a noise-level map as second input;
80
+ channels (64, 128, 256, 512), 4 residual blocks per level, 32.6 M parameters.
81
+ - Trained on 1369 full-dose slices from 6 patients (L109, L143, L192, L286, L291,
82
+ L310). The validation patients (L067, L096) and test patients (L333, L506) were
83
+ excluded.
84
+ - Same [-1, 1] pixel domain as the PFGM++ prior; additive Gaussian noise with
85
+ σ ~ U[0, 0.08] (0–164 HU); 30 000 iterations.
86
+ - Contents: `{"state_dict", "iters", "patients", "sigma_max"}`.
87
+
88
+ ## Training data
89
+
90
+ All models were trained on the 2016 AAPM/Mayo Low Dose CT Grand Challenge data.
91
+ No CT images or data derived from them are distributed in this repository.
92
+
93
+ ## License
94
+
95
+ The PFGM++ prior, ROI-CT-CNN and DRUNet weights are released under
96
+ [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/). The mirrored DDS prior in
97
+ `checkpoints/dds_pretrained/` keeps its upstream MIT license.
98
+
99
+ ## Citation
100
+
101
+ ```bibtex
102
+ @article{chen2026forceinterior,
103
+ title = {{FORCE-Interior}: Measurement-Consistent Adaptation of a Poisson-Flow
104
+ Generative Prior for Interior {CT}},
105
+ author = {Chen, Kang and Xia, Wenjun and Wang, Jianxu and Nafee, Mahmud Wasif
106
+ and Wang, Ge},
107
+ note = {Manuscript under review},
108
+ year = {2026}
109
+ }
110
+ ```
checkpoints/dds_pretrained/lodochallenge_pixel_diffusion/README.md ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: diffusers
3
+ license: mit
4
+ pipeline_tag: image-to-image
5
+ tags:
6
+ - computed-tomography
7
+ - ct-reconstruction
8
+ - diffusion-model
9
+ - inverse-problems
10
+ - dm4ct
11
+ - sparse-view-ct
12
+ ---
13
+
14
+ # Pixel Diffusion UNet – LoDoChallenge (DM4CT)
15
+
16
+ This repository contains the pretrained **pixel-space diffusion UNet** presented in the paper [DM4CT: Benchmarking Diffusion Models for Computed Tomography Reconstruction](https://huggingface.co/papers/2602.18589) (ICLR 2026).
17
+
18
+ - **Project Page:** [https://dm4ct.github.io/DM4CT/](https://dm4ct.github.io/DM4CT/)
19
+ - **Codebase:** [https://github.com/DM4CT/DM4CT](https://github.com/DM4CT/DM4CT)
20
+ - **Paper:** [DM4CT: Benchmarking Diffusion Models for Computed Tomography Reconstruction](https://huggingface.co/papers/2602.18589)
21
+
22
+ ---
23
+
24
+ ## 🔬 Model Overview
25
+
26
+ This model learns a **prior over CT reconstruction images** using a denoising diffusion probabilistic model (DDPM). It operates directly in **pixel space** (not latent space).
27
+
28
+ - **Architecture**: 2D UNet (Diffusers `UNet2DModel`)
29
+ - **Input resolution**: 512 × 512
30
+ - **Channels**: 1 (grayscale CT slice)
31
+ - **Training objective**: ε-prediction (standard DDPM formulation)
32
+ - **Noise schedule**: Linear beta schedule
33
+ - **Training dataset**: Low Dose Grand Challenge (LoDoChallenge)
34
+ - **Intensity normalization**: Rescaled to (-1, 1)
35
+
36
+ This model is intended to be combined with data-consistency correction for CT reconstruction tasks as detailed in the DM4CT benchmark.
37
+
38
+ ---
39
+
40
+ ## 📊 Dataset: Low Dose Grand Challenge
41
+
42
+ Source: [AAPM Low Dose CT Grand Challenge](https://www.aapm.org/grandchallenge/lowdosect/)
43
+
44
+ Preprocessing steps:
45
+ - Train/test split.
46
+ - Rescale reconstructed slices to (-1, 1).
47
+ - No geometry information is embedded in the model.
48
+
49
+ The model learns an unconditional image prior over medical CT slices.
50
+
51
+ ---
52
+
53
+ ## 🧠 Training Details
54
+
55
+ - **Optimizer**: AdamW
56
+ - **Learning rate**: 1e-4
57
+ - **Hardware**: NVIDIA A100 GPU
58
+ - **Training script**: [train_pixel.py](https://github.com/DM4CT/DM4CT/blob/main/train_pixel.py)
59
+
60
+ ---
61
+
62
+ ## 🚀 Usage
63
+
64
+ You can use this model with the `diffusers` library:
65
+
66
+ ```python
67
+ from diffusers import DDPMPipeline
68
+
69
+ # Load the pretrained pipeline
70
+ pipeline = DDPMPipeline.from_pretrained("jiayangshi/lodochallenge_pixel_diffusion")
71
+
72
+ # Generate a sample (unconditional CT slice prior)
73
+ image = pipeline().images[0]
74
+ image.save("generated_ct_slice.png")
75
+ ```
76
+
77
+ ---
78
+
79
+ ## Citation
80
+
81
+ ```bibtex
82
+ @inproceedings{
83
+ shi2026dmct,
84
+ title={{DM}4{CT}: Benchmarking Diffusion Models for Computed Tomography Reconstruction},
85
+ author={Shi, Jiayang and Pelt, Dani{\"e}l M and Batenburg, K Joost},
86
+ booktitle={The Fourteenth International Conference on Learning Representations},
87
+ year={2026},
88
+ url={https://openreview.net/forum?id=YE5scJekg5}
89
+ }
90
+ ```
checkpoints/dds_pretrained/lodochallenge_pixel_diffusion/model_index.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "DDPMPipeline",
3
+ "_diffusers_version": "0.32.2",
4
+ "scheduler": [
5
+ "diffusers",
6
+ "DDPMScheduler"
7
+ ],
8
+ "unet": [
9
+ "diffusers",
10
+ "UNet2DModel"
11
+ ]
12
+ }
checkpoints/dds_pretrained/lodochallenge_pixel_diffusion/scheduler/scheduler_config.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "DDPMScheduler",
3
+ "_diffusers_version": "0.32.2",
4
+ "beta_end": 0.02,
5
+ "beta_schedule": "linear",
6
+ "beta_start": 0.0001,
7
+ "clip_sample": true,
8
+ "clip_sample_range": 1.0,
9
+ "dynamic_thresholding_ratio": 0.995,
10
+ "num_train_timesteps": 1000,
11
+ "prediction_type": "epsilon",
12
+ "rescale_betas_zero_snr": false,
13
+ "sample_max_value": 1.0,
14
+ "steps_offset": 0,
15
+ "thresholding": false,
16
+ "timestep_spacing": "leading",
17
+ "trained_betas": null,
18
+ "variance_type": "fixed_small"
19
+ }
checkpoints/dds_pretrained/lodochallenge_pixel_diffusion/unet/config.json ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "UNet2DModel",
3
+ "_diffusers_version": "0.32.2",
4
+ "_name_or_path": "trained/lodochallenge/ddpm/unet",
5
+ "act_fn": "silu",
6
+ "add_attention": true,
7
+ "attention_head_dim": 8,
8
+ "attn_norm_num_groups": null,
9
+ "block_out_channels": [
10
+ 128,
11
+ 128,
12
+ 256,
13
+ 256,
14
+ 512,
15
+ 512
16
+ ],
17
+ "center_input_sample": false,
18
+ "class_embed_type": null,
19
+ "down_block_types": [
20
+ "DownBlock2D",
21
+ "DownBlock2D",
22
+ "DownBlock2D",
23
+ "DownBlock2D",
24
+ "AttnDownBlock2D",
25
+ "DownBlock2D"
26
+ ],
27
+ "downsample_padding": 1,
28
+ "downsample_type": "conv",
29
+ "dropout": 0.0,
30
+ "flip_sin_to_cos": true,
31
+ "freq_shift": 0,
32
+ "in_channels": 1,
33
+ "layers_per_block": 2,
34
+ "mid_block_scale_factor": 1,
35
+ "norm_eps": 1e-05,
36
+ "norm_num_groups": 32,
37
+ "num_class_embeds": null,
38
+ "num_train_timesteps": null,
39
+ "out_channels": 1,
40
+ "resnet_time_scale_shift": "default",
41
+ "sample_size": 512,
42
+ "time_embedding_dim": null,
43
+ "time_embedding_type": "positional",
44
+ "up_block_types": [
45
+ "UpBlock2D",
46
+ "AttnUpBlock2D",
47
+ "UpBlock2D",
48
+ "UpBlock2D",
49
+ "UpBlock2D",
50
+ "UpBlock2D"
51
+ ],
52
+ "upsample_type": "conv"
53
+ }
checkpoints/dds_pretrained/lodochallenge_pixel_diffusion/unet/diffusion_pytorch_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:12a59a05edcebd9121b522345d6d82cbf2135d8e3523e2ebc52937078e9e7e53
3
+ size 454722660
checkpoints/drunet/drunet_mayo.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c7e837c179cccedba4e3b2bd757a26432e09ea46fc91a30796721e359812d53f
3
+ size 130580966
checkpoints/model_028.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1e5aa073b5f47ed7272fbaa068997ce54bdc76032975e752c2b56831e40cd82d
3
+ size 2322797498
checkpoints/roi_ct_cnn/net-epoch-200.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:09e1d39e0dbd5536eee569fa7d5eae57b65255edd1bfdfdbd94213efa8cbc7ff
3
+ size 61694514