From e3704ce0afdda700f4072c58727630de4541580f Mon Sep 17 00:00:00 2001 From: Bahjat Kawar Date: Wed, 2 Nov 2022 19:23:45 +0200 Subject: [PATCH] initial commit --- LICENSE | 9 + README.md | 95 ++ assets/ddrm-jpeg-demo.png | Bin 0 -> 473745 bytes configs/bedroom.yml | 51 + configs/cat.yml | 51 + configs/celeba_hq.yml | 36 + configs/church.yml | 51 + configs/imagenet_256.yml | 43 + configs/imagenet_256_cc.yml | 55 ++ configs/imagenet_512_cc.yml | 55 ++ datasets/__init__.py | 223 +++++ datasets/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 5177 bytes datasets/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 5284 bytes datasets/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 5264 bytes datasets/__pycache__/celeba.cpython-37.pyc | Bin 0 -> 5969 bytes datasets/__pycache__/celeba.cpython-38.pyc | Bin 0 -> 5880 bytes datasets/__pycache__/celeba.cpython-39.pyc | Bin 0 -> 5992 bytes .../imagenet_subset.cpython-38.pyc | Bin 0 -> 3151 bytes .../imagenet_subset.cpython-39.pyc | Bin 0 -> 3191 bytes datasets/__pycache__/lsun.cpython-37.pyc | Bin 0 -> 5078 bytes datasets/__pycache__/lsun.cpython-38.pyc | Bin 0 -> 5127 bytes datasets/__pycache__/lsun.cpython-39.pyc | Bin 0 -> 5136 bytes datasets/__pycache__/utils.cpython-37.pyc | Bin 0 -> 5801 bytes datasets/__pycache__/utils.cpython-38.pyc | Bin 0 -> 5789 bytes datasets/__pycache__/utils.cpython-39.pyc | Bin 0 -> 5817 bytes datasets/__pycache__/vision.cpython-37.pyc | Bin 0 -> 3661 bytes datasets/__pycache__/vision.cpython-38.pyc | Bin 0 -> 3668 bytes datasets/__pycache__/vision.cpython-39.pyc | Bin 0 -> 3656 bytes datasets/celeba.py | 163 ++++ datasets/imagenet_subset.py | 102 ++ datasets/lsun.py | 176 ++++ datasets/utils.py | 186 ++++ datasets/vision.py | 84 ++ environment.yml | 141 +++ functions/__init__.py | 0 functions/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 152 bytes functions/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 152 bytes .../__pycache__/ckpt_util.cpython-38.pyc | Bin 0 -> 2974 bytes .../__pycache__/ckpt_util.cpython-39.pyc | Bin 0 -> 3038 bytes functions/__pycache__/dct.cpython-38.pyc | Bin 0 -> 7644 bytes functions/__pycache__/dct.cpython-39.pyc | Bin 0 -> 7644 bytes .../__pycache__/denoising.cpython-38.pyc | Bin 0 -> 4251 bytes .../__pycache__/denoising.cpython-39.pyc | Bin 0 -> 1837 bytes .../__pycache__/jpeg_torch.cpython-38.pyc | Bin 0 -> 5342 bytes .../__pycache__/jpeg_torch.cpython-39.pyc | Bin 0 -> 4605 bytes functions/ckpt_util.py | 72 ++ functions/dct.py | 207 ++++ functions/denoising.py | 54 ++ functions/jpeg_torch.py | 186 ++++ .../__pycache__/fp16_util.cpython-38.pyc | Bin 0 -> 7797 bytes .../__pycache__/fp16_util.cpython-39.pyc | Bin 0 -> 7757 bytes .../__pycache__/logger.cpython-38.pyc | Bin 0 -> 15443 bytes .../__pycache__/logger.cpython-39.pyc | Bin 0 -> 15470 bytes .../__pycache__/nn.cpython-38.pyc | Bin 0 -> 5881 bytes .../__pycache__/nn.cpython-39.pyc | Bin 0 -> 5943 bytes .../__pycache__/script_util.cpython-38.pyc | Bin 0 -> 7181 bytes .../__pycache__/script_util.cpython-39.pyc | Bin 0 -> 7171 bytes .../__pycache__/unet.cpython-38.pyc | Bin 0 -> 21499 bytes .../__pycache__/unet.cpython-39.pyc | Bin 0 -> 21410 bytes guided_diffusion/fp16_util.py | 236 +++++ guided_diffusion/logger.py | 495 ++++++++++ guided_diffusion/nn.py | 170 ++++ guided_diffusion/script_util.py | 453 +++++++++ guided_diffusion/unet.py | 895 ++++++++++++++++++ main.py | 175 ++++ models/__pycache__/diffusion.cpython-37.pyc | Bin 0 -> 7777 bytes models/__pycache__/diffusion.cpython-38.pyc | Bin 0 -> 7653 bytes models/__pycache__/diffusion.cpython-39.pyc | Bin 0 -> 7626 bytes models/diffusion.py | 341 +++++++ runners/__init__.py | 0 runners/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 146 bytes runners/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 150 bytes runners/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 150 bytes runners/__pycache__/diffusion.cpython-37.pyc | Bin 0 -> 10533 bytes runners/__pycache__/diffusion.cpython-38.pyc | Bin 0 -> 10638 bytes runners/__pycache__/diffusion.cpython-39.pyc | Bin 0 -> 8576 bytes runners/diffusion.py | 293 ++++++ 77 files changed, 5098 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/ddrm-jpeg-demo.png create mode 100644 configs/bedroom.yml create mode 100644 configs/cat.yml create mode 100644 configs/celeba_hq.yml create mode 100644 configs/church.yml create mode 100644 configs/imagenet_256.yml create mode 100644 configs/imagenet_256_cc.yml create mode 100644 configs/imagenet_512_cc.yml create mode 100644 datasets/__init__.py create mode 100644 datasets/__pycache__/__init__.cpython-37.pyc create mode 100644 datasets/__pycache__/__init__.cpython-38.pyc create mode 100644 datasets/__pycache__/__init__.cpython-39.pyc create mode 100644 datasets/__pycache__/celeba.cpython-37.pyc create mode 100644 datasets/__pycache__/celeba.cpython-38.pyc create mode 100644 datasets/__pycache__/celeba.cpython-39.pyc create mode 100644 datasets/__pycache__/imagenet_subset.cpython-38.pyc create mode 100644 datasets/__pycache__/imagenet_subset.cpython-39.pyc create mode 100644 datasets/__pycache__/lsun.cpython-37.pyc create mode 100644 datasets/__pycache__/lsun.cpython-38.pyc create mode 100644 datasets/__pycache__/lsun.cpython-39.pyc create mode 100644 datasets/__pycache__/utils.cpython-37.pyc create mode 100644 datasets/__pycache__/utils.cpython-38.pyc create mode 100644 datasets/__pycache__/utils.cpython-39.pyc create mode 100644 datasets/__pycache__/vision.cpython-37.pyc create mode 100644 datasets/__pycache__/vision.cpython-38.pyc create mode 100644 datasets/__pycache__/vision.cpython-39.pyc create mode 100644 datasets/celeba.py create mode 100644 datasets/imagenet_subset.py create mode 100644 datasets/lsun.py create mode 100644 datasets/utils.py create mode 100644 datasets/vision.py create mode 100644 environment.yml create mode 100644 functions/__init__.py create mode 100644 functions/__pycache__/__init__.cpython-38.pyc create mode 100644 functions/__pycache__/__init__.cpython-39.pyc create mode 100644 functions/__pycache__/ckpt_util.cpython-38.pyc create mode 100644 functions/__pycache__/ckpt_util.cpython-39.pyc create mode 100644 functions/__pycache__/dct.cpython-38.pyc create mode 100644 functions/__pycache__/dct.cpython-39.pyc create mode 100644 functions/__pycache__/denoising.cpython-38.pyc create mode 100644 functions/__pycache__/denoising.cpython-39.pyc create mode 100644 functions/__pycache__/jpeg_torch.cpython-38.pyc create mode 100644 functions/__pycache__/jpeg_torch.cpython-39.pyc create mode 100644 functions/ckpt_util.py create mode 100644 functions/dct.py create mode 100644 functions/denoising.py create mode 100644 functions/jpeg_torch.py create mode 100644 guided_diffusion/__pycache__/fp16_util.cpython-38.pyc create mode 100644 guided_diffusion/__pycache__/fp16_util.cpython-39.pyc create mode 100644 guided_diffusion/__pycache__/logger.cpython-38.pyc create mode 100644 guided_diffusion/__pycache__/logger.cpython-39.pyc create mode 100644 guided_diffusion/__pycache__/nn.cpython-38.pyc create mode 100644 guided_diffusion/__pycache__/nn.cpython-39.pyc create mode 100644 guided_diffusion/__pycache__/script_util.cpython-38.pyc create mode 100644 guided_diffusion/__pycache__/script_util.cpython-39.pyc create mode 100644 guided_diffusion/__pycache__/unet.cpython-38.pyc create mode 100644 guided_diffusion/__pycache__/unet.cpython-39.pyc create mode 100644 guided_diffusion/fp16_util.py create mode 100644 guided_diffusion/logger.py create mode 100644 guided_diffusion/nn.py create mode 100644 guided_diffusion/script_util.py create mode 100644 guided_diffusion/unet.py create mode 100644 main.py create mode 100644 models/__pycache__/diffusion.cpython-37.pyc create mode 100644 models/__pycache__/diffusion.cpython-38.pyc create mode 100644 models/__pycache__/diffusion.cpython-39.pyc create mode 100644 models/diffusion.py create mode 100644 runners/__init__.py create mode 100644 runners/__pycache__/__init__.cpython-37.pyc create mode 100644 runners/__pycache__/__init__.cpython-38.pyc create mode 100644 runners/__pycache__/__init__.cpython-39.pyc create mode 100644 runners/__pycache__/diffusion.cpython-37.pyc create mode 100644 runners/__pycache__/diffusion.cpython-38.pyc create mode 100644 runners/__pycache__/diffusion.cpython-39.pyc create mode 100644 runners/diffusion.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a0777b5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright [2022] [Bahjat Kawar, Jiaming Song, Stefano Ermon, Michael Elad] + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..df3d8be --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ +# JPEG Artifact Correction using Denoising Diffusion Restoration Models + +[arXiv](https://arxiv.org/abs/2209.11888) | [PDF](https://arxiv.org/pdf/2209.11888.pdf) + +[Bahjat Kawar](https://bahjat-kawar.github.io/)\* 1, [Jiaming Song](http://tsong.me)\* 2, [Stefano Ermon](http://cs.stanford.edu/~ermon)3, [Michael Elad](https://elad.cs.technion.ac.il/)1
+1 Technion, 2NVIDIA, 3Stanford University, \*Equal contribution. + +![](assets/ddrm-jpeg-demo.png) + + +We extend DDRM (Denoising Diffusion Restoration Models) for the problems of JPEG artifact correction and image dequantization. + +## Running the Experiments +The code has been tested on PyTorch 1.8 and PyTorch 1.10. Please refer to `environment.yml` for a list of conda/mamba environments that can be used to run the code. The codebase is based heavily on the [original DDRM codebase](https://github.com/bahjat-kawar/ddrm). + +### Pretrained models +We use pretrained models from [https://github.com/openai/guided-diffusion](https://github.com/openai/guided-diffusion), [https://github.com/pesser/pytorch_diffusion](https://github.com/pesser/pytorch_diffusion) and [https://github.com/ermongroup/SDEdit](https://github.com/ermongroup/SDEdit) + +We use 1,000 images from the ImageNet validation set for comparison with other methods. The list of images is taken from [https://github.com/XingangPan/deep-generative-prior/](https://github.com/XingangPan/deep-generative-prior/) + +The models and datasets are placed in the `exp/` folder as follows: +```bash + # a folder named by the argument `--exp` given to main.py +├── datasets # all dataset files +│ ├── celeba # all CelebA files +│ ├── imagenet # all ImageNet files +│ ├── ood # out of distribution ImageNet images +│ ├── ood_bedroom # out of distribution bedroom images +│ ├── ood_cat # out of distribution cat images +│ └── ood_celeba # out of distribution CelebA images +├── logs # contains checkpoints and samples produced during training +│ ├── celeba +│ │ └── celeba_hq.ckpt # the checkpoint file for CelebA-HQ +│ ├── diffusion_models_converted +│ │ └── ema_diffusion_lsun__model +│ │ └── model-x.ckpt # the checkpoint file saved at the x-th training iteration +│ ├── imagenet # ImageNet checkpoint files +│ │ ├── 256x256_classifier.pt +│ │ ├── 256x256_diffusion.pt +│ │ ├── 256x256_diffusion_uncond.pt +│ │ ├── 512x512_classifier.pt +│ │ └── 512x512_diffusion.pt +├── image_samples # contains generated samples +└── imagenet_val_1k.txt # list of the 1k images used in ImageNet-1K. +``` + +### Sampling from the model + +The general command to sample from the model is as follows: +``` +python main.py --ni --config {CONFIG}.yml --doc {DATASET} -i {IMAGE_FOLDER} --timesteps {STEPS} --init_timestep {INIT_T} --eta {ETA} --etaB {ETA_B} --deg {DEGRADATION} --num_avg_samples {NUM_AVG} +``` +where the following are options +- `ETA` is the eta hyperparameter in the paper. (default: `1`) +- `ETA_B` is the eta_b hyperparameter in the paper. (default: `0.4`) +- `STEPS` controls how many timesteps used in the process. (default: `20`) +- `INIT_T` controls the timestep to start sampling from. (default: `300`) +- `NUM_AVG` is the number of samples per input to average for the final result. (default: `1`) +- `DEGREDATION` is the type of degredation used. (One of: `quant` for dequantization, or `jpegXX` for JPEG with quality factor `XX`, e.g. `jpeg80`) +- `CONFIG` is the name of the config file (see `configs/` for a list), including hyperparameters such as batch size and network architectures. +- `DATASET` is the name of the dataset used, to determine where the checkpoint file is found. +- `IMAGE_FOLDER` is the name of the folder the resulting images will be placed in (default: `images`) + +For example, to use the default settings from the paper on the ImageNet 256x256 dataset, the problem of JPEG artifact correction for QF=80, and averaging 8 samples per input: +``` +python main.py --ni --config imagenet_256.yml --doc imagenet -i imagenet --deg jpeg80 --num_avg_samples 8 +``` +The generated images are place in the `/image_samples/{IMAGE_FOLDER}` folder, where `orig_{id}.png`, `y0_{id}.png`, `{id}_-1.png` refer to the original, degraded, restored images respectively. + +The config files contain a setting controlling whether to test on samples from the trained dataset's distribution or not. + +## References and Acknowledgements +``` +@inproceedings{kawar2022jpeg, + title={JPEG Artifact Correction using Denoising Diffusion Restoration Models}, + author={Bahjat Kawar and Jiaming Song and Stefano Ermon and Michael Elad}, + booktitle={Neural Information Processing Systems (NeurIPS) Workshop on Score-Based Methods}, + year={2022} +} +``` + +``` +@inproceedings{kawar2022denoising, + title={Denoising Diffusion Restoration Models}, + author={Bahjat Kawar and Michael Elad and Stefano Ermon and Jiaming Song}, + booktitle={Advances in Neural Information Processing Systems}, + year={2022} +} +``` + +This implementation is based on / inspired by [https://github.com/bahjat-kawar/ddrm](https://github.com/bahjat-kawar/ddrm) + +## License + +The code is released under the MIT License. \ No newline at end of file diff --git a/assets/ddrm-jpeg-demo.png b/assets/ddrm-jpeg-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..7557e4ebe344614dbb088eedaa061904b4ce9d53 GIT binary patch literal 473745 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ℜ{;^T~%560Z<=s9#~@p=wk(RJ^1DN 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

