Skip to main content

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

arXiv PyPI

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.

Overview of the RDDM training framework

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/dataset with 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 torchrun and 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/dataset with 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/dataset with 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rddm-0.1.1.tar.gz (40.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rddm-0.1.1-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

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

Hashes for rddm-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e3569b4fb0743b53bd5b6a40566c817af19248dd5e5ea7ea8faf34b712f6fc33
MD5 35fdcef244887292d42721fb06215a77
BLAKE2b-256 5e739b389bbd5711ed7e9b2e142271fcd2206b03170ef9017641de2b9217a69e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rddm-0.1.1.tar.gz:

Publisher: publish-pypi.yml on Jayx-Wang/RDDM

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for rddm-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1fc504ff13f59eb6a400c38675bc996f2db39bf1511c36d721825f7bf172714c
MD5 d1726e060ddb61a3c28c119252dca594
BLAKE2b-256 918d238491ac0c7a55cda77eac88a0b8b51ca5718679c969fa130d34ada79022

See more details on using hashes here.

Provenance

The following attestation bundles were made for rddm-0.1.1-py3-none-any.whl:

Publisher: publish-pypi.yml on Jayx-Wang/RDDM

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page