Official PyTorch implementation of Taming Score-Based Denoisers in ADMM: A Convergent Plug-and-Play Framework by Rajesh Shrestha and Xiao Fu.
Published as a conference paper at ICLR 2026.
OpenReview | Paper PDF | arXiv
DiffOps implements ADMM plug-and-play (ADMM-PnP) with the proposed AC-DC denoiser, including both the Ours-tweedie and Ours-ode variants from the paper.
- AC-DC denoiser: a three-stage score-based denoiser for ADMM that combines auto-correction, directional correction, and final score-based denoising.
- Convergence guarantees: the paper establishes weakly nonexpansive / bounded-denoiser results that support convergence under constant or adaptive ADMM schedules.
- Broad inverse-problem coverage: the codebase includes super-resolution, Gaussian blur, motion blur, box/random inpainting, phase retrieval, nonlinear blur, HDR, and compression-quantization tasks.
At each ADMM iteration, DiffOps applies the AC-DC denoiser to the denoising subproblem:
- Auto-correction (AC): add Gaussian noise to move the ADMM iterate closer to the noisy manifolds seen during score-model training.
- Directional correction (DC): run short conditional Langevin updates to better align the iterate with the target score manifold while retaining measurement information.
- Score-based denoising: finish with either Tweedie's lemma (
Ours-tweedie) or ODE-based score integration (Ours-ode).
The main entrypoint is:
python recover_inverse.py --config-name <default>.yaml <Hydra overrides>All commands below assume you are in the repository root.
conda create -n diffops python=3.10 -y
conda activate diffops
pip install -r requirements.txtCreate the score-model checkpoint directory:
mkdir -p pretrained-modelsDownload the FFHQ checkpoint:
gdown --id 1BGwhRWUoguF-D8wlZ65tf227gp3cDUDh -O pretrained-models/ffhq_10m.ptDownload the ImageNet checkpoint:
gdown --id 1HAy7P19PckQLczVNXmVF-e_CRxq098uW -O pretrained-models/imagenet256.ptFor the nonlinear_blur task, also download the BKSE checkpoint:
mkdir -p measurements/bkse/experiments/pretrained
gdown --id 1vRoDpIsrTRYZKsOMPNbPcMtFDpCT6Foy -O measurements/bkse/experiments/pretrained/GOPRO_wVAE.pthThe standard FFHQ / ImageNet demos below do not require the BKSE checkpoint. That dependency is only needed for the nonlinear blur operator under measurements/bkse/README.md.
The default data configs already point to the bundled sample images in demo-samples/ffhq and demo-samples/imagenet, so the commands below run without a separate dataset download once the pretrained checkpoints are in place.
python recover_inverse.py --config-name default_ffhq.yamlpython recover_inverse.py --config-name default_imagenet.yamlpython recover_inverse.py --config-name default_ffhq.yaml \
inverse_task=phase_retrieval \
save_dir=./results/ffhq_phase_retrievalResults are written to the configured save_dir. Task, model, dataset, and sampler choices are controlled through Hydra configs in configs/.
down_sampling: 4x super-resolutiongaussian_blur: Gaussian deblurringmotion_blur: motion deblurringinpainting: centered box inpaintinginpainting_rand: random missing-pixel inpaintingphase_retrieval: oversampled phase retrievalnonlinear_blur: nonlinear blur operator using BKSEhdr: high dynamic range recoverycompression_quantization: compression / quantization recovery
Table 1 of the paper reports that on FFHQ, Ours-tweedie reaches 30.439 PSNR for 4x super-resolution, 32.844 PSNR for random inpainting, 30.003 PSNR for motion deblurring, and 27.944 PSNR for phase retrieval. Across FFHQ and ImageNet, the two AC-DC variants are typically best or second-best in PSNR, SSIM, and LPIPS.
For the full quantitative tables, qualitative comparisons, convergence analysis, and additional ablations, see the paper and supplementary material linked above.
If you use this repository in your work, please cite the ICLR 2026 paper:
@inproceedings{shrestha2026taming,
title={Taming Score-Based Denoisers in ADMM: A Convergent Plug-and-Play Framework},
author={Shrestha, Rajesh and Fu, Xiao},
booktitle={International Conference on Learning Representations},
year={2026},
url={https://openreview.net/forum?id=BiXwSIIMIq}
}arXiv version: https://arxiv.org/abs/2603.10281