R!YnECoFn^QR8cq7Ur8D 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 z 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 2 * image_size: + pil_image = pil_image.resize( + tuple(x // 2 for x in pil_image.size), resample=Image.BOX + ) + + scale = image_size / min(*pil_image.size) + pil_image = pil_image.resize( + tuple(round(x * scale) for x in pil_image.size), resample=Image.BICUBIC + ) + + arr = np.array(pil_image) + crop_y = (arr.shape[0] - image_size) // 2 + crop_x = (arr.shape[1] - image_size) // 2 + return arr[crop_y : crop_y + image_size, crop_x : crop_x + image_size] + + +def get_dataset(args, config): + if config.data.random_flip is False: + tran_transform = test_transform = transforms.Compose( + [transforms.Resize(config.data.image_size), transforms.ToTensor()] + ) + else: + tran_transform = transforms.Compose( + [ + transforms.Resize(config.data.image_size), + transforms.RandomHorizontalFlip(p=0.5), + transforms.ToTensor(), + ] + ) + test_transform = transforms.Compose( + [transforms.Resize(config.data.image_size), transforms.ToTensor()] + ) + + if config.data.dataset == "CELEBA": + cx = 89 + cy = 121 + x1 = cy - 64 + x2 = cy + 64 + y1 = cx - 64 + y2 = cx + 64 + if config.data.random_flip: + dataset = CelebA( + root=os.path.join(args.exp, "datasets", "celeba"), + split="train", + transform=transforms.Compose( + [ + Crop(x1, x2, y1, y2), + transforms.Resize(config.data.image_size), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + ] + ), + download=True, + ) + else: + dataset = CelebA( + root=os.path.join(args.exp, "datasets", "celeba"), + split="train", + transform=transforms.Compose( + [ + Crop(x1, x2, y1, y2), + transforms.Resize(config.data.image_size), + transforms.ToTensor(), + ] + ), + download=True, + ) + + test_dataset = CelebA( + root=os.path.join(args.exp, "datasets", "celeba"), + split="test", + transform=transforms.Compose( + [ + Crop(x1, x2, y1, y2), + transforms.Resize(config.data.image_size), + transforms.ToTensor(), + ] + ), + download=True, + ) + + elif config.data.dataset == "LSUN": + if config.data.out_of_dist: + dataset = torchvision.datasets.ImageFolder( + os.path.join(args.exp, 'datasets', "ood_{}".format(config.data.category)), + transform=transforms.Compose([partial(center_crop_arr, image_size=config.data.image_size), + transforms.ToTensor()]) + ) + test_dataset = dataset + else: + train_folder = "{}_train".format(config.data.category) + val_folder = "{}_val".format(config.data.category) + test_dataset = LSUN( + root=os.path.join(args.exp, "datasets", "lsun"), + classes=[val_folder], + transform=transforms.Compose( + [ + transforms.Resize(config.data.image_size), + transforms.CenterCrop(config.data.image_size), + transforms.ToTensor(), + ] + ) + ) + dataset = test_dataset + + elif config.data.dataset == "CelebA_HQ" or config.data.dataset == 'FFHQ': + if config.data.out_of_dist: + dataset = torchvision.datasets.ImageFolder( + os.path.join(args.exp, "datasets", "ood_celeba"), + transform=transforms.Compose([transforms.Resize([config.data.image_size, config.data.image_size]), + transforms.ToTensor()]) + ) + test_dataset = dataset + else: + dataset = torchvision.datasets.ImageFolder( + os.path.join(args.exp, "datasets", "celeba_hq"), + transform=transforms.Compose([transforms.Resize([config.data.image_size, config.data.image_size]), + transforms.ToTensor()]) + ) + num_items = len(dataset) + indices = list(range(num_items)) + random_state = np.random.get_state() + np.random.seed(2019) + np.random.shuffle(indices) + np.random.set_state(random_state) + train_indices, test_indices = ( + indices[: int(num_items * 0.9)], + indices[int(num_items * 0.9) :], + ) + test_dataset = Subset(dataset, test_indices) + + elif config.data.dataset == 'ImageNet': + # only use validation dataset here + + if config.data.subset_1k: + from datasets.imagenet_subset import ImageDataset + dataset = ImageDataset(os.path.join(args.exp, 'datasets', 'imagenet', 'imagenet'), + os.path.join(args.exp, 'imagenet_val_1k.txt'), + image_size=config.data.image_size, + normalize=False) + test_dataset = dataset + elif config.data.out_of_dist: + dataset = torchvision.datasets.ImageFolder( + os.path.join(args.exp, 'datasets', 'ood'), + transform=transforms.Compose([partial(center_crop_arr, image_size=config.data.image_size), + transforms.ToTensor()]) + ) + test_dataset = dataset + else: + dataset = torchvision.datasets.ImageNet( + os.path.join(args.exp, 'datasets', 'imagenet'), split='val', + transform=transforms.Compose([partial(center_crop_arr, image_size=config.data.image_size), + transforms.ToTensor()]) + ) + test_dataset = dataset + else: + dataset, test_dataset = None, None + + return dataset, test_dataset + + +def logit_transform(image, lam=1e-6): + image = lam + (1 - 2 * lam) * image + return torch.log(image) - torch.log1p(-image) + + +def data_transform(config, X): + if config.data.uniform_dequantization: + X = X / 256.0 * 255.0 + torch.rand_like(X) / 256.0 + if config.data.gaussian_dequantization: + X = X + torch.randn_like(X) * 0.01 + + if config.data.rescaled: + X = 2 * X - 1.0 + elif config.data.logit_transform: + X = logit_transform(X) + + if hasattr(config, "image_mean"): + return X - config.image_mean.to(X.device)[None, ...] + + return X + + +def inverse_data_transform(config, X): + if hasattr(config, "image_mean"): + X = X + config.image_mean.to(X.device)[None, ...] + + if config.data.logit_transform: + X = torch.sigmoid(X) + elif config.data.rescaled: + X = (X + 1.0) / 2.0 + + return torch.clamp(X, 0.0, 1.0) diff --git a/datasets/__pycache__/__init__.cpython-37.pyc b/datasets/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0cb5a06e2d61dc157124608aaad84fab1414f33 GIT binary patch literal 5177 zcmb7I+mGB<8TYY09*<{sW->e3Yuaqm3mpWzB%n$_nxxru+e*~}OqL+Ub=$fkp^WWWlt5m>UKj?YT8ZIrQqD4Ww+#<5lj!- zcAF_LE4<9jhYB~n^A9w8hM(sauRdhIh6Gd%Zybo@HSpVOMmUon{wpN&PMDd7%9CvaC;sa<)JGQ-wnF7>+n(0xQRD@ z8il8j9-srpRh*)6jq9j&Ug8Go5-;OaGt*Z^H0+kJfgY-f$|~OY0*aKSild||N|tIU z)l^5RaRs~CdPmRH-79#nX6hd5y{ny4rpI2eDNO7Z6)MPxqKe{|ikL$6$+eZOXyC1E zxLbWUS-I`S+etKBi4!;6j09idTnxV0A9}qN?j|k-k5?SW5Bjr`2oJTK~tgs1#`AnB#iXN)VcqM~NXn+Z& z&p10c&LFX7jP+Sky}G`C;kn%_FT6ea!qV z4G-MpEbDZb6y^*$gf|q9GY7t6`s@^D9Z8bUt#=I3#!O~8&LHAD0i9KIoO?TNke@8b zTB1e83>D-E#|l!JAQey}Hc*(%G)zs7JthTBtVupfuSP3BK(YILLJDI)M-)g|TiGs& z=h0UajjLRHDCce~57+~i==~DcAE_hdp89S0_Tj!oVh)TovD!;j4>@6cDH=dDe3o(yQNKPI1;xBzve zL?jhyC{?~!A3+|jEGTb50r&7Fli|ezCfB9vI%=jae<@?Trxf`~eu>Bt zZC%;F-1Wl56ApQ^;|j5SEr{TV@%81&@(#02;l=J?72vC^2KZH$$kI%c{uQb$^N>(eXxWpd(2hif%*zE7_@qysl3+9ubx z)%TeA5igB&Zj4GP!u^~wGN_(aM&(qOeUobRD>;|q-$^C0`qhIPoPUa&yfW6fB~PoT zMp{nIwDLel|F{I@v4RnjLmx9<<+Vrp$buyQKP938`3`BEL1F5D@N$wu^*uHGQ=yMK z^r4D1*=s;EA0^HHxqj<}w2gylIo}?$G1*B=&L=Z+q{N$#Nb7~Q_&J0SE44<|aD%sw zc8zL$`dDu&nLRAJ zQ}!B=?)@`lnkyuk*epMZeC|wnJ~)HM{AZ_;%%|1^HmWBJ$zockkUMH57y3^eJULcI zP1(B07siY!vb~fxChbdUliDeuR&qJ5^F@j*?;u#FjiWwCD4j<>ADtVulBZHDZ9Pz7 zg})UVxd4sm;uYC@8oK$AKf#|2o*6tlng-?R6V|xMFOKzNBTHj7*9`#ECGufu-*@F$ z160j3G;{eg`^j~=`*X+6GjYDgpZc$U_B4DT=fmXBd>1|kkFe6}riw)H?D|>{fd4_lA9~6D^kIwmaIS1GC%XyK5V4z8LP9LRB?;guE`C>$#zY;p0g=+Vq0YPqFo7h z29BS20~pN@x!?6-yOxWb%VbaGdnc2UaM8;pI0C5>7gR}8#mQul`1dFjRs$M%Qq$EM zaB)r3*_^}&Is<|&ekyA+mC=eCE-IF0X~#z_%{8N=%=>WoLW=s8uiGp?vpSXrwfO=4pGn$kppE1Pi95APi`#yjZ3!8F%S!^Wbl+qeY za1-Fh16BN3-Xtprl%%Vmk2?TKpAuR(*NYfEyqPyXif;DaZvX1#zwAG}A@x$s|MSKn zP91n|h*-4TsfiaLh&{6t`V^BL?%_5SCjP#gP(-jXnN`T4oxtDr?Ae~X6URP2u9FKh zi`Im4QAXgNU^tiR%gS4B>?Vm2-zQ>f5@iPW?&DKIV7x;^?Cxo!)XD#kZ1P*IlGhal z&b5HI1sAN7+p89vQNBQdxUq?^B*p=> z4(Q9mHteAHO-k}yn^m~J2UQy=mTo9z6;&cSD4Uo%bjwOTT$rlle>sV@EI(u??b0_SQued>G9koT1 z_B1B3JI}f@HQ7^>QOe;mm1IpxeR(JGgLs+dWgf^%U~RZ3Q;B#P6f^Ccuf8U)XIVua z7DYiU(^6(c8-1^v$Q+mFD2g??lF31&7LF-WhFuwP&1?C;3D@afDF4>VLuw6yO9nae TG#Tug4Xb7TP-$5u^W1*`m`dOP literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/__init__.cpython-38.pyc b/datasets/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67a54a2f335468aabbf33958b0ca1d7abe7b53bd GIT binary patch literal 5284 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 WRL~qqR&U$Sp2FhA< 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 K#7vmsnEqdBhiy6l literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/celeba.cpython-38.pyc b/datasets/__pycache__/celeba.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..293b0745e6a22f5c1520dee8b5213e9fd0a3a0b2 GIT binary patch literal 5880 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 I>1Xu61J^7^3jhEB literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/celeba.cpython-39.pyc b/datasets/__pycache__/celeba.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5cf2d81f2fe0b965810e82b11667d3de7ef0323 GIT binary patch literal 5992 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 W^9%7FdXPq!K}YPdYd1q|?f(HPz1X+_ literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/imagenet_subset.cpython-39.pyc b/datasets/__pycache__/imagenet_subset.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5217f35940df9deec436012982f94cf1d42d0a90 GIT binary patch literal 3191 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 literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/lsun.cpython-39.pyc b/datasets/__pycache__/lsun.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b0316630e9c4259b2814343611500204ef1e330 GIT binary patch literal 5136 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 literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/utils.cpython-39.pyc b/datasets/__pycache__/utils.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbd74872a96e98d7095e4d81aabb972487ce9d41 GIT binary patch literal 5817 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 xKxp&Rd#R_M5_kW+sf+*s literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/vision.cpython-37.pyc b/datasets/__pycache__/vision.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87ba15f053e6c78da0c113b3970f8856b63b2b85 GIT binary patch literal 3661 zcmd5<&5j$#5$^684u`WpTCHShrTmyl3|n;KrGprbAPb5hE3ph43=kVW5HJR_?Acw? z!x_4}H<0Mri&sH(4dMqNk9mPSKpvy7Iq4O2%2z$)P)lzR0ls92uI{O>>8kFk`nvdF zYb#=S{{DeD_}3<5|E8Da<703iO+NyWO!AENtDg6{dlzF*FwVw)-{+wq%69DL3RM`cQ7kZS*ZEpkv2weKFL-B7c~eM5pFCZKXG8fYQ@MBb6Vb z=?uiMk{dn}BkxS8n+E33f|AeqDKB}+;$|r%`>J)?C_U;Y@0Y%N56XsmR0isi!Pd_B zx4iTq-70<12>b)H0gitrPDLre+msB(iQe?1Kjzt!woys04+}Nc?Lw{Ix+YOasfp|9 z_8`gI2WfkfXr0P-qT3KS8K=4FY}p9=%(Y4KL24VOP=jOZ$9nkKZfm24`B6N`=re6a zp{+kj%(0Eq$CD(NCpuNuS4ClL^hJ`Lq`z0HP_|X;wL9yU*vp?mlT4KSd}+IlYI)sh zT3@Hxq1wQisvRO*M7BZt+sBDs?Me5q(YsD3iAqemn)nA(yAXeIr+ZwC)9yiXJW5RW zVXD6}#iUCc#fizTlxqCWXp$avW#wYs{j>A<{^W@b<9L`4O&qtdlHLPhe4B6bK!kjU zhdlHHjC~&Q>9uolvcLRrAm}4J)N?c!Dj^1jeT(RX8+ot8?Ui0(J|0i9l)RBjcY+=FQohAMsO+M=m4O z?NZDd(xcgtKSu^}R+3~eXS3#<{g#~y6FvhhAkT8hv?z~M?qnkO-k6J8DuC2?;BGjn z?`o+H*{q~WX#XoaFCJU`X+EmhYo8+M1#csUHe;1e6e3nqMhh$U-?e@=%+qtuqy=9@ce9~3 zgJL|nw@(U4TfnAoue;JM81LVu{bc$c2FuSZj{q92xPpZ^rd-LBaf(quP?Q)&`QkFz z2FYZS=8^ydN$$+Fk)C8jL*{AQL<%RyD0fu$T3ju#%4PS3J2dN$aMm5a$_)QFO{Db? z3i-q~+)^%Jm-}^j0=ueR{G2vQC&`e(JIL8x(5vXf1>L(Ki>pru6uk7D3+CHklzhez zl6+3V!YNzL(!Yp)DPMd(H6| zI^d!(cuwYbJoQUj^$j9q!NNZkXgk$!(-i4n+TzT36O3P@=>Vj1%k+&`F{M5*Qcumn zDtX712BK$cZ3LlfFs6P1-uq}v2-`caa}}i>uh;8!BGrbljpBG*$dim>d^3)}K1s4F z;uS@ex=Q3a5f}LGL}-If+e;R#yijEw%%FQMkj+8#)e`Z(D4cLrINmMr zcqvd!379JmsXoKq`F%6#!knBK8&p-tnymy>0JAKPe+P})RjmMl>UXi(m3V!6w8#2J z`+o%i^($EUzd_(*I)f?>r*|)K*((EqdWZD=5Fq#ineq}4+c~butEd^jZe^AQnE!*hOQ6A#lczKQ1~;@ z>ohB!U0RsZse+{6(8!tKAZev>rIyg)4w|OI6zcr22?!!?r=^Ie=vYz4)8B&q6En>8 vKGi+8;l|c?FU>`HATuN+Pq| zWoAZ&&8%J`7xinA`~dP%f1p1gKVx3=h>9Kzq)W`1+nG6M=6vVO;TLOb z5ySW0hhp!CRmOg#&e_jL=PruA47&L%Al`Q8%Q3oDIA7Wl#5t{9a-botmd~oKCj}I{WHqkl0U9 zbOvHr$qny|zIP(j4TEEhgOX49F)w+^;(940`>JtVD?O@*@0Y&o2W3s&F9UVo;D{&u zTV8tLZj?S~gz-JIf)W2j9E(z5Y*jKSC_1B0|CVQunnoqL-Y?WZHw(4swN0W9QWMXo zo82UD?xoFPqID{piEe`7XprWnwPqunHP?NitFL^O^28n)B;c z-TFGs_SFjRRBaGhBeD)+*AElDIFq*5sISvuq7suXCQg~U3ifBW+lR#2+?Z@jsRnQLhv`9ER%X`ie>$sg4V=`9e(*ZC?BM94RI z$U{Fs+vgDtOUWXsbhp?N z>M|H@t(VL6p*vAUUZByHIEI0HCLP4_uQ8yVG(LLqyfSmHF3F#L)V@$3bsaN`&U?z8 z{PTkAah#=j9RC(9Gode>7wR~c1d<1l|B%n<|AI*Vg!NgUUuVZ$im`aY#@>WY_yIpg zyYIY1-73YnCOw+%`xAH*XC-k46E?0-*az%bnD7Zg1$-_CPlJ3)<&GzE{n|v#xdL!~ zkI@y!_5GY{Mb;~>64L+8_PGpY<8fGud+dbt^JFw$Exieapq0)joJNJ_XsdHH*h^Kj z*l!YqhD9$o`gZf1hWj1+2VFJR_Ray!4h~n6;^D&ZT+m5r;4z0 z21e0N*3+h242E~MX?v0rFu_J|oHwc4Fy7vwGiCY?8ncC#M+hQ~xC#?-OumyRgA}cR zLQ`VYZ%8V6v<;HsFwG?e5IDV4(?)uj^$e+}Z5=M17^B>E*=upN!NRxQiYglTecX4; zue`)ROcQDSy+S^+HMdoDN_Sr8G0>_y!|&*zFM%-l^9DS46Z9%-@lzmX_0|P`T`lht zglFFptZ!ko*09Rz`1qRg1=-xzG z82{Ee<6mfmi=gn7lt1;mac0lw2^&W>L5CHDskZfP5~#o1vb)T7SOhqr7p1A@;aSPD^jn4*+y|ZDCAK_ zNMDWPuaAi#khiru|6JCn%a8UzfWe z<|6ZO&y{-~fT{VL-14edVm@%@VD4(^7Cxly$P|nRe01Yy3BcmbBn4(4wW&B|2r(t1 zoeSMpOCW!mT;U0EW3OY3mjVfwfYM?gd0h3DeT0=$E$J;C9vK@{Ny#}?DQ+RQWpVsR zEYU8(MO3JM7i(RyFJ0mPGa^)O{L2G^dJhLuH;FWfIHy~{?q!U9hO!6%I~SPfxr2cE zfMifGRDU4i1UZp&KmRjHTk`YQpI73NuM<`&t8ftcD;flmKIIU|x%)2TR<99;$H=PD zM~Fl=Kyy`o@$r1lm!g_OwoxN!Atd{q(aQY2zTF&co`0$Fgueoztw6ns$_0hWGn|`~ z6RWpqzRKiOn+Du%EbgA7!e3A{4Y4WM=piE5q4q8YUiB2=e?X^IujG=CsU0FN?%bu8 zQ^Uobh17*;a{t>X&JZDw{IHHVL!+&RBI78!T4eC_k6`=A^fJ9oX^ySAw)I`7KFx+) ifU-fc*H62~?Q-U*bD=iesY2!*LiJQ~$Tz*soBsp7a6X~{ literal 0 HcmV?d00001 diff --git a/datasets/__pycache__/vision.cpython-39.pyc b/datasets/__pycache__/vision.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d56ed2de91f1d724a422c099df3f3cfa4e0f5978 GIT binary patch literal 3656 zcmbtX&5|3p5e6{B;c)gxtCcLRl^?TW#}S?K(oSSsmN$xQE3sTjF;$VvhpkFY%@VV_ zq{$f?09_J2d-2K@T~qM`kjH(2JU|`;*PL|rO&8~D41bpN9#rLFO#^83pd09~8_i^6 zBVu^|{ed|6?>b}uqrv&d$KW1b{QyKV$$M$bdCcV_} zR!+VB032Udz^SBFj6=yEvPSR>tFcy_==sOP;2vK65lG5N!@iJw-;7y#V;mHG!cTa?3l>)kA=!|hR0@yU!Mla;#z9e04~jrNFxcWL z|ArSHq-%u_8i9Xc*1+*k#fc~ccBC(0bv;*$QPU*qC^hkX zy53H*`axPBBwDAkp6EIRhW#`%jSU-NubDPU)=q83$^wA*60eb`jpJUL#qlc;nJIl~RjHF$Qb-X*@k24A{{tfVQ`Ti&ex03gDaPU{8+#Kr;Ya)g z{jQ4+b-NJbiu7o<>rW6(oE0P)OxUD z9k^>w>btqrnyi*m1+@Q@9da4U+LN#l_t`1g=gDZiUU(BqL2Ip1IL!+6(N1gFKS)(Q zKdcjk26-nl`cD1plhNhBBPQy-yqy@N5n?$QkJjg)hnxfT=*njNSuk8KzgJ z@9bHE^lfkpK4t(WpAcj?ffmVLyv!zI3M;ycLhve*eG7gGFL*6zJ@>yp0Y)e!f8=|* zYMk%u=s4f+knhI`A%h?~<%EEVC=qZb)bAmtXpiXML}NXKqpA~wt0tO-|JAD)-Xhj( zAfwwWj=#_W7s22e8Gh!e-_cUPB|?hNO8=Az+$nyWrYJY7_lS^h)SDp0*OV4Zx9t2d zdhJC_Svsnvlt#XBC4*?$sm2BJodHhw8xVUJ?<|q+ENflhwBfZ{twyAN17RD*aX**C z9-(|aj=vlxy%O_^lA^jsmC(cQQdm(m z*T%c_5Df3()fBYzf+uoC6qP-$bVAV+$SR7OipytI^tcSBF5#or5|n8@QuHxiO_#2# zS&(Z{aky*BT?@d|{4Q>IZe5&t`5h$2_7#53M~Pn#Ubjq@(#O;FQ-=09Xc2q8F8KE@ zaL)@T07W}i?-RL0#3@;h@jrvV9OE}%RO3>d6He)%9X$Su4#A^Kbpz_`uB)=u>xADi zDrt<78c_kzTv=0mG@tXODCbaNR0vi`#eQqFHov3q)JNN^w==HoUqfjlP_LtL389P% z7vdDaih^=ly(z-)3f^3n{0sP+PKix{Mi&r44y|`F=*lYywSTKoE%olv;(s9Ga?Xd; zb7r`l<9x6nE-ESX$wAH$A&>m9iX21SMom!yR&=ze+UZ}w?$C64dY4KYTXB8syFqnY l0lDO4gZ!YIwvAim+*X}tQfkA!GF{#!L{Bw`eB0Z;^?!(wKZ*bV literal 0 HcmV?d00001 diff --git a/datasets/celeba.py b/datasets/celeba.py new file mode 100644 index 0000000..1c466dc --- /dev/null +++ b/datasets/celeba.py @@ -0,0 +1,163 @@ +import torch +import os +import PIL +from .vision import VisionDataset +from .utils import download_file_from_google_drive, check_integrity + + +class CelebA(VisionDataset): + """`Large-scale CelebFaces Attributes (CelebA) Dataset `_ Dataset. + + Args: + root (string): Root directory where images are downloaded to. + split (string): One of {'train', 'valid', 'test'}. + Accordingly dataset is selected. + target_type (string or list, optional): Type of target to use, ``attr``, ``identity``, ``bbox``, + or ``landmarks``. Can also be a list to output a tuple with all specified target types. + The targets represent: + ``attr`` (np.array shape=(40,) dtype=int): binary (0, 1) labels for attributes + ``identity`` (int): label for each person (data points with the same identity are the same person) + ``bbox`` (np.array shape=(4,) dtype=int): bounding box (x, y, width, height) + ``landmarks`` (np.array shape=(10,) dtype=int): landmark points (lefteye_x, lefteye_y, righteye_x, + righteye_y, nose_x, nose_y, leftmouth_x, leftmouth_y, rightmouth_x, rightmouth_y) + Defaults to ``attr``. + transform (callable, optional): A function/transform that takes in an PIL image + and returns a transformed version. E.g, ``transforms.ToTensor`` + target_transform (callable, optional): A function/transform that takes in the + target and transforms it. + download (bool, optional): If true, downloads the dataset from the internet and + puts it in root directory. If dataset is already downloaded, it is not + downloaded again. + """ + + base_folder = "celeba" + # There currently does not appear to be a easy way to extract 7z in python (without introducing additional + # dependencies). The "in-the-wild" (not aligned+cropped) images are only in 7z, so they are not available + # right now. + file_list = [ + # File ID MD5 Hash Filename + ("0B7EVK8r0v71pZjFTYXZWM3FlRnM", "00d2c5bc6d35e252742224ab0c1e8fcb", "img_align_celeba.zip"), + # ("0B7EVK8r0v71pbWNEUjJKdDQ3dGc", "b6cd7e93bc7a96c2dc33f819aa3ac651", "img_align_celeba_png.7z"), + # ("0B7EVK8r0v71peklHb0pGdDl6R28", "b6cd7e93bc7a96c2dc33f819aa3ac651", "img_celeba.7z"), + ("0B7EVK8r0v71pblRyaVFSWGxPY0U", "75e246fa4810816ffd6ee81facbd244c", "list_attr_celeba.txt"), + ("1_ee_0u7vcNLOfNLegJRHmolfH5ICW-XS", "32bd1bd63d3c78cd57e08160ec5ed1e2", "identity_CelebA.txt"), + ("0B7EVK8r0v71pbThiMVRxWXZ4dU0", "00566efa6fedff7a56946cd1c10f1c16", "list_bbox_celeba.txt"), + ("0B7EVK8r0v71pd0FJY3Blby1HUTQ", "cc24ecafdb5b50baae59b03474781f8c", "list_landmarks_align_celeba.txt"), + # ("0B7EVK8r0v71pTzJIdlJWdHczRlU", "063ee6ddb681f96bc9ca28c6febb9d1a", "list_landmarks_celeba.txt"), + ("0B7EVK8r0v71pY0NSMzRuSXJEVkk", "d32c9cbf5e040fd4025c592c306e6668", "list_eval_partition.txt"), + ] + + def __init__(self, root, + split="train", + target_type="attr", + transform=None, target_transform=None, + download=False): + import pandas + super(CelebA, self).__init__(root) + self.split = split + if isinstance(target_type, list): + self.target_type = target_type + else: + self.target_type = [target_type] + self.transform = transform + self.target_transform = target_transform + + if download: + self.download() + + if not self._check_integrity(): + raise RuntimeError('Dataset not found or corrupted.' + + ' You can use download=True to download it') + + self.transform = transform + self.target_transform = target_transform + + if split.lower() == "train": + split = 0 + elif split.lower() == "valid": + split = 1 + elif split.lower() == "test": + split = 2 + else: + raise ValueError('Wrong split entered! Please use split="train" ' + 'or split="valid" or split="test"') + + with open(os.path.join(self.root, self.base_folder, "list_eval_partition.txt"), "r") as f: + splits = pandas.read_csv(f, delim_whitespace=True, header=None, index_col=0) + + with open(os.path.join(self.root, self.base_folder, "identity_CelebA.txt"), "r") as f: + self.identity = pandas.read_csv(f, delim_whitespace=True, header=None, index_col=0) + + with open(os.path.join(self.root, self.base_folder, "list_bbox_celeba.txt"), "r") as f: + self.bbox = pandas.read_csv(f, delim_whitespace=True, header=1, index_col=0) + + with open(os.path.join(self.root, self.base_folder, "list_landmarks_align_celeba.txt"), "r") as f: + self.landmarks_align = pandas.read_csv(f, delim_whitespace=True, header=1) + + with open(os.path.join(self.root, self.base_folder, "list_attr_celeba.txt"), "r") as f: + self.attr = pandas.read_csv(f, delim_whitespace=True, header=1) + + mask = (splits[1] == split) + self.filename = splits[mask].index.values + self.identity = torch.as_tensor(self.identity[mask].values) + self.bbox = torch.as_tensor(self.bbox[mask].values) + self.landmarks_align = torch.as_tensor(self.landmarks_align[mask].values) + self.attr = torch.as_tensor(self.attr[mask].values) + self.attr = (self.attr + 1) // 2 # map from {-1, 1} to {0, 1} + + def _check_integrity(self): + for (_, md5, filename) in self.file_list: + fpath = os.path.join(self.root, self.base_folder, filename) + _, ext = os.path.splitext(filename) + # Allow original archive to be deleted (zip and 7z) + # Only need the extracted images + if ext not in [".zip", ".7z"] and not check_integrity(fpath, md5): + return False + + # Should check a hash of the images + return os.path.isdir(os.path.join(self.root, self.base_folder, "img_align_celeba")) + + def download(self): + import zipfile + + if self._check_integrity(): + print('Files already downloaded and verified') + return + + for (file_id, md5, filename) in self.file_list: + download_file_from_google_drive(file_id, os.path.join(self.root, self.base_folder), filename, md5) + + with zipfile.ZipFile(os.path.join(self.root, self.base_folder, "img_align_celeba.zip"), "r") as f: + f.extractall(os.path.join(self.root, self.base_folder)) + + def __getitem__(self, index): + X = PIL.Image.open(os.path.join(self.root, self.base_folder, "img_align_celeba", self.filename[index])) + + target = [] + for t in self.target_type: + if t == "attr": + target.append(self.attr[index, :]) + elif t == "identity": + target.append(self.identity[index, 0]) + elif t == "bbox": + target.append(self.bbox[index, :]) + elif t == "landmarks": + target.append(self.landmarks_align[index, :]) + else: + raise ValueError("Target type \"{}\" is not recognized.".format(t)) + target = tuple(target) if len(target) > 1 else target[0] + + if self.transform is not None: + X = self.transform(X) + + if self.target_transform is not None: + target = self.target_transform(target) + + return X, target + + def __len__(self): + return len(self.attr) + + def extra_repr(self): + lines = ["Target type: {target_type}", "Split: {split}"] + return '\n'.join(lines).format(**self.__dict__) diff --git a/datasets/imagenet_subset.py b/datasets/imagenet_subset.py new file mode 100644 index 0000000..bcb7eec --- /dev/null +++ b/datasets/imagenet_subset.py @@ -0,0 +1,102 @@ +import torch.utils.data as data +import torchvision.transforms as transforms +from PIL import Image + +class CenterCropLongEdge(object): + """Crops the given PIL Image on the long edge. + Args: + size (sequence or int): Desired output size of the crop. If size is an + int instead of sequence like (h, w), a square crop (size, size) is + made. + """ + + def __call__(self, img): + """ + Args: + img (PIL Image): Image to be cropped. + Returns: + PIL Image: Cropped image. + """ + return transforms.functional.center_crop(img, min(img.size)) + + def __repr__(self): + return self.__class__.__name__ + +def pil_loader(path): + # open path as file to avoid ResourceWarning + # (https://github.com/python-pillow/Pillow/issues/835) + with open(path, 'rb') as f: + img = Image.open(f) + return img.convert('RGB') + + +def accimage_loader(path): + import accimage + try: + return accimage.Image(path) + except IOError: + # Potentially a decoding problem, fall back to PIL.Image + return pil_loader(path) + +def default_loader(path): + from torchvision import get_image_backend + if get_image_backend() == 'accimage': + return accimage_loader(path) + else: + return pil_loader(path) + +class ImageDataset(data.Dataset): + + def __init__(self, + root_dir, + meta_file, + transform=None, + image_size=128, + normalize=True): + self.root_dir = root_dir + if transform is not None: + self.transform = transform + else: + norm_mean = [0.5, 0.5, 0.5] + norm_std = [0.5, 0.5, 0.5] + if normalize: + self.transform = transforms.Compose([ + CenterCropLongEdge(), + transforms.Resize(image_size), + transforms.ToTensor(), + transforms.Normalize(norm_mean, norm_std) + ]) + else: + self.transform = transforms.Compose([ + CenterCropLongEdge(), + transforms.Resize(image_size), + transforms.ToTensor() + ]) + with open(meta_file) as f: + lines = f.readlines() + print("building dataset from %s" % meta_file) + self.num = len(lines) + self.metas = [] + self.classifier = None + suffix = ".jpeg" + for line in lines: + line_split = line.rstrip().split() + if len(line_split) == 2: + self.metas.append((line_split[0] + suffix, int(line_split[1]))) + else: + self.metas.append((line_split[0] + suffix, -1)) + print("read meta done") + + def __len__(self): + return self.num + + def __getitem__(self, idx): + filename = self.root_dir + '/' + self.metas[idx][0] + cls = self.metas[idx][1] + img = default_loader(filename) + + # transform + if self.transform is not None: + img = self.transform(img) + + return img, cls #, self.metas[idx][0] \ No newline at end of file diff --git a/datasets/lsun.py b/datasets/lsun.py new file mode 100644 index 0000000..31dd381 --- /dev/null +++ b/datasets/lsun.py @@ -0,0 +1,176 @@ +from .vision import VisionDataset +from PIL import Image +import os +import os.path +import io +from collections.abc import Iterable +import pickle +from torchvision.datasets.utils import verify_str_arg, iterable_to_str + + +class LSUNClass(VisionDataset): + def __init__(self, root, transform=None, target_transform=None): + import lmdb + + super(LSUNClass, self).__init__( + root, transform=transform, target_transform=target_transform + ) + + self.env = lmdb.open( + root, + max_readers=1, + readonly=True, + lock=False, + readahead=False, + meminit=False, + ) + with self.env.begin(write=False) as txn: + self.length = txn.stat()["entries"] + root_split = root.split("/") + cache_file = os.path.join("/".join(root_split[:-1]), f"_cache_{root_split[-1]}") + if os.path.isfile(cache_file): + self.keys = pickle.load(open(cache_file, "rb")) + else: + with self.env.begin(write=False) as txn: + self.keys = [key for key, _ in txn.cursor()] + pickle.dump(self.keys, open(cache_file, "wb")) + + def __getitem__(self, index): + img, target = None, None + env = self.env + with env.begin(write=False) as txn: + imgbuf = txn.get(self.keys[index]) + + buf = io.BytesIO() + buf.write(imgbuf) + buf.seek(0) + img = Image.open(buf).convert("RGB") + + if self.transform is not None: + img = self.transform(img) + + if self.target_transform is not None: + target = self.target_transform(target) + + return img, target + + def __len__(self): + return self.length + + +class LSUN(VisionDataset): + """ + `LSUN `_ dataset. + + Args: + root (string): Root directory for the database files. + classes (string or list): One of {'train', 'val', 'test'} or a list of + categories to load. e,g. ['bedroom_train', 'church_outdoor_train']. + transform (callable, optional): A function/transform that takes in an PIL image + and returns a transformed version. E.g, ``transforms.RandomCrop`` + target_transform (callable, optional): A function/transform that takes in the + target and transforms it. + """ + + def __init__(self, root, classes="train", transform=None, target_transform=None): + super(LSUN, self).__init__( + root, transform=transform, target_transform=target_transform + ) + self.classes = self._verify_classes(classes) + + # for each class, create an LSUNClassDataset + self.dbs = [] + for c in self.classes: + self.dbs.append( + LSUNClass(root=root + "/" + c + "_lmdb", transform=transform) + ) + + self.indices = [] + count = 0 + for db in self.dbs: + count += len(db) + self.indices.append(count) + + self.length = count + + def _verify_classes(self, classes): + categories = [ + "bedroom", + "bridge", + "church_outdoor", + "classroom", + "conference_room", + "dining_room", + "kitchen", + "living_room", + "restaurant", + "tower", + "cat", + ] + dset_opts = ["train", "val", "test"] + + try: + verify_str_arg(classes, "classes", dset_opts) + if classes == "test": + classes = [classes] + else: + classes = [c + "_" + classes for c in categories] + except ValueError: + if not isinstance(classes, Iterable): + msg = ( + "Expected type str or Iterable for argument classes, " + "but got type {}." + ) + raise ValueError(msg.format(type(classes))) + + classes = list(classes) + msg_fmtstr = ( + "Expected type str for elements in argument classes, " + "but got type {}." + ) + for c in classes: + verify_str_arg(c, custom_msg=msg_fmtstr.format(type(c))) + c_short = c.split("_") + category, dset_opt = "_".join(c_short[:-1]), c_short[-1] + + msg_fmtstr = "Unknown value '{}' for {}. Valid values are {{{}}}." + msg = msg_fmtstr.format( + category, "LSUN class", iterable_to_str(categories) + ) + verify_str_arg(category, valid_values=categories, custom_msg=msg) + + msg = msg_fmtstr.format(dset_opt, "postfix", iterable_to_str(dset_opts)) + verify_str_arg(dset_opt, valid_values=dset_opts, custom_msg=msg) + + return classes + + def __getitem__(self, index): + """ + Args: + index (int): Index + + Returns: + tuple: Tuple (image, target) where target is the index of the target category. + """ + target = 0 + sub = 0 + for ind in self.indices: + if index < ind: + break + target += 1 + sub = ind + + db = self.dbs[target] + index = index - sub + + if self.target_transform is not None: + target = self.target_transform(target) + + img, _ = db[index] + return img, target + + def __len__(self): + return self.length + + def extra_repr(self): + return "Classes: {classes}".format(**self.__dict__) diff --git a/datasets/utils.py b/datasets/utils.py new file mode 100644 index 0000000..1d02194 --- /dev/null +++ b/datasets/utils.py @@ -0,0 +1,186 @@ +import os +import os.path +import hashlib +import errno +from torch.utils.model_zoo import tqdm + + +def gen_bar_updater(): + pbar = tqdm(total=None) + + def bar_update(count, block_size, total_size): + if pbar.total is None and total_size: + pbar.total = total_size + progress_bytes = count * block_size + pbar.update(progress_bytes - pbar.n) + + return bar_update + + +def check_integrity(fpath, md5=None): + if md5 is None: + return True + if not os.path.isfile(fpath): + return False + md5o = hashlib.md5() + with open(fpath, 'rb') as f: + # read in 1MB chunks + for chunk in iter(lambda: f.read(1024 * 1024), b''): + md5o.update(chunk) + md5c = md5o.hexdigest() + if md5c != md5: + return False + return True + + +def makedir_exist_ok(dirpath): + """ + Python2 support for os.makedirs(.., exist_ok=True) + """ + try: + os.makedirs(dirpath) + except OSError as e: + if e.errno == errno.EEXIST: + pass + else: + raise + + +def download_url(url, root, filename=None, md5=None): + """Download a file from a url and place it in root. + + Args: + url (str): URL to download file from + root (str): Directory to place downloaded file in + filename (str, optional): Name to save the file under. If None, use the basename of the URL + md5 (str, optional): MD5 checksum of the download. If None, do not check + """ + from six.moves import urllib + + root = os.path.expanduser(root) + if not filename: + filename = os.path.basename(url) + fpath = os.path.join(root, filename) + + makedir_exist_ok(root) + + # downloads file + if os.path.isfile(fpath) and check_integrity(fpath, md5): + print('Using downloaded and verified file: ' + fpath) + else: + try: + print('Downloading ' + url + ' to ' + fpath) + urllib.request.urlretrieve( + url, fpath, + reporthook=gen_bar_updater() + ) + except OSError: + if url[:5] == 'https': + url = url.replace('https:', 'http:') + print('Failed download. Trying https -> http instead.' + ' Downloading ' + url + ' to ' + fpath) + urllib.request.urlretrieve( + url, fpath, + reporthook=gen_bar_updater() + ) + + +def list_dir(root, prefix=False): + """List all directories at a given root + + Args: + root (str): Path to directory whose folders need to be listed + prefix (bool, optional): If true, prepends the path to each result, otherwise + only returns the name of the directories found + """ + root = os.path.expanduser(root) + directories = list( + filter( + lambda p: os.path.isdir(os.path.join(root, p)), + os.listdir(root) + ) + ) + + if prefix is True: + directories = [os.path.join(root, d) for d in directories] + + return directories + + +def list_files(root, suffix, prefix=False): + """List all files ending with a suffix at a given root + + Args: + root (str): Path to directory whose folders need to be listed + suffix (str or tuple): Suffix of the files to match, e.g. '.png' or ('.jpg', '.png'). + It uses the Python "str.endswith" method and is passed directly + prefix (bool, optional): If true, prepends the path to each result, otherwise + only returns the name of the files found + """ + root = os.path.expanduser(root) + files = list( + filter( + lambda p: os.path.isfile(os.path.join(root, p)) and p.endswith(suffix), + os.listdir(root) + ) + ) + + if prefix is True: + files = [os.path.join(root, d) for d in files] + + return files + + +def download_file_from_google_drive(file_id, root, filename=None, md5=None): + """Download a Google Drive file from and place it in root. + + Args: + file_id (str): id of file to be downloaded + root (str): Directory to place downloaded file in + filename (str, optional): Name to save the file under. If None, use the id of the file. + md5 (str, optional): MD5 checksum of the download. If None, do not check + """ + # Based on https://stackoverflow.com/questions/38511444/python-download-files-from-google-drive-using-url + import requests + url = "https://docs.google.com/uc?export=download" + + root = os.path.expanduser(root) + if not filename: + filename = file_id + fpath = os.path.join(root, filename) + + makedir_exist_ok(root) + + if os.path.isfile(fpath) and check_integrity(fpath, md5): + print('Using downloaded and verified file: ' + fpath) + else: + session = requests.Session() + + response = session.get(url, params={'id': file_id}, stream=True) + token = _get_confirm_token(response) + + if token: + params = {'id': file_id, 'confirm': token} + response = session.get(url, params=params, stream=True) + + _save_response_content(response, fpath) + + +def _get_confirm_token(response): + for key, value in response.cookies.items(): + if key.startswith('download_warning'): + return value + + return None + + +def _save_response_content(response, destination, chunk_size=32768): + with open(destination, "wb") as f: + pbar = tqdm(total=None) + progress = 0 + for chunk in response.iter_content(chunk_size): + if chunk: # filter out keep-alive new chunks + f.write(chunk) + progress += len(chunk) + pbar.update(progress - pbar.n) + pbar.close() diff --git a/datasets/vision.py b/datasets/vision.py new file mode 100644 index 0000000..0f156c1 --- /dev/null +++ b/datasets/vision.py @@ -0,0 +1,84 @@ +import os +import torch +import torch.utils.data as data + + +class VisionDataset(data.Dataset): + _repr_indent = 4 + + def __init__(self, root, transforms=None, transform=None, target_transform=None): + if isinstance(root, torch._six.string_classes): + root = os.path.expanduser(root) + self.root = root + + has_transforms = transforms is not None + has_separate_transform = transform is not None or target_transform is not None + if has_transforms and has_separate_transform: + raise ValueError("Only transforms or transform/target_transform can " + "be passed as argument") + + # for backwards-compatibility + self.transform = transform + self.target_transform = target_transform + + if has_separate_transform: + transforms = StandardTransform(transform, target_transform) + self.transforms = transforms + + def __getitem__(self, index): + raise NotImplementedError + + def __len__(self): + raise NotImplementedError + + def __repr__(self): + head = "Dataset " + self.__class__.__name__ + body = ["Number of datapoints: {}".format(self.__len__())] + if self.root is not None: + body.append("Root location: {}".format(self.root)) + body += self.extra_repr().splitlines() + if hasattr(self, 'transform') and self.transform is not None: + body += self._format_transform_repr(self.transform, + "Transforms: ") + if hasattr(self, 'target_transform') and self.target_transform is not None: + body += self._format_transform_repr(self.target_transform, + "Target transforms: ") + lines = [head] + [" " * self._repr_indent + line for line in body] + return '\n'.join(lines) + + def _format_transform_repr(self, transform, head): + lines = transform.__repr__().splitlines() + return (["{}{}".format(head, lines[0])] + + ["{}{}".format(" " * len(head), line) for line in lines[1:]]) + + def extra_repr(self): + return "" + + +class StandardTransform(object): + def __init__(self, transform=None, target_transform=None): + self.transform = transform + self.target_transform = target_transform + + def __call__(self, input, target): + if self.transform is not None: + input = self.transform(input) + if self.target_transform is not None: + target = self.target_transform(target) + return input, target + + def _format_transform_repr(self, transform, head): + lines = transform.__repr__().splitlines() + return (["{}{}".format(head, lines[0])] + + ["{}{}".format(" " * len(head), line) for line in lines[1:]]) + + def __repr__(self): + body = [self.__class__.__name__] + if self.transform is not None: + body += self._format_transform_repr(self.transform, + "Transform: ") + if self.target_transform is not None: + body += self._format_transform_repr(self.target_transform, + "Target transform: ") + + return '\n'.join(body) diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..47aeb41 --- /dev/null +++ b/environment.yml @@ -0,0 +1,141 @@ +name: ddrm +channels: + - pytorch + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=1_gnu + - absl-py=1.0.0=pyhd8ed1ab_0 + - aiohttp=3.8.1=py39h3811e60_0 + - aiosignal=1.2.0=pyhd8ed1ab_0 + - async-timeout=4.0.2=pyhd8ed1ab_0 + - attrs=21.4.0=pyhd8ed1ab_0 + - backcall=0.2.0=pyh9f0ad1d_0 + - backports=1.0=py_2 + - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0 + - blas=1.0=mkl + - blinker=1.4=py_1 + - brotlipy=0.7.0=py39h3811e60_1003 + - bzip2=1.0.8=h7b6447c_0 + - c-ares=1.18.1=h7f98852_0 + - ca-certificates=2021.10.26=h06a4308_2 + - cachetools=4.2.4=pyhd8ed1ab_0 + - certifi=2021.10.8=py39hf3d152e_1 + - cffi=1.15.0=py39h4bc2ebd_0 + - charset-normalizer=2.0.9=pyhd8ed1ab_0 + - click=8.0.3=py39hf3d152e_1 + - colorama=0.4.4=pyh9f0ad1d_0 + - cryptography=36.0.1=py39h95dcef6_0 + - cudatoolkit=11.3.1=h2bc3f7f_2 + - dataclasses=0.8=pyhc8e2a94_3 + - decorator=5.1.0=pyhd8ed1ab_0 + - ffmpeg=4.3=hf484d3e_0 + - freetype=2.11.0=h70c0345_0 + - frozenlist=1.2.0=py39h3811e60_1 + - giflib=5.2.1=h7b6447c_0 + - gmp=6.2.1=h2531618_2 + - gnutls=3.6.15=he1e5248_0 + - google-auth=2.3.3=pyh6c4a22f_0 + - google-auth-oauthlib=0.4.6=pyhd8ed1ab_0 + - grpcio=1.42.0=py39hce63b2e_0 + - idna=3.3=pyhd3eb1b0_0 + - importlib-metadata=4.10.0=py39hf3d152e_0 + - intel-openmp=2021.4.0=h06a4308_3561 + - ipdb=0.13.9=pyhd8ed1ab_0 + - ipython=7.30.1=py39hf3d152e_0 + - jedi=0.18.1=py39hf3d152e_0 + - jpeg=9d=h7f8727e_0 + - lame=3.100=h7b6447c_0 + - lcms2=2.12=h3be6417_0 + - ld_impl_linux-64=2.36.1=hea4e1c9_2 + - libblas=3.9.0=12_linux64_mkl + - libcblas=3.9.0=12_linux64_mkl + - libffi=3.4.2=h7f98852_5 + - libgcc-ng=11.2.0=h1d223b6_11 + - libgfortran-ng=11.2.0=h69a702a_11 + - libgfortran5=11.2.0=h5c6108e_11 + - libgomp=11.2.0=h1d223b6_11 + - libiconv=1.15=h63c8f33_5 + - libidn2=2.3.2=h7f8727e_0 + - liblapack=3.9.0=12_linux64_mkl + - libpng=1.6.37=hbc83047_0 + - libprotobuf=3.17.2=h780b84a_1 + - libstdcxx-ng=11.2.0=he4da1e4_11 + - libtasn1=4.16.0=h27cfd23_0 + - libtiff=4.2.0=h85742a9_0 + - libunistring=0.9.10=h27cfd23_0 + - libuv=1.40.0=h7b6447c_0 + - libwebp=1.2.0=h89dd481_0 + - libwebp-base=1.2.0=h27cfd23_0 + - lmdb=0.9.29=h2531618_0 + - lz4-c=1.9.3=h295c915_1 + - markdown=3.3.6=pyhd8ed1ab_0 + - matplotlib-inline=0.1.3=pyhd8ed1ab_0 + - mkl=2021.4.0=h06a4308_640 + - mkl-service=2.4.0=py39h7f8727e_0 + - mkl_fft=1.3.1=py39hd3c417c_0 + - mkl_random=1.2.2=py39h51133e4_0 + - multidict=5.2.0=py39h3811e60_1 + - ncurses=6.2=h58526e2_4 + - nettle=3.7.3=hbbd107a_1 + - numpy=1.21.2=py39h20f2e39_0 + - numpy-base=1.21.2=py39h79a1101_0 + - oauthlib=3.1.1=pyhd8ed1ab_0 + - olefile=0.46=pyhd3eb1b0_0 + - openh264=2.1.1=h4ff587b_0 + - openssl=1.1.1l=h7f98852_0 + - parso=0.8.3=pyhd8ed1ab_0 + - pexpect=4.8.0=pyh9f0ad1d_2 + - pickleshare=0.7.5=py39hde42818_1002 + - pillow=8.4.0=py39h5aabda8_0 + - pip=21.2.4=py39h06a4308_0 + - prompt-toolkit=3.0.24=pyha770c72_0 + - protobuf=3.17.2=py39he80948d_0 + - ptyprocess=0.7.0=pyhd3deb0d_0 + - pyasn1=0.4.8=py_0 + - pyasn1-modules=0.2.8=py_0 + - pycparser=2.21=pyhd8ed1ab_0 + - pygments=2.11.1=pyhd8ed1ab_0 + - pyjwt=2.3.0=pyhd8ed1ab_1 + - pyopenssl=21.0.0=pyhd8ed1ab_0 + - pysocks=1.7.1=py39hf3d152e_4 + - python=3.9.7=hb7a2778_3_cpython + - python-lmdb=1.2.1=py39h2531618_1 + - python_abi=3.9=2_cp39 + - pytorch=1.10.1=py3.9_cuda11.3_cudnn8.2.0_0 + - pytorch-mutex=1.0=cuda + - pyu2f=0.1.5=pyhd8ed1ab_0 + - pyyaml=6.0=py39h3811e60_3 + - readline=8.1=h27cfd23_0 + - requests=2.26.0=pyhd8ed1ab_1 + - requests-oauthlib=1.3.0=pyh9f0ad1d_0 + - rsa=4.8=pyhd8ed1ab_0 + - scipy=1.7.3=py39hee8e79c_0 + - setuptools=58.0.4=py39h06a4308_0 + - six=1.16.0=pyhd3eb1b0_0 + - sqlite=3.37.0=hc218d9a_0 + - tensorboard=2.7.0=pyhd8ed1ab_0 + - tensorboard-data-server=0.6.0=py39h95dcef6_1 + - tensorboard-plugin-wit=1.8.0=pyh44b312d_0 + - tk=8.6.11=h1ccaba5_0 + - torchaudio=0.10.1=py39_cu113 + - torchvision=0.11.2=py39_cu113 + - tqdm=4.62.3=pyhd8ed1ab_0 + - traitlets=5.1.1=pyhd8ed1ab_0 + - typing-extensions=3.10.0.2=hd3eb1b0_0 + - typing_extensions=3.10.0.2=pyh06a4308_0 + - tzdata=2021e=hda174b7_0 + - urllib3=1.26.7=pyhd8ed1ab_0 + - wcwidth=0.2.5=pyh9f0ad1d_2 + - werkzeug=2.0.2=pyhd3eb1b0_0 + - wheel=0.37.0=pyhd3eb1b0_1 + - xz=5.2.5=h7b6447c_0 + - yaml=0.2.5=h516909a_0 + - yarl=1.7.2=py39h3811e60_1 + - zipp=3.6.0=pyhd8ed1ab_0 + - zlib=1.2.11=h7f8727e_4 + - zstd=1.4.9=haebb681_0 + - pip: + - torch-fidelity==0.3.0 + diff --git a/functions/__init__.py b/functions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/functions/__pycache__/__init__.cpython-38.pyc b/functions/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a855d51bb793c23471732d2cf39184a3085e2c3f GIT binary patch literal 152 zcmWIL<>g`kg2~oQNg(<$h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vOKO;XkRX-^) zBP+2)-zBv;yClCrzqlkZFD<_)ML#8_C|5VDAT?b-tu!yWBr`v+SU)~KGcU6wK3=b& V@)n0pZhlH>PO2Tq*v~-B000zOBennl literal 0 HcmV?d00001 diff --git a/functions/__pycache__/__init__.cpython-39.pyc b/functions/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eec5b2fd4f7385ddfdc53f5922a8db9e51a4d145 GIT binary patch literal 152 zcmYe~<>g`kg2~oQNg(<$h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vOKO;XkRX-^) zBP+2)-zBv;yClCrzqlkZFD<_)ML#8_C|5VDAT?b-tu!yWBr`v+SU)~KGcU6wK3=b& V@)n0pZhlH>PO2Tq*v~-B000|#BfHm>K|Ax8tl>eY8P$X|wvTPYfU=1;E=e>DfJM(*Q`T5#f z%fRvXUz_Q@wqg87Gf$5dWZuVF{0#{hK&D1=`XmXdcr!8aX-=(~l~}|83u;gY8ye7r z6==cgKblDm+OP)ea0RZyORxbysHAnc1~0=a@I!bNuEP!ZQ6;tEEqD!He?XE3yaAmD zM$&}0;b-tBN>+e;YIJ}84d!C(bcw3TdoVkAcO>Pac&FDJ@o}2(Z!PEJOrd;f9 z0q2-!h`Lelw=jLT|3c<2_cN!@U5GjN z25HJY{}R#NLBCJKY|wYnE_K2*hRdA1?=zML4$nLm`d$cW;GQMlZK?(vXH@i^WR=h8 z@G;Y#7R&iCqXJIfA6CI7c=_hGg0u3FGT1M!v1-L z-g6>+uff){-m62q5Wx36_dJ06ya3;ClXN1NgXe^U3@}qS3s~ke&x^A(a+n{6ank8$ z)C(M4FM;P%?)$E;RM!g_;{gLN>0|@PjU37x?nG(C!#K=*m*Fb*qb%z)^bx!0#t+jl zq+S>X+(-ENZsvu|9k@=Gbg%@t!w1ZR0Zp?sI-wtCu9x`{x^n#> zPNS4&EWpeoWP>Q_@HFhBm{ z-w(2HjGAFEOZURF(ZuH}&RaN(eHlITO~OmK(1q>2J4|o3|ZT&mzt|RG#`mW zOWLKi*Ep_Y>n11W5jm{MW?92FZbIXs_2|xFU9OY_nn&g%=TPgmN)uKdl5OM9KR#@f z4FRQnyjnI+2rK^>b2#k-7PmC{&=dHlNcHY_%1atii`+1Y^j|(}>C%Co? zDL9=Sth0PB`CM*J`FvN76!~4(QgxY2I#o4n^-{Go9TtpExiaskXxn0=<$N+M#s|E+ zrp&xh%^96=7>h#H78JeIi^UX8n}Xk4@{9uQ)(z8RIAFfN(2L^R49_E8d}kR8R898 z`rmuKQ9k3nl#ceO>}~U6BJ)MBkaV8q0(t;qwz;?9yS;2VXA-+l(bGLba3Kvu1Hs!}KO`kN zCMU+B`Q*l=MiAcUaqUFkn7N}&k#_6iWwcZ^ye7a?qs3@CPL(x-K&_1UK8$zqWV@EQ zf?DD=t=c#{!RpmdNk_|@XfxCf`p6YF5(AUpAmSIex}z+lt)#s!el znAqZ4X&mDk%oFnvUr3UPU38@R6_M6n4Z&^U(>`vL_#fp&>(mg^#$-iomt@{P+rxh^ zxT7t!Cc!c=t{W(+SCW;oenP~9(iC6IR#`tHa#in7%;Ia=2K#tTN7WM4vyQL?Pu8;n10EHGTX@(Ni;`86WmL5(gE8cJPj z=Z@&=MXP!}@g}atOPc7q7n_=BI0{b_T|w1rRX(1|Mi;T@AW_ZV;PEb}{5@T0#rsIE Y>TE2NT=@OhUcJB*^LdhXtKGD}1IrsvKmY&$ literal 0 HcmV?d00001 diff --git a/functions/__pycache__/ckpt_util.cpython-39.pyc b/functions/__pycache__/ckpt_util.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d36df384ed1166e078ba76b727ca7d6cbb7c45eb GIT binary patch literal 3038 zcmb6bO>ZPewX3`5!{f2nSvFyJA;|zq$Ozff(_hmaNZ7DWhyrUO2m)F{qw0Fqp0Q`9 zXRB*=jcH%v6}QzMkT`L$B`)0g2{~})Sf@xiGei@oaTEQi`jS`QQ(u5 zi|q~Iy{s37aU3~m;H6pM_d^y@H|qTuChzuNNZsXr=JdG>G3S1q(zFl3CDgP2AO=5k z`#fbn_+FZ3{1WPE9Jo#xxKZXsem@GLC{8b-o>3MJoD||H^8AR?G>R_c-5EH2N|{G# z82iB>O}Xb^!n-@@_i307`Y!6FPMF4UnUnW@#?rvyna4uk3n2~M)8M;J)nMa{ioTO9 z^C=xZCfbu?F&m~FM4nHRHNA9!)2t{)Wzs%d)70__f3y&6lw5hTR5A9uFwU|?G0ta? z9Sx^B=2)+S>x0^&ySh?cFJO!Z47{Y14IDReD08?Ir4bL~F!No8SnNkx)@NuVcF~L< zreR3EFbuel>F2wd7czI?I$6@e65tLWFb@Va&C-ygx0ut+%~I?#gEZ-cewevl=0|AC z^@BK#Qkt;hymk(0$f<4F5a1eEJYfrZ$nyx5Bv!U3Zx^{E>= zDRX^4$i6ac!(f)~g{Py5U)|1c<1D^FAdMY@(>$_Da!i2Sz(x($Lz5WN-l>(EvLBj{ z{&rx=dTH%6j%wJt$+3Az4s6*hZEWKvG#*-y;Gia#N&?M8^U*s8TDDc1u=J2@8o&Sc zL8EL4DC`{fU*}iB zz^9HaFqXOhq4`h?H6yBx-%Q1+anm0B^MplVa_y9-{(LRs5f zDr-EGsxjgexG02)Q7Jp0^Oy7d$@1=CKLuGH17rQc__X8V!7aRNG;-$b3EHqb|^s3S0N zLvIoBHew$ti|@@D7SGveAf{)vrGFvagL2j(mXut1Odskpu5_><>reDPHp==T`HYk`Jle*VTE&FM z7j2j?B;>hB>L;{X{q5#YhqvFq{m}=*kA89IgZ>lT2c1fwlZkw)DVZbeuBwLM^9f~KHGciepAYZ6|A|<^BUKGPyEhj3Oz1?b zE>YP#`FN(9w}1A@r&>hlw-2wxl}ba z;%ryd=YnVBy`;$~GO%J#QblL?(;2dYB|EH&LD$>>C5qP&7^I1b(l)PK_5an)_J7UV zRnj4^kX7VgBO*qLE)hC)y4Kc*qN|ZswLS3$;^HL@bnT0E4IB+z4RjS%+p27wi$)i+ p=pazdAK`H>Cj32JY{e}EYdRXsBo}`Ft}kDpiTNx}yVY*i{}2BoQ49b8 literal 0 HcmV?d00001 diff --git a/functions/__pycache__/dct.cpython-38.pyc b/functions/__pycache__/dct.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c8c20b772caa4afc8d3459a0d2ce658908be378 GIT binary patch literal 7644 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 literal 0 HcmV?d00001 diff --git a/functions/__pycache__/dct.cpython-39.pyc b/functions/__pycache__/dct.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93705c790202f370f214fb4097f2fbb54e826893 GIT binary patch literal 7644 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 literal 0 HcmV?d00001 diff --git a/functions/__pycache__/denoising.cpython-39.pyc b/functions/__pycache__/denoising.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bcf8f3f50b51d9757083dc3d86e342e839d0a48 GIT binary patch literal 1837 zcmZt`yN(+-ki*@TR}7KpK7?C;gVk8=Kp>&I4^TPIE~LIu^K$*@`Wm=1F7QTtQ2g(n8-h{DH)v2ibSPlAqR{X zWh&ER{Al{pbdoZk&J-WT+4MYaph;;HL*PC<1hI=)(z5h=+`}DmqO&C0?-Ca1tpj2y)Y;Hv30<;J#!zjmJ8DyH zX_y1TJ9C)RIXowC;rluc5v(F1FN$>yQ`0@ zp6=NV{5*qz}XTQ6uQEycv2m+er7`(-(hyjT!WD&OIQ-_J{bo}PBZ z-~Ge-G!`n2GyIbD;!M=>8H)gc@sk;guWe80`%d^j;M)EO{IkC}XRUveQiGqrd+6+Qt_$WKw3UQ zK%l*zP1pmUKA;b<746~NaI*<*+J-LNr<>5FC-ekPsE_L_q(1`jFpF literal 0 HcmV?d00001 diff --git a/functions/__pycache__/jpeg_torch.cpython-38.pyc b/functions/__pycache__/jpeg_torch.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5065d6dbd905952f79c6a94801b37d32e334009 GIT binary patch literal 5342 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 u(C;8U0CA&f*Df0u)oc%_?chJE9^u zQ$oqM>{u16V^?g{X^hhmf^pW#R9v)J%D%}eS>>n<%A9gl7G+)?PXrNp^-s0*lTrmSy8B4?q3-tH*w`&{!%x zb^66u{%@|oqJn7uQ9*8=GVh!*AM2YS~atu=v|8^ja1c*rBg<623i9bz{K7B z9)5)D{gD6n!-~lF#t*@Mz#PIJ2kDrD%qZ6!q&qyw!C?)o|K>vDW&h;|Uw>R~HNO7$ zC%^Pn|1CO?16Xk5n+bdAZ}xAu8b5yF`wzeQyFYIYJD$z`;AeK_Ukik#noo z8JdMgi(R7yMiaw_qe(WS@gBGiYvdQpXOj|Enb3LaIf5fprHv-{5WJt@Lj(nYK1NcJ zfKELzM))8}X9(^G=y#JeK@zFbM+xqvw$lV3CU}6_%(yA45{;5OsO>J2o+S7U*hy43(~7o}`cN0mhcZ3{5*p9@%4vdCiz?d$W70 zGUFa21sC2)%U&z^zidlRVGGSK!=aK_Xfs&?V|}8U;cIdm65@^VLGrEGUT$~0x@^Vb z@-m+L@SKWyFdl+t8=mj!TDy9At>%Z-PA$~UtK^pfah>sEu9!Q*_wxe&De8-8-^FPP z7_^decuf2c5p8bZO5fy*h#WK?1-aVz>@#N8=Jgs~FN4V+BrT*4F@!w5Ze*(CNBi5p z?09Y`_I@NLwck-8Jv>kcIaNDHKL5qRv#8EbJu^s21Nsr)V3cO!S*jqFx-gL4+< zB0F+#KrbZ6NTe|jjoj$8j6SN1LEQ-p5jShi_H$8osH>lia@#U#%|c76L*8Llh5peN znrC7oT`!epCkS_z${dEhW|%5$P{K3ZH+E%uCkDOlNH5u}7+H~pG>I%%#6I&;o-Bu* znLZ^BGw246je#|3?#O9SK%HD1xmiAj!`u{!i$Z_K$Z>wv)4tcP2F>eU>;!N|*4;H<#nz*Evs_5;M)L1C z<5!nzA(As*jU9imjjPr6TBjDfSF7oL89Qrc&Nz#mRNJ*{p4OkFX`V3CnB|P!w0V-CRyvC6&wVV*#HSaCOOhC zBWe2OpkIdez|~#2w@VJ#%HS4v;oL(x3#SC320Ge#QSzX|&K~8+h{9k*Ze#?4PAddREsfXdX6>s9Ubyjtj~@vARowDO42U%)HDBLF5{aM`fgFnWi0f~5vLy5~(6Wo!WM|s3VfFO8?E8>Suxz5u% z@^3ze44nGtnpI-^TiB$@O&?JjNk}c+6eG4A3v9bHfHc7U5DL@JAZ{Uu zQSidw1T!6>??1Lj4q>)Ohf40IKMf(ZIN5gG_PZxd&)}yRH%vSFkl}1|R7|J-;ig}` zzORj!eV(*#`%yeI>^(93R<5<<+=$E{O|KntEpzvntSI$PipA#G%;q#rKC)nAFY~qN kp6PVeTHAYwwj0nF2-&2>r={zCU>x-IH$d-@rP~b^rhX literal 0 HcmV?d00001 diff --git a/functions/ckpt_util.py b/functions/ckpt_util.py new file mode 100644 index 0000000..129650b --- /dev/null +++ b/functions/ckpt_util.py @@ -0,0 +1,72 @@ +import os, hashlib +import requests +from tqdm import tqdm + +URL_MAP = { + "cifar10": "https://heibox.uni-heidelberg.de/f/869980b53bf5416c8a28/?dl=1", + "ema_cifar10": "https://heibox.uni-heidelberg.de/f/2e4f01e2d9ee49bab1d5/?dl=1", + "lsun_bedroom": "https://heibox.uni-heidelberg.de/f/f179d4f21ebc4d43bbfe/?dl=1", + "ema_lsun_bedroom": "https://heibox.uni-heidelberg.de/f/b95206528f384185889b/?dl=1", + "lsun_cat": "https://heibox.uni-heidelberg.de/f/fac870bd988348eab88e/?dl=1", + "ema_lsun_cat": "https://heibox.uni-heidelberg.de/f/0701aac3aa69457bbe34/?dl=1", + "lsun_church": "https://heibox.uni-heidelberg.de/f/2711a6f712e34b06b9d8/?dl=1", + "ema_lsun_church": "https://heibox.uni-heidelberg.de/f/44ccb50ef3c6436db52e/?dl=1", +} +CKPT_MAP = { + "cifar10": "diffusion_cifar10_model/model-790000.ckpt", + "ema_cifar10": "ema_diffusion_cifar10_model/model-790000.ckpt", + "lsun_bedroom": "diffusion_lsun_bedroom_model/model-2388000.ckpt", + "ema_lsun_bedroom": "ema_diffusion_lsun_bedroom_model/model-2388000.ckpt", + "lsun_cat": "diffusion_lsun_cat_model/model-1761000.ckpt", + "ema_lsun_cat": "ema_diffusion_lsun_cat_model/model-1761000.ckpt", + "lsun_church": "diffusion_lsun_church_model/model-4432000.ckpt", + "ema_lsun_church": "ema_diffusion_lsun_church_model/model-4432000.ckpt", +} +MD5_MAP = { + "cifar10": "82ed3067fd1002f5cf4c339fb80c4669", + "ema_cifar10": "1fa350b952534ae442b1d5235cce5cd3", + "lsun_bedroom": "f70280ac0e08b8e696f42cb8e948ff1c", + "ema_lsun_bedroom": "1921fa46b66a3665e450e42f36c2720f", + "lsun_cat": "bbee0e7c3d7abfb6e2539eaf2fb9987b", + "ema_lsun_cat": "646f23f4821f2459b8bafc57fd824558", + "lsun_church": "eb619b8a5ab95ef80f94ce8a5488dae3", + "ema_lsun_church": "fdc68a23938c2397caba4a260bc2445f", +} + + +def download(url, local_path, chunk_size=1024): + os.makedirs(os.path.split(local_path)[0], exist_ok=True) + with requests.get(url, stream=True) as r: + total_size = int(r.headers.get("content-length", 0)) + with tqdm(total=total_size, unit="B", unit_scale=True) as pbar: + with open(local_path, "wb") as f: + for data in r.iter_content(chunk_size=chunk_size): + if data: + f.write(data) + pbar.update(chunk_size) + + +def md5_hash(path): + with open(path, "rb") as f: + content = f.read() + return hashlib.md5(content).hexdigest() + + +def get_ckpt_path(name, root=None, check=False, prefix='exp'): + if 'church_outdoor' in name: + name = name.replace('church_outdoor', 'church') + assert name in URL_MAP + # Modify the path when necessary + cachedir = os.environ.get("XDG_CACHE_HOME", os.path.join(prefix, "logs/")) + root = ( + root + if root is not None + else os.path.join(cachedir, "diffusion_models_converted") + ) + path = os.path.join(root, CKPT_MAP[name]) + if not os.path.exists(path) or (check and not md5_hash(path) == MD5_MAP[name]): + print("Downloading {} model from {} to {}".format(name, URL_MAP[name], path)) + download(URL_MAP[name], path) + md5 = md5_hash(path) + assert md5 == MD5_MAP[name], md5 + return path diff --git a/functions/dct.py b/functions/dct.py new file mode 100644 index 0000000..e6d8480 --- /dev/null +++ b/functions/dct.py @@ -0,0 +1,207 @@ +import numpy as np +import torch +import torch.nn as nn + + +def dct1(x): + """ + Discrete Cosine Transform, Type I + :param x: the input signal + :return: the DCT-I of the signal over the last dimension + """ + x_shape = x.shape + x = x.view(-1, x_shape[-1]) + + return torch.fft.rfft(torch.cat([x, x.flip([1])[:, 1:-1]], dim=1))[:, :, 0].view(*x_shape) + + +def idct1(X): + """ + The inverse of DCT-I, which is just a scaled DCT-I + Our definition if idct1 is such that idct1(dct1(x)) == x + :param X: the input signal + :return: the inverse DCT-I of the signal over the last dimension + """ + n = X.shape[-1] + return dct1(X) / (2 * (n - 1)) + + +def dct(x, norm=None): + """ + Discrete Cosine Transform, Type II (a.k.a. the DCT) + For the meaning of the parameter `norm`, see: + https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.fftpack.dct.html + :param x: the input signal + :param norm: the normalization, None or 'ortho' + :return: the DCT-II of the signal over the last dimension + """ + x_shape = x.shape + N = x_shape[-1] + x = x.contiguous().view(-1, N) + + v = torch.cat([x[:, ::2], x[:, 1::2].flip([1])], dim=1) + + Vc = torch.view_as_real(torch.fft.fft(v, dim=1)) + + k = - torch.arange(N, dtype=x.dtype, device=x.device)[None, :] * np.pi / (2 * N) + W_r = torch.cos(k) + W_i = torch.sin(k) + + V = Vc[:, :, 0] * W_r - Vc[:, :, 1] * W_i + + if norm == 'ortho': + V[:, 0] /= np.sqrt(N) * 2 + V[:, 1:] /= np.sqrt(N / 2) * 2 + + V = 2 * V.view(*x_shape) + + return V + + +def idct(X, norm=None): + """ + The inverse to DCT-II, which is a scaled Discrete Cosine Transform, Type III + Our definition of idct is that idct(dct(x)) == x + For the meaning of the parameter `norm`, see: + https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.fftpack.dct.html + :param X: the input signal + :param norm: the normalization, None or 'ortho' + :return: the inverse DCT-II of the signal over the last dimension + """ + + x_shape = X.shape + N = x_shape[-1] + + X_v = X.contiguous().view(-1, x_shape[-1]) / 2 + + if norm == 'ortho': + X_v[:, 0] *= np.sqrt(N) * 2 + X_v[:, 1:] *= np.sqrt(N / 2) * 2 + + k = torch.arange(x_shape[-1], dtype=X.dtype, device=X.device)[None, :] * np.pi / (2 * N) + W_r = torch.cos(k) + W_i = torch.sin(k) + + V_t_r = X_v + V_t_i = torch.cat([X_v[:, :1] * 0, -X_v.flip([1])[:, :-1]], dim=1) + + V_r = V_t_r * W_r - V_t_i * W_i + V_i = V_t_r * W_i + V_t_i * W_r + + V = torch.cat([V_r.unsqueeze(2), V_i.unsqueeze(2)], dim=2) + + v = torch.fft.irfft(torch.view_as_complex(V), n=V.shape[1], dim=1) + x = v.new_zeros(v.shape) + x[:, ::2] += v[:, :N - (N // 2)] + x[:, 1::2] += v.flip([1])[:, :N // 2] + + return x.view(*x_shape) + + +def dct_2d(x, norm=None): + """ + 2-dimentional Discrete Cosine Transform, Type II (a.k.a. the DCT) + For the meaning of the parameter `norm`, see: + https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.fftpack.dct.html + :param x: the input signal + :param norm: the normalization, None or 'ortho' + :return: the DCT-II of the signal over the last 2 dimensions + """ + X1 = dct(x, norm=norm) + X2 = dct(X1.transpose(-1, -2), norm=norm) + return X2.transpose(-1, -2) + + +def idct_2d(X, norm=None): + """ + The inverse to 2D DCT-II, which is a scaled Discrete Cosine Transform, Type III + Our definition of idct is that idct_2d(dct_2d(x)) == x + For the meaning of the parameter `norm`, see: + https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.fftpack.dct.html + :param X: the input signal + :param norm: the normalization, None or 'ortho' + :return: the DCT-II of the signal over the last 2 dimensions + """ + x1 = idct(X, norm=norm) + x2 = idct(x1.transpose(-1, -2), norm=norm) + return x2.transpose(-1, -2) + + +def dct_3d(x, norm=None): + """ + 3-dimentional Discrete Cosine Transform, Type II (a.k.a. the DCT) + For the meaning of the parameter `norm`, see: + https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.fftpack.dct.html + :param x: the input signal + :param norm: the normalization, None or 'ortho' + :return: the DCT-II of the signal over the last 3 dimensions + """ + X1 = dct(x, norm=norm) + X2 = dct(X1.transpose(-1, -2), norm=norm) + X3 = dct(X2.transpose(-1, -3), norm=norm) + return X3.transpose(-1, -3).transpose(-1, -2) + + +def idct_3d(X, norm=None): + """ + The inverse to 3D DCT-II, which is a scaled Discrete Cosine Transform, Type III + Our definition of idct is that idct_3d(dct_3d(x)) == x + For the meaning of the parameter `norm`, see: + https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.fftpack.dct.html + :param X: the input signal + :param norm: the normalization, None or 'ortho' + :return: the DCT-II of the signal over the last 3 dimensions + """ + x1 = idct(X, norm=norm) + x2 = idct(x1.transpose(-1, -2), norm=norm) + x3 = idct(x2.transpose(-1, -3), norm=norm) + return x3.transpose(-1, -3).transpose(-1, -2) + + +class LinearDCT(nn.Linear): + """Implement any DCT as a linear layer; in practice this executes around + 50x faster on GPU. Unfortunately, the DCT matrix is stored, which will + increase memory usage. + :param in_features: size of expected input + :param type: which dct function in this file to use""" + def __init__(self, in_features, type, norm=None, bias=False): + self.type = type + self.N = in_features + self.norm = norm + super(LinearDCT, self).__init__(in_features, in_features, bias=bias) + + def reset_parameters(self): + # initialise using dct function + I = torch.eye(self.N) + if self.type == 'dct1': + self.weight.data = dct1(I).data.t() + elif self.type == 'idct1': + self.weight.data = idct1(I).data.t() + elif self.type == 'dct': + self.weight.data = dct(I, norm=self.norm).data.t() + elif self.type == 'idct': + self.weight.data = idct(I, norm=self.norm).data.t() + self.weight.requires_grad = False # don't learn this! + + +def apply_linear_2d(x, linear_layer): + """Can be used with a LinearDCT layer to do a 2D DCT. + :param x: the input signal + :param linear_layer: any PyTorch Linear layer + :return: result of linear layer applied to last 2 dimensions + """ + X1 = linear_layer(x) + X2 = linear_layer(X1.transpose(-1, -2)) + return X2.transpose(-1, -2) + + +def apply_linear_3d(x, linear_layer): + """Can be used with a LinearDCT layer to do a 3D DCT. + :param x: the input signal + :param linear_layer: any PyTorch Linear layer + :return: result of linear layer applied to last 3 dimensions + """ + X1 = linear_layer(x) + X2 = linear_layer(X1.transpose(-1, -2)) + X3 = linear_layer(X2.transpose(-1, -3)) + return X3.transpose(-1, -3).transpose(-1, -2) diff --git a/functions/denoising.py b/functions/denoising.py new file mode 100644 index 0000000..1fc517e --- /dev/null +++ b/functions/denoising.py @@ -0,0 +1,54 @@ +import torch +from tqdm import tqdm +import torchvision.utils as tvu +import os + +from functions.jpeg_torch import jpeg_decode as jd, jpeg_encode as je + + +def compute_alpha(beta, t): + beta = torch.cat([torch.zeros(1).to(beta.device), beta], dim=0) + a = (1 - beta).cumprod(dim=0).index_select(0, t + 1).view(-1, 1, 1, 1) + return a + +def jpeg_steps(x, seq, model, b, y_0, etaB, etaA, etaC, cls_fn=None, classes=None, jpeg_qf=None): + from functools import partial + jpeg_decode = partial(jd, qf = jpeg_qf) + jpeg_encode = partial(je, qf = jpeg_qf) + with torch.no_grad(): + n = x.size(0) + seq_next = [-1] + list(seq[:-1]) + x0_preds = [] + + a_init = compute_alpha(b, (torch.ones(n) * seq[-1]).to(x.device).long()) + + xs = [a_init.sqrt() * y_0 + (1 - a_init).sqrt() * torch.randn_like(x)] + for i, j in tqdm(zip(reversed(seq), reversed(seq_next))): + t = (torch.ones(n) * i).to(x.device) + next_t = (torch.ones(n) * j).to(x.device) + at = compute_alpha(b, t.long()) + at_next = compute_alpha(b, next_t.long()) + xt = xs[-1].to('cuda') + if cls_fn == None: + et = model(xt, t) + else: + et = model(xt, t, classes) + et = et[:, :3] + et = et - (1 - at).sqrt()[0,0,0,0] * cls_fn(x,t,classes) + + if et.size(1) == 6: + et = et[:, :3] + + x0_t = (xt - et * (1 - at).sqrt()) / at.sqrt() + + sigma = (1 - at).sqrt()[0, 0, 0, 0] / at.sqrt()[0, 0, 0, 0] + sigma_next = (1 - at_next).sqrt()[0, 0, 0, 0] / at_next.sqrt()[0, 0, 0, 0] + + xt_next = x0_t + xt_next = xt_next - jpeg_decode(jpeg_encode(xt_next)) + jpeg_decode(jpeg_encode(y_0)) + + xt_next = etaB * at_next.sqrt() * xt_next + (1 - etaB) * at_next.sqrt() * x0_t + etaA * (1 - at_next).sqrt() * torch.randn_like(xt_next) + (1 - etaA) * et * (1 - at_next).sqrt() + + x0_preds.append(x0_t.to('cpu')) + xs.append(xt_next.to('cpu')) + return xs, x0_preds \ No newline at end of file diff --git a/functions/jpeg_torch.py b/functions/jpeg_torch.py new file mode 100644 index 0000000..5589cba --- /dev/null +++ b/functions/jpeg_torch.py @@ -0,0 +1,186 @@ +import torch +import torch.nn as nn +from .dct import LinearDCT, apply_linear_2d +import torch.nn.functional as F + + +def torch_rgb2ycbcr(x): + # Assume x is a batch of size (N x C x H x W) + v = torch.tensor([[.299, .587, .114], [-.1687, -.3313, .5], [.5, -.4187, -.0813]]).to(x.device) + ycbcr = torch.tensordot(x, v, dims=([1], [1])).transpose(3, 2).transpose(2, 1) + ycbcr[:,1:] += 128 + return ycbcr + + +def torch_ycbcr2rgb(x): + # Assume x is a batch of size (N x C x H x W) + v = torch.tensor([[ 1.00000000e+00, -3.68199903e-05, 1.40198758e+00], + [ 1.00000000e+00, -3.44113281e-01, -7.14103821e-01], + [ 1.00000000e+00, 1.77197812e+00, -1.34583413e-04]]).to(x.device) + x[:, 1:] -= 128 + rgb = torch.tensordot(x, v, dims=([1], [1])).transpose(3, 2).transpose(2, 1) + return rgb + +def chroma_subsample(x): + return x[:, 0:1, :, :], x[:, 1:, ::2, ::2] + + +def general_quant_matrix(qf = 10): + q1 = torch.tensor([ + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68, 109, 103, 77, + 24, 35, 55, 64, 81, 104, 113, 92, + 49, 64, 78, 87, 103, 121, 120, 101, + 72, 92, 95, 98, 112, 100, 103, 99 + ]) + q2 = torch.tensor([ + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + ]) + s = (5000 / qf) if qf < 50 else (200 - 2 * qf) + q1 = torch.floor((s * q1 + 50) / 100) + q1[q1 <= 0] = 1 + q1[q1 > 255] = 255 + q2 = torch.floor((s * q2 + 50) / 100) + q2[q2 <= 0] = 1 + q2[q2 > 255] = 255 + return q1, q2 + + +def quantization_matrix(qf): + return general_quant_matrix(qf) + # q1 = torch.tensor([[ 80, 55, 50, 80, 120, 200, 255, 255], + # [ 60, 60, 70, 95, 130, 255, 255, 255], + # [ 70, 65, 80, 120, 200, 255, 255, 255], + # [ 70, 85, 110, 145, 255, 255, 255, 255], + # [ 90, 110, 185, 255, 255, 255, 255, 255], + # [120, 175, 255, 255, 255, 255, 255, 255], + # [245, 255, 255, 255, 255, 255, 255, 255], + # [255, 255, 255, 255, 255, 255, 255, 255]]) + # q2 = torch.tensor([[ 85, 90, 120, 235, 255, 255, 255, 255], + # [ 90, 105, 130, 255, 255, 255, 255, 255], + # [120, 130, 255, 255, 255, 255, 255, 255], + # [235, 255, 255, 255, 255, 255, 255, 255], + # [255, 255, 255, 255, 255, 255, 255, 255], + # [255, 255, 255, 255, 255, 255, 255, 255], + # [255, 255, 255, 255, 255, 255, 255, 255], + # [255, 255, 255, 255, 255, 255, 255, 255]]) + # return q1, q2 + +def jpeg_encode(x, qf): + # Assume x is a batch of size (N x C x H x W) + # [-1, 1] to [0, 255] + x = (x + 1) / 2 * 255 + n_batch, _, n_size, _ = x.shape + + x = torch_rgb2ycbcr(x) + x_luma, x_chroma = chroma_subsample(x) + unfold = nn.Unfold(kernel_size=(8, 8), stride=(8, 8)) + x_luma = unfold(x_luma).transpose(2, 1) + x_chroma = unfold(x_chroma).transpose(2, 1) + + x_luma = x_luma.reshape(-1, 8, 8) - 128 + x_chroma = x_chroma.reshape(-1, 8, 8) - 128 + + dct_layer = LinearDCT(8, 'dct', norm='ortho') + dct_layer.to(x_luma.device) + x_luma = apply_linear_2d(x_luma, dct_layer) + x_chroma = apply_linear_2d(x_chroma, dct_layer) + + x_luma = x_luma.view(-1, 1, 8, 8) + x_chroma = x_chroma.view(-1, 2, 8, 8) + + q1, q2 = quantization_matrix(qf) + q1 = q1.to(x_luma.device) + q2 = q2.to(x_luma.device) + x_luma /= q1.view(1, 8, 8) + x_chroma /= q2.view(1, 8, 8) + + x_luma = x_luma.round() + x_chroma = x_chroma.round() + + x_luma = x_luma.reshape(n_batch, (n_size // 8) ** 2, 64).transpose(2, 1) + x_chroma = x_chroma.reshape(n_batch, (n_size // 16) ** 2, 64 * 2).transpose(2, 1) + + fold = nn.Fold(output_size=(n_size, n_size), kernel_size=(8, 8), stride=(8, 8)) + x_luma = fold(x_luma) + fold = nn.Fold(output_size=(n_size // 2, n_size // 2), kernel_size=(8, 8), stride=(8, 8)) + x_chroma = fold(x_chroma) + + return [x_luma, x_chroma] + + + +def jpeg_decode(x, qf): + # Assume x[0] is a batch of size (N x 1 x H x W) (luma) + # Assume x[1:] is a batch of size (N x 2 x H/2 x W/2) (chroma) + x_luma, x_chroma = x + n_batch, _, n_size, _ = x_luma.shape + unfold = nn.Unfold(kernel_size=(8, 8), stride=(8, 8)) + x_luma = unfold(x_luma).transpose(2, 1) + x_luma = x_luma.reshape(-1, 1, 8, 8) + x_chroma = unfold(x_chroma).transpose(2, 1) + x_chroma = x_chroma.reshape(-1, 2, 8, 8) + + q1, q2 = quantization_matrix(qf) + q1 = q1.to(x_luma.device) + q2 = q2.to(x_luma.device) + x_luma *= q1.view(1, 8, 8) + x_chroma *= q2.view(1, 8, 8) + + x_luma = x_luma.reshape(-1, 8, 8) + x_chroma = x_chroma.reshape(-1, 8, 8) + + dct_layer = LinearDCT(8, 'idct', norm='ortho') + dct_layer.to(x_luma.device) + x_luma = apply_linear_2d(x_luma, dct_layer) + x_chroma = apply_linear_2d(x_chroma, dct_layer) + + x_luma = (x_luma + 128).reshape(n_batch, (n_size // 8) ** 2, 64).transpose(2, 1) + x_chroma = (x_chroma + 128).reshape(n_batch, (n_size // 16) ** 2, 64 * 2).transpose(2, 1) + + fold = nn.Fold(output_size=(n_size, n_size), kernel_size=(8, 8), stride=(8, 8)) + x_luma = fold(x_luma) + fold = nn.Fold(output_size=(n_size // 2, n_size // 2), kernel_size=(8, 8), stride=(8, 8)) + x_chroma = fold(x_chroma) + + x_chroma_repeated = torch.zeros(n_batch, 2, n_size, n_size, device = x_luma.device) + x_chroma_repeated[:, :, 0::2, 0::2] = x_chroma + x_chroma_repeated[:, :, 0::2, 1::2] = x_chroma + x_chroma_repeated[:, :, 1::2, 0::2] = x_chroma + x_chroma_repeated[:, :, 1::2, 1::2] = x_chroma + + x = torch.cat([x_luma, x_chroma_repeated], dim=1) + + x = torch_ycbcr2rgb(x) + + # [0, 255] to [-1, 1] + x = x / 255 * 2 - 1 + + return x + +def quantization_encode(x, qf): + qf = 32 + #to int + x = (x + 1) / 2 + x = x * 255 + x = x.int() + # quantize + x = x // qf + #to float + x = x.float() + x = x / (255/qf) + x = (x * 2) - 1 + return x + +def quantization_decode(x, qf): + return x \ No newline at end of file diff --git a/guided_diffusion/__pycache__/fp16_util.cpython-38.pyc b/guided_diffusion/__pycache__/fp16_util.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1319da89ed592347a3cb8844d7677f5193531e3e GIT binary patch literal 7797 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 Z%C@`$ekZ+o{A`rdUeR+r&&!oQ`5)lL$E^SW literal 0 HcmV?d00001 diff --git a/guided_diffusion/__pycache__/fp16_util.cpython-39.pyc b/guided_diffusion/__pycache__/fp16_util.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e69d38a29dd3ddd1a5e386988997ed51c32dcfe GIT binary patch literal 7757 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 literal 0 HcmV?d00001 diff --git a/guided_diffusion/__pycache__/logger.cpython-38.pyc b/guided_diffusion/__pycache__/logger.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87138b98c07d7b24a1d5fbdac17cc4ad0be16642 GIT binary patch literal 15443 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 literal 0 HcmV?d00001 diff --git a/guided_diffusion/__pycache__/nn.cpython-38.pyc b/guided_diffusion/__pycache__/nn.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4dbc2d9d6259fa32a2ee72761a9bcbbd1d2b7a4 GIT binary patch literal 5881 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%0A#Sz?KrZxXphL|IvcO3NU*#5Yz8 zHPH|0!^12kj~9Q%?NQ{T#d~ao?1iQGSqTX@w33#X|0!sM5`Emh3>4@lo_WNYF#h5? zn9imlSUk;X&DXb?Z|vwiGNv{0Zrj|^wj(^1EUo)C$(padb~ z72p8U5gplb$H_VsO8POS4o% zwrFlR_dUdj#5d$&VzuBFk@8A?HjpO^{@S`A4_P8jYG33Y zI~fhBQwv!rR5ZYq1EC@iCDR;MfueCBP#g({gOPTinD~EV#1=$l_AxC4s8R7_tWp$+ zsPI$aP#5<1IT)q<-zLa=jV3w-x5RC{7$Zhg_^pi|z@dInNAhr>2O$-WQp(T>t&7mH z6T5$gN}xA0P+>x=L7-Ju;S-_NxT+C8QRFs>$Stez$?C%=iot+2EqtOFEX1d74EC17 zCmX^xJ;7~6TQP-GVGNc<4E9MU2J1#(X&!%=g^?s$xTVmFY_JPdn|*PRGNSP?4(dU# z1$>grehqpl0V-r!q#0B=u}{z)L{li2iyjJSgcAzT#1ClNp&ni8YLHT>|2eafdLhg* z9*ccznDQM`7!~mkn5+l=4j|uS;zEKx# zlpLdtTcPJiDEK(5faPmDj9i;I=4xuOw0)Kj@)Z4^*8ZnCnWU-)7Y$0dmQqX2!b}BcPX7dJ-%o2_q9e%BSNSV*j8D!5A^Qjwjz;**m zQv*h4-(7lh{+)$r>+HTkb3lFh@B6@shDWe_?(Dh zQ$Qs(c(Qkd-_h_&WpwdVbm`k3-gN`EX;diW@Ubb8rmzd48QUR$XNjjc&YW6x1NBLc zP5Z{S$s;>Bd*B2Y(aj&JqtrFuuX~rK=$O8=QM>Dil}hd2BsM#Br-Az2Lh{qC3AM% GHvbEKmME|Q literal 0 HcmV?d00001 diff --git a/guided_diffusion/__pycache__/script_util.cpython-39.pyc b/guided_diffusion/__pycache__/script_util.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b93a64703b854b675c582cb561a1e9b9f199ee2 GIT binary patch literal 7171 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 E3-0zQy8r+H literal 0 HcmV?d00001 diff --git a/guided_diffusion/__pycache__/unet.cpython-38.pyc b/guided_diffusion/__pycache__/unet.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfb53e91fb1a8d3a8970443130cf894f8c0d8636 GIT binary patch literal 21499 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 CL`G8p literal 0 HcmV?d00001 diff --git a/guided_diffusion/__pycache__/unet.cpython-39.pyc b/guided_diffusion/__pycache__/unet.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7c51aee6ce8fc279c0387d5f8e7fbfcd9c9fc08 GIT binary patch literal 21410 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 literal 0 HcmV?d00001 diff --git a/guided_diffusion/fp16_util.py b/guided_diffusion/fp16_util.py new file mode 100644 index 0000000..35a3f46 --- /dev/null +++ b/guided_diffusion/fp16_util.py @@ -0,0 +1,236 @@ +""" +Helpers to train with 16-bit precision. +""" + +import numpy as np +import torch as th +import torch.nn as nn +from torch._utils import _flatten_dense_tensors, _unflatten_dense_tensors + +from . import logger + +INITIAL_LOG_LOSS_SCALE = 20.0 + + +def convert_module_to_f16(l): + """ + Convert primitive modules to float16. + """ + if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + l.weight.data = l.weight.data.half() + if l.bias is not None: + l.bias.data = l.bias.data.half() + + +def convert_module_to_f32(l): + """ + Convert primitive modules to float32, undoing convert_module_to_f16(). + """ + if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + l.weight.data = l.weight.data.float() + if l.bias is not None: + l.bias.data = l.bias.data.float() + + +def make_master_params(param_groups_and_shapes): + """ + Copy model parameters into a (differently-shaped) list of full-precision + parameters. + """ + master_params = [] + for param_group, shape in param_groups_and_shapes: + master_param = nn.Parameter( + _flatten_dense_tensors( + [param.detach().float() for (_, param) in param_group] + ).view(shape) + ) + master_param.requires_grad = True + master_params.append(master_param) + return master_params + + +def model_grads_to_master_grads(param_groups_and_shapes, master_params): + """ + Copy the gradients from the model parameters into the master parameters + from make_master_params(). + """ + for master_param, (param_group, shape) in zip( + master_params, param_groups_and_shapes + ): + master_param.grad = _flatten_dense_tensors( + [param_grad_or_zeros(param) for (_, param) in param_group] + ).view(shape) + + +def master_params_to_model_params(param_groups_and_shapes, master_params): + """ + Copy the master parameter data back into the model parameters. + """ + # Without copying to a list, if a generator is passed, this will + # silently not copy any parameters. + for master_param, (param_group, _) in zip(master_params, param_groups_and_shapes): + for (_, param), unflat_master_param in zip( + param_group, unflatten_master_params(param_group, master_param.view(-1)) + ): + param.detach().copy_(unflat_master_param) + + +def unflatten_master_params(param_group, master_param): + return _unflatten_dense_tensors(master_param, [param for (_, param) in param_group]) + + +def get_param_groups_and_shapes(named_model_params): + named_model_params = list(named_model_params) + scalar_vector_named_params = ( + [(n, p) for (n, p) in named_model_params if p.ndim <= 1], + (-1), + ) + matrix_named_params = ( + [(n, p) for (n, p) in named_model_params if p.ndim > 1], + (1, -1), + ) + return [scalar_vector_named_params, matrix_named_params] + + +def master_params_to_state_dict( + model, param_groups_and_shapes, master_params, use_fp16 +): + if use_fp16: + state_dict = model.state_dict() + for master_param, (param_group, _) in zip( + master_params, param_groups_and_shapes + ): + for (name, _), unflat_master_param in zip( + param_group, unflatten_master_params(param_group, master_param.view(-1)) + ): + assert name in state_dict + state_dict[name] = unflat_master_param + else: + state_dict = model.state_dict() + for i, (name, _value) in enumerate(model.named_parameters()): + assert name in state_dict + state_dict[name] = master_params[i] + return state_dict + + +def state_dict_to_master_params(model, state_dict, use_fp16): + if use_fp16: + named_model_params = [ + (name, state_dict[name]) for name, _ in model.named_parameters() + ] + param_groups_and_shapes = get_param_groups_and_shapes(named_model_params) + master_params = make_master_params(param_groups_and_shapes) + else: + master_params = [state_dict[name] for name, _ in model.named_parameters()] + return master_params + + +def zero_master_grads(master_params): + for param in master_params: + param.grad = None + + +def zero_grad(model_params): + for param in model_params: + # Taken from https://pytorch.org/docs/stable/_modules/torch/optim/optimizer.html#Optimizer.add_param_group + if param.grad is not None: + param.grad.detach_() + param.grad.zero_() + + +def param_grad_or_zeros(param): + if param.grad is not None: + return param.grad.data.detach() + else: + return th.zeros_like(param) + + +class MixedPrecisionTrainer: + def __init__( + self, + *, + model, + use_fp16=False, + fp16_scale_growth=1e-3, + initial_lg_loss_scale=INITIAL_LOG_LOSS_SCALE, + ): + self.model = model + self.use_fp16 = use_fp16 + self.fp16_scale_growth = fp16_scale_growth + + self.model_params = list(self.model.parameters()) + self.master_params = self.model_params + self.param_groups_and_shapes = None + self.lg_loss_scale = initial_lg_loss_scale + + if self.use_fp16: + self.param_groups_and_shapes = get_param_groups_and_shapes( + self.model.named_parameters() + ) + self.master_params = make_master_params(self.param_groups_and_shapes) + self.model.convert_to_fp16() + + def zero_grad(self): + zero_grad(self.model_params) + + def backward(self, loss: th.Tensor): + if self.use_fp16: + loss_scale = 2 ** self.lg_loss_scale + (loss * loss_scale).backward() + else: + loss.backward() + + def optimize(self, opt: th.optim.Optimizer): + if self.use_fp16: + return self._optimize_fp16(opt) + else: + return self._optimize_normal(opt) + + def _optimize_fp16(self, opt: th.optim.Optimizer): + logger.logkv_mean("lg_loss_scale", self.lg_loss_scale) + model_grads_to_master_grads(self.param_groups_and_shapes, self.master_params) + grad_norm, param_norm = self._compute_norms(grad_scale=2 ** self.lg_loss_scale) + if check_overflow(grad_norm): + self.lg_loss_scale -= 1 + logger.log(f"Found NaN, decreased lg_loss_scale to {self.lg_loss_scale}") + zero_master_grads(self.master_params) + return False + + logger.logkv_mean("grad_norm", grad_norm) + logger.logkv_mean("param_norm", param_norm) + + self.master_params[0].grad.mul_(1.0 / (2 ** self.lg_loss_scale)) + opt.step() + zero_master_grads(self.master_params) + master_params_to_model_params(self.param_groups_and_shapes, self.master_params) + self.lg_loss_scale += self.fp16_scale_growth + return True + + def _optimize_normal(self, opt: th.optim.Optimizer): + grad_norm, param_norm = self._compute_norms() + logger.logkv_mean("grad_norm", grad_norm) + logger.logkv_mean("param_norm", param_norm) + opt.step() + return True + + def _compute_norms(self, grad_scale=1.0): + grad_norm = 0.0 + param_norm = 0.0 + for p in self.master_params: + with th.no_grad(): + param_norm += th.norm(p, p=2, dtype=th.float32).item() ** 2 + if p.grad is not None: + grad_norm += th.norm(p.grad, p=2, dtype=th.float32).item() ** 2 + return np.sqrt(grad_norm) / grad_scale, np.sqrt(param_norm) + + def master_params_to_state_dict(self, master_params): + return master_params_to_state_dict( + self.model, self.param_groups_and_shapes, master_params, self.use_fp16 + ) + + def state_dict_to_master_params(self, state_dict): + return state_dict_to_master_params(self.model, state_dict, self.use_fp16) + + +def check_overflow(value): + return (value == float("inf")) or (value == -float("inf")) or (value != value) diff --git a/guided_diffusion/logger.py b/guided_diffusion/logger.py new file mode 100644 index 0000000..b1d856d --- /dev/null +++ b/guided_diffusion/logger.py @@ -0,0 +1,495 @@ +""" +Logger copied from OpenAI baselines to avoid extra RL-based dependencies: +https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/logger.py +""" + +import os +import sys +import shutil +import os.path as osp +import json +import time +import datetime +import tempfile +import warnings +from collections import defaultdict +from contextlib import contextmanager + +DEBUG = 10 +INFO = 20 +WARN = 30 +ERROR = 40 + +DISABLED = 50 + + +class KVWriter(object): + def writekvs(self, kvs): + raise NotImplementedError + + +class SeqWriter(object): + def writeseq(self, seq): + raise NotImplementedError + + +class HumanOutputFormat(KVWriter, SeqWriter): + def __init__(self, filename_or_file): + if isinstance(filename_or_file, str): + self.file = open(filename_or_file, "wt") + self.own_file = True + else: + assert hasattr(filename_or_file, "read"), ( + "expected file or str, got %s" % filename_or_file + ) + self.file = filename_or_file + self.own_file = False + + def writekvs(self, kvs): + # Create strings for printing + key2str = {} + for (key, val) in sorted(kvs.items()): + if hasattr(val, "__float__"): + valstr = "%-8.3g" % val + else: + valstr = str(val) + key2str[self._truncate(key)] = self._truncate(valstr) + + # Find max widths + if len(key2str) == 0: + print("WARNING: tried to write empty key-value dict") + return + else: + keywidth = max(map(len, key2str.keys())) + valwidth = max(map(len, key2str.values())) + + # Write out the data + dashes = "-" * (keywidth + valwidth + 7) + lines = [dashes] + for (key, val) in sorted(key2str.items(), key=lambda kv: kv[0].lower()): + lines.append( + "| %s%s | %s%s |" + % (key, " " * (keywidth - len(key)), val, " " * (valwidth - len(val))) + ) + lines.append(dashes) + self.file.write("\n".join(lines) + "\n") + + # Flush the output to the file + self.file.flush() + + def _truncate(self, s): + maxlen = 30 + return s[: maxlen - 3] + "..." if len(s) > maxlen else s + + def writeseq(self, seq): + seq = list(seq) + for (i, elem) in enumerate(seq): + self.file.write(elem) + if i < len(seq) - 1: # add space unless this is the last one + self.file.write(" ") + self.file.write("\n") + self.file.flush() + + def close(self): + if self.own_file: + self.file.close() + + +class JSONOutputFormat(KVWriter): + def __init__(self, filename): + self.file = open(filename, "wt") + + def writekvs(self, kvs): + for k, v in sorted(kvs.items()): + if hasattr(v, "dtype"): + kvs[k] = float(v) + self.file.write(json.dumps(kvs) + "\n") + self.file.flush() + + def close(self): + self.file.close() + + +class CSVOutputFormat(KVWriter): + def __init__(self, filename): + self.file = open(filename, "w+t") + self.keys = [] + self.sep = "," + + def writekvs(self, kvs): + # Add our current row to the history + extra_keys = list(kvs.keys() - self.keys) + extra_keys.sort() + if extra_keys: + self.keys.extend(extra_keys) + self.file.seek(0) + lines = self.file.readlines() + self.file.seek(0) + for (i, k) in enumerate(self.keys): + if i > 0: + self.file.write(",") + self.file.write(k) + self.file.write("\n") + for line in lines[1:]: + self.file.write(line[:-1]) + self.file.write(self.sep * len(extra_keys)) + self.file.write("\n") + for (i, k) in enumerate(self.keys): + if i > 0: + self.file.write(",") + v = kvs.get(k) + if v is not None: + self.file.write(str(v)) + self.file.write("\n") + self.file.flush() + + def close(self): + self.file.close() + + +class TensorBoardOutputFormat(KVWriter): + """ + Dumps key/value pairs into TensorBoard's numeric format. + """ + + def __init__(self, dir): + os.makedirs(dir, exist_ok=True) + self.dir = dir + self.step = 1 + prefix = "events" + path = osp.join(osp.abspath(dir), prefix) + import tensorflow as tf + from tensorflow.python import pywrap_tensorflow + from tensorflow.core.util import event_pb2 + from tensorflow.python.util import compat + + self.tf = tf + self.event_pb2 = event_pb2 + self.pywrap_tensorflow = pywrap_tensorflow + self.writer = pywrap_tensorflow.EventsWriter(compat.as_bytes(path)) + + def writekvs(self, kvs): + def summary_val(k, v): + kwargs = {"tag": k, "simple_value": float(v)} + return self.tf.Summary.Value(**kwargs) + + summary = self.tf.Summary(value=[summary_val(k, v) for k, v in kvs.items()]) + event = self.event_pb2.Event(wall_time=time.time(), summary=summary) + event.step = ( + self.step + ) # is there any reason why you'd want to specify the step? + self.writer.WriteEvent(event) + self.writer.Flush() + self.step += 1 + + def close(self): + if self.writer: + self.writer.Close() + self.writer = None + + +def make_output_format(format, ev_dir, log_suffix=""): + os.makedirs(ev_dir, exist_ok=True) + if format == "stdout": + return HumanOutputFormat(sys.stdout) + elif format == "log": + return HumanOutputFormat(osp.join(ev_dir, "log%s.txt" % log_suffix)) + elif format == "json": + return JSONOutputFormat(osp.join(ev_dir, "progress%s.json" % log_suffix)) + elif format == "csv": + return CSVOutputFormat(osp.join(ev_dir, "progress%s.csv" % log_suffix)) + elif format == "tensorboard": + return TensorBoardOutputFormat(osp.join(ev_dir, "tb%s" % log_suffix)) + else: + raise ValueError("Unknown format specified: %s" % (format,)) + + +# ================================================================ +# API +# ================================================================ + + +def logkv(key, val): + """ + Log a value of some diagnostic + Call this once for each diagnostic quantity, each iteration + If called many times, last value will be used. + """ + get_current().logkv(key, val) + + +def logkv_mean(key, val): + """ + The same as logkv(), but if called many times, values averaged. + """ + get_current().logkv_mean(key, val) + + +def logkvs(d): + """ + Log a dictionary of key-value pairs + """ + for (k, v) in d.items(): + logkv(k, v) + + +def dumpkvs(): + """ + Write all of the diagnostics from the current iteration + """ + return get_current().dumpkvs() + + +def getkvs(): + return get_current().name2val + + +def log(*args, level=INFO): + """ + Write the sequence of args, with no separators, to the console and output files (if you've configured an output file). + """ + get_current().log(*args, level=level) + + +def debug(*args): + log(*args, level=DEBUG) + + +def info(*args): + log(*args, level=INFO) + + +def warn(*args): + log(*args, level=WARN) + + +def error(*args): + log(*args, level=ERROR) + + +def set_level(level): + """ + Set logging threshold on current logger. + """ + get_current().set_level(level) + + +def set_comm(comm): + get_current().set_comm(comm) + + +def get_dir(): + """ + Get directory that log files are being written to. + will be None if there is no output directory (i.e., if you didn't call start) + """ + return get_current().get_dir() + + +record_tabular = logkv +dump_tabular = dumpkvs + + +@contextmanager +def profile_kv(scopename): + logkey = "wait_" + scopename + tstart = time.time() + try: + yield + finally: + get_current().name2val[logkey] += time.time() - tstart + + +def profile(n): + """ + Usage: + @profile("my_func") + def my_func(): code + """ + + def decorator_with_name(func): + def func_wrapper(*args, **kwargs): + with profile_kv(n): + return func(*args, **kwargs) + + return func_wrapper + + return decorator_with_name + + +# ================================================================ +# Backend +# ================================================================ + + +def get_current(): + if Logger.CURRENT is None: + _configure_default_logger() + + return Logger.CURRENT + + +class Logger(object): + DEFAULT = None # A logger with no output files. (See right below class definition) + # So that you can still log to the terminal without setting up any output files + CURRENT = None # Current logger being used by the free functions above + + def __init__(self, dir, output_formats, comm=None): + self.name2val = defaultdict(float) # values this iteration + self.name2cnt = defaultdict(int) + self.level = INFO + self.dir = dir + self.output_formats = output_formats + self.comm = comm + + # Logging API, forwarded + # ---------------------------------------- + def logkv(self, key, val): + self.name2val[key] = val + + def logkv_mean(self, key, val): + oldval, cnt = self.name2val[key], self.name2cnt[key] + self.name2val[key] = oldval * cnt / (cnt + 1) + val / (cnt + 1) + self.name2cnt[key] = cnt + 1 + + def dumpkvs(self): + if self.comm is None: + d = self.name2val + else: + d = mpi_weighted_mean( + self.comm, + { + name: (val, self.name2cnt.get(name, 1)) + for (name, val) in self.name2val.items() + }, + ) + if self.comm.rank != 0: + d["dummy"] = 1 # so we don't get a warning about empty dict + out = d.copy() # Return the dict for unit testing purposes + for fmt in self.output_formats: + if isinstance(fmt, KVWriter): + fmt.writekvs(d) + self.name2val.clear() + self.name2cnt.clear() + return out + + def log(self, *args, level=INFO): + if self.level <= level: + self._do_log(args) + + # Configuration + # ---------------------------------------- + def set_level(self, level): + self.level = level + + def set_comm(self, comm): + self.comm = comm + + def get_dir(self): + return self.dir + + def close(self): + for fmt in self.output_formats: + fmt.close() + + # Misc + # ---------------------------------------- + def _do_log(self, args): + for fmt in self.output_formats: + if isinstance(fmt, SeqWriter): + fmt.writeseq(map(str, args)) + + +def get_rank_without_mpi_import(): + # check environment variables here instead of importing mpi4py + # to avoid calling MPI_Init() when this module is imported + for varname in ["PMI_RANK", "OMPI_COMM_WORLD_RANK"]: + if varname in os.environ: + return int(os.environ[varname]) + return 0 + + +def mpi_weighted_mean(comm, local_name2valcount): + """ + Copied from: https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/common/mpi_util.py#L110 + Perform a weighted average over dicts that are each on a different node + Input: local_name2valcount: dict mapping key -> (value, count) + Returns: key -> mean + """ + all_name2valcount = comm.gather(local_name2valcount) + if comm.rank == 0: + name2sum = defaultdict(float) + name2count = defaultdict(float) + for n2vc in all_name2valcount: + for (name, (val, count)) in n2vc.items(): + try: + val = float(val) + except ValueError: + if comm.rank == 0: + warnings.warn( + "WARNING: tried to compute mean on non-float {}={}".format( + name, val + ) + ) + else: + name2sum[name] += val * count + name2count[name] += count + return {name: name2sum[name] / name2count[name] for name in name2sum} + else: + return {} + + +def configure(dir=None, format_strs=None, comm=None, log_suffix=""): + """ + If comm is provided, average all numerical stats across that comm + """ + if dir is None: + dir = os.getenv("OPENAI_LOGDIR") + if dir is None: + dir = osp.join( + tempfile.gettempdir(), + datetime.datetime.now().strftime("openai-%Y-%m-%d-%H-%M-%S-%f"), + ) + assert isinstance(dir, str) + dir = os.path.expanduser(dir) + os.makedirs(os.path.expanduser(dir), exist_ok=True) + + rank = get_rank_without_mpi_import() + if rank > 0: + log_suffix = log_suffix + "-rank%03i" % rank + + if format_strs is None: + if rank == 0: + format_strs = os.getenv("OPENAI_LOG_FORMAT", "stdout,log,csv").split(",") + else: + format_strs = os.getenv("OPENAI_LOG_FORMAT_MPI", "log").split(",") + format_strs = filter(None, format_strs) + output_formats = [make_output_format(f, dir, log_suffix) for f in format_strs] + + Logger.CURRENT = Logger(dir=dir, output_formats=output_formats, comm=comm) + if output_formats: + log("Logging to %s" % dir) + + +def _configure_default_logger(): + configure() + Logger.DEFAULT = Logger.CURRENT + + +def reset(): + if Logger.CURRENT is not Logger.DEFAULT: + Logger.CURRENT.close() + Logger.CURRENT = Logger.DEFAULT + log("Reset logger") + + +@contextmanager +def scoped_configure(dir=None, format_strs=None, comm=None): + prevlogger = Logger.CURRENT + configure(dir=dir, format_strs=format_strs, comm=comm) + try: + yield + finally: + Logger.CURRENT.close() + Logger.CURRENT = prevlogger + diff --git a/guided_diffusion/nn.py b/guided_diffusion/nn.py new file mode 100644 index 0000000..a4cd59c --- /dev/null +++ b/guided_diffusion/nn.py @@ -0,0 +1,170 @@ +""" +Various utilities for neural networks. +""" + +import math + +import torch as th +import torch.nn as nn + + +# PyTorch 1.7 has SiLU, but we support PyTorch 1.5. +class SiLU(nn.Module): + def forward(self, x): + return x * th.sigmoid(x) + + +class GroupNorm32(nn.GroupNorm): + def forward(self, x): + return super().forward(x.float()).type(x.dtype) + + +def conv_nd(dims, *args, **kwargs): + """ + Create a 1D, 2D, or 3D convolution module. + """ + if dims == 1: + return nn.Conv1d(*args, **kwargs) + elif dims == 2: + return nn.Conv2d(*args, **kwargs) + elif dims == 3: + return nn.Conv3d(*args, **kwargs) + raise ValueError(f"unsupported dimensions: {dims}") + + +def linear(*args, **kwargs): + """ + Create a linear module. + """ + return nn.Linear(*args, **kwargs) + + +def avg_pool_nd(dims, *args, **kwargs): + """ + Create a 1D, 2D, or 3D average pooling module. + """ + if dims == 1: + return nn.AvgPool1d(*args, **kwargs) + elif dims == 2: + return nn.AvgPool2d(*args, **kwargs) + elif dims == 3: + return nn.AvgPool3d(*args, **kwargs) + raise ValueError(f"unsupported dimensions: {dims}") + + +def update_ema(target_params, source_params, rate=0.99): + """ + Update target parameters to be closer to those of source parameters using + an exponential moving average. + + :param target_params: the target parameter sequence. + :param source_params: the source parameter sequence. + :param rate: the EMA rate (closer to 1 means slower). + """ + for targ, src in zip(target_params, source_params): + targ.detach().mul_(rate).add_(src, alpha=1 - rate) + + +def zero_module(module): + """ + Zero out the parameters of a module and return it. + """ + for p in module.parameters(): + p.detach().zero_() + return module + + +def scale_module(module, scale): + """ + Scale the parameters of a module and return it. + """ + for p in module.parameters(): + p.detach().mul_(scale) + return module + + +def mean_flat(tensor): + """ + Take the mean over all non-batch dimensions. + """ + return tensor.mean(dim=list(range(1, len(tensor.shape)))) + + +def normalization(channels): + """ + Make a standard normalization layer. + + :param channels: number of input channels. + :return: an nn.Module for normalization. + """ + return GroupNorm32(32, channels) + + +def timestep_embedding(timesteps, dim, max_period=10000): + """ + Create sinusoidal timestep embeddings. + + :param timesteps: a 1-D Tensor of N indices, one per batch element. + These may be fractional. + :param dim: the dimension of the output. + :param max_period: controls the minimum frequency of the embeddings. + :return: an [N x dim] Tensor of positional embeddings. + """ + half = dim // 2 + freqs = th.exp( + -math.log(max_period) * th.arange(start=0, end=half, dtype=th.float32) / half + ).to(device=timesteps.device) + args = timesteps[:, None].float() * freqs[None] + embedding = th.cat([th.cos(args), th.sin(args)], dim=-1) + if dim % 2: + embedding = th.cat([embedding, th.zeros_like(embedding[:, :1])], dim=-1) + return embedding + + +def checkpoint(func, inputs, params, flag): + """ + Evaluate a function without caching intermediate activations, allowing for + reduced memory at the expense of extra compute in the backward pass. + + :param func: the function to evaluate. + :param inputs: the argument sequence to pass to `func`. + :param params: a sequence of parameters `func` depends on but does not + explicitly take as arguments. + :param flag: if False, disable gradient checkpointing. + """ + if flag: + args = tuple(inputs) + tuple(params) + return CheckpointFunction.apply(func, len(inputs), *args) + else: + return func(*inputs) + + +class CheckpointFunction(th.autograd.Function): + @staticmethod + def forward(ctx, run_function, length, *args): + ctx.run_function = run_function + ctx.input_tensors = list(args[:length]) + ctx.input_params = list(args[length:]) + with th.no_grad(): + output_tensors = ctx.run_function(*ctx.input_tensors) + return output_tensors + + @staticmethod + def backward(ctx, *output_grads): + ctx.input_tensors = [x.detach().requires_grad_(True) for x in ctx.input_tensors] + with th.enable_grad(): + # Fixes a bug where the first op in run_function modifies the + # Tensor storage in place, which is not allowed for detach()'d + # Tensors. + shallow_copies = [x.view_as(x) for x in ctx.input_tensors] + output_tensors = ctx.run_function(*shallow_copies) + input_grads = th.autograd.grad( + output_tensors, + ctx.input_tensors + ctx.input_params, + output_grads, + allow_unused=True, + ) + del ctx.input_tensors + del ctx.input_params + del output_tensors + return (None, None) + input_grads diff --git a/guided_diffusion/script_util.py b/guided_diffusion/script_util.py new file mode 100644 index 0000000..6df6933 --- /dev/null +++ b/guided_diffusion/script_util.py @@ -0,0 +1,453 @@ +import argparse +import inspect + +#from . import gaussian_diffusion as gd +#from .respace import SpacedDiffusion, space_timesteps +from .unet import SuperResModel, UNetModel, EncoderUNetModel + +NUM_CLASSES = 1000 + + +def diffusion_defaults(): + """ + Defaults for image and classifier training. + """ + return dict( + learn_sigma=False, + diffusion_steps=1000, + noise_schedule="linear", + timestep_respacing="", + use_kl=False, + predict_xstart=False, + rescale_timesteps=False, + rescale_learned_sigmas=False, + ) + + +def classifier_defaults(): + """ + Defaults for classifier models. + """ + return dict( + image_size=64, + classifier_use_fp16=False, + classifier_width=128, + classifier_depth=2, + classifier_attention_resolutions="32,16,8", # 16 + classifier_use_scale_shift_norm=True, # False + classifier_resblock_updown=True, # False + classifier_pool="attention", + ) + + +def model_and_diffusion_defaults(): + """ + Defaults for image training. + """ + res = dict( + image_size=64, + num_channels=128, + num_res_blocks=2, + num_heads=4, + num_heads_upsample=-1, + num_head_channels=-1, + attention_resolutions="16,8", + channel_mult="", + dropout=0.0, + class_cond=False, + use_checkpoint=False, + use_scale_shift_norm=True, + resblock_updown=False, + use_fp16=False, + use_new_attention_order=False, + ) + res.update(diffusion_defaults()) + return res + + +def classifier_and_diffusion_defaults(): + res = classifier_defaults() + res.update(diffusion_defaults()) + return res + + +def create_model_and_diffusion( + image_size, + class_cond, + learn_sigma, + num_channels, + num_res_blocks, + channel_mult, + num_heads, + num_head_channels, + num_heads_upsample, + attention_resolutions, + dropout, + diffusion_steps, + noise_schedule, + timestep_respacing, + use_kl, + predict_xstart, + rescale_timesteps, + rescale_learned_sigmas, + use_checkpoint, + use_scale_shift_norm, + resblock_updown, + use_fp16, + use_new_attention_order, +): + model = create_model( + image_size, + num_channels, + num_res_blocks, + channel_mult=channel_mult, + learn_sigma=learn_sigma, + class_cond=class_cond, + use_checkpoint=use_checkpoint, + attention_resolutions=attention_resolutions, + num_heads=num_heads, + num_head_channels=num_head_channels, + num_heads_upsample=num_heads_upsample, + use_scale_shift_norm=use_scale_shift_norm, + dropout=dropout, + resblock_updown=resblock_updown, + use_fp16=use_fp16, + use_new_attention_order=use_new_attention_order, + ) + diffusion = create_gaussian_diffusion( + steps=diffusion_steps, + learn_sigma=learn_sigma, + noise_schedule=noise_schedule, + use_kl=use_kl, + predict_xstart=predict_xstart, + rescale_timesteps=rescale_timesteps, + rescale_learned_sigmas=rescale_learned_sigmas, + timestep_respacing=timestep_respacing, + ) + return model, diffusion + + +def create_model( + image_size, + num_channels, + num_res_blocks, + channel_mult="", + learn_sigma=False, + class_cond=False, + use_checkpoint=False, + attention_resolutions="16", + num_heads=1, + num_head_channels=-1, + num_heads_upsample=-1, + use_scale_shift_norm=False, + dropout=0, + resblock_updown=False, + use_fp16=False, + use_new_attention_order=False, + **kwargs +): + if channel_mult == "": + if image_size == 512: + channel_mult = (0.5, 1, 1, 2, 2, 4, 4) + elif image_size == 256: + channel_mult = (1, 1, 2, 2, 4, 4) + elif image_size == 128: + channel_mult = (1, 1, 2, 3, 4) + elif image_size == 64: + channel_mult = (1, 2, 3, 4) + else: + raise ValueError(f"unsupported image size: {image_size}") + else: + channel_mult = tuple(int(ch_mult) for ch_mult in channel_mult.split(",")) + + attention_ds = [] + for res in attention_resolutions.split(","): + attention_ds.append(image_size // int(res)) + + return UNetModel( + image_size=image_size, + in_channels=3, + model_channels=num_channels, + out_channels=(3 if not learn_sigma else 6), + num_res_blocks=num_res_blocks, + attention_resolutions=tuple(attention_ds), + dropout=dropout, + channel_mult=channel_mult, + num_classes=(NUM_CLASSES if class_cond else None), + use_checkpoint=use_checkpoint, + use_fp16=use_fp16, + num_heads=num_heads, + num_head_channels=num_head_channels, + num_heads_upsample=num_heads_upsample, + use_scale_shift_norm=use_scale_shift_norm, + resblock_updown=resblock_updown, + use_new_attention_order=use_new_attention_order, + ) + + +def create_classifier_and_diffusion( + image_size, + classifier_use_fp16, + classifier_width, + classifier_depth, + classifier_attention_resolutions, + classifier_use_scale_shift_norm, + classifier_resblock_updown, + classifier_pool, + learn_sigma, + diffusion_steps, + noise_schedule, + timestep_respacing, + use_kl, + predict_xstart, + rescale_timesteps, + rescale_learned_sigmas, +): + classifier = create_classifier( + image_size, + classifier_use_fp16, + classifier_width, + classifier_depth, + classifier_attention_resolutions, + classifier_use_scale_shift_norm, + classifier_resblock_updown, + classifier_pool, + ) + diffusion = create_gaussian_diffusion( + steps=diffusion_steps, + learn_sigma=learn_sigma, + noise_schedule=noise_schedule, + use_kl=use_kl, + predict_xstart=predict_xstart, + rescale_timesteps=rescale_timesteps, + rescale_learned_sigmas=rescale_learned_sigmas, + timestep_respacing=timestep_respacing, + ) + return classifier, diffusion + + +def create_classifier( + image_size, + classifier_use_fp16, + classifier_width, + classifier_depth, + classifier_attention_resolutions, + classifier_use_scale_shift_norm, + classifier_resblock_updown, + classifier_pool, +): + if image_size == 512: + channel_mult = (0.5, 1, 1, 2, 2, 4, 4) + elif image_size == 256: + channel_mult = (1, 1, 2, 2, 4, 4) + elif image_size == 128: + channel_mult = (1, 1, 2, 3, 4) + elif image_size == 64: + channel_mult = (1, 2, 3, 4) + else: + raise ValueError(f"unsupported image size: {image_size}") + + attention_ds = [] + for res in classifier_attention_resolutions.split(","): + attention_ds.append(image_size // int(res)) + + return EncoderUNetModel( + image_size=image_size, + in_channels=3, + model_channels=classifier_width, + out_channels=1000, + num_res_blocks=classifier_depth, + attention_resolutions=tuple(attention_ds), + channel_mult=channel_mult, + use_fp16=classifier_use_fp16, + num_head_channels=64, + use_scale_shift_norm=classifier_use_scale_shift_norm, + resblock_updown=classifier_resblock_updown, + pool=classifier_pool, + ) + + +def sr_model_and_diffusion_defaults(): + res = model_and_diffusion_defaults() + res["large_size"] = 256 + res["small_size"] = 64 + arg_names = inspect.getfullargspec(sr_create_model_and_diffusion)[0] + for k in res.copy().keys(): + if k not in arg_names: + del res[k] + return res + + +def sr_create_model_and_diffusion( + large_size, + small_size, + class_cond, + learn_sigma, + num_channels, + num_res_blocks, + num_heads, + num_head_channels, + num_heads_upsample, + attention_resolutions, + dropout, + diffusion_steps, + noise_schedule, + timestep_respacing, + use_kl, + predict_xstart, + rescale_timesteps, + rescale_learned_sigmas, + use_checkpoint, + use_scale_shift_norm, + resblock_updown, + use_fp16, +): + model = sr_create_model( + large_size, + small_size, + num_channels, + num_res_blocks, + learn_sigma=learn_sigma, + class_cond=class_cond, + use_checkpoint=use_checkpoint, + attention_resolutions=attention_resolutions, + num_heads=num_heads, + num_head_channels=num_head_channels, + num_heads_upsample=num_heads_upsample, + use_scale_shift_norm=use_scale_shift_norm, + dropout=dropout, + resblock_updown=resblock_updown, + use_fp16=use_fp16, + ) + diffusion = create_gaussian_diffusion( + steps=diffusion_steps, + learn_sigma=learn_sigma, + noise_schedule=noise_schedule, + use_kl=use_kl, + predict_xstart=predict_xstart, + rescale_timesteps=rescale_timesteps, + rescale_learned_sigmas=rescale_learned_sigmas, + timestep_respacing=timestep_respacing, + ) + return model, diffusion + + +def sr_create_model( + large_size, + small_size, + num_channels, + num_res_blocks, + learn_sigma, + class_cond, + use_checkpoint, + attention_resolutions, + num_heads, + num_head_channels, + num_heads_upsample, + use_scale_shift_norm, + dropout, + resblock_updown, + use_fp16, +): + _ = small_size # hack to prevent unused variable + + if large_size == 512: + channel_mult = (1, 1, 2, 2, 4, 4) + elif large_size == 256: + channel_mult = (1, 1, 2, 2, 4, 4) + elif large_size == 64: + channel_mult = (1, 2, 3, 4) + else: + raise ValueError(f"unsupported large size: {large_size}") + + attention_ds = [] + for res in attention_resolutions.split(","): + attention_ds.append(large_size // int(res)) + + return SuperResModel( + image_size=large_size, + in_channels=3, + model_channels=num_channels, + out_channels=(3 if not learn_sigma else 6), + num_res_blocks=num_res_blocks, + attention_resolutions=tuple(attention_ds), + dropout=dropout, + channel_mult=channel_mult, + num_classes=(NUM_CLASSES if class_cond else None), + use_checkpoint=use_checkpoint, + num_heads=num_heads, + num_head_channels=num_head_channels, + num_heads_upsample=num_heads_upsample, + use_scale_shift_norm=use_scale_shift_norm, + resblock_updown=resblock_updown, + use_fp16=use_fp16, + ) + + +def create_gaussian_diffusion( + *, + steps=1000, + learn_sigma=False, + sigma_small=False, + noise_schedule="linear", + use_kl=False, + predict_xstart=False, + rescale_timesteps=False, + rescale_learned_sigmas=False, + timestep_respacing="", +): + betas = gd.get_named_beta_schedule(noise_schedule, steps) + if use_kl: + loss_type = gd.LossType.RESCALED_KL + elif rescale_learned_sigmas: + loss_type = gd.LossType.RESCALED_MSE + else: + loss_type = gd.LossType.MSE + if not timestep_respacing: + timestep_respacing = [steps] + return SpacedDiffusion( + use_timesteps=space_timesteps(steps, timestep_respacing), + betas=betas, + model_mean_type=( + gd.ModelMeanType.EPSILON if not predict_xstart else gd.ModelMeanType.START_X + ), + model_var_type=( + ( + gd.ModelVarType.FIXED_LARGE + if not sigma_small + else gd.ModelVarType.FIXED_SMALL + ) + if not learn_sigma + else gd.ModelVarType.LEARNED_RANGE + ), + loss_type=loss_type, + rescale_timesteps=rescale_timesteps, + ) + + +def add_dict_to_argparser(parser, default_dict): + for k, v in default_dict.items(): + v_type = type(v) + if v is None: + v_type = str + elif isinstance(v, bool): + v_type = str2bool + parser.add_argument(f"--{k}", default=v, type=v_type) + + +def args_to_dict(args, keys): + return {k: getattr(args, k) for k in keys} + + +def str2bool(v): + """ + https://stackoverflow.com/questions/15008758/parsing-boolean-values-with-argparse + """ + if isinstance(v, bool): + return v + if v.lower() in ("yes", "true", "t", "y", "1"): + return True + elif v.lower() in ("no", "false", "f", "n", "0"): + return False + else: + raise argparse.ArgumentTypeError("boolean value expected") diff --git a/guided_diffusion/unet.py b/guided_diffusion/unet.py new file mode 100644 index 0000000..e80f050 --- /dev/null +++ b/guided_diffusion/unet.py @@ -0,0 +1,895 @@ +from abc import abstractmethod + +import math + +import numpy as np +import torch as th +import torch.nn as nn +import torch.nn.functional as F + +from .fp16_util import convert_module_to_f16, convert_module_to_f32 +from .nn import ( + checkpoint, + conv_nd, + linear, + avg_pool_nd, + zero_module, + normalization, + timestep_embedding, +) + + +class AttentionPool2d(nn.Module): + """ + Adapted from CLIP: https://github.com/openai/CLIP/blob/main/clip/model.py + """ + + def __init__( + self, + spacial_dim: int, + embed_dim: int, + num_heads_channels: int, + output_dim: int = None, + ): + super().__init__() + self.positional_embedding = nn.Parameter( + th.randn(embed_dim, spacial_dim ** 2 + 1) / embed_dim ** 0.5 + ) + self.qkv_proj = conv_nd(1, embed_dim, 3 * embed_dim, 1) + self.c_proj = conv_nd(1, embed_dim, output_dim or embed_dim, 1) + self.num_heads = embed_dim // num_heads_channels + self.attention = QKVAttention(self.num_heads) + + def forward(self, x): + b, c, *_spatial = x.shape + x = x.reshape(b, c, -1) # NC(HW) + x = th.cat([x.mean(dim=-1, keepdim=True), x], dim=-1) # NC(HW+1) + x = x + self.positional_embedding[None, :, :].to(x.dtype) # NC(HW+1) + x = self.qkv_proj(x) + x = self.attention(x) + x = self.c_proj(x) + return x[:, :, 0] + + +class TimestepBlock(nn.Module): + """ + Any module where forward() takes timestep embeddings as a second argument. + """ + + @abstractmethod + def forward(self, x, emb): + """ + Apply the module to `x` given `emb` timestep embeddings. + """ + + +class TimestepEmbedSequential(nn.Sequential, TimestepBlock): + """ + A sequential module that passes timestep embeddings to the children that + support it as an extra input. + """ + + def forward(self, x, emb): + for layer in self: + if isinstance(layer, TimestepBlock): + x = layer(x, emb) + else: + x = layer(x) + return x + + +class Upsample(nn.Module): + """ + An upsampling layer with an optional convolution. + + :param channels: channels in the inputs and outputs. + :param use_conv: a bool determining if a convolution is applied. + :param dims: determines if the signal is 1D, 2D, or 3D. If 3D, then + upsampling occurs in the inner-two dimensions. + """ + + def __init__(self, channels, use_conv, dims=2, out_channels=None): + super().__init__() + self.channels = channels + self.out_channels = out_channels or channels + self.use_conv = use_conv + self.dims = dims + if use_conv: + self.conv = conv_nd(dims, self.channels, self.out_channels, 3, padding=1) + + def forward(self, x): + assert x.shape[1] == self.channels + if self.dims == 3: + x = F.interpolate( + x, (x.shape[2], x.shape[3] * 2, x.shape[4] * 2), mode="nearest" + ) + else: + x = F.interpolate(x, scale_factor=2, mode="nearest") + if self.use_conv: + x = self.conv(x) + return x + + +class Downsample(nn.Module): + """ + A downsampling layer with an optional convolution. + + :param channels: channels in the inputs and outputs. + :param use_conv: a bool determining if a convolution is applied. + :param dims: determines if the signal is 1D, 2D, or 3D. If 3D, then + downsampling occurs in the inner-two dimensions. + """ + + def __init__(self, channels, use_conv, dims=2, out_channels=None): + super().__init__() + self.channels = channels + self.out_channels = out_channels or channels + self.use_conv = use_conv + self.dims = dims + stride = 2 if dims != 3 else (1, 2, 2) + if use_conv: + self.op = conv_nd( + dims, self.channels, self.out_channels, 3, stride=stride, padding=1 + ) + else: + assert self.channels == self.out_channels + self.op = avg_pool_nd(dims, kernel_size=stride, stride=stride) + + def forward(self, x): + assert x.shape[1] == self.channels + return self.op(x) + + +class ResBlock(TimestepBlock): + """ + A residual block that can optionally change the number of channels. + + :param channels: the number of input channels. + :param emb_channels: the number of timestep embedding channels. + :param dropout: the rate of dropout. + :param out_channels: if specified, the number of out channels. + :param use_conv: if True and out_channels is specified, use a spatial + convolution instead of a smaller 1x1 convolution to change the + channels in the skip connection. + :param dims: determines if the signal is 1D, 2D, or 3D. + :param use_checkpoint: if True, use gradient checkpointing on this module. + :param up: if True, use this block for upsampling. + :param down: if True, use this block for downsampling. + """ + + def __init__( + self, + channels, + emb_channels, + dropout, + out_channels=None, + use_conv=False, + use_scale_shift_norm=False, + dims=2, + use_checkpoint=False, + up=False, + down=False, + ): + super().__init__() + self.channels = channels + self.emb_channels = emb_channels + self.dropout = dropout + self.out_channels = out_channels or channels + self.use_conv = use_conv + self.use_checkpoint = use_checkpoint + self.use_scale_shift_norm = use_scale_shift_norm + + self.in_layers = nn.Sequential( + normalization(channels), + nn.SiLU(), + conv_nd(dims, channels, self.out_channels, 3, padding=1), + ) + + self.updown = up or down + + if up: + self.h_upd = Upsample(channels, False, dims) + self.x_upd = Upsample(channels, False, dims) + elif down: + self.h_upd = Downsample(channels, False, dims) + self.x_upd = Downsample(channels, False, dims) + else: + self.h_upd = self.x_upd = nn.Identity() + + self.emb_layers = nn.Sequential( + nn.SiLU(), + linear( + emb_channels, + 2 * self.out_channels if use_scale_shift_norm else self.out_channels, + ), + ) + self.out_layers = nn.Sequential( + normalization(self.out_channels), + nn.SiLU(), + nn.Dropout(p=dropout), + zero_module( + conv_nd(dims, self.out_channels, self.out_channels, 3, padding=1) + ), + ) + + if self.out_channels == channels: + self.skip_connection = nn.Identity() + elif use_conv: + self.skip_connection = conv_nd( + dims, channels, self.out_channels, 3, padding=1 + ) + else: + self.skip_connection = conv_nd(dims, channels, self.out_channels, 1) + + def forward(self, x, emb): + """ + Apply the block to a Tensor, conditioned on a timestep embedding. + + :param x: an [N x C x ...] Tensor of features. + :param emb: an [N x emb_channels] Tensor of timestep embeddings. + :return: an [N x C x ...] Tensor of outputs. + """ + return checkpoint( + self._forward, (x, emb), self.parameters(), self.use_checkpoint + ) + + def _forward(self, x, emb): + if self.updown: + in_rest, in_conv = self.in_layers[:-1], self.in_layers[-1] + h = in_rest(x) + h = self.h_upd(h) + x = self.x_upd(x) + h = in_conv(h) + else: + h = self.in_layers(x) + emb_out = self.emb_layers(emb).type(h.dtype) + while len(emb_out.shape) < len(h.shape): + emb_out = emb_out[..., None] + if self.use_scale_shift_norm: + out_norm, out_rest = self.out_layers[0], self.out_layers[1:] + scale, shift = th.chunk(emb_out, 2, dim=1) + h = out_norm(h) * (1 + scale) + shift + h = out_rest(h) + else: + h = h + emb_out + h = self.out_layers(h) + return self.skip_connection(x) + h + + +class AttentionBlock(nn.Module): + """ + An attention block that allows spatial positions to attend to each other. + + Originally ported from here, but adapted to the N-d case. + https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/models/unet.py#L66. + """ + + def __init__( + self, + channels, + num_heads=1, + num_head_channels=-1, + use_checkpoint=False, + use_new_attention_order=False, + ): + super().__init__() + self.channels = channels + if num_head_channels == -1: + self.num_heads = num_heads + else: + assert ( + channels % num_head_channels == 0 + ), f"q,k,v channels {channels} is not divisible by num_head_channels {num_head_channels}" + self.num_heads = channels // num_head_channels + self.use_checkpoint = use_checkpoint + self.norm = normalization(channels) + self.qkv = conv_nd(1, channels, channels * 3, 1) + if use_new_attention_order: + # split qkv before split heads + self.attention = QKVAttention(self.num_heads) + else: + # split heads before split qkv + self.attention = QKVAttentionLegacy(self.num_heads) + + self.proj_out = zero_module(conv_nd(1, channels, channels, 1)) + + def forward(self, x): + return checkpoint(self._forward, (x,), self.parameters(), True) + + def _forward(self, x): + b, c, *spatial = x.shape + x = x.reshape(b, c, -1) + qkv = self.qkv(self.norm(x)) + h = self.attention(qkv) + h = self.proj_out(h) + return (x + h).reshape(b, c, *spatial) + + +def count_flops_attn(model, _x, y): + """ + A counter for the `thop` package to count the operations in an + attention operation. + Meant to be used like: + macs, params = thop.profile( + model, + inputs=(inputs, timestamps), + custom_ops={QKVAttention: QKVAttention.count_flops}, + ) + """ + b, c, *spatial = y[0].shape + num_spatial = int(np.prod(spatial)) + # We perform two matmuls with the same number of ops. + # The first computes the weight matrix, the second computes + # the combination of the value vectors. + matmul_ops = 2 * b * (num_spatial ** 2) * c + model.total_ops += th.DoubleTensor([matmul_ops]) + + +class QKVAttentionLegacy(nn.Module): + """ + A module which performs QKV attention. Matches legacy QKVAttention + input/ouput heads shaping + """ + + def __init__(self, n_heads): + super().__init__() + self.n_heads = n_heads + + def forward(self, qkv): + """ + Apply QKV attention. + + :param qkv: an [N x (H * 3 * C) x T] tensor of Qs, Ks, and Vs. + :return: an [N x (H * C) x T] tensor after attention. + """ + bs, width, length = qkv.shape + assert width % (3 * self.n_heads) == 0 + ch = width // (3 * self.n_heads) + q, k, v = qkv.reshape(bs * self.n_heads, ch * 3, length).split(ch, dim=1) + scale = 1 / math.sqrt(math.sqrt(ch)) + weight = th.einsum( + "bct,bcs->bts", q * scale, k * scale + ) # More stable with f16 than dividing afterwards + weight = th.softmax(weight.float(), dim=-1).type(weight.dtype) + a = th.einsum("bts,bcs->bct", weight, v) + return a.reshape(bs, -1, length) + + @staticmethod + def count_flops(model, _x, y): + return count_flops_attn(model, _x, y) + + +class QKVAttention(nn.Module): + """ + A module which performs QKV attention and splits in a different order. + """ + + def __init__(self, n_heads): + super().__init__() + self.n_heads = n_heads + + def forward(self, qkv): + """ + Apply QKV attention. + + :param qkv: an [N x (3 * H * C) x T] tensor of Qs, Ks, and Vs. + :return: an [N x (H * C) x T] tensor after attention. + """ + bs, width, length = qkv.shape + assert width % (3 * self.n_heads) == 0 + ch = width // (3 * self.n_heads) + q, k, v = qkv.chunk(3, dim=1) + scale = 1 / math.sqrt(math.sqrt(ch)) + weight = th.einsum( + "bct,bcs->bts", + (q * scale).view(bs * self.n_heads, ch, length), + (k * scale).view(bs * self.n_heads, ch, length), + ) # More stable with f16 than dividing afterwards + weight = th.softmax(weight.float(), dim=-1).type(weight.dtype) + a = th.einsum("bts,bcs->bct", weight, v.reshape(bs * self.n_heads, ch, length)) + return a.reshape(bs, -1, length) + + @staticmethod + def count_flops(model, _x, y): + return count_flops_attn(model, _x, y) + + +class UNetModel(nn.Module): + """ + The full UNet model with attention and timestep embedding. + + :param in_channels: channels in the input Tensor. + :param model_channels: base channel count for the model. + :param out_channels: channels in the output Tensor. + :param num_res_blocks: number of residual blocks per downsample. + :param attention_resolutions: a collection of downsample rates at which + attention will take place. May be a set, list, or tuple. + For example, if this contains 4, then at 4x downsampling, attention + will be used. + :param dropout: the dropout probability. + :param channel_mult: channel multiplier for each level of the UNet. + :param conv_resample: if True, use learned convolutions for upsampling and + downsampling. + :param dims: determines if the signal is 1D, 2D, or 3D. + :param num_classes: if specified (as an int), then this model will be + class-conditional with `num_classes` classes. + :param use_checkpoint: use gradient checkpointing to reduce memory usage. + :param num_heads: the number of attention heads in each attention layer. + :param num_heads_channels: if specified, ignore num_heads and instead use + a fixed channel width per attention head. + :param num_heads_upsample: works with num_heads to set a different number + of heads for upsampling. Deprecated. + :param use_scale_shift_norm: use a FiLM-like conditioning mechanism. + :param resblock_updown: use residual blocks for up/downsampling. + :param use_new_attention_order: use a different attention pattern for potentially + increased efficiency. + """ + + def __init__( + self, + image_size, + in_channels, + model_channels, + out_channels, + num_res_blocks, + attention_resolutions, + dropout=0, + channel_mult=(1, 2, 4, 8), + conv_resample=True, + dims=2, + num_classes=None, + use_checkpoint=False, + use_fp16=False, + num_heads=1, + num_head_channels=-1, + num_heads_upsample=-1, + use_scale_shift_norm=False, + resblock_updown=False, + use_new_attention_order=False, + **kwargs + ): + super().__init__() + + if num_heads_upsample == -1: + num_heads_upsample = num_heads + + self.image_size = image_size + self.in_channels = in_channels + self.model_channels = model_channels + self.out_channels = out_channels + self.num_res_blocks = num_res_blocks + self.attention_resolutions = attention_resolutions + self.dropout = dropout + self.channel_mult = channel_mult + self.conv_resample = conv_resample + self.num_classes = num_classes + self.use_checkpoint = use_checkpoint + self.dtype = th.float16 if use_fp16 else th.float32 + self.num_heads = num_heads + self.num_head_channels = num_head_channels + self.num_heads_upsample = num_heads_upsample + + time_embed_dim = model_channels * 4 + self.time_embed = nn.Sequential( + linear(model_channels, time_embed_dim), + nn.SiLU(), + linear(time_embed_dim, time_embed_dim), + ) + + if self.num_classes is not None: + self.label_emb = nn.Embedding(num_classes, time_embed_dim) + + ch = input_ch = int(channel_mult[0] * model_channels) + self.input_blocks = nn.ModuleList( + [TimestepEmbedSequential(conv_nd(dims, in_channels, ch, 3, padding=1))] + ) + self._feature_size = ch + input_block_chans = [ch] + ds = 1 + for level, mult in enumerate(channel_mult): + for _ in range(num_res_blocks): + layers = [ + ResBlock( + ch, + time_embed_dim, + dropout, + out_channels=int(mult * model_channels), + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + ) + ] + ch = int(mult * model_channels) + if ds in attention_resolutions: + layers.append( + AttentionBlock( + ch, + use_checkpoint=use_checkpoint, + num_heads=num_heads, + num_head_channels=num_head_channels, + use_new_attention_order=use_new_attention_order, + ) + ) + self.input_blocks.append(TimestepEmbedSequential(*layers)) + self._feature_size += ch + input_block_chans.append(ch) + if level != len(channel_mult) - 1: + out_ch = ch + self.input_blocks.append( + TimestepEmbedSequential( + ResBlock( + ch, + time_embed_dim, + dropout, + out_channels=out_ch, + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + down=True, + ) + if resblock_updown + else Downsample( + ch, conv_resample, dims=dims, out_channels=out_ch + ) + ) + ) + ch = out_ch + input_block_chans.append(ch) + ds *= 2 + self._feature_size += ch + + self.middle_block = TimestepEmbedSequential( + ResBlock( + ch, + time_embed_dim, + dropout, + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + ), + AttentionBlock( + ch, + use_checkpoint=use_checkpoint, + num_heads=num_heads, + num_head_channels=num_head_channels, + use_new_attention_order=use_new_attention_order, + ), + ResBlock( + ch, + time_embed_dim, + dropout, + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + ), + ) + self._feature_size += ch + + self.output_blocks = nn.ModuleList([]) + for level, mult in list(enumerate(channel_mult))[::-1]: + for i in range(num_res_blocks + 1): + ich = input_block_chans.pop() + layers = [ + ResBlock( + ch + ich, + time_embed_dim, + dropout, + out_channels=int(model_channels * mult), + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + ) + ] + ch = int(model_channels * mult) + if ds in attention_resolutions: + layers.append( + AttentionBlock( + ch, + use_checkpoint=use_checkpoint, + num_heads=num_heads_upsample, + num_head_channels=num_head_channels, + use_new_attention_order=use_new_attention_order, + ) + ) + if level and i == num_res_blocks: + out_ch = ch + layers.append( + ResBlock( + ch, + time_embed_dim, + dropout, + out_channels=out_ch, + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + up=True, + ) + if resblock_updown + else Upsample(ch, conv_resample, dims=dims, out_channels=out_ch) + ) + ds //= 2 + self.output_blocks.append(TimestepEmbedSequential(*layers)) + self._feature_size += ch + + self.out = nn.Sequential( + normalization(ch), + nn.SiLU(), + zero_module(conv_nd(dims, input_ch, out_channels, 3, padding=1)), + ) + + def convert_to_fp16(self): + """ + Convert the torso of the model to float16. + """ + self.input_blocks.apply(convert_module_to_f16) + self.middle_block.apply(convert_module_to_f16) + self.output_blocks.apply(convert_module_to_f16) + + def convert_to_fp32(self): + """ + Convert the torso of the model to float32. + """ + self.input_blocks.apply(convert_module_to_f32) + self.middle_block.apply(convert_module_to_f32) + self.output_blocks.apply(convert_module_to_f32) + + def forward(self, x, timesteps, y=None): + """ + Apply the model to an input batch. + + :param x: an [N x C x ...] Tensor of inputs. + :param timesteps: a 1-D batch of timesteps. + :param y: an [N] Tensor of labels, if class-conditional. + :return: an [N x C x ...] Tensor of outputs. + """ + assert (y is not None) == ( + self.num_classes is not None + ), "must specify y if and only if the model is class-conditional" + + hs = [] + emb = self.time_embed(timestep_embedding(timesteps, self.model_channels)) + + if self.num_classes is not None: + assert y.shape == (x.shape[0],) + emb = emb + self.label_emb(y) + + h = x.type(self.dtype) + for module in self.input_blocks: + h = module(h, emb) + hs.append(h) + h = self.middle_block(h, emb) + for module in self.output_blocks: + h = th.cat([h, hs.pop()], dim=1) + h = module(h, emb) + h = h.type(x.dtype) + return self.out(h) + + +class SuperResModel(UNetModel): + """ + A UNetModel that performs super-resolution. + + Expects an extra kwarg `low_res` to condition on a low-resolution image. + """ + + def __init__(self, image_size, in_channels, *args, **kwargs): + super().__init__(image_size, in_channels * 2, *args, **kwargs) + + def forward(self, x, timesteps, low_res=None, **kwargs): + _, _, new_height, new_width = x.shape + upsampled = F.interpolate(low_res, (new_height, new_width), mode="bilinear") + x = th.cat([x, upsampled], dim=1) + return super().forward(x, timesteps, **kwargs) + + +class EncoderUNetModel(nn.Module): + """ + The half UNet model with attention and timestep embedding. + + For usage, see UNet. + """ + + def __init__( + self, + image_size, + in_channels, + model_channels, + out_channels, + num_res_blocks, + attention_resolutions, + dropout=0, + channel_mult=(1, 2, 4, 8), + conv_resample=True, + dims=2, + use_checkpoint=False, + use_fp16=False, + num_heads=1, + num_head_channels=-1, + num_heads_upsample=-1, + use_scale_shift_norm=False, + resblock_updown=False, + use_new_attention_order=False, + pool="adaptive", + ): + super().__init__() + + if num_heads_upsample == -1: + num_heads_upsample = num_heads + + self.in_channels = in_channels + self.model_channels = model_channels + self.out_channels = out_channels + self.num_res_blocks = num_res_blocks + self.attention_resolutions = attention_resolutions + self.dropout = dropout + self.channel_mult = channel_mult + self.conv_resample = conv_resample + self.use_checkpoint = use_checkpoint + self.dtype = th.float16 if use_fp16 else th.float32 + self.num_heads = num_heads + self.num_head_channels = num_head_channels + self.num_heads_upsample = num_heads_upsample + + time_embed_dim = model_channels * 4 + self.time_embed = nn.Sequential( + linear(model_channels, time_embed_dim), + nn.SiLU(), + linear(time_embed_dim, time_embed_dim), + ) + + ch = int(channel_mult[0] * model_channels) + self.input_blocks = nn.ModuleList( + [TimestepEmbedSequential(conv_nd(dims, in_channels, ch, 3, padding=1))] + ) + self._feature_size = ch + input_block_chans = [ch] + ds = 1 + for level, mult in enumerate(channel_mult): + for _ in range(num_res_blocks): + layers = [ + ResBlock( + ch, + time_embed_dim, + dropout, + out_channels=int(mult * model_channels), + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + ) + ] + ch = int(mult * model_channels) + if ds in attention_resolutions: + layers.append( + AttentionBlock( + ch, + use_checkpoint=use_checkpoint, + num_heads=num_heads, + num_head_channels=num_head_channels, + use_new_attention_order=use_new_attention_order, + ) + ) + self.input_blocks.append(TimestepEmbedSequential(*layers)) + self._feature_size += ch + input_block_chans.append(ch) + if level != len(channel_mult) - 1: + out_ch = ch + self.input_blocks.append( + TimestepEmbedSequential( + ResBlock( + ch, + time_embed_dim, + dropout, + out_channels=out_ch, + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + down=True, + ) + if resblock_updown + else Downsample( + ch, conv_resample, dims=dims, out_channels=out_ch + ) + ) + ) + ch = out_ch + input_block_chans.append(ch) + ds *= 2 + self._feature_size += ch + + self.middle_block = TimestepEmbedSequential( + ResBlock( + ch, + time_embed_dim, + dropout, + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + ), + AttentionBlock( + ch, + use_checkpoint=use_checkpoint, + num_heads=num_heads, + num_head_channels=num_head_channels, + use_new_attention_order=use_new_attention_order, + ), + ResBlock( + ch, + time_embed_dim, + dropout, + dims=dims, + use_checkpoint=use_checkpoint, + use_scale_shift_norm=use_scale_shift_norm, + ), + ) + self._feature_size += ch + self.pool = pool + if pool == "adaptive": + self.out = nn.Sequential( + normalization(ch), + nn.SiLU(), + nn.AdaptiveAvgPool2d((1, 1)), + zero_module(conv_nd(dims, ch, out_channels, 1)), + nn.Flatten(), + ) + elif pool == "attention": + assert num_head_channels != -1 + self.out = nn.Sequential( + normalization(ch), + nn.SiLU(), + AttentionPool2d( + (image_size // ds), ch, num_head_channels, out_channels + ), + ) + elif pool == "spatial": + self.out = nn.Sequential( + nn.Linear(self._feature_size, 2048), + nn.ReLU(), + nn.Linear(2048, self.out_channels), + ) + elif pool == "spatial_v2": + self.out = nn.Sequential( + nn.Linear(self._feature_size, 2048), + normalization(2048), + nn.SiLU(), + nn.Linear(2048, self.out_channels), + ) + else: + raise NotImplementedError(f"Unexpected {pool} pooling") + + def convert_to_fp16(self): + """ + Convert the torso of the model to float16. + """ + self.input_blocks.apply(convert_module_to_f16) + self.middle_block.apply(convert_module_to_f16) + + def convert_to_fp32(self): + """ + Convert the torso of the model to float32. + """ + self.input_blocks.apply(convert_module_to_f32) + self.middle_block.apply(convert_module_to_f32) + + def forward(self, x, timesteps): + """ + Apply the model to an input batch. + + :param x: an [N x C x ...] Tensor of inputs. + :param timesteps: a 1-D batch of timesteps. + :return: an [N x K] Tensor of outputs. + """ + emb = self.time_embed(timestep_embedding(timesteps, self.model_channels)) + + results = [] + h = x.type(self.dtype) + for module in self.input_blocks: + h = module(h, emb) + if self.pool.startswith("spatial"): + results.append(h.type(x.dtype).mean(dim=(2, 3))) + h = self.middle_block(h, emb) + if self.pool.startswith("spatial"): + results.append(h.type(x.dtype).mean(dim=(2, 3))) + h = th.cat(results, axis=-1) + return self.out(h) + else: + h = h.type(x.dtype) + return self.out(h) diff --git a/main.py b/main.py new file mode 100644 index 0000000..de0a036 --- /dev/null +++ b/main.py @@ -0,0 +1,175 @@ +import argparse +import traceback +import shutil +import logging +import yaml +import sys +import os +import torch +import numpy as np +import torch.utils.tensorboard as tb + +from runners.diffusion import Diffusion + +torch.set_printoptions(sci_mode=False) + + +def parse_args_and_config(): + parser = argparse.ArgumentParser(description=globals()["__doc__"]) + + parser.add_argument( + "--config", type=str, required=True, help="Path to the config file" + ) + parser.add_argument("--seed", type=int, default=1234, help="Random seed") + parser.add_argument( + "--exp", type=str, default="exp", help="Path for saving running related data." + ) + parser.add_argument( + "--doc", + type=str, + required=True, + help="A string for documentation purpose. " + "Will be the name of the log folder.", + ) + parser.add_argument( + "--comment", type=str, default="", help="A string for experiment comment" + ) + parser.add_argument( + "--verbose", + type=str, + default="info", + help="Verbose level: info | debug | warning | critical", + ) + parser.add_argument( + "--sample", + action="store_true", + help="Whether to produce samples from the model", + ) + parser.add_argument( + "-i", + "--image_folder", + type=str, + default="images", + help="The folder name of samples", + ) + parser.add_argument( + "--ni", + action="store_true", + help="No interaction. Suitable for Slurm Job launcher", + ) + parser.add_argument( + "--timesteps", type=int, default=20, help="number of steps involved" + ) + parser.add_argument( + "--deg", type=str, required=True, help="Degradation" + ) + parser.add_argument( + "--num_avg_samples", type=int, default=1, help="Number of samples to average per input" + ) + parser.add_argument( + "--eta", type=float, default=1.0, help="Eta" + ) + parser.add_argument( + "--etaB", type=float, default=0.4, help="Eta_b" + ) + parser.add_argument( + '--subset_start', type=int, default=-1 + ) + parser.add_argument( + '--subset_end', type=int, default=-1 + ) + parser.add_argument( + '--init_timestep', type=int, default=300 + ) + + args = parser.parse_args() + args.log_path = os.path.join(args.exp, "logs", args.doc) + + # parse config file + with open(os.path.join("configs", args.config), "r") as f: + config = yaml.safe_load(f) + new_config = dict2namespace(config) + + tb_path = os.path.join(args.exp, "tensorboard", args.doc) + + level = getattr(logging, args.verbose.upper(), None) + if not isinstance(level, int): + raise ValueError("level {} not supported".format(args.verbose)) + + handler1 = logging.StreamHandler() + formatter = logging.Formatter( + "%(levelname)s - %(filename)s - %(asctime)s - %(message)s" + ) + handler1.setFormatter(formatter) + logger = logging.getLogger() + logger.addHandler(handler1) + logger.setLevel(level) + + os.makedirs(os.path.join(args.exp, "image_samples"), exist_ok=True) + args.image_folder = os.path.join( + args.exp, "image_samples", args.image_folder + ) + if not os.path.exists(args.image_folder): + os.makedirs(args.image_folder) + else: + overwrite = False + if args.ni: + overwrite = True + else: + response = input( + f"Image folder {args.image_folder} already exists. Overwrite? (Y/N)" + ) + if response.upper() == "Y": + overwrite = True + + if overwrite: + shutil.rmtree(args.image_folder) + os.makedirs(args.image_folder) + else: + print("Output image folder exists. Program halted.") + sys.exit(0) + + # add device + device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu") + logging.info("Using device: {}".format(device)) + new_config.device = device + + # set random seed + torch.manual_seed(args.seed) + np.random.seed(args.seed) + if torch.cuda.is_available(): + torch.cuda.manual_seed_all(args.seed) + + torch.backends.cudnn.benchmark = True + + return args, new_config + + +def dict2namespace(config): + namespace = argparse.Namespace() + for key, value in config.items(): + if isinstance(value, dict): + new_value = dict2namespace(value) + else: + new_value = value + setattr(namespace, key, new_value) + return namespace + + +def main(): + args, config = parse_args_and_config() + logging.info("Writing log file to {}".format(args.log_path)) + logging.info("Exp instance id = {}".format(os.getpid())) + logging.info("Exp comment = {}".format(args.comment)) + + try: + runner = Diffusion(args, config) + runner.sample() + except Exception: + logging.error(traceback.format_exc()) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/models/__pycache__/diffusion.cpython-37.pyc b/models/__pycache__/diffusion.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16c4847dd351097bceeca79f0f2068ac69b283c9 GIT binary patch literal 7777 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 literal 0 HcmV?d00001 diff --git a/models/__pycache__/diffusion.cpython-39.pyc b/models/__pycache__/diffusion.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f37c3b3d92e2daeb46ab3fbbd5e252d0324d54e GIT binary patch literal 7626 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 D&N!!~ literal 0 HcmV?d00001 diff --git a/models/diffusion.py b/models/diffusion.py new file mode 100644 index 0000000..db53ac1 --- /dev/null +++ b/models/diffusion.py @@ -0,0 +1,341 @@ +import math +import torch +import torch.nn as nn + + +def get_timestep_embedding(timesteps, embedding_dim): + """ + This matches the implementation in Denoising Diffusion Probabilistic Models: + From Fairseq. + Build sinusoidal embeddings. + This matches the implementation in tensor2tensor, but differs slightly + from the description in Section 3.5 of "Attention Is All You Need". + """ + assert len(timesteps.shape) == 1 + + half_dim = embedding_dim // 2 + emb = math.log(10000) / (half_dim - 1) + emb = torch.exp(torch.arange(half_dim, dtype=torch.float32) * -emb) + emb = emb.to(device=timesteps.device) + emb = timesteps.float()[:, None] * emb[None, :] + emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=1) + if embedding_dim % 2 == 1: # zero pad + emb = torch.nn.functional.pad(emb, (0, 1, 0, 0)) + return emb + + +def nonlinearity(x): + # swish + return x*torch.sigmoid(x) + + +def Normalize(in_channels): + return torch.nn.GroupNorm(num_groups=32, num_channels=in_channels, eps=1e-6, affine=True) + + +class Upsample(nn.Module): + def __init__(self, in_channels, with_conv): + super().__init__() + self.with_conv = with_conv + if self.with_conv: + self.conv = torch.nn.Conv2d(in_channels, + in_channels, + kernel_size=3, + stride=1, + padding=1) + + def forward(self, x): + x = torch.nn.functional.interpolate( + x, scale_factor=2.0, mode="nearest") + if self.with_conv: + x = self.conv(x) + return x + + +class Downsample(nn.Module): + def __init__(self, in_channels, with_conv): + super().__init__() + self.with_conv = with_conv + if self.with_conv: + # no asymmetric padding in torch conv, must do it ourselves + self.conv = torch.nn.Conv2d(in_channels, + in_channels, + kernel_size=3, + stride=2, + padding=0) + + def forward(self, x): + if self.with_conv: + pad = (0, 1, 0, 1) + x = torch.nn.functional.pad(x, pad, mode="constant", value=0) + x = self.conv(x) + else: + x = torch.nn.functional.avg_pool2d(x, kernel_size=2, stride=2) + return x + + +class ResnetBlock(nn.Module): + def __init__(self, *, in_channels, out_channels=None, conv_shortcut=False, + dropout, temb_channels=512): + super().__init__() + self.in_channels = in_channels + out_channels = in_channels if out_channels is None else out_channels + self.out_channels = out_channels + self.use_conv_shortcut = conv_shortcut + + self.norm1 = Normalize(in_channels) + self.conv1 = torch.nn.Conv2d(in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1) + self.temb_proj = torch.nn.Linear(temb_channels, + out_channels) + self.norm2 = Normalize(out_channels) + self.dropout = torch.nn.Dropout(dropout) + self.conv2 = torch.nn.Conv2d(out_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1) + if self.in_channels != self.out_channels: + if self.use_conv_shortcut: + self.conv_shortcut = torch.nn.Conv2d(in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1) + else: + self.nin_shortcut = torch.nn.Conv2d(in_channels, + out_channels, + kernel_size=1, + stride=1, + padding=0) + + def forward(self, x, temb): + h = x + h = self.norm1(h) + h = nonlinearity(h) + h = self.conv1(h) + + h = h + self.temb_proj(nonlinearity(temb))[:, :, None, None] + + h = self.norm2(h) + h = nonlinearity(h) + h = self.dropout(h) + h = self.conv2(h) + + if self.in_channels != self.out_channels: + if self.use_conv_shortcut: + x = self.conv_shortcut(x) + else: + x = self.nin_shortcut(x) + + return x+h + + +class AttnBlock(nn.Module): + def __init__(self, in_channels): + super().__init__() + self.in_channels = in_channels + + self.norm = Normalize(in_channels) + self.q = torch.nn.Conv2d(in_channels, + in_channels, + kernel_size=1, + stride=1, + padding=0) + self.k = torch.nn.Conv2d(in_channels, + in_channels, + kernel_size=1, + stride=1, + padding=0) + self.v = torch.nn.Conv2d(in_channels, + in_channels, + kernel_size=1, + stride=1, + padding=0) + self.proj_out = torch.nn.Conv2d(in_channels, + in_channels, + kernel_size=1, + stride=1, + padding=0) + + def forward(self, x): + h_ = x + h_ = self.norm(h_) + q = self.q(h_) + k = self.k(h_) + v = self.v(h_) + + # compute attention + b, c, h, w = q.shape + q = q.reshape(b, c, h*w) + q = q.permute(0, 2, 1) # b,hw,c + k = k.reshape(b, c, h*w) # b,c,hw + w_ = torch.bmm(q, k) # b,hw,hw w[b,i,j]=sum_c q[b,i,c]k[b,c,j] + w_ = w_ * (int(c)**(-0.5)) + w_ = torch.nn.functional.softmax(w_, dim=2) + + # attend to values + v = v.reshape(b, c, h*w) + w_ = w_.permute(0, 2, 1) # b,hw,hw (first hw of k, second of q) + # b, c,hw (hw of q) h_[b,c,j] = sum_i v[b,c,i] w_[b,i,j] + h_ = torch.bmm(v, w_) + h_ = h_.reshape(b, c, h, w) + + h_ = self.proj_out(h_) + + return x+h_ + + +class Model(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + ch, out_ch, ch_mult = config.model.ch, config.model.out_ch, tuple(config.model.ch_mult) + num_res_blocks = config.model.num_res_blocks + attn_resolutions = config.model.attn_resolutions + dropout = config.model.dropout + in_channels = config.model.in_channels + resolution = config.data.image_size + resamp_with_conv = config.model.resamp_with_conv + num_timesteps = config.diffusion.num_diffusion_timesteps + + if config.model.type == 'bayesian': + self.logvar = nn.Parameter(torch.zeros(num_timesteps)) + + self.ch = ch + self.temb_ch = self.ch*4 + self.num_resolutions = len(ch_mult) + self.num_res_blocks = num_res_blocks + self.resolution = resolution + self.in_channels = in_channels + + # timestep embedding + self.temb = nn.Module() + self.temb.dense = nn.ModuleList([ + torch.nn.Linear(self.ch, + self.temb_ch), + torch.nn.Linear(self.temb_ch, + self.temb_ch), + ]) + + # downsampling + self.conv_in = torch.nn.Conv2d(in_channels, + self.ch, + kernel_size=3, + stride=1, + padding=1) + + curr_res = resolution + in_ch_mult = (1,)+ch_mult + self.down = nn.ModuleList() + block_in = None + for i_level in range(self.num_resolutions): + block = nn.ModuleList() + attn = nn.ModuleList() + block_in = ch*in_ch_mult[i_level] + block_out = ch*ch_mult[i_level] + for i_block in range(self.num_res_blocks): + block.append(ResnetBlock(in_channels=block_in, + out_channels=block_out, + temb_channels=self.temb_ch, + dropout=dropout)) + block_in = block_out + if curr_res in attn_resolutions: + attn.append(AttnBlock(block_in)) + down = nn.Module() + down.block = block + down.attn = attn + if i_level != self.num_resolutions-1: + down.downsample = Downsample(block_in, resamp_with_conv) + curr_res = curr_res // 2 + self.down.append(down) + + # middle + self.mid = nn.Module() + self.mid.block_1 = ResnetBlock(in_channels=block_in, + out_channels=block_in, + temb_channels=self.temb_ch, + dropout=dropout) + self.mid.attn_1 = AttnBlock(block_in) + self.mid.block_2 = ResnetBlock(in_channels=block_in, + out_channels=block_in, + temb_channels=self.temb_ch, + dropout=dropout) + + # upsampling + self.up = nn.ModuleList() + for i_level in reversed(range(self.num_resolutions)): + block = nn.ModuleList() + attn = nn.ModuleList() + block_out = ch*ch_mult[i_level] + skip_in = ch*ch_mult[i_level] + for i_block in range(self.num_res_blocks+1): + if i_block == self.num_res_blocks: + skip_in = ch*in_ch_mult[i_level] + block.append(ResnetBlock(in_channels=block_in+skip_in, + out_channels=block_out, + temb_channels=self.temb_ch, + dropout=dropout)) + block_in = block_out + if curr_res in attn_resolutions: + attn.append(AttnBlock(block_in)) + up = nn.Module() + up.block = block + up.attn = attn + if i_level != 0: + up.upsample = Upsample(block_in, resamp_with_conv) + curr_res = curr_res * 2 + self.up.insert(0, up) # prepend to get consistent order + + # end + self.norm_out = Normalize(block_in) + self.conv_out = torch.nn.Conv2d(block_in, + out_ch, + kernel_size=3, + stride=1, + padding=1) + + def forward(self, x, t): + assert x.shape[2] == x.shape[3] == self.resolution + + # timestep embedding + temb = get_timestep_embedding(t, self.ch) + temb = self.temb.dense[0](temb) + temb = nonlinearity(temb) + temb = self.temb.dense[1](temb) + + # downsampling + hs = [self.conv_in(x)] + for i_level in range(self.num_resolutions): + for i_block in range(self.num_res_blocks): + h = self.down[i_level].block[i_block](hs[-1], temb) + if len(self.down[i_level].attn) > 0: + h = self.down[i_level].attn[i_block](h) + hs.append(h) + if i_level != self.num_resolutions-1: + hs.append(self.down[i_level].downsample(hs[-1])) + + # middle + h = hs[-1] + h = self.mid.block_1(h, temb) + h = self.mid.attn_1(h) + h = self.mid.block_2(h, temb) + + # upsampling + for i_level in reversed(range(self.num_resolutions)): + for i_block in range(self.num_res_blocks+1): + h = self.up[i_level].block[i_block]( + torch.cat([h, hs.pop()], dim=1), temb) + if len(self.up[i_level].attn) > 0: + h = self.up[i_level].attn[i_block](h) + if i_level != 0: + h = self.up[i_level].upsample(h) + + # end + h = self.norm_out(h) + h = nonlinearity(h) + h = self.conv_out(h) + return h diff --git a/runners/__init__.py b/runners/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/runners/__pycache__/__init__.cpython-37.pyc b/runners/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d9e1e893c4d1161b504a2e0ba1b619060823de4 GIT binary patch literal 146 zcmZ?b<>g`kg2~oQNg(<$h=2h`Aj1KOi&=m~3PUi1CZpdg`kg2~oQNg(<$h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vSKO;XkRX-^) zBP+2)-zBv;yClCrzqlkZFD<_)ML#8_C|5VDAT?dTs5CDxwWwG>K0Y%qvm`!Vub}c4 ThfQvNN@-529mvqnK+FID#{eSe literal 0 HcmV?d00001 diff --git a/runners/__pycache__/__init__.cpython-39.pyc b/runners/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c36bb93d702d8eea34a3ec7197b8c36b52dc670 GIT binary patch literal 150 zcmYe~<>g`kg2~oQNg(<$h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vSKO;XkRX-^) zBP+2)-zBv;yClCrzqlkZFD<_)ML#8_C|5VDAT?dTs5CDxwWwG>K0Y%qvm`!Vub}c4 ThfQvNN@-529mvqnK+FID&Ils( literal 0 HcmV?d00001 diff --git a/runners/__pycache__/diffusion.cpython-37.pyc b/runners/__pycache__/diffusion.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30c49305f90fc8683d40d577e4d62290092ec2e4 GIT binary patch literal 10533 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 literal 0 HcmV?d00001 diff --git a/runners/__pycache__/diffusion.cpython-39.pyc b/runners/__pycache__/diffusion.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b1d7dbcee260dfa679bf4a4ff69bd7fefa48a2e GIT binary patch literal 8576 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 Xx$5{so#_uFz{n&(jghMm{p|k&E?LX( literal 0 HcmV?d00001 diff --git a/runners/diffusion.py b/runners/diffusion.py new file mode 100644 index 0000000..9bc93b1 --- /dev/null +++ b/runners/diffusion.py @@ -0,0 +1,293 @@ +import os +import logging +import time +import glob + +import numpy as np +import tqdm +import torch +import torch.utils.data as data + +from models.diffusion import Model +from datasets import get_dataset, data_transform, inverse_data_transform +from functions.ckpt_util import get_ckpt_path, download +from functions.denoising import jpeg_steps + +import torchvision.utils as tvu + +from guided_diffusion.unet import UNetModel +from guided_diffusion.script_util import create_model, create_classifier, classifier_defaults, args_to_dict +import random + +def get_beta_schedule(beta_schedule, *, beta_start, beta_end, num_diffusion_timesteps): + def sigmoid(x): + return 1 / (np.exp(-x) + 1) + + if beta_schedule == "quad": + betas = ( + np.linspace( + beta_start ** 0.5, + beta_end ** 0.5, + num_diffusion_timesteps, + dtype=np.float64, + ) + ** 2 + ) + elif beta_schedule == "linear": + betas = np.linspace( + beta_start, beta_end, num_diffusion_timesteps, dtype=np.float64 + ) + elif beta_schedule == "const": + betas = beta_end * np.ones(num_diffusion_timesteps, dtype=np.float64) + elif beta_schedule == "jsd": # 1/T, 1/(T-1), 1/(T-2), ..., 1 + betas = 1.0 / np.linspace( + num_diffusion_timesteps, 1, num_diffusion_timesteps, dtype=np.float64 + ) + elif beta_schedule == "sigmoid": + betas = np.linspace(-6, 6, num_diffusion_timesteps) + betas = sigmoid(betas) * (beta_end - beta_start) + beta_start + else: + raise NotImplementedError(beta_schedule) + assert betas.shape == (num_diffusion_timesteps,) + return betas + + +class Diffusion(object): + def __init__(self, args, config, device=None): + self.args = args + self.config = config + if device is None: + device = ( + torch.device("cuda") + if torch.cuda.is_available() + else torch.device("cpu") + ) + self.device = device + + self.model_var_type = config.model.var_type + betas = get_beta_schedule( + beta_schedule=config.diffusion.beta_schedule, + beta_start=config.diffusion.beta_start, + beta_end=config.diffusion.beta_end, + num_diffusion_timesteps=config.diffusion.num_diffusion_timesteps, + ) + betas = self.betas = torch.from_numpy(betas).float().to(self.device) + self.num_timesteps = betas.shape[0] + + alphas = 1.0 - betas + alphas_cumprod = alphas.cumprod(dim=0) + alphas_cumprod_prev = torch.cat( + [torch.ones(1).to(device), alphas_cumprod[:-1]], dim=0 + ) + self.alphas_cumprod_prev = alphas_cumprod_prev + posterior_variance = ( + betas * (1.0 - alphas_cumprod_prev) / (1.0 - alphas_cumprod) + ) + if self.model_var_type == "fixedlarge": + self.logvar = betas.log() + # torch.cat( + # [posterior_variance[1:2], betas[1:]], dim=0).log() + elif self.model_var_type == "fixedsmall": + self.logvar = posterior_variance.clamp(min=1e-20).log() + + def sample(self): + cls_fn = None + if self.config.model.type == 'simple': + model = Model(self.config) + # This used the pretrained DDPM model, see https://github.com/pesser/pytorch_diffusion + if self.config.data.dataset == "CIFAR10": + name = "cifar10" + elif self.config.data.dataset == "LSUN": + name = f"lsun_{self.config.data.category}" + elif self.config.data.dataset == 'CelebA_HQ': + name = 'celeba_hq' + else: + raise ValueError + if name != 'celeba_hq': + ckpt = get_ckpt_path(f"ema_{name}", prefix=self.args.exp) + print("Loading checkpoint {}".format(ckpt)) + elif name == 'celeba_hq': + #ckpt = '~/.cache/diffusion_models_converted/celeba_hq.ckpt' + ckpt = os.path.join(self.args.exp, "logs/celeba/celeba_hq.ckpt") + if not os.path.exists(ckpt): + download('https://image-editing-test-12345.s3-us-west-2.amazonaws.com/checkpoints/celeba_hq.ckpt', ckpt) + else: + raise ValueError + model.load_state_dict(torch.load(ckpt, map_location=self.device)) + model.to(self.device) + model = torch.nn.DataParallel(model) + + elif self.config.model.type == 'openai': + config_dict = vars(self.config.model) + model = create_model(**config_dict) + if self.config.model.use_fp16: + model.convert_to_fp16() + if self.config.model.class_cond: + ckpt = os.path.join(self.args.exp, 'logs/imagenet/%dx%d_diffusion.pt' % (self.config.data.image_size, self.config.data.image_size)) + if not os.path.exists(ckpt): + download('https://openaipublic.blob.core.windows.net/diffusion/jul-2021/%dx%d_diffusion_uncond.pt' % (self.config.data.image_size, self.config.data.image_size), ckpt) + else: + ckpt = os.path.join(self.args.exp, "logs/imagenet/256x256_diffusion_uncond.pt") + if not os.path.exists(ckpt): + download('https://openaipublic.blob.core.windows.net/diffusion/jul-2021/256x256_diffusion_uncond.pt', ckpt) + + + model.load_state_dict(torch.load(ckpt, map_location=self.device)) + model.to(self.device) + model.eval() + model = torch.nn.DataParallel(model) + + if self.config.model.class_cond: + ckpt = os.path.join(self.args.exp, 'logs/imagenet/%dx%d_classifier.pt' % (self.config.data.image_size, self.config.data.image_size)) + if not os.path.exists(ckpt): + image_size = self.config.data.image_size + download('https://openaipublic.blob.core.windows.net/diffusion/jul-2021/%dx%d_classifier.pt' % image_size, ckpt) + classifier = create_classifier(**args_to_dict(self.config.classifier, classifier_defaults().keys())) + classifier.load_state_dict(torch.load(ckpt, map_location=self.device)) + classifier.to(self.device) + if self.config.classifier.classifier_use_fp16: + classifier.convert_to_fp16() + classifier.eval() + classifier = torch.nn.DataParallel(classifier) + + import torch.nn.functional as F + def cond_fn(x, t, y): + with torch.enable_grad(): + x_in = x.detach().requires_grad_(True) + logits = classifier(x_in, t) + log_probs = F.log_softmax(logits, dim=-1) + selected = log_probs[range(len(logits)), y.view(-1)] + return torch.autograd.grad(selected.sum(), x_in)[0] * self.config.classifier.classifier_scale + cls_fn = cond_fn + + self.sample_sequence(model, cls_fn) + + def sample_sequence(self, model, cls_fn=None): + args, config = self.args, self.config + + #get original images and corrupted y_0 + dataset, test_dataset = get_dataset(args, config) + + device_count = torch.cuda.device_count() + + if args.subset_start >= 0 and args.subset_end > 0: + assert args.subset_end > args.subset_start + test_dataset = torch.utils.data.Subset(test_dataset, range(args.subset_start, args.subset_end)) + else: + args.subset_start = 0 + args.subset_end = len(test_dataset) + + print(f'Dataset has size {len(test_dataset)}') + + def seed_worker(worker_id): + worker_seed = args.seed % 2**32 + np.random.seed(worker_seed) + random.seed(worker_seed) + + g = torch.Generator() + g.manual_seed(args.seed) + val_loader = data.DataLoader( + test_dataset, + batch_size=config.sampling.batch_size, + shuffle=False, + num_workers=config.data.num_workers, + worker_init_fn=seed_worker, + generator=g, + ) + + + ## get degradation operator ## + deg = args.deg + if deg[:4] == 'jpeg': + jpeg_qf = int(deg[4:]) + from functions.jpeg_torch import jpeg_decode as jd, jpeg_encode as je + from functools import partial + jpeg_decode = partial(jd, qf = jpeg_qf) + jpeg_encode = partial(je, qf = jpeg_qf) + elif deg == 'quant': + from functions.jpeg_torch import quantization_decode as qd, quantization_encode as qe + from functools import partial + jpeg_decode = partial(qd, qf = 0) + jpeg_encode = partial(qe, qf = 0) + else: + print("ERROR: degradation type not supported") + quit() + sigma_0 = 0 #no gaussian noise in jpeg measurements + + print(f'Start from {args.subset_start}') + idx_init = args.subset_start + idx_so_far = args.subset_start + avg_psnr = 0.0 + avg_psnr_y = 0.0 + pbar = tqdm.tqdm(val_loader) + for x_orig, classes in pbar: + x_orig = x_orig.to(self.device) + x_orig = data_transform(self.config, x_orig) + + y_0 = jpeg_decode(jpeg_encode(x_orig)) + pinv_y_0 = y_0 + + for i in range(len(pinv_y_0)): + tvu.save_image( + inverse_data_transform(config, pinv_y_0[i]), os.path.join(self.args.image_folder, f"y0_{idx_so_far + i}.png") + ) + tvu.save_image( + inverse_data_transform(config, x_orig[i]), os.path.join(self.args.image_folder, f"orig_{idx_so_far + i}.png") + ) + + ##Begin DDRM + x = 0 + num_avg_samples = args.num_avg_samples + for _ in range(num_avg_samples): + local_x = torch.randn( + y_0.shape[0], + config.data.channels, + config.data.image_size, + config.data.image_size, + device=self.device, + ) + + # NOTE: This means that we are producing each predicted x0, not x_{t-1} at timestep t. + with torch.no_grad(): + local_x, _ = self.sample_image_jpeg(local_x, model, y_0, last=False, cls_fn=cls_fn, classes=classes, jpeg_qf=jpeg_qf) + + local_x = [inverse_data_transform(config, y) for y in local_x] + if x == 0: x = local_x + else: x = [x[i] + local_x[i] for i in range(len(local_x))] + x = [item / num_avg_samples for item in x] + + for i in [-1]: # range(len(x)): + for j in range(x[i].size(0)): + tvu.save_image( + x[i][j], os.path.join(self.args.image_folder, f"{idx_so_far + j}_{i}.png") + ) + if i == len(x)-1 or i == -1: + orig = inverse_data_transform(config, x_orig[j]) + mse = torch.mean((x[i][j].to(self.device) - orig) ** 2) + psnr = 10 * torch.log10(1 / mse) + avg_psnr += psnr + if deg[:4] == 'jpeg': + y_inv = inverse_data_transform(config, pinv_y_0[j]) + mse = torch.mean((y_inv - orig) ** 2) + psnr = 10 * torch.log10(1 / mse) + avg_psnr_y += psnr + + idx_so_far += y_0.shape[0] + + pbar.set_description("PSNR: %.2f" % (avg_psnr / (idx_so_far - idx_init))) + + avg_psnr = avg_psnr / (idx_so_far - idx_init) + print("Total Average PSNR: %.2f" % avg_psnr) + avg_psnr_y = avg_psnr_y / (idx_so_far - idx_init) + print("Total Average PSNR of JPEG: %.2f" % avg_psnr_y) + print("Number of samples: %d" % (idx_so_far - idx_init)) + + def sample_image_jpeg(self, x, model, y_0, last=True, cls_fn=None, classes=None, jpeg_qf=None): + skip = self.args.init_timestep // self.args.timesteps + seq = range(0, self.args.init_timestep, skip) + + x = jpeg_steps(x, seq, model, self.betas, y_0, \ + etaB=self.args.etaB, etaA=self.args.eta, etaC=self.args.eta, cls_fn=cls_fn, classes=classes, jpeg_qf=jpeg_qf) + if last: + x = x[0][-1] + return x \ No newline at end of file