README.md
March 30, 2026 · View on GitHub
DGAF-VSR: Rethinking Diffusion Model-Based Video Super-Resolution: Leveraging Dense Guidance from Aligned Features(CVPR 2026)
Jingyi Xu*, Meisong Zheng*, Ying Chen+, Minglang Qiao, Xin Deng+, Mai Xu, "DGAF-VSR: Rethinking Diffusion Model-Based Video Super-Resolution: Leveraging Dense Guidance from Aligned Features", CVPR, 2026
arxiv
Abstract: Diffusion model (DM) based Video Super-Resolution (VSR) approaches achieve impressive perceptual quality. However, existing DM-based VSR methods over-prioritize perceptual synthesis while neglecting fidelity gains from accurate alignment and sufficient compensation. In this paper, within the DM-based VSR pipeline, we revisit the role of
alignment and compensation between adjacent video frames and reveal two crucial observations: (a) the feature domain is better suited than the pixel domain for information compensation due to its stronger spatial and temporal correlations, and (b) warping at an upscaled resolution better preserves high-frequency information, but this benefit is not necessarily monotonic. Therefore, we propose a novel Densely Guided diffusion model with Aligned Features for Video Super-Resolution (DGAF-VSR), with an Optical Guided Warping Module (OGWM) to maintain highfrequency details in the aligned features and a Featurewise Temporal Condition Module (FTCM) to deliver dense guidance in the feature domain. Extensive experiments on synthetic and real-world datasets demonstrate that DGAFVSR surpasses state-of-the-art methods in key aspects of VSR, including perceptual quality (35.82% DISTS reduction), fidelity (0.20 dB PSNR gain), and temporal consistency (30.37% tLPIPS reduction).

Test
prepare
Put REDS4 & Vid4 to the specified loacation, for example:
assets/REDS4/x4/
assets/Vid4/Bicubic4xLR/
Download the pretrained models from ModelScope:
pip install modelscope
modelscope download tszssong/DGAF-VSR --local_dir ckpts/DGAF-VSR
Model files save like this:
ckpts/
└── DGAF-VSR
├── configuration.json
├── DGAF_VSR_REDS
│ ├── config.json
│ └── diffusion_pytorch_model.safetensors
├── model_index.json
├── README.md
├── scheduler
│ └── scheduler_config.json
├── text_encoder
│ ├── config.json
│ └── model.safetensors
├── tokenizer
│ ├── merges.txt
│ ├── special_tokens_map.json
│ ├── tokenizer_config.json
│ └── vocab.json
├── unet
│ ├── config.json
│ └── diffusion_pytorch_model.safetensors
└── vae
├── config.json
└── diffusion_pytorch_model.safetensors
REDS4
sh test_reds4.sh
- Results:
PSNR: 28.17, SSIM: 0.804, LPIPS: 0.095, DISTS: 0.043, MUSIQ: 67.9, CLIP: 0.429, NIQE: 2.66, tLPIPS: 3.92, tOF: 2.714
000: PSNR=24.978, SSIM=0.718, LPIPS=0.104, DISTS=0.050, MUSIQ=73.538, CLIP=0.565, NIQE=2.740, tLPIPS=7.824, tOF=0.819
011: PSNR=29.110, SSIM=0.810, LPIPS=0.101, DISTS=0.041, MUSIQ=63.744, CLIP=0.402, NIQE=2.387, tLPIPS=2.747, tOF=1.206
015: PSNR=31.514, SSIM=0.875, LPIPS=0.076, DISTS=0.043, MUSIQ=68.030, CLIP=0.372, NIQE=3.132, tLPIPS=2.011, tOF=6.917
020: PSNR=27.087, SSIM=0.813, LPIPS=0.099, DISTS=0.039, MUSIQ=66.301, CLIP=0.379, NIQE=2.386, tLPIPS=3.096, tOF=1.914
- Tesla V100-32G Overhead:
GPU Memory: 16572MiB / 32510MiB
Time Cost: 100%|███████████████████████| 5000/5000 [37:07<00:00, 2.24it/s]
Vid4
sh test_vid4.sh
- Results:
PSNR: 24.75, SSIM: 0.714, LPIPS: 0.175, DISTS: 0.113, MUSIQ: 67.95, CLIP: 0.47, NIQE: 3.1, tLPIPS: 17.38, tOF: 0.688
calendar: PSNR=22.063, SSIM=0.7168, LPIPS=0.2037, DISTS=0.1338, MUSIQ=70.9346, CLIP=0.6362, NIQE=3.0734, tLPIPS=8.6251, tOF=0.3649
city: PSNR=26.075, SSIM=0.6959, LPIPS=0.2012, DISTS=0.1102, MUSIQ=67.4635, CLIP=0.5162, NIQE=2.8076, tLPIPS=18.4669, tOF=0.5047
foliage: PSNR=23.264, SSIM=0.6046, LPIPS=0.1935, DISTS=0.1241, MUSIQ=68.4496, CLIP=0.3833, NIQE=3.5511, tLPIPS=24.3791, tOF=0.4647
walk: PSNR=27.585, SSIM=0.8384, LPIPS=0.1028, DISTS=0.0825, MUSIQ=64.9557, CLIP=0.3444, NIQE=2.9702, tLPIPS=18.0485, tOF=1.4180
- Tesla V100-32G Overhead:
GPU Memory: 9684MiB / 32510MiB
Time Cost: 100%|███████████████████████| 2050/2050 [07:30<00:00, 4.55it/s]
Train
sh train_reds.sh
- Tesla V100-32G Overhead:
GPU Memory: 19252MiB / 32510MiB
Time Cost:
Epoch 0: GS 0, Steps: 832it [17:46, 1.28s/it, loss=0.14, lr=5e-5]
Epoch 1: GS 832, Steps: 832it [17:45, 1.28s/it, loss=0.151, lr=5e-5]
Epoch 2: GS 1664, Steps: 832it [17:47, 1.28s/it, loss=0.183, lr=5e-5]
Epoch 3: GS 2496, Steps: 832it [17:48, 1.28s/it, loss=0.145, lr=5e-5]
Epoch 4: GS 3328, Steps: 832it [17:47, 1.28s/it, loss=0.169, lr=5e-5]
Epoch 5: GS 4160, Steps: 832it [17:47, 1.28s/it, loss=0.162, lr=5e-5]
Epoch 6: GS 4992, Steps: 78%|███████████████ | 651/831 [13:55<03:50, 1.28s/it, loss=0.135, lr=5e-5]
Enverionment
conda create -n diffusers python=3.9 -y
conda activate diffusers
python -m pip install --upgrade pip
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
cd examples/dgaf
pip install -r requirements.txt
cd ../..
pip install -e .
Citation
If you find the code helpful in your research or work, please cite the following paper(s).
@misc{xu2025rethinkingdiffusionmodelbasedvideo,
title={Rethinking Diffusion Model-Based Video Super-Resolution: Leveraging Dense Guidance from Aligned Features},
author={Jingyi Xu and Meisong Zheng and Ying Chen and Minglang Qiao and Xin Deng and Mai Xu},
year={2025},
eprint={2511.16928},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2511.16928},
}
Acknowledgement
This code is based on BrushNet, StableVSR, and diffusers. Thanks for their awesome work.