Skip to main content

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. Install torch and torchvision before installing RDDM so the CUDA/CPU-specific PyTorch build is controlled explicitly.

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}
}

Metadata

Release files for rddm 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rddm 0.1.2
File Size Uploaded
rddm-0.1.2.tar.gz 40.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rddm 0.1.2
File Interpreter ABI Platform
rddm-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 84.3 kB

Release files / rddm-0.1.2.tar.gz

Download URL rddm-0.1.2.tar.gz
Size 40.3 kB
Tags Source
SHA-256 checksum
How to use checksums
fb05c61121e30f2c1367d1cac3be15b655fd393247cbb790da126f34f46f1ec5
BLAKE2b-256 checksum
How to use checksums
927ca7831623789e6e92a47049eddb5abf792d9b02e9bec0d72cf59934249406
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 28, 2026.

Transparency log

Release files / rddm-0.1.2-py3-none-any.whl

Download URL rddm-0.1.2-py3-none-any.whl
Size 44.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1881d953059b4fdebdf5e3b6772cafecc570adee4f41dbae0fc4be139224ca0
BLAKE2b-256 checksum
How to use checksums
c759a65185e381fb08db873e612c90826cbb9d169a54f248d136759ab9568473
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page