Ruoyu Guo · Haonan Zhong · Maurice Pagnucco · Yang Song
School of Computer Science and Engineering,
University of New South Wales, Sydney, Australia
International Journal of Computer Vision (IJCV), 2026
- 09/2026 Add instructions for inference.
- 05/2026 We release the code and checkpoint.
Our code should be compatible with most Python>=3.8 and PyTorch>=1.11 versions.
git clone https://github.com/RuoyuGuo/P-PatchDiff
cd P-PatchDiff
conda create -n PyDiff python=3.8
conda activate PyDiff
conda install pytorch==1.11.0 torchvision torchaudio cudatoolkit=11.3 -c pytorch
cd BasicSR-light
pip install -r requirements.txt
BASICSR_EXT=True sudo $(which python) setup.py develop
cd ../PPatchDiff
pip install -r requirements.txt
BASICSR_EXT=True sudo $(which python) setup.py develop
Please download LOL-v1, LOL-v2, LOL-v2-Syn, LSRW, and UHDLOL
LOL-v2 and LOL-v2-Syn are packed together, so you only need to download either of them once.
Please download our pretrained ckpt from Google Drive.
Please organise your directory structure like this:
P-PatchDiff/
├── BasicSR-light
├── PPatchDiff
├── ckpt
│ ├── lolv1_pgc.pth
│ ├── lolv2_pgc2.pth
│ └── lolsyn_pgc2.pth
├── dataset
│ ├── LOLv1
│ │ ├── eval15
│ │ └── our485
│ ├── LOLv2
│ │ ├── Real_captured
│ │ └── Synthetic
│ ├── LSRW
│ │ └── Eval
│ └── UHDLOL
│ ├── testing_set
│ └── train_set
└── README.md
In /PPatchDiff/options/, we provide a set of yaml files to manage our training configs.
Please double-check gt_root and input_root in each config and ensure they can successfully reach the data.
- Training on the LOL-v1 training set
CUDA_VISIBLE_DEVICES=0 python -m torch.distributed.launch --nproc_per_node=1 --master_port=22666 pydiff/train.py -opt options/train_lolv1_pgc.yaml --launcher pytorch
Note
For testing:
Please set the train dataset paths to the same paths as the val dataset
Please also set the batch_size_per_gpu to 1.
datasets:
train:
gt_root: /path/to/test/high
input_root: /path/to/test/low
batch_size_per_gpu: 1
val:
gt_root: /path/to/test/high
input_root: /path/to/test/low- Evaluating on the LOL-v1 testing set
CUDA_VISIBLE_DEVICES=0 python pydiff/train.py -opt options/infer_lolv1_pgc.yaml
You can use the progressive_list and stride_list parameters in the config files to adjust patch size and stride size at each step.
@article{PPatchDiff,
title={P-PatchDiff: Progressive patch diffusion models for low-light image enhancement},
author={Guo, Ruoyu and Zhong, Haonan and Pagnucco, Maurice and Song, Yang},
journal={International Journal of Computer Vision},
volume={134},
number={9},
pages={404},
year={2026},
publisher={Springer}
}