diff --git a/.gitignore b/.gitignore index 6c311be704b9b912702a7ad4f6c67f7367e03fa4..0ffc9575a2d120e1cfad342dedb833397cdb99bc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ */__pycache__ */trained_ddpm root +experiments +trainer/__pycache__ \ No newline at end of file diff --git a/dataloader/load.py b/dataloader/load.py index 93d033b4f1d6ff30ae0bc8abde1aebcaaa894c49..4737e3e72c0da46629aa524c921d70415c232566 100644 --- a/dataloader/load.py +++ b/dataloader/load.py @@ -62,7 +62,7 @@ class UnconditionalDataset(Dataset): return len(self.df) def __getitem__(self,idx): - path = self.df.iloc[idx].Filepaths + path = self.df.iloc[idx].Filepath img = Image.open(path) return self.transform(img),0 diff --git a/experiment_creator.ipynb b/experiment_creator.ipynb index 17963ce4ccd8bc3c2e41dc95cea6aca9c9c783ea..9d24f221cce771cfe10d3377d092f8639540d409 100644 --- a/experiment_creator.ipynb +++ b/experiment_creator.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "metadata": { "scrolled": true }, @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -47,23 +47,23 @@ "datapath = \"/work/lect0100/lhq_256\"\n", "\n", "# Experiment setup\n", - "run_name = 'batch_timesteps' # WANDB and experiment folder Name!\n", + "run_name = 'main_test0' # WANDB and experiment folder Name!\n", "checkpoint = None #'model_epoch_8.pth' # Name of checkpoint pth file or None \n", - "experiment_path = '/work/lect0100/experiments_gonzalo/'+ run_name +'/'\n", + "experiment_path = \"/work/lect0100/main_experiment/\" + run_name +'/'\n", "\n", "# Path to save generated experiment folder on local machine\n", - "local_path =\"/Users/gonzalo/Desktop/\" + run_name + '/settings'\n", + "local_path =\"experiments/\" + run_name + '/settings'\n", "\n", "# Diffusion Model Settings\n", - "diffusion_steps = 200\n", - "image_size = 64\n", + "diffusion_steps = 500\n", + "image_size = 128\n", "channels = 3\n", "\n", "# Training\n", "batchsize = 32\n", - "epochs = 30\n", - "store_iter = 1\n", - "eval_iter = 500\n", + "epochs = 20\n", + "store_iter = 5\n", + "eval_iter = 2\n", "learning_rate = 0.0001\n", "optimizername = \"torch.optim.AdamW\"\n", "optimizer_params = None\n", @@ -71,7 +71,7 @@ "# checkpoint = None #(If no checkpoint training, ie. random weights)\n", "\n", "# Sampling \n", - "sample_size = 10\n", + "sample_size = 20\n", "intermediate = False # True if you want to sample one image and all ist intermediate latents\n", "\n", "\n", @@ -103,6 +103,7 @@ "model_setting = dict( n_channels=64,\n", " fctr = [1,2,4,4,8],\n", " time_dim=256,\n", + " attention = True,\n", " )\n", "\"\"\"\n", "outdated\n", @@ -145,8 +146,8 @@ " checkpoint= checkpoint,\n", " experiment_path = experiment_path,\n", " verbose = verbose,\n", - " T_max = 5*10000, # cosine lr param\n", - " eta_min= 1e-5, # cosine lr param\n", + " T_max = 0.8*90000/32*150, # cosine lr param len(train_ds)/batchsize * total epochs to 0 \n", + " eta_min= 1e-10, # cosine lr param\n", " )\n", "sampling_setting = dict( \n", " checkpoint = checkpoint, \n", @@ -163,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -173,13 +174,13 @@ "create folder\n", "folder created \n", "stored json files in folder\n", - "{'modelname': 'UNet_Unconditional_Diffusion_Bottleneck_Variant', 'dataset': 'UnconditionalDataset', 'framework': 'DDPM', 'trainloop_function': 'ddpm_trainer', 'sampling_function': 'ddpm_sampler', 'evaluation_function': 'ddpm_evaluator', 'batchsize': 32}\n", - "{'fpath': '/work/lect0100/lhq_256', 'img_size': 64, 'frac': 0.8, 'skip_first_n': 0, 'ext': '.png', 'transform': True}\n", - "{'channels_in': 3, 'channels_out': 3, 'activation': 'relu', 'weight_init': 'he', 'projection_features': 64, 'time_dim': 32, 'time_channels': 200, 'num_stages': 4, 'stage_list': None, 'num_blocks': 1, 'num_groupnorm_groups': 32, 'dropout': 0.1, 'attention_list': None, 'num_attention_heads': 1}\n", - "{'diffusion_steps': 200, 'out_shape': (3, 64, 64), 'noise_schedule': 'linear', 'beta_1': 0.0001, 'beta_T': 0.02, 'alpha_bar_lower_bound': 0.9, 'var_schedule': 'same', 'kl_loss': 'simplified', 'recon_loss': 'nll'}\n", - "{'epochs': 30, 'store_iter': 1, 'eval_iter': 500, 'optimizer_class': 'torch.optim.AdamW', 'optimizer_params': None, 'learning_rate': 0.0001, 'run_name': 'batch_timesteps', 'checkpoint': None, 'experiment_path': '/work/lect0100/experiments_gonzalo/batch_timesteps/', 'verbose': True}\n", - "{'checkpoint': None, 'experiment_path': '/work/lect0100/experiments_gonzalo/batch_timesteps/', 'batch_size': 10, 'intermediate': False}\n", - "{'checkpoint': None, 'experiment_path': '/work/lect0100/experiments_gonzalo/batch_timesteps/'}\n" + "{'modelname': 'UNet_Res', 'dataset': 'UnconditionalDataset', 'framework': 'DDPM', 'trainloop_function': 'ddpm_trainer', 'sampling_function': 'ddpm_sampler', 'evaluation_function': 'ddpm_evaluator', 'batchsize': 32}\n", + "{'fpath': '/work/lect0100/lhq_256', 'img_size': 128, 'frac': 0.8, 'skip_first_n': 0, 'ext': '.png', 'transform': True}\n", + "{'n_channels': 64, 'fctr': [1, 2, 4, 4, 8], 'time_dim': 256}\n", + "{'diffusion_steps': 500, 'out_shape': (3, 128, 128), 'noise_schedule': 'linear', 'beta_1': 0.0001, 'beta_T': 0.02, 'alpha_bar_lower_bound': 0.9, 'var_schedule': 'same', 'kl_loss': 'simplified', 'recon_loss': 'nll'}\n", + "{'epochs': 10, 'store_iter': 2, 'eval_iter': 2, 'optimizer_class': 'torch.optim.AdamW', 'optimizer_params': None, 'learning_rate': 0.0001, 'run_name': 'main_testing', 'checkpoint': None, 'experiment_path': '/work/lect0100/tobi/main_test/main_testing/', 'verbose': True, 'T_max': 9000000, 'eta_min': 1e-10}\n", + "{'checkpoint': None, 'experiment_path': '/work/lect0100/tobi/main_test/main_testing/', 'batch_size': 10, 'intermediate': False}\n", + "{'checkpoint': None, 'experiment_path': '/work/lect0100/tobi/main_test/main_testing/'}\n" ] } ], @@ -227,13 +228,6 @@ " " ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, diff --git a/playground.ipynb b/playground.ipynb index 16d2dfac2baba377cc529970900bc5bb0ef10d71..d7d3ea922ad8e2bba9a29fbfe4f98fff54859e0c 100644 --- a/playground.ipynb +++ b/playground.ipynb @@ -11,6 +11,44 @@ "from models.model import VanillaDiffusion\n" ] }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0009572050015330874\n" + ] + }, + { + "data": { + "image/png": "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Qqxdu1YolUpht9udNd98842QyWSipqamXvtmsVgEAGGxWOpVT9RQKb8Uim7TN4t2b24QwxfsEBfLq6VuiYio2avv+btBn/TU1NQgIyMDMTExznlyuRwxMTFISUmpc52UlBSXegCIjY111p84cQJms9mlRqfTwWQyOWtSUlKg1+sRGRnprImJiYFcLkdqaioAICIiAnK5HMuWLYPdbofFYsFnn32GmJgYeHl51dlbdXU1rFary0R0K/Xv0BJfPG2C3scL+/JKMPLj3SgorbrxikRE9Ls1KPQUFhbCbrfDYDC4zDcYDDCbzXWuYzabr1t/+eeNaoKCglyWK5VKBAQEOGvCwsLwww8/4K233oJarYZer8eZM2ewZs2aa+7PzJkzodPpnFNoaOiN3gKi361XqB6rJ0Sjlb8ah82leOKj3ThbUil1W0REbs9tRm+ZzWY888wziI+PR3p6OrZt2waVSoVHH330msOEp06dCovF4pzy8vJuc9fkqTob/bF2YjRa671xorAcjy3aheMXym68IhERNVqDQk9gYCAUCgXy8/Nd5ufn58NoNNa5jtFovG795Z83qvnthdI2mw3FxcXOmoULF0Kn02H27Nno06cPBg4ciM8//xzJycnOr8B+S61WQ6vVukxEt0v7QF989Vw07mjli3OWKjz+UQpyzvErViKiW6VBoUelUiEiIgLJycnOeQ6HA8nJyYiOjq5znejoaJd6AEhKSnLWh4WFwWg0utRYrVakpqY6a6Kjo1FSUoKMjAxnzZYtW+BwOGAymQAAFRUVkMtdd0ehUDh7JGqKgnXeWD0xGl2DtSgsq8HIj1Ow9/RFqdsiInJPDb1CetWqVUKtVovExESRk5MjJkyYIPR6vTCbzUIIIUaPHi2mTJnirN+5c6dQKpVi7ty54tChQ2LGjBnCy8tLZGVlOWtmzZol9Hq9WL9+vThw4IAYPny4CAsLE5WVlc6aIUOGiD59+ojU1FSxY8cOER4eLuLi4pzLk5OThUwmE++88444cuSIyMjIELGxsaJdu3aioqKiXvvG0VsklZKKGvHwhztFuzc3iDunfSd2/1IodUtERM1Gfc/fDQ49Qggxf/580bZtW6FSqURUVJTYvXu3c9mgQYNEfHy8S/2aNWtEp06dhEqlEt26dRMbN250We5wOMS0adOEwWAQarVaDB48WOTm5rrUFBUV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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np \n", + "\n", + "eta_min = 0.00001\n", + "eta_max = 0.001\n", + "T_max = 0.8*90000/32*20 # len(trainset)= 0.8*90.000 T_max = len(trainset)/batch_size*epochs <- in the last epochsm eta min will be reached. \n", + "\n", + "\n", + "x = np.arange(T_max)\n", + "y = eta_min+ 0.5*(eta_max-eta_min)*(1+np.cos(np.pi*x/T_max))\n", + "plt.plot(x,y)\n", + "print(y[6000]) # one epoch has about 2.4k steps -> in the third epoch this will be the loss \n" + ] + }, { "cell_type": "code", "execution_count": null, @@ -20,8 +58,22 @@ } ], "metadata": { + "kernelspec": { + "display_name": "env", + "language": "python", + "name": "env" + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" }, "orig_nbformat": 4 }, diff --git a/trainer/train.py b/trainer/train.py index 80431b0c02342e1dfba41a4b47cb9afc13fa87ce..0d78a6b90745c9ce287d2d4282547229c7725cd9 100644 --- a/trainer/train.py +++ b/trainer/train.py @@ -174,7 +174,7 @@ def ddpm_trainer(model, ema = ModelEmaV2(model, decay=decay, device = model.device) # Using W&B - with wandb.init(project='test-project', name=run_name, entity='gonzalomartingarcia0', id=run_name, resume=True) as run: + with wandb.init(project='Unconditional Landscapes', name=run_name, entity='deep-lab-', id=run_name, resume=True) as run: # Log some info run.config.learning_rate = learning_rate