RDDM: A Residual-Driven Drifting Model for High-Fidelity Low-Dose CT Denoising
Project description
RDDM: A Residual-Driven Drifting Model for High-Fidelity Low-Dose CT Denoising
Official code release for RDDM: A Residual-Driven Drifting Model for High-Fidelity Low-Dose CT Denoising by Jianxu Wang, Qing Lyu, and Ge Wang.
Our Team: WANG-AXIS Lab
Introduction
RDDM is an efficient and high-fidelity LDCT denoising method based on a residual-driven drifting model. It incorporates the multi-step evolution from the generated residual distribution to the real residual distribution into the training dynamics through a residual drifting field, thereby enabling one-step denoising at inference time. Experiments on clinical datasets show that RDDM achieves state-of-the-art denoising performance among supervised baselines.
Fig. 1. Overview of RDDM. The top panel shows the training framework: the denoiser generates residual samples, while the objective is computed from the full generated residual batch and real residual batch. The bottom panels illustrate training-time drifting toward the real residual distribution and summarize the three RDDM variants.
RDDM Variants
The paper reports three RDDM variants, providing practical choices from fine-detail fidelity to stronger noise suppression. They share the same RDDM framework; only the drifting temperatures and optional pixel-level L1 supervision differ.
| Variant | --temperatures |
--lambda_l1 |
Intended use | Pretrained weights |
|---|---|---|---|---|
| RDDM-Fine | 1.0,1.5 |
0 |
Best fidelity; preserves realistic anatomical texture and noise characteristics. | Download |
| RDDM-Balanced | 0.2,1.0 |
0 |
Default trade-off between noise suppression and detail preservation. | Download |
| RDDM-Smooth | 1.0 |
0.01 |
Stronger noise suppression with smoother reconstructions. | Download |
- The training and test sets strictly follow the split described in the paper and are kept independent throughout model training and inference.
- Place the downloaded pretrained weights under the corresponding subfolders in
checkpoints/.
Installation
Tested environment:
- Python
3.10.20 - PyTorch
2.6.0+cu124 - CUDA
12.4
Create a clean environment first:
conda create -n rddm python=3.10 -y
conda activate rddm
python -m pip install -U pip
Install a PyTorch build matching your CUDA version. For example, for CUDA 12.4:
pip install torch==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu124
For other CUDA/CPU targets, use the official PyTorch instructions.
RDDM computes FID during dataset evaluation by default, so torchvision is installed together with torch to keep the PyTorch/FID dependency stack consistent.
Option 1: Install from source
git clone https://github.com/Jayx-Wang/RDDM.git
cd RDDM
pip install -e .
Option 2: Install the RDDM CLI
pip install rddm
After installation, the following commands are available:
rddm-train --help
rddm-infer-single --help
rddm-evaluate --help
Data Preparation
The clinical dataset used in this work can be obtained from the official AAPM Low Dose CT Grand Challenge page. We use the subset reconstructed with the B30 kernel and a slice thickness of 1 mm.
The expected directory layout is:
path/to/the/dataset/
├── train/
│ ├── ldct/
│ │ ├── *.IMA
│ │ └── ...
│ └── ndct/
│ ├── *.IMA
│ └── ...
└── test/
├── ldct/
│ ├── *.IMA
│ └── ...
└── ndct/
├── *.IMA
└── ...
Use --data_dir /path/to/the/dataset to specify your own dataset. Please ensure that LDCT and NDCT files are paired by matching filenames under the corresponding ldct/ and ndct/ folders.
Quick Start
The commands below are for installation from source and should be run inside the cloned repository. If you use the CLI installation, check rddm-train --help, rddm-infer-single --help, and rddm-evaluate --help for the corresponding usage.
Train RDDM-Fine
The following example trains RDDM-Fine with --temperatures 1.0,1.5 and --lambda_l1 0. To train RDDM-Balanced or RDDM-Smooth manually, keep the same command structure and change the variant-specific arguments shown in the table above.
CUDA_VISIBLE_DEVICES=0 python train.py \
--data_dir /path/to/the/dataset \
--split_train train \
--batch_size 24 \
--ncpus 20 \
--lr 1e-4 \
--lr_decay_mode step \
--lr_decay_step 10000 \
--lr_decay_gamma 0.5 \
--max_steps 50000 \
--save_interval 10000 \
--use_fp16 false \
--max_norm 1.0 \
--temperatures 1.0,1.5 \
--lambda_l1 0 \
--checkpointdir checkpoints/Custom/RDDM-Fine
-
Replace
/path/to/the/datasetwith the path to your prepared dataset. -
Please adjust settings such as
--batch_size,--ncpus, and precision according to your own GPU memory and hardware setup. -
For multi-GPU training, launch with
torchrunand keep the same script arguments.
Easily Reproduce Our RDDM Variants
DATA_DIR=/path/to/the/dataset GPU=0 bash scripts/train_rddm_fine.sh
DATA_DIR=/path/to/the/dataset GPU=0 bash scripts/train_rddm_balanced.sh
DATA_DIR=/path/to/the/dataset GPU=0 bash scripts/train_rddm_smooth.sh
- Replace
/path/to/the/datasetwith the path to your prepared dataset. - The default training parameters are configured for a single H100 80GB GPU.
Single-Slice Inference
CUDA_VISIBLE_DEVICES=0 python infer_single.py \
--ldct_path test_sample/ldct/L506_0081.IMA \
--ndct_path test_sample/ndct/L506_0081.IMA \
--checkpoint checkpoints/RDDM-Fine/rddm_fine_050000.pth \
--hu_min -1024 \
--hu_max 3072 \
--window_center 40 \
--window_width 400 \
--use_fp16 false \
--save_images true \
--out_dir outputs/single_L506_0081
Dataset Evaluation
CUDA_VISIBLE_DEVICES=0 python evaluate.py \
--data_dir /path/to/the/dataset \
--split test \
--checkpoint checkpoints/RDDM-Fine/rddm_fine_050000.pth \
--hu_min -1024 \
--hu_max 3072 \
--use_fp16 false \
--num_test_samples 1 \
--compute_fid true \
--fid_batch_size 50 \
--fid_dims 2048 \
--fid_num_workers 8 \
--save_npy true \
--out_dir outputs/evaluate_rddm_fine
- Replace
/path/to/the/datasetwith the path to your prepared dataset.
Citation
If you use this code, please cite the paper below.
@article{wang2026rddm,
title={RDDM: A Residual-Driven Drifting Model for High-Fidelity Low-Dose CT Denoising},
author={Wang, Jianxu and Lyu, Qing and Wang, Ge},
journal={arXiv preprint arXiv:2605.17188},
year={2026}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rddm-0.1.1.tar.gz.
File metadata
- Download URL: rddm-0.1.1.tar.gz
- Upload date:
- Size: 40.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3569b4fb0743b53bd5b6a40566c817af19248dd5e5ea7ea8faf34b712f6fc33
|
|
| MD5 |
35fdcef244887292d42721fb06215a77
|
|
| BLAKE2b-256 |
5e739b389bbd5711ed7e9b2e142271fcd2206b03170ef9017641de2b9217a69e
|
Provenance
The following attestation bundles were made for rddm-0.1.1.tar.gz:
Publisher:
publish-pypi.yml on Jayx-Wang/RDDM
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rddm-0.1.1.tar.gz -
Subject digest:
e3569b4fb0743b53bd5b6a40566c817af19248dd5e5ea7ea8faf34b712f6fc33 - Sigstore transparency entry: 1625632083
- Sigstore integration time:
-
Permalink:
Jayx-Wang/RDDM@b31decf26e5cc147ec02100ef0ad5b14a058db50 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Jayx-Wang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b31decf26e5cc147ec02100ef0ad5b14a058db50 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file rddm-0.1.1-py3-none-any.whl.
File metadata
- Download URL: rddm-0.1.1-py3-none-any.whl
- Upload date:
- Size: 44.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fc504ff13f59eb6a400c38675bc996f2db39bf1511c36d721825f7bf172714c
|
|
| MD5 |
d1726e060ddb61a3c28c119252dca594
|
|
| BLAKE2b-256 |
918d238491ac0c7a55cda77eac88a0b8b51ca5718679c969fa130d34ada79022
|
Provenance
The following attestation bundles were made for rddm-0.1.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on Jayx-Wang/RDDM
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rddm-0.1.1-py3-none-any.whl -
Subject digest:
1fc504ff13f59eb6a400c38675bc996f2db39bf1511c36d721825f7bf172714c - Sigstore transparency entry: 1625632129
- Sigstore integration time:
-
Permalink:
Jayx-Wang/RDDM@b31decf26e5cc147ec02100ef0ad5b14a058db50 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Jayx-Wang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@b31decf26e5cc147ec02100ef0ad5b14a058db50 -
Trigger Event:
workflow_dispatch
-
Statement type: