Official Pytorch implementation of "Video Diffusion Posterior Sampling for Seeing Beyond Dynamic Scattering Layers", led by
Taesung Kwon, Gookho Song, Yoosun Kim, Jeongsol Kim, Jong Chul Ye, and Mooseok Jang.
Imaging through scattering layer is inherently challenging, as even a thin scattering layer can randomly perturb light propagation, rendering the scene opaque and obscuring objects behind it. In this work, we propose an approximate forward model tailored for a dynamic scattering layer with finite thickness.
To reconstruct videos through such layer, we introduce VDPS, a plug-and-play inverse scattering solver powered by video diffusion models.
Our main contributions are as follows:
- We demonstrate that leveraging temporal correlations significantly improves spatial reconstruction, achieving state-of-the-art restoration performance.
- We propose a novel inference-time optimization strategy that enables simultaneous estimation of forward-model parameters without requiring additional training.
- Beyond inverse scattering, we show that VDPS is also effective in video dehazing, deblurring, inpainting, and blind PSF restoration via Zernike polynomial estimation.
First, create your environment. We recommend using the following comments.
git clone https://github.com/star-kwon/VDPS.git
cd VDPS
conda env create -f environment.yaml
For reproducibility, we provide the same dataset used in the official implementation. Please download the datasets from the following download link.
After downloading, place the data folder in the root directory of the repository. The directory structure should be as follows:
VDPS/
├── data/
│ ├── DAVIS_Test/
│ ├── UCF101_Test/
│ ├── Real_Test/
│ └── VISEM_Test/
├── ...
We also provide the checkpoints used in the official implementation. Please download the checkpoints from the following download link.
After downloading, place the checkpoints in results folder in the root directory of the repository. The directory structure should be as follows:
VDPS/
├── results/
│ ├── model-100.1.pt
│ └── model-100.2.pt
├── ...
model-100.1.ptis the pretrained weight of the video diffusion model for the UCF101 and DAVIS datasets.model-100.2.ptis the pretrained weight of the video diffusion model for the VISEM-Tracking dataset.
python -m eval --deg physics --dist 5.0 --sigma 1.0 --dataset DAVIS
Supported datasets: 'DAVIS', 'UCF101', 'VISEM'
python -m eval_blind --dist_min 2.5 --dist_max 5 --sigma_min 0.5 --sigma_max 1
[Note] If min and max values are set to the same number, the corresponding parameter is treated as fixed during restoration. For example:
- dist_min 5.0 --dist_max 5.0 → distance is fixed
- sigma_min 1.0 --sigma_max 1.0 → sigma is fixed
python -m eval_blind_real --dataset Real
python -m eval_blind_zernike
python -m eval_blind_zernike_varying
eval_blind_zernikesimultaneously restores the PSF by estimating static Zernike polynomials.eval_blind_zernike_varyingsimultaneously restores the PSF by estimating time-varying Zernike polynomials.
python -m eval --deg dehaze
Supported degradations: 'dehaze', 'inpaint', 'blur'
![]() Diverse Forward Models |
![]() Blind Zernike PSF |
![]() Time-varying Blind Zernike PSF |








