From 23c874e5d63cf630440b9b63c1e0a603159ccfda Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Mon, 20 Mar 2023 18:02:38 +0000 Subject: [PATCH 1/3] Update tutorial Signed-off-by: Walter Hugo Lopez Pinaya --- .../generative/3d_ddpm/3d_ddpm_tutorial.ipynb | 497 +++++++++--------- .../generative/3d_ddpm/3d_ddpm_tutorial.py | 71 ++- 2 files changed, 306 insertions(+), 262 deletions(-) diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb index 188d78d5..03a01157 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb @@ -37,24 +37,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 13, "id": "cdea37d5", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/walter/Storage/Projects/GenerativeModels/venv/lib/python3.10/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "2023-02-28 00:16:00,289 - A matching Triton is not available, some optimizations will not be enabled.\n", - "Error caught was: No module named 'triton'\n", "MONAI version: 1.2.dev2304\n", "Numpy version: 1.23.5\n", "Pytorch version: 1.13.1+cu117\n", @@ -116,7 +106,7 @@ "\n", "from generative.inferers import DiffusionInferer\n", "from generative.networks.nets import DiffusionModelUNet\n", - "from generative.networks.schedulers import DDPMScheduler\n", + "from generative.networks.schedulers import DDPMScheduler, DDIMScheduler\n", "\n", "print_config()" ] @@ -145,7 +135,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "/tmp/tmp4dbx0xcm\n" + "/media/walter/Storage/Projects/GTC_2023_presentation/data\n" ] } ], @@ -170,7 +160,7 @@ "metadata": {}, "outputs": [], "source": [ - "set_determinism(0)" + "set_determinism(42)" ] }, { @@ -196,25 +186,14 @@ } ], "source": [ - "train_transform = Compose(\n", + "data_transform = Compose(\n", " [\n", " LoadImaged(keys=[\"image\"]),\n", " Lambdad(keys=\"image\", func=lambda x: x[:, :, :, 1]),\n", " AddChanneld(keys=[\"image\"]),\n", " ScaleIntensityd(keys=[\"image\"]),\n", - " CenterSpatialCropd(keys=[\"image\"], roi_size=[176, 224, 155]),\n", - " Resized(keys=[\"image\"], spatial_size=(32, 48, 32)),\n", - " ]\n", - ")\n", - "\n", - "val_transform = Compose(\n", - " [\n", - " LoadImaged(keys=[\"image\"]),\n", - " Lambdad(keys=\"image\", func=lambda x: x[:, :, :, 1]),\n", - " AddChanneld(keys=[\"image\"]),\n", - " ScaleIntensityd(keys=[\"image\"]),\n", - " CenterSpatialCropd(keys=[\"image\"], roi_size=[176, 224, 155]),\n", - " Resized(keys=[\"image\"], spatial_size=(32, 48, 32)),\n", + " CenterSpatialCropd(keys=[\"image\"], roi_size=[160, 200, 155]),\n", + " Resized(keys=[\"image\"], spatial_size=(32, 40, 32)),\n", " ]\n", ")" ] @@ -227,71 +206,51 @@ "lines_to_next_cell": 2 }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Task01_BrainTumour.tar: 7.09GB [06:55, 18.3MB/s] " - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "2023-02-28 00:22:56,253 - INFO - Downloaded: /tmp/tmp4dbx0xcm/Task01_BrainTumour.tar\n" + "2023-03-20 14:39:26,630 - INFO - Verified 'Task01_BrainTumour.tar', md5: 240a19d752f0d9e9101544901065d872.\n", + "2023-03-20 14:39:26,630 - INFO - File exists: /media/walter/Storage/Projects/GTC_2023_presentation/data/Task01_BrainTumour.tar, skipped downloading.\n", + "2023-03-20 14:39:26,631 - INFO - Non-empty folder exists in /media/walter/Storage/Projects/GTC_2023_presentation/data/Task01_BrainTumour, skipped extracting.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-02-28 00:23:04,765 - INFO - Verified 'Task01_BrainTumour.tar', md5: 240a19d752f0d9e9101544901065d872.\n", - "2023-02-28 00:23:04,766 - INFO - Writing into directory: /tmp/tmp4dbx0xcm.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Loading dataset: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 388/388 [03:43<00:00, 1.74it/s]\n" + "Loading dataset: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 388/388 [03:32<00:00, 1.83it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2023-02-28 00:27:00,775 - INFO - Verified 'Task01_BrainTumour.tar', md5: 240a19d752f0d9e9101544901065d872.\n", - "2023-02-28 00:27:00,775 - INFO - File exists: /tmp/tmp4dbx0xcm/Task01_BrainTumour.tar, skipped downloading.\n", - "2023-02-28 00:27:00,776 - INFO - Non-empty folder exists in /tmp/tmp4dbx0xcm/Task01_BrainTumour, skipped extracting.\n" + "2023-03-20 14:43:06,832 - INFO - Verified 'Task01_BrainTumour.tar', md5: 240a19d752f0d9e9101544901065d872.\n", + "2023-03-20 14:43:06,832 - INFO - File exists: /media/walter/Storage/Projects/GTC_2023_presentation/data/Task01_BrainTumour.tar, skipped downloading.\n", + "2023-03-20 14:43:06,833 - INFO - Non-empty folder exists in /media/walter/Storage/Projects/GTC_2023_presentation/data/Task01_BrainTumour, skipped extracting.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Loading dataset: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 96/96 [00:55<00:00, 1.72it/s]\n" + "Loading dataset: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 96/96 [00:52<00:00, 1.83it/s]\n" ] } ], "source": [ "train_ds = DecathlonDataset(\n", - " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=train_transform, section=\"training\", download=True\n", + " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=data_transform, section=\"training\", download=True\n", ")\n", "\n", - "train_loader = DataLoader(train_ds, batch_size=4, shuffle=True, num_workers=8)\n", + "train_loader = DataLoader(train_ds, batch_size=8, shuffle=True, num_workers=8, persistent_workers=True)\n", "\n", "val_ds = DecathlonDataset(\n", - " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=val_transform, section=\"validation\", download=True\n", + " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=data_transform, section=\"validation\", download=True\n", ")\n", "\n", - "val_loader = DataLoader(val_ds, batch_size=4, shuffle=False, num_workers=8)" + "val_loader = DataLoader(val_ds, batch_size=8, shuffle=False, num_workers=8, persistent_workers=True)" ] }, { @@ -310,7 +269,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -359,11 +318,16 @@ ")\n", "model.to(device)\n", "\n", - "scheduler = DDPMScheduler(num_train_timesteps=1000)\n", + "scheduler = DDPMScheduler(\n", + " num_train_timesteps=1000,\n", + " beta_schedule=\"scaled_linear\",\n", + " beta_start=0.0005,\n", + " beta_end=0.0195\n", + ")\n", "\n", "inferer = DiffusionInferer(scheduler)\n", "\n", - "optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5)" + "optimizer = torch.optim.Adam(params=model.parameters(), lr=5e-5)" ] }, { @@ -386,37 +350,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch 0: 100%|████████████| 97/97 [01:12<00:00, 1.35it/s, loss=0.261]\n", - "Epoch 1: 100%|███████████| 97/97 [01:12<00:00, 1.34it/s, loss=0.0304]\n", - "Epoch 2: 100%|███████████| 97/97 [01:13<00:00, 1.33it/s, loss=0.0186]\n", - "Epoch 3: 100%|██████████| 97/97 [01:13<00:00, 1.32it/s, loss=0.00811]\n", - "Epoch 4: 100%|███████████| 97/97 [01:13<00:00, 1.32it/s, loss=0.0104]\n", - "Epoch 5: 100%|██████████| 97/97 [01:14<00:00, 1.30it/s, loss=0.00849]\n", - "Epoch 6: 100%|██████████| 97/97 [01:14<00:00, 1.30it/s, loss=0.00987]\n", - "Epoch 7: 100%|██████████| 97/97 [01:14<00:00, 1.30it/s, loss=0.00844]\n", - "Epoch 8: 100%|███████████| 97/97 [01:15<00:00, 1.29it/s, loss=0.0077]\n", - "Epoch 9: 100%|██████████| 97/97 [01:14<00:00, 1.29it/s, loss=0.00964]\n", - "Epoch 10: 100%|█████████| 97/97 [01:15<00:00, 1.29it/s, loss=0.00719]\n", - "Epoch 11: 100%|███████████| 97/97 [01:14<00:00, 1.29it/s, loss=0.006]\n", - "Epoch 12: 100%|█████████| 97/97 [01:15<00:00, 1.29it/s, loss=0.00456]\n", - "Epoch 13: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00512]\n", - "Epoch 14: 100%|█████████| 97/97 [01:14<00:00, 1.30it/s, loss=0.00733]\n", - "Epoch 15: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00684]\n", - "Epoch 16: 100%|█████████| 97/97 [01:15<00:00, 1.29it/s, loss=0.00879]\n", - "Epoch 17: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00484]\n", - "Epoch 18: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00766]\n", - "Epoch 19: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00575]\n", - "Epoch 20: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00678]\n", - "Epoch 21: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00489]\n", - "Epoch 22: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00636]\n", - "Epoch 23: 100%|█████████| 97/97 [01:14<00:00, 1.30it/s, loss=0.00934]\n", - "Epoch 24: 100%|██████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.0084]\n", - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:12<00:00, 13.80it/s]\n" + "Epoch 0: 100%|████████████| 49/49 [00:54<00:00, 1.12s/it, loss=0.263]\n", + "Epoch 1: 100%|███████████| 49/49 [00:54<00:00, 1.12s/it, loss=0.0245]\n", + "Epoch 2: 100%|████████████| 49/49 [00:55<00:00, 1.13s/it, loss=0.014]\n", + "Epoch 3: 100%|███████████| 49/49 [00:55<00:00, 1.13s/it, loss=0.0103]\n", + "Epoch 4: 100%|██████████| 49/49 [00:56<00:00, 1.14s/it, loss=0.00888]\n", + "Epoch 5: 100%|███████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.0125]\n", + "Epoch 6: 100%|██████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00897]\n", + "Epoch 7: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00892]\n", + "Epoch 8: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00569]\n", + "Epoch 9: 100%|███████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.0075]\n", + "Epoch 10: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00929]\n", + "Epoch 11: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00622]\n", + "Epoch 12: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00633]\n", + "Epoch 13: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00664]\n", + "Epoch 14: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00597]\n", + "Epoch 15: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00646]\n", + "Epoch 16: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00721]\n", + "Epoch 17: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00895]\n", + "Epoch 18: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00681]\n", + "Epoch 19: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00657]\n", + "Epoch 20: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00635]\n", + "Epoch 21: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00578]\n", + "Epoch 22: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00691]\n", + "Epoch 23: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00602]\n", + "Epoch 24: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00668]\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:01<00:00, 16.22it/s]\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKIAAABzCAYAAAAbkNmRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAACxklEQVR4nO3d226jMBhFYRtDwKAc3v9NkxDRi9HcVNMRJ/ffttd3XamutIqxIY5flmVxgLHGegCAc4QIEYQICYQICYQICYQICYQICYQICYQICe3aH/TepxwHCrbm4R1XREggREggRPxX27YuhJD89/i1b99wj4i9uEdENghxo77v3eVysR5GcVZv3+CPeZ5XTTXYhhA3+nw+1kMoElMzJBAiJBAiJBAiJBAiJBAiJBBioXJ7JEuIhcpt050QIYEQIYEQIeGUENuWR9Y45nCIXde56/VKjDuFEFyM0Q3DYD0UU7yhLWAcRzfPs3u9XtZDSaLIN7RL/Yeo/fWyrEIchsHd73frYfxTCOHQm9u57fudjakZyRU5NaNMhAgJhAgJhAgJ7EIbaprGLctS7Ip5y1ElrJqRHKtmZIMQsVrKo1aYmpEcUzOyYRJi02j2H2N0j8fDehhVYmr+xntf7HaKFabmHYjQBiEe8BtnS9eCEA+o/WXWMxEiJBAiJBAiJBAiJGQVovfe9X1vPQwkwIY2kmNDuwKqj0u3KuOvqFiMsYhvwmJqRnJMzcgGIUICIUJC1iFyJmM5sg1xmiZ3u92sh4GTsGpGcqyakY1qQgwhuHEcrYeBH1QVIosbXdWEOAwDb+4IOyXErQ/eLRY+f6+IfOBJU1WrZj6zbINV8zdEqKuqEFNjMbRfVVMzbDA1IxvZhVj7lyeeSelWgqkZyTE1IxuECAmECAmECAmECAmECAnVhMgBTtqqCTHG6GKM1sPAD6ra0O66zr3fb+thVGdNYlWFCBu/9mSFey8cxRURyfGsGdkgREggREggREggROwyTdOpnxEnROzyfD5P/VJMtm+QHNs3yAYhQgIhQgIhYpez1wyEiF3OPtCKECGBECGBECFh9Sk8HHKJlLgiQgIhQgIhQgIhQgIhQgIhQgIhQgIhQgIhQsIX25S21YXsxcQAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -428,37 +392,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch 25: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00832]\n", - "Epoch 26: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00654]\n", - "Epoch 27: 100%|██████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.0067]\n", - "Epoch 28: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00384]\n", - "Epoch 29: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00468]\n", - "Epoch 30: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00522]\n", - "Epoch 31: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00428]\n", - "Epoch 32: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00462]\n", - "Epoch 33: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00528]\n", - "Epoch 34: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00514]\n", - "Epoch 35: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00571]\n", - "Epoch 36: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00401]\n", - "Epoch 37: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00459]\n", - "Epoch 38: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00446]\n", - "Epoch 39: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00445]\n", - "Epoch 40: 100%|██████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.0051]\n", - "Epoch 41: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00364]\n", - "Epoch 42: 100%|██████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.0041]\n", - "Epoch 43: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00536]\n", - "Epoch 44: 100%|██████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.0047]\n", - "Epoch 45: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00469]\n", - "Epoch 46: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00476]\n", - "Epoch 47: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00426]\n", - "Epoch 48: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00367]\n", - "Epoch 49: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00532]\n", - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:12<00:00, 13.81it/s]\n" + "Epoch 25: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00884]\n", + "Epoch 26: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00494]\n", + "Epoch 27: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00529]\n", + "Epoch 28: 100%|█████████| 49/49 [00:56<00:00, 1.14s/it, loss=0.00513]\n", + "Epoch 29: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00503]\n", + "Epoch 30: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00852]\n", + "Epoch 31: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00525]\n", + "Epoch 32: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00571]\n", + "Epoch 33: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00495]\n", + "Epoch 34: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00574]\n", + "Epoch 35: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.0048]\n", + "Epoch 36: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00593]\n", + "Epoch 37: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.0054]\n", + "Epoch 38: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00569]\n", + "Epoch 39: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00641]\n", + "Epoch 40: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.0047]\n", + "Epoch 41: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00498]\n", + "Epoch 42: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00431]\n", + "Epoch 43: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00484]\n", + "Epoch 44: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00421]\n", + "Epoch 45: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00462]\n", + "Epoch 46: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00404]\n", + "Epoch 47: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00435]\n", + "Epoch 48: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00626]\n", + "Epoch 49: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00365]\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:01<00:00, 16.22it/s]\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKIAAACGCAYAAABez1E7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAKXElEQVR4nO2dSW8VOxCFK48ZwjyJObCLWLBlyf//CSBFAkTEGOZ5yNu1jk9un7Z9O6IuOt+qW+623Z1K17nlsr22u7u7G8b8Zf772x0wJsKGaJJgQzQpsCGaFNgQTQpsiCYFNkSTAhuiSYEN0aTgYO2FBw4cGC1bW1srztVgDZbxfepa1aa67r//yv81vlb1R7Wh7qvt95xgm+qZuW8t/el9V79//56s219EkwIboknBWm3SA7vmXvfb65p7XVpLTge7NFUP9ufPnz+y3v1wxy0udo73uAxT7yfCX0STBBuiSUH1r2am95dhi2tQrlL1Rf2CVPeyC5nL3dX+2uT2a5+f62n527Q8MzJ3ZMBfRJMCG6JJgQ3RpKBaI6pwQUuIpHa0YupaLGNNgqGmw4cPF2VHjhwpzpUO+/bt23D848ePouzXr19VfVt0jvSGVnqnGi0zsoJMjVg117fU3cbMhA3RpKA7fIPwZxpDAipc0OLCuGx9fX04vnPnTlF29uzZ4Zhd8cGD5SMfO3ZsOGb3++XLl+H448ePRdm7d+8WHkdE7OzsFOf4zEqOTLm3XjeOf58WGVEzIjIX/iKaFNgQTQpsiCYF1RqxJflTaZKx6xZde/PmzeF4Y2OjKLty5cpwjGGWiDIRk3XO0aNHi3MM77CeHLsuotSh3Mb379+Lc9SXrCdRh379+rUo+/DhQ3E+R6IwU5tFNdVGy7DqIvxFNCmwIZoU2BBNCqoztHv8fsReLYHDbxzTu3//fnF+69at0XrwXtZoqK1wKC5ir9ZTz8WaDUG9xBoVY5Pchoqr8vvg2OXW1tZwvL29XZSh1mSUZm8Z8quNMfI79eQpszLYEE0KZnHN6vPO9506dWo4fvDgQVF2/vz54hzdKodEMAzDbgLv+/z5c1HG7m+s31xPy9AcTzTDerh9lAr8rlhGoItjyfHw4cPh+NGjR0XZp0+fYoyWrKbasNCU+1+Ev4gmBTZEkwIboklB9xBfbRnrpc3NzeH4xIkTRRnrHrz3+PHjRRmmbLGWwv5wmYK1Juo5fg485/Sxnz9/FudqpiCeT4XIVJvXr18fjnkY8/nz58Pxs2fPijLW3n8LfxFNCmyIJgWzZGjzz3N0MexSMWtFuTA+VxOk2KXhtZxRo0YEuEy1XzNasKh/fB+62KmMdeVGsV6WI5cuXVrYl4iIJ0+ejPZH/V2ZFomxCH8RTQpsiCYFNkSTgu4J9ghrGdQI9+7dK8owZHPo0CHZBmoilTXD2S8YBpqaUI/aiq9Vmgw16pS2q81+mcpYx3ASl6kwFWpx1IsRezN8Xr58OVpP7wzMGvxFNCmwIZoU2BBNCmYZ4mNQa7HuUttkMHgtayKcDff69euiDDXi5cuXi7LTp0+PtsfPiBqWdejYdRF7h9gQjp2iLuQyHvJElNbkd4zaknWvyibnmKdKEVN9q8FfRJMCG6JJwSwT7LkMh/XY3aBL5eE/zl5W7ka5eMxI5glQJ0+eLM7RVV+8eHG0fQZdGPeFXRq+A86awbDL1JAaumo1qV9lenPf+J3js6jh0Jbh2Br8RTQpsCGaFNgQTQqqNaLaj4P1gko7UnWyfkFNxENYqG1wIn5EuUATD2GpUA+3gWEYpQN5piDr4qdPnw7H/D4wLe7cuXOjfYsoQ0gcTlLpZAj/rc6cOVOcv3nzZjjmBaNqsUY0K4sN0aRgX9ZHRDhyrzKb2RVhm8pto3uLiLhw4cJwzO6fJ/HjxCLlYltGK/gc+8rPiNdyqInDW6oeNYkf3Tjfx+Gk2gUIVKjJIytmZbEhmhTYEE0KujO08Zx1xatXr4bja9euFWWoM3hNP9ZzqMtU+IQXGcI2ODOGzzHUoxYrYtSCSAyGgdR75KwdDgO9f/9+OOb3gfVwaAe159TsQ/xbtvwu8BZo5p/AhmhS0D3BHn+us0vFMAiPZGAkX61ZE6HXR0RXwK4RQ0bswjhEorYnw2fk+9BtTk2+V1ks+Fz8rjh8o7Jo8B1wSAblCL8PNenqxYsXo2Ut25bU4C+iSYEN0aTAhmhS0K0R1aI7qB9wzeyIUq+wPlEZNqzRsB4OH+GELQ6BsLZ6+/btcMw6VG2hgeccduGMH3wfPIyIek5NuooohzL5mbFe1pbqXbG+xvfFoS6VBd6y3e8i/EU0KbAhmhTYEE0KZkkDY02AM+NYk7Rk76KeY/2E9XAbmGXMeo23nkWNxDP8UN+yXsI2uX2uB/UtLziAw4r8bviZVVwV21SLWylNGFG+Oy4bq5PPHUc0K4sN0aSgO3yjsnVxGI8n52C4Ymp9RLWrJ7rtnZ2dogwnK7ErYne3vr6+8DiidHdKYqg1c7hezljHNtT2Ggw/F7p87g9m43AbnHGE4Sw1YY6p3bl0DH8RTQpsiCYFNkSTglnSwFTaE6cdqS10GaVJUGtyupLKmGb9gn3g2YCo0bhOtQiTgjUqnnPGulqnmt8dPhf/PVAjsg5HPR2xdyh1rH2Hb8w/iQ3RpKB78pTa6gBdpZrYxC5EuXFuHycScZna3V5tycbPocIQ2PepbSmUq0K3ye+DQz3YHzXRjGWEWgxAjZ60oP5WNfiLaFJgQzQpsCGaFOzLNrmoC3GRo4hynWoOZbCWUtuM4VqCvGUF6i7WQJwFjjqMZ78p8Jn5vlpNyPdOZU+PtR9R6ksuwwwk1pb8PmrXzfb2FuafxIZoUmBDNCnYly3QUK/ggkwRpUZU28ByOccYMR7ImgzTrtSeJ3yuhq0Y1G9TKzvUDgFyey1boqnr1JbCmPbF9C7C5DW0zcpiQzQpmCVDWw2NbW9vF2U3btwYjqe2DkNXzW5K7VyqhpvU7vK1iyVFlC6uJQTCMkKtV6hCNFwPhoG4rzjk+vjxY9m+Wgu7dnfSHvxFNCmwIZoU2BBNCtZ2K8djWJMoLaEWaELdt7m5WZTxVmZKB+LQHJexRkLUtSrrmUMiKgudNaLa3hbLWHepRTRZ2+EiTFtbW0UZhmh698thWrZNrpnV5y+iSYEN0aSg2jWr7RQYVabWrLl7925xvrGxMRyza8T+cD3obtV9fK3KGOcyFXbhSVAYelJbT3CISmUD8TvGergNZMptzh2WWdTGIvxFNCmwIZoU2BBNCrrDN4raydZTeuTq1avD8e3bt0fv5fUIsYz1khoaUxPc1dazPFNRZbhwGyqzulZrT7FsZsyy9VgjmpXBhmhSYEM0KeiOI9YuxtiyH4caYlN7qfDCmDg7kGcK8hrWqNF4DxQs4+fHazmmyEOMSge2pKwhy1xbe1/LcKB6DmtEszLYEE0Kql2zmtjEqE+xWuOv55M+1cZc7JfbVPfx+1HrVKvQSkvYpfZaNVTo7BuzstgQTQpsiCYF+5IGprRM79AUUzv7bpn2atuY0rqqbD/0bIt+bQnt9IZvakzMX0STAhuiSUH3Gtq9P/N7RxJUf+YKpbS0ryaPqXrV6FGvK+RrWyZE9UqDZbKqFtbX1QtjZsaGaFJgQzQpqA7fGLOf+ItoUmBDNCmwIZoU2BBNCmyIJgU2RJMCG6JJgQ3RpMCGaFLwPw2VaMhkvuYQAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] @@ -470,37 +434,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch 50: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00333]\n", - "Epoch 51: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00319]\n", - "Epoch 52: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00504]\n", - "Epoch 53: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00406]\n", - "Epoch 54: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00344]\n", - "Epoch 55: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00352]\n", - "Epoch 56: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00448]\n", - "Epoch 57: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00449]\n", - "Epoch 58: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00364]\n", - "Epoch 59: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00389]\n", - "Epoch 60: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00452]\n", - "Epoch 61: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00357]\n", - "Epoch 62: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00408]\n", - "Epoch 63: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00397]\n", - "Epoch 64: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00409]\n", - "Epoch 65: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00431]\n", - "Epoch 66: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00276]\n", - "Epoch 67: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00339]\n", - "Epoch 68: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00321]\n", - "Epoch 69: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00337]\n", - "Epoch 70: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00343]\n", - "Epoch 71: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00496]\n", - "Epoch 72: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00263]\n", - "Epoch 73: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00483]\n", - "Epoch 74: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00724]\n", - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:12<00:00, 13.85it/s]\n" + "Epoch 50: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.0064]\n", + "Epoch 51: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00488]\n", + "Epoch 52: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00691]\n", + "Epoch 53: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00507]\n", + "Epoch 54: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00373]\n", + "Epoch 55: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00488]\n", + "Epoch 56: 100%|█████████| 49/49 [00:56<00:00, 1.14s/it, loss=0.00374]\n", + "Epoch 57: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00416]\n", + "Epoch 58: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00564]\n", + "Epoch 59: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00428]\n", + "Epoch 60: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00456]\n", + "Epoch 61: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00506]\n", + "Epoch 62: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.0036]\n", + "Epoch 63: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00306]\n", + "Epoch 64: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00442]\n", + "Epoch 65: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00393]\n", + "Epoch 66: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00361]\n", + "Epoch 67: 100%|██████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.0035]\n", + "Epoch 68: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00457]\n", + "Epoch 69: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00455]\n", + "Epoch 70: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00524]\n", + "Epoch 71: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00394]\n", + "Epoch 72: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00577]\n", + "Epoch 73: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00558]\n", + "Epoch 74: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00465]\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:01<00:00, 16.23it/s]\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKIAAABzCAYAAAAbkNmRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABbUlEQVR4nO3aIQ7EMAwAwfrU/385x4tKqqzaGWxgsDJJZq21Dtjst3sBOA4hEiFEEoRIghBJECIJQiRBiCQIkYTz7uDMPLkHL3bn8c5FJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShHgxM7tX+CQhXqy1dq/wSUIkQYgkCJEEIZIgRBKESIIQSRAiCUIkQYgkCJEEIZIgRBKESIIQSTjvDvqnx5NcRBKESIIQSRAiCUIkQYgkCJEEIZIgRBL+u8oN45YK6q4AAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -512,37 +476,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch 75: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00703]\n", - "Epoch 76: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00351]\n", - "Epoch 77: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00445]\n", - "Epoch 78: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00264]\n", - "Epoch 79: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00324]\n", - "Epoch 80: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00307]\n", - "Epoch 81: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00522]\n", - "Epoch 82: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00569]\n", - "Epoch 83: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00378]\n", - "Epoch 84: 100%|█████████| 97/97 [01:15<00:00, 1.29it/s, loss=0.00442]\n", - "Epoch 85: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00387]\n", - "Epoch 86: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00523]\n", - "Epoch 87: 100%|██████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.0028]\n", - "Epoch 88: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00541]\n", - "Epoch 89: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00382]\n", - "Epoch 90: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00329]\n", - "Epoch 91: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00379]\n", - "Epoch 92: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00409]\n", - "Epoch 93: 100%|███████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.003]\n", - "Epoch 94: 100%|██████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.0042]\n", - "Epoch 95: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00496]\n", - "Epoch 96: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00296]\n", - "Epoch 97: 100%|█████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00307]\n", - "Epoch 98: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00362]\n", - "Epoch 99: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00498]\n", - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:12<00:00, 13.84it/s]\n" + "Epoch 75: 100%|█████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00369]\n", + "Epoch 76: 100%|█████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00296]\n", + "Epoch 77: 100%|█████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00641]\n", + "Epoch 78: 100%|█████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00384]\n", + "Epoch 79: 100%|█████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00447]\n", + "Epoch 80: 100%|█████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00444]\n", + "Epoch 81: 100%|██████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.0046]\n", + "Epoch 82: 100%|██████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.0053]\n", + "Epoch 83: 100%|██████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.0032]\n", + "Epoch 84: 100%|█████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00467]\n", + "Epoch 85: 100%|█████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00346]\n", + "Epoch 86: 100%|█████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00382]\n", + "Epoch 87: 100%|██████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.0034]\n", + "Epoch 88: 100%|█████████| 49/49 [00:58<00:00, 1.18s/it, loss=0.00355]\n", + "Epoch 89: 100%|█████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00478]\n", + "Epoch 90: 100%|█████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00405]\n", + "Epoch 91: 100%|█████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00465]\n", + "Epoch 92: 100%|█████████| 49/49 [00:57<00:00, 1.16s/it, loss=0.00416]\n", + "Epoch 93: 100%|█████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00372]\n", + "Epoch 94: 100%|█████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00372]\n", + "Epoch 95: 100%|█████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00492]\n", + "Epoch 96: 100%|█████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00495]\n", + "Epoch 97: 100%|█████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00486]\n", + "Epoch 98: 100%|█████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00418]\n", + "Epoch 99: 100%|█████████| 49/49 [00:58<00:00, 1.18s/it, loss=0.00563]\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:02<00:00, 16.06it/s]\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -554,37 +518,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch 100: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00304]\n", - "Epoch 101: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00281]\n", - "Epoch 102: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00374]\n", - "Epoch 103: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00435]\n", - "Epoch 104: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00424]\n", - "Epoch 105: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00353]\n", - "Epoch 106: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00509]\n", - "Epoch 107: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00329]\n", - "Epoch 108: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00366]\n", - "Epoch 109: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00379]\n", - "Epoch 110: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00335]\n", - "Epoch 111: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00367]\n", - "Epoch 112: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00427]\n", - "Epoch 113: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00236]\n", - "Epoch 114: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00235]\n", - "Epoch 115: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00248]\n", - "Epoch 116: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00408]\n", - "Epoch 117: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00376]\n", - "Epoch 118: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00507]\n", - "Epoch 119: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00283]\n", - "Epoch 120: 100%|██████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.003]\n", - "Epoch 121: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00485]\n", - "Epoch 122: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00346]\n", - "Epoch 123: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00338]\n", - "Epoch 124: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00318]\n", - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:12<00:00, 13.85it/s]\n" + "Epoch 100: 100%|████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00425]\n", + "Epoch 101: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00327]\n", + "Epoch 102: 100%|█████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.0045]\n", + "Epoch 103: 100%|████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00335]\n", + "Epoch 104: 100%|████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00341]\n", + "Epoch 105: 100%|████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00418]\n", + "Epoch 106: 100%|█████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.0032]\n", + "Epoch 107: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00503]\n", + "Epoch 108: 100%|████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00341]\n", + "Epoch 109: 100%|████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00545]\n", + "Epoch 110: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00523]\n", + "Epoch 111: 100%|████████| 49/49 [00:59<00:00, 1.21s/it, loss=0.00306]\n", + "Epoch 112: 100%|████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00472]\n", + "Epoch 113: 100%|████████| 49/49 [00:59<00:00, 1.21s/it, loss=0.00513]\n", + "Epoch 114: 100%|████████| 49/49 [00:59<00:00, 1.21s/it, loss=0.00339]\n", + "Epoch 115: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00388]\n", + "Epoch 116: 100%|████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00398]\n", + "Epoch 117: 100%|█████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.0026]\n", + "Epoch 118: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00355]\n", + "Epoch 119: 100%|████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00315]\n", + "Epoch 120: 100%|████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00346]\n", + "Epoch 121: 100%|████████| 49/49 [00:56<00:00, 1.16s/it, loss=0.00506]\n", + "Epoch 122: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00301]\n", + "Epoch 123: 100%|█████████| 49/49 [00:58<00:00, 1.19s/it, loss=0.0051]\n", + "Epoch 124: 100%|█████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.0032]\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:03<00:00, 15.74it/s]\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -596,37 +560,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch 125: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00231]\n", - "Epoch 126: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00388]\n", - "Epoch 127: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00416]\n", - "Epoch 128: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00245]\n", - "Epoch 129: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00435]\n", - "Epoch 130: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00393]\n", - "Epoch 131: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.0031]\n", - "Epoch 132: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00241]\n", - "Epoch 133: 100%|█████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.0032]\n", - "Epoch 134: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00255]\n", - "Epoch 135: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00315]\n", - "Epoch 136: 100%|████████| 97/97 [01:15<00:00, 1.29it/s, loss=0.00352]\n", - "Epoch 137: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00245]\n", - "Epoch 138: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00301]\n", - "Epoch 139: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00411]\n", - "Epoch 140: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00247]\n", - "Epoch 141: 100%|████████| 97/97 [01:14<00:00, 1.29it/s, loss=0.00238]\n", - "Epoch 142: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00269]\n", - "Epoch 143: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00374]\n", - "Epoch 144: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00252]\n", - "Epoch 145: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00443]\n", - "Epoch 146: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00534]\n", - "Epoch 147: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00356]\n", - "Epoch 148: 100%|████████| 97/97 [01:14<00:00, 1.31it/s, loss=0.00262]\n", - "Epoch 149: 100%|████████| 97/97 [01:13<00:00, 1.31it/s, loss=0.00305]\n", - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:12<00:00, 13.85it/s]\n" + "Epoch 125: 100%|████████| 49/49 [00:57<00:00, 1.17s/it, loss=0.00394]\n", + "Epoch 126: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00387]\n", + "Epoch 127: 100%|████████| 49/49 [00:58<00:00, 1.18s/it, loss=0.00382]\n", + "Epoch 128: 100%|████████| 49/49 [00:57<00:00, 1.18s/it, loss=0.00439]\n", + "Epoch 129: 100%|████████| 49/49 [00:56<00:00, 1.15s/it, loss=0.00654]\n", + "Epoch 130: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00585]\n", + "Epoch 131: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00495]\n", + "Epoch 132: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00375]\n", + "Epoch 133: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00406]\n", + "Epoch 134: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00394]\n", + "Epoch 135: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00369]\n", + "Epoch 136: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00354]\n", + "Epoch 137: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00384]\n", + "Epoch 138: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00457]\n", + "Epoch 139: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00427]\n", + "Epoch 140: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00319]\n", + "Epoch 141: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00419]\n", + "Epoch 142: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00412]\n", + "Epoch 143: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00397]\n", + "Epoch 144: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00292]\n", + "Epoch 145: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00397]\n", + "Epoch 146: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00364]\n", + "Epoch 147: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00406]\n", + "Epoch 148: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00449]\n", + "Epoch 149: 100%|████████| 49/49 [00:55<00:00, 1.14s/it, loss=0.00239]\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [01:01<00:00, 16.37it/s]\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKIAAABzCAYAAAAbkNmRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAABY0lEQVR4nO3ZsQ3EMAwAMfuR/VfWr+AmyCEhaxUqDmq0Z2YWPOz39AKwlhCJECIJQiRBiCQIkQQhkiBEEoRIwnU6uPe+cw9e7OR55yKSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJEGIJAiRBCGSIEQShEiCEEkQIglCJOE6HZyZO/fg41xEEoRIghBJECIJQiRBiCQIkQQhkiBEEv4g0QrjVFpv/gAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -638,7 +602,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "train completed, total time: 11627.830752849579.\n" + "train completed, total time: 8859.028432130814.\n" ] } ], @@ -703,7 +667,7 @@ " val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n", "\n", " # Sampling image during training\n", - " image = torch.randn((1, 1, 32, 48, 32))\n", + " image = torch.randn((1, 1, 32, 40, 32))\n", " image = image.to(device)\n", " scheduler.set_timesteps(num_inference_steps=1000)\n", " with autocast(enabled=True):\n", @@ -737,7 +701,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAAILCAYAAADv64riAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB7LUlEQVR4nO3dd1gU1/4G8He20KuAIIINBWPvlSjWWNDERL0pGluaxp/15moSr4kxemOiJteYxJvY0puxJMYWJdHYe++INBGRXha2ze8PZNwRUFZ2ZUfez/PwuDv17JcF3z2cOSOIoiiCiIiIiKiaUlV1A4iIiIiIqhIDMRERERFVawzERERERFStMRATERERUbXGQExERERE1RoDMRERERFVawzERERERFStMRATERERUbXGQExERERE1RoDMRGRA1q7di0iIiIQERGBpKSkqm4OEdFDTVPVDSCi6m3kyJE4ePAgGjdujA0bNlR1cxyGt7c3GjduDADQarVV3Jr7k5ubiw0bNmDv3r04f/48MjMzodfr4eHhgTp16qBNmzaIjo5G8+bNq7qpRFTNCaIoilXdCCKqvhiIH07ffPMN/vvf/yInJwcA4OzsjICAAKjValy/fh1FRUXStr169cLcuXPh5+dXVc0lomqOPcRERGRTs2fPxo8//ggAaNOmDV599VV06NABTk5OAABRFHHs2DGsXr0aW7duxY4dO3D58mX88MMPqFGjRlU2nYiqKY4hJiIim1m9erUUhkeNGoXvvvsOkZGRUhgGAEEQ0KZNGyxZsgRvvPEGACA+Pl56TET0oLGHmIgULyEhAV9++SX27t2L69evw2w2w9/fH+3bt8eIESPQrFmzcvdNTEzE119/jf379yMxMRFFRUXw8PBAo0aNMGDAAPzjH/+ARlP6V2VERAQAYPHixahXrx7ee+89nD59Gr6+voiJiQEAPPnkkzhz5gyee+45zJ49G3///Te+/PJLnD17Fjk5OfD19UXHjh3x6quvon79+rLjr127Fq+//joAYMeOHQgJCQEAXLx4EYMGDQIArFmzBhEREVi5ciV+//13JCUlwWw2o06dOhgwYADGjRsnC6IlDAYDvvnmG/z222+Ii4uDSqVCgwYNMHz4cAwdOhTffvst5s6dC19fX+zfv7/C34eMjAx89NFHAIAuXbrg9ddfhyAId91n1KhROHTo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7Vi3bh1OnjyJxMREuLu7o2HDhoiMjMTw4cNL3UlQpVJh4cKF6NevH3799VecPn0aN2/exI0bN+Du7o7WrVujW7dueO6552QXQRKRfQliZeesISKih8p7772HVatWISIiAr/++mtVN4eIyO44hpiIqJoRRRG5ubnlri+Z/iw4OPhBNYmIqEoxEBMRVSOzZ89G69atMXTo0DLn901JSZHG5NrqgjUiIkfHQExEVI20b98eOp0OV69exeuvvy6bdi4uLg6vvvoqDAYDfH19MWTIkCpsKRHRg8MxxERE1cw777yDb7/9FkDxhWvBwcEwGo1ITk4GUDwt3SeffFKp6deIiJSEgZiIqBr6+++/8f333+PSpUtITU2FWq1GSEgIunbtilGjRkk3xSAiqg4YiImIiIioWuMYYiIiIiKq1nhjjkpISyt/2qLKUqkE1KjhjoyMfJjN7MS/F9ar4lgr67Be1mG9Ko61sg7rZR3W67aAAM97bsMeYgelUgkQBAEq1f3fKao6Yb0qjrWyDutlHdar4lgr67Be1mG9rMNATERERETVGgMxEREREVVrDMREREREVK0xEBMRERFRtcZATERERETVGgMxEREREVVrDMREREREVK0xEBMRERFRtcZATERERETVGgMxEREREVVrDMREREREVK0xEBMRERFRtcZATERERETVGgMxEREREVVrDMREREREVK0xEBMRERFRtaap6gbQvd3ILMDyjedQy88No/s3hiAIVd0kIiIiusO8eW9j8+aNFdr2jTfewoABgyp9zsjIdmjVqg2WLv280seqzhiIFWDPqeu4nJyNy8nZ6N0uFKE1Paq6SURERHSHsWNfwlNPDZcte+GF51GvXn3MmjVHtrxWrWCbnHP58q/g5uZmk2NVZwzECqA3mqTHuiJjFbaEiIiIylOrVnCZQdfZ2QWNGze5676iKMJkMkGjsS6a3eu4VDEcQ6wAKoshEqIoVmFLiIiIyBZWrPgfIiPb4ejRw5gyZQJ69eqKbds2S+s3b96IV14Zi4EDe6FXr6549tmn8Pnnn6KgIF92nMjIdpg48SXp+bJlSxEZ2Q5xcVfw3//+F088MQA9e3bB008PwXfffcUcUQ72ECuASnU7EJv5PiYiInpofPHFZ2jWrAVGj34BISGhAICff/4B//3vQnTv3gNjx74EjUaDPXv+xldfrURC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IttiIFYYizzMO9URERER2QADscJwlgkiIiIi22IgVhiOISYiIiKyLQZihbGcZUJkIiYiIiKqNAZiheE8xERERES2xUCsMIKKQyaIiIiIbImBWGEse4g5ZIKIiIio8hiIFYazTBARERHZFgOxwljOQ8xATERERFR5DMQKI1heVGeuwoYQERERPSQYiBWGs0wQERER2RYDscKoLL5jvHUzERERUeUxECuMrIeYs0wQERERVRoDscKoOA8xERERkU0xECuMwFkmiIiIiGyKgVhheGMOIiIiIttiIFYYzjJBREREZFsMxAojcAwxERERkU0xECuM5Z3qOGSCiIiIqPIYiBVGPssEAzERERFRZTEQK4wADpkgIiIisiUGYoWR9RAzERMRERFVGgOxwsjGEHPIBBEREVGlMRArDMcQExEREdkWA7HCyOYhNldhQ4iIiIgeEgzECsMeYiIiIiLbYiBWGIshxAzERERERDbAQKwwlj3EvDEHERERUeUxECuMbAwx8zARERFRpTEQK4xg8R3jkAkiIiKiymMgVhjLHmIOmSAiIiKqPAZiheGQCSIiIiLbYiBWGEHgtGtEREREtsRArDAqi+8Yb91MREREVHkMxAojv1MdAzERERFRZTEQK4z8TnVV2BAiIiKihwQDscKwh5iIiIjIthiIFcYiD/OiOiIiIiIbYCBWGBVnmSAiIiKyKQZihbEcQ8w8TERERFR5DMQKwzHERERERLbFQKwwgsV3jEMmiIiIiCqPgVhhLHuIRXMVNoSIiIjoIcFArDC8qI6IiIjIthiIFYbTrhERERHZFgOxwshnmWAgJiIiIqosBmKFkc8yUYUNISIiInpIaKq6AXezZs0arFq1CgkJCfD19cXgwYMxadIkODk5lbm9Xq/HkiVL8NtvvyE9PR116tTBuHHj8NRTT0nb9OzZE8nJyaX2bdSoETZu3Gi312Irlj3EHDJBREREVHkOG4jXr1+PWbNmYebMmejduzcuX76MmTNnIjs7G3Pnzi1zn7fffhsxMTGYN28eIiIiEBMTgzfffBNOTk4YNGiQtN3YsWMxduxY2b4ajcOWQoZjiImIiIhsy2GHTCxduhQDBw7E6NGjERISgqioKEyePBlr1qxBSkpKqe2TkpKwbt06TJs2Db169UJISAief/559O/fH0uXLpVt6+bmhoCAANmXr6/vg3pp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\n", + "image/png": "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EhIS4ObmhoYNGyIiIgLPPfdciScJqlQqzJ8/H3369MG6detw6tQp3Lx5Ezdu3ICbmxtatWqFrl274qWXXpLdBElElUsQK7pmDRERPVQ++OADLF++HOHh4Vi3bl1VD4eIqNKxh5iIqJoRRRE5OTll7rcsfxYUFPSghkREVKUYiImIqpEZM2agVatWGDx4cKnr+yYnJ0s9ufa6YY2IyNExEBMRVSPt2rVDQUEBrly5grfeeku27FxcXBzefPNNGAwG+Pj4YNCgQVU4UiKiB4c9xERE1cysWbPw/fffAyi+cS0oKAhGoxFJSUkAipel++yzzyq0/BoRkZIwEBMRVUN///03fvzxR1y8eBEpKSlQq9UIDg5Gly5dMGzYMOmhGERE1QEDMRERERFVa+whJiIiIqJqjQ/mqIDU1LKXLaoolUpAjRpuSE/Pg9nMSfx7Yb3Kj7WyDetlG9ar/Fgr27BetmG9bvP397jnMZwhdlAqlQBBEKBS3f+ToqoT1qv8WCvbsF62Yb3Kj7WyDetlG9bLNgzERERERFStMRATERERUbXGQExERERE1RoDMRERERFVawzERERERFStMRATERERUbXGQExERERE1RoDMRERERFVawzERERERFStMRATERERUbXGQExERERE1RoDMRERERFVawzERERERFStMRATERERUbXGQExERERE1RoDMRERERFVa5qqHgDd242MfCzZcBa1fF0xvG9jCIJQ1UMiIiKiO8yZ8x42bdpQrmPffvtd9Os3oMKvGRHRFi1btsbixV9W+FrVGQOxAuw+eR2XkrJwKSkLPduGIKSme1UPiYiIiO4wcuRreOaZ52TbXnnlZdStWw/Tp8+Uba9VK8gur7lkyTdwdXW1y7WqMwZiBdAbTdLbBUXGKhwJERERlaVWraBSg66TkzMaN25y13NFUYTJZIJGY1s0u9d1qXzYQ6wAKqsWCVEUq3AkREREZA9Ll/4PERFtceTIIUyYMAY9enTB1q2bpP2bNm3AG2+MRP/+PdCjRxe8+OIz+PLLz5Gfnye7TkREW4wd+5r0fnT0YkREtEVc3GX897//xVNP9cPjj3fG888Pwg8/fMMcUQbOECuAdc+wmZ/HRERED42vvvoCTZs2x/DhryA4OAQA8OuvP+G//52Pbt26Y+TI16DRaLB799/45ptliI+/ivffn1fm9bRa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\n", "text/plain": [ "
" ] @@ -775,7 +739,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "id": "092eb6a0", "metadata": { "lines_to_next_cell": 2 @@ -785,13 +749,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [04:18<00:00, 3.87it/s]\n" + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [03:45<00:00, 4.44it/s]\n" ] } ], "source": [ "model.eval()\n", - "noise = torch.randn((1, 1, 32, 48, 32))\n", + "noise = torch.randn((1, 1, 32, 40, 32))\n", "noise = noise.to(device)\n", "scheduler.set_timesteps(num_inference_steps=1000)\n", "image = inferer.sample(input_noise=noise, diffusion_model=model, scheduler=scheduler)" @@ -799,13 +763,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "id": "5dc3e69d", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfAAAAG7CAYAAAA8M8dJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsX0lEQVR4nO3d2W/dV9n28btksJM4cWwnjus0Tlq3GVpK2qaItCk8LRTUAZVWCCTEEUjwJ3DE3wDHHCHBMXBQqgpUqbRpOik0pYEOmZpmcBI7sR07tjO2zwHi0av3XdfF3qu/bHw/7/dzuFbX9m//prtbWlfuWz777LPPAgAApPKF//QBAACA9lHAAQBIiAIOAEBCFHAAABKigAMAkBAFHACAhCjgAAAkRAEHACChpa3+h93d3XLu008/LY7X/Bsxt9xyS9WcUvvv1Ki/5T5PrXHH/YUv6P+Hun79etuf59SsU9e26b9T+3nq+Jo+Bqfp+1zdEzXXwmn6XnZzN27cKI6771RzDTu1JqLuuqtr694D7hx16t/hcsenrm0nz2uNpuuJ+zy1zp3Xy5cv/9vj4Rc4AAAJUcABAEiIAg4AQEIUcAAAEqKAAwCQEAUcAICEWo6RdSrK4D6rdgt/03+ryTXXrl1re03tMahz5KIMTUfPauJ5i0En43Tqby2GyJXTqXPU9L3iPs89GzWfV3PsS5YskXMqwqUiqP/uGJYuLZcE9Xfc5zUduapZ49QcXyfrUyv4BQ4AQEIUcAAAEqKAAwCQEAUcAICEKOAAACTU8i70pncAdkrTx+bOg9rBOTAwINesWbNGzqmdn8uWLZNrli9fLudOnTpVHJ+enpZrmt4RXfOP+jtqnbvuNc13anbqN53ccMdQsxO4k6mOJnWyWU7NfdTT0yPXjI6OFsc3bNgg17gd4Js3by6O/+1vf5NrxsbG5NyWLVuK4+rdFhFx9uzZ4vjMzIxcc+HCBTnXdJqhU4mimufp8zYo4hc4AAAJUcABAEiIAg4AQEIUcAAAEqKAAwCQEAUcAICEbvmsxf3yLp60mGNkLl7gmgRs27atOP7www/LNXfddVdxfOXKlXKNiwZ1d3cXx7u6uuQaF/dQ0Y3Tp0/LNSp6Nj8/L9dMTEzIORVZu3z5cttrInTEZnZ2Vq65cuWKnKtRc/8v9mYO6r6sibL9u7l2dfJ942I+IyMjxfFvfvObcs2dd95ZHF+xYoVcMzk5KecGBweL465J0tGjR+XcvffeWxx3z7uKi7kY2f79++Xce++9Vxx3z7RTE7Fsmnp23TPdynuKX+AAACREAQcAICEKOAAACVHAAQBIiAIOAEBCLTczcbtP3T+2367anbZqndvd+eyzz8q5//qv/yqOu13eare52415/fp1Oae+k9ux7ahdja75wp49e4rjaod8RMT4+Lic6+/vL467Xa5HjhyRczXf6eOPPy6O/+lPf5JranbAunu5phlMp3a7u7naJjY1a2p24zs1u5G/853vyLn77ruvOO5SJ7fddltx3DU1co1O1HvZPU/r1q2Tc2vXri2Ou/eeaq6kkjwR+jy4v/XJJ5/INa45inr/dup+vZn4BQ4AQEIUcAAAEqKAAwCQEAUcAICEKOAAACREAQcAIKGWY2Sdir3UHsPAwEBx/Kc//alcs3379rb/lovMXb16ta3Pcmvc3OrVq+UaF3dSTQxc4wPV8EXFwSL8P8J/6dKl4riLttTEXvr6+uQadd2/9rWvyTV79+6Vc2+99VZx3DWJaToSpu6x2shVzTE03VBFqY2yqbkf/vCHcs33v/99OTc3N1ccVw2AInTsy8Uy3fOunrWFhQW5xr3DpqamiuMulqneve4YXCxZNXx55JFH5Bp33fft21ccf/311+UaFdWtbdjT9HP4L/wCBwAgIQo4AAAJUcABAEiIAg4AQEIUcAAAEqKAAwCQUMsxsho1W+ddRGTLli1y7mc/+1lxfNWqVXLN8uXL5ZyKEbjuZoqLYLjogfpbLp4xNjYm51TnM9cZSHUacsetol1unbvuIyMjck4dn+vgdPLkyeL4xo0b5ZrHH39czn37298ujrvuZs8//7ycU1G7pmOZNZGrpuMwNZEwdwzqfoiIeOaZZ4rjTz31lFzjugWqeGNNLNN9J9cJzHUdq/k8FUNVxx0RMTw8XBx336mrq0vOrV+/vjh+xx13yDWu4+MTTzxRHFfHHRHxhz/8oThec75vJn6BAwCQEAUcAICEKOAAACREAQcAICEKOAAACf3HdqGrHbVux/bPf/5zOaeaa7jmHm4Xutp16XZjqjm3c93twlXUDvkIvwO2Ztesam7gmi+476R2n7rz6o5PNUVw50jtcnXH4HaAqx3v3/ve9+SaBx98UM794he/KI675ihK7c71mrRAjZp3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9ho1pyJpET6ed8899xTHR0ZG5Jpf/epXck5F4NT9FVEX76qJedLMBFg8+AUOAEBCFHAAABKigAMAkBAFHACAhCjgAAAkRAEHACChlmNknYqPuBjU008/LedUNKi3t1eumZ+fl3MqsuOiPOocuc5YrhuZ+k7uHLnuUwsLC22vuXHjRnHcRa4uX74s55YsWVIcd+dIHUOEjgm6NTUd1lwXur6+vuK4u1e2bdsm595///3i+PXr1+WamufTraHrGLD48QscAICEKOAAACREAQcAICEKOAAACVHAAQBIqJFmJkrNLtdHH31UrlFNIyL0jl+309ztRlaf19XVJdeoXeOuYYnbqbx69eriuDtut1NZzbkdx2pu2bJlco3b1a52jbumMzXn3H2n2dlZOaeo3fMRese7O0e7d++WcxcuXCiOj42NyTVKbXpErWN3OrB48AscAICEKOAAACREAQcAICEKOAAACVHAAQBIiAIOAEBCjcTIaqIlKmJz2223yTUuaqQiV66phZtT8TO3RkWNenp65BoXuVLn1UWDXMRMxbFclE1ZsWKFnJubm5Nz6vu6+JuLAs7MzBTHXfRMNSapubYR+vjcmoGBATl3//33F8fPnj0r16hjd8+mu+7ExYDFj1/gAAAkRAEHACAhCjgAAAlRwAEASIgCDgBAQi3vQq/Zlep2S/f29hbHV65cKde43c233npr28fgdrUr7jwsLCwUx11TC7cTWO1ed2uuXLnS9pz7TurY3W53dW0jdGMXt6t91apVcm5iYqI4funSJblG7YR336mmmYnbCT81NdX257k0w/T0tJxT3HWnmQmw+PELHACAhCjgAAAkRAEHACAhCjgAAAlRwAEASIgCDgBAQo3EyFTkxDXqWLt2bXF8aGhIrnExGhWRqlkToSNhLhqk4j8qOhURMTg4KOdUrKkmKhYRcerUqeK4a5KhruHy5cvlmnXr1sk51XSmu7tbrnHXUDUFcZHDkydPFsfPnDnT9t+J0I1YXCytJjannpkI3dTFNWhxzzRxMWDx4xc4AAAJUcABAEiIAg4AQEIUcAAAEqKAAwCQEAUcAICEWo6Rua5eKnLiOjht3769ON7f3y/XuEjMiRMniuOqS1mE73ymYlIuGqeiUO7vuE5bqluai0jt3btXzh0+fLitvxOho0vu2qpYVYQ+Fy5y5SJmjz/+eHH8i1/8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\n", "text/plain": [ "
" ] @@ -816,7 +780,7 @@ ], "source": [ "plt.style.use(\"default\")\n", - "plotting_image_0 = np.concatenate([image[0, 0, :, :, 15].cpu(), np.flipud(image[0, 0, :, 24, :].cpu().T)], axis=1)\n", + "plotting_image_0 = np.concatenate([image[0, 0, :, :, 15].cpu(), np.flipud(image[0, 0, :, 20, :].cpu().T)], axis=1)\n", "plotting_image_1 = np.concatenate([np.flipud(image[0, 0, 15, :, :].cpu().T), np.zeros((32, 32))], axis=1)\n", "plt.imshow(np.concatenate([plotting_image_0, plotting_image_1], axis=0), vmin=0, vmax=1, cmap=\"gray\")\n", "plt.tight_layout()\n", @@ -824,13 +788,72 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "id": "387365a9", + "metadata": {}, + "source": [ + "### Sampling with Denoising Diffusion Scheduler" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "id": "e3e43b95", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 250/250 [00:55<00:00, 4.52it/s]\n" + ] + } + ], + "source": [ + "scheduler_ddim = DDIMScheduler(\n", + " num_train_timesteps=1000,\n", + " beta_schedule=\"scaled_linear\",\n", + " beta_start=0.0005,\n", + " beta_end=0.0195,\n", + " clip_sample=False\n", + ")\n", + "\n", + "scheduler_ddim.set_timesteps(num_inference_steps=250)\n", + "\n", + "model.eval()\n", + "noise = torch.randn((1, 1, 32, 40, 32))\n", + "noise = noise.to(device)\n", + "\n", + "image = inferer.sample(input_noise=noise, diffusion_model=model, scheduler=scheduler_ddim)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "1d7858c8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfAAAAG7CAYAAAA8M8dJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAf+klEQVR4nO3d2Y8d1dU34DJ4atojHmUmm8lJFIlcRLK4yCRFuc9/nItIUdBLBgUiAZGBGOy42+2pbbfbA7wX3030fvVbdG+O7V7meS73ZlfXqapzFiXtn9eub7/99tsJAGjlhWd9AgDA9ingANCQAg4ADSngANCQAg4ADSngANCQAg4ADSngANDQ7i3/h7vzf/pD+rdgdu3a9axPYUf4Id3zH6JFP+eeF/j/Vd+zR48efed6b+AA0JACDgANKeAA0JACDgANKeAA0JACDgANbTlGJgby/7gO/BB4zuHJ+77fM2/gANCQAg4ADSngANCQAg4ADSngANDQlnehM676B+tffPHFoXXJN998s+25aidkmtPUBZ6Oke/aolME1TlILDw73sABoCEFHAAaUsABoCEFHAAaUsABoCEFHAAa+kHHyEaiES+99FJc8/bbb8+Onz17Nq5ZXl6OcyliNhrpePDgwez4rVu34povv/xydvyrr76KazY2NuLc48eP4xz8UFXf6RdeyO9ZaW4kTjpN07R3797Z8er8Hj58ODvuu/7keQMHgIYUcABoSAEHgIYUcABoSAEHgIZ2fbvFf4m+arqxE6RdktWOy6WlpTj385//fHb8nXfeiWtGrtGim4JUt3OkmUla8+jRo7im2oW+srIyO/7pp5/GNWtra3Eu7XQdabCgQQvbkXaA79mzJ67Zv3//7PixY8fimiNHjsS5AwcOzI7fu3cvrknfwWnKv2/Vd+P27duz49euXYtrLl++HOdSWqb6LX8ebWUXvzdwAGhIAQeAhhRwAGhIAQeAhhRwAGhIAQeAhp77GFkV+3r//ffjXGpashOiDCOxr2nKTQdGGh+MNl9I69K5TdM0ff3113EuRcyqc0gxldXV1bgmRWWmKUfqRqJs7CxVs6F33313dryKhKVmIQcPHoxrUvRsmqZp9+75flTr6+txzaVLl+JcashURePSdzd9z6apjrLdv39/dvzf//53XHPlypU4txN+s0eIkQHAc0oBB4CGFHAAaEgB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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.style.use(\"default\")\n", + "plotting_image_0 = np.concatenate([image[0, 0, :, :, 15].cpu(), np.flipud(image[0, 0, :, 20, :].cpu().T)], axis=1)\n", + "plotting_image_1 = np.concatenate([np.flipud(image[0, 0, 15, :, :].cpu().T), np.zeros((32, 32))], axis=1)\n", + "plt.imshow(np.concatenate([plotting_image_0, plotting_image_1], axis=0), vmin=0, vmax=1, cmap=\"gray\")\n", + "plt.tight_layout()\n", + "plt.axis(\"off\")\n", + "plt.show()" + ] } ], "metadata": { diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py index 41c4960f..f8d9ac22 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py @@ -61,7 +61,7 @@ from generative.inferers import DiffusionInferer from generative.networks.nets import DiffusionModelUNet -from generative.networks.schedulers import DDPMScheduler +from generative.networks.schedulers import DDPMScheduler, DDIMScheduler print_config() @@ -83,46 +83,35 @@ # ## Set deterministic training for reproducibility # %% -set_determinism(0) +set_determinism(42) # %% [markdown] # ## Setup Decathlon Dataset and training and validation dataloaders # %% -train_transform = Compose( +data_transform = Compose( [ LoadImaged(keys=["image"]), Lambdad(keys="image", func=lambda x: x[:, :, :, 1]), AddChanneld(keys=["image"]), ScaleIntensityd(keys=["image"]), - CenterSpatialCropd(keys=["image"], roi_size=[176, 224, 155]), - Resized(keys=["image"], spatial_size=(32, 48, 32)), - ] -) - -val_transform = Compose( - [ - LoadImaged(keys=["image"]), - Lambdad(keys="image", func=lambda x: x[:, :, :, 1]), - AddChanneld(keys=["image"]), - ScaleIntensityd(keys=["image"]), - CenterSpatialCropd(keys=["image"], roi_size=[176, 224, 155]), - Resized(keys=["image"], spatial_size=(32, 48, 32)), + CenterSpatialCropd(keys=["image"], roi_size=[160, 200, 155]), + Resized(keys=["image"], spatial_size=(32, 40, 32)), ] ) # %% train_ds = DecathlonDataset( - root_dir=root_dir, task="Task01_BrainTumour", transform=train_transform, section="training", download=True + root_dir=root_dir, task="Task01_BrainTumour", transform=data_transform, section="training", download=True ) -train_loader = DataLoader(train_ds, batch_size=4, shuffle=True, num_workers=8) +train_loader = DataLoader(train_ds, batch_size=8, shuffle=True, num_workers=8, persistent_workers=True) val_ds = DecathlonDataset( - root_dir=root_dir, task="Task01_BrainTumour", transform=val_transform, section="validation", download=True + root_dir=root_dir, task="Task01_BrainTumour", transform=data_transform, section="validation", download=True ) -val_loader = DataLoader(val_ds, batch_size=4, shuffle=False, num_workers=8) +val_loader = DataLoader(val_ds, batch_size=8, shuffle=False, num_workers=8, persistent_workers=True) # %% [markdown] @@ -154,11 +143,16 @@ ) model.to(device) -scheduler = DDPMScheduler(num_train_timesteps=1000) +scheduler = DDPMScheduler( + num_train_timesteps=1000, + beta_schedule="scaled_linear", + beta_start=0.0005, + beta_end=0.0195 +) inferer = DiffusionInferer(scheduler) -optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5) +optimizer = torch.optim.Adam(params=model.parameters(), lr=5e-5) # %% [markdown] @@ -225,7 +219,7 @@ val_epoch_loss_list.append(val_epoch_loss / (step + 1)) # Sampling image during training - image = torch.randn((1, 1, 32, 48, 32)) + image = torch.randn((1, 1, 32, 40, 32)) image = image.to(device) scheduler.set_timesteps(num_inference_steps=1000) with autocast(enabled=True): @@ -266,7 +260,7 @@ # %% model.eval() -noise = torch.randn((1, 1, 32, 48, 32)) +noise = torch.randn((1, 1, 32, 40, 32)) noise = noise.to(device) scheduler.set_timesteps(num_inference_steps=1000) image = inferer.sample(input_noise=noise, diffusion_model=model, scheduler=scheduler) @@ -274,11 +268,38 @@ # %% plt.style.use("default") -plotting_image_0 = np.concatenate([image[0, 0, :, :, 15].cpu(), np.flipud(image[0, 0, :, 24, :].cpu().T)], axis=1) +plotting_image_0 = np.concatenate([image[0, 0, :, :, 15].cpu(), np.flipud(image[0, 0, :, 20, :].cpu().T)], axis=1) plotting_image_1 = np.concatenate([np.flipud(image[0, 0, 15, :, :].cpu().T), np.zeros((32, 32))], axis=1) plt.imshow(np.concatenate([plotting_image_0, plotting_image_1], axis=0), vmin=0, vmax=1, cmap="gray") plt.tight_layout() plt.axis("off") plt.show() +# %% [markdown] +# ### Sampling with Denoising Diffusion Scheduler + # %% +scheduler_ddim = DDIMScheduler( + num_train_timesteps=1000, + beta_schedule="scaled_linear", + beta_start=0.0005, + beta_end=0.0195, + clip_sample=False +) + +scheduler_ddim.set_timesteps(num_inference_steps=250) + +model.eval() +noise = torch.randn((1, 1, 32, 40, 32)) +noise = noise.to(device) + +image = inferer.sample(input_noise=noise, diffusion_model=model, scheduler=scheduler_ddim) + +# %% +plt.style.use("default") +plotting_image_0 = np.concatenate([image[0, 0, :, :, 15].cpu(), np.flipud(image[0, 0, :, 20, :].cpu().T)], axis=1) +plotting_image_1 = np.concatenate([np.flipud(image[0, 0, 15, :, :].cpu().T), np.zeros((32, 32))], axis=1) +plt.imshow(np.concatenate([plotting_image_0, plotting_image_1], axis=0), vmin=0, vmax=1, cmap="gray") +plt.tight_layout() +plt.axis("off") +plt.show() From 26172c0dc2e77217036f84740da72cc8e5141ac9 Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Mon, 20 Mar 2023 20:13:39 +0000 Subject: [PATCH 2/3] Update tutorial Signed-off-by: Walter Hugo Lopez Pinaya --- .../generative/3d_ddpm/3d_ddpm_tutorial.ipynb | 117 ++++++++++++++++-- .../generative/3d_ddpm/3d_ddpm_tutorial.py | 48 ++++++- 2 files changed, 149 insertions(+), 16 deletions(-) diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb index 03a01157..f3730bcd 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb @@ -7,7 +7,7 @@ "source": [ "# Denoising Diffusion Probabilistic Model on 3D data\n", "\n", - "This tutorial illustrates how to use MONAI for training a denoising diffusion probabilistic model (DDPM)[1] to create synthetic 3D images.\n", + "This tutorial illustrates how to use MONAI for training a denoising diffusion probabilistic model (DDPM)[1] to create synthetic 3D images. \n", "\n", "[1] - [Ho et al. \"Denoising Diffusion Probabilistic Models\"](https://arxiv.org/abs/2006.11239)\n", "\n", @@ -168,7 +168,18 @@ "id": "29d8c601", "metadata": {}, "source": [ - "## Setup Decathlon Dataset and training and validation dataloaders" + "## Setup Decathlon Dataset and training and validation data loaders\n", + "\n", + "In this tutorial, we will use the 3D T1 weighted brain images from the [2016 and 2017 Brain Tumor Segmentation (BraTS) challenges](https://www.med.upenn.edu/sbia/brats2017/data.html). This dataset can be easily downloaded using the [DecathlonDataset](https://docs.monai.io/en/stable/apps.html#monai.apps.DecathlonDataset) from MONAI (`task=\"Task01_BrainTumour\"`). To load the training and validation images, we are using the `data_transform` transformations that are responsible for the following:\n", + "\n", + "1. `LoadImaged`: Loads the brain images from files.\n", + "2. `Lambdad`: Choose channel 1 of the image, which is the T1-weighted image.\n", + "3. `AddChanneld`: Add the channel dimension of the input data.\n", + "4. `ScaleIntensityd`: Apply a min-max scaling in the intensity values of each image to be in the `[0, 1]` range.\n", + "5. `CenterSpatialCropd`: Crop the background of the images using a roi of size `[160, 200, 155]`.\n", + "6. `Resized`: Resize the images to a volume with size `[32, 40, 32]`.\n", + "\n", + "For the data loader, we are using mini-batches of 8 images, which consumes about 21GB of GPU memory during training. Please, reduce this value to run on smaller GPUs." ] }, { @@ -293,7 +304,11 @@ "id": "d22296e5", "metadata": {}, "source": [ - "### Define network, scheduler, optimizer, and inferer" + "### Define network, scheduler, optimizer, and inferer\n", + "\n", + "We will use a DDPM in this example; for that, we need to define a `DiffusionModelUNet` network that will have as input the noisy images and the values for the timestep `t`, and it will predict the noise that is present in the image.\n", + "\n", + "In this example, we have a network with three levels (with 256, 256, and 512 channels in each). In every level, we will have two residual blocks, and only the last one will have an attention block with a single attention head (with 512 channels)." ] }, { @@ -317,14 +332,80 @@ " num_res_blocks=2,\n", ")\n", "model.to(device)\n", - "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "47ad91ff", + "metadata": {}, + "source": [ + "Together with our U-net, we need to define the Noise Scheduler for the diffusion model. This scheduler is responsible for defining the amount of noise that should be added in each timestep `t` of the diffusion model's Markov chain. Besides that, it has the operations to perform the reverse process, which will remove the noise of the images (a.k.a. denoising process). In this case, we are using a `DDPMScheduler`. Here we are using 1000 timesteps and a `scaled_linear` profile for the beta values (proposed in [Rombach et al. \"High-Resolution Image Synthesis with Latent Diffusion Models\"](https://arxiv.org/abs/2112.10752)). This profile had better results than the `linear, proposed in the original DDPM's paper. In `beta_start` and `beta_end`, we define the limits for the beta values. These are important to determine how accentuated is the addition of noise in the image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c1de5ad", + "metadata": {}, + "outputs": [], + "source": [ "scheduler = DDPMScheduler(\n", " num_train_timesteps=1000,\n", " beta_schedule=\"scaled_linear\",\n", " beta_start=0.0005,\n", " beta_end=0.0195\n", - ")\n", - "\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "36d3e99a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'alpha cumprod')" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQJklEQVR4nO3dd1hT9/4H8HcSIIBskSAawYkDFAVFwFGViru2t631el0d99afddH2VltHq1Xs9rZavbXaem+HdtrWbVFEERVRFBxgFQUHS2QIQiA5vz+MuaYiEkw4Ge/X8+SRfHOSfHJazZvzXRJBEAQQERERWQmp2AUQERERGRPDDREREVkVhhsiIiKyKgw3REREZFUYboiIiMiqMNwQERGRVWG4ISIiIqtiJ3YBTU2j0eDq1atwdXWFRCIRuxwiIiJqAEEQUF5eDj8/P0il9V+bsblwc/XqVSiVSrHLICIiokbIzc1F69at6z3G5sKNq6srgNsnx83NTeRqiIiIqCHKysqgVCp13+P1sblwc6crys3NjeGGiIjIwjRkSAkHFBMREZFVYbghIiIiq8JwQ0RERFaF4YaIiIisCsMNERERWRWGGyIiIrIqDDdERERkVRhuiIiIyKow3BAREZFVYbghIiIiqyJquElMTMTo0aPh5+cHiUSCzZs3P/A5CQkJ6NWrF+RyOTp06IAvv/zS5HUSERGR5RA13FRUVKBHjx5YtWpVg47Pzs7GyJEjMWjQIKSlpWH27Nl4/vnnsXPnThNXSkRERJZC1I0zhw8fjuHDhzf4+DVr1qBt27b44IMPAABdunTBgQMH8NFHHyEmJsZUZTZITkUFph85guc7dMDIVq1gJ2WPHxERkRgsalfw5ORkREdH67XFxMRg9uzZ931OdXU1qqurdffLyspMUtv6P/7AtitXsO3KFfg5OWFq+/Z4tkMHBLi4mOT9iIiIqG4WdXkhLy8PCoVCr02hUKCsrAy3bt2q8zlxcXFwd3fX3ZRKpUlq+/3aNd3PV2/dwtKMDHTYvBnD4+PxU04OajUak7wvERER6bOocNMY8+bNQ2lpqe6Wm5trkvfZN3Qofhs0CI8plZBJJAAAAcCua9fwVGIiOv3yCz46fRqlKpVJ3p+IiIhus6huKV9fX+Tn5+u15efnw83NDU5OTnU+Ry6XQy6Xm7w2mVSKEa1aYUSrVrhaWYkvz5/Huj/+wMWKCgDApYoKvHLsGN5KT8ez7dtjRufOaMsuKyIiIqOzqCs3ERERiI+P12vbvXs3IiIiRKqobn7Ozng9OBjnxo7FtsGDMdzPT/dYeU0N/nX2LDr98gvG79+PjJIS8QolIiKyQqKGm5s3byItLQ1paWkAbk/1TktLQ05ODoDbXUqTJk3SHf/iiy/iwoUL+Oc//4mzZ8/i008/xXfffYc5c+aIUf4DSSUSxPj5YcvgwcgYPRovdOgAR5kMAKARBHx36RJ6bNmCpxITceLGDZGrJSIisg4SQRAEsd48ISEBgwYNuqd98uTJ+PLLLzFlyhRcvHgRCQkJes+ZM2cOTp8+jdatW2PBggWYMmVKg9+zrKwM7u7uKC0thZubmxE+hWEKq6rw2blz+OTsWRTeNYsLAB5TKjE/KAi9mjdv8rqIiIjMmSHf36KGGzGIHW7uqKitxWdZWXjv9GnkV1XpPfaUvz/eDglBB1dXkaojIiIyLww39TCXcHPHrdpafP7HH3j31ClcvWs6u51Eghc6dsSC4GAo7jNYmoiIyFYw3NTD3MLNHVVqNT4/dw5vp6frdVc1s7PDy1264NVu3eBsZ1GT24iIiIyG4aYe5hpu7iivqcGHp0/jgzNnUFFbq2tXOjvjvdBQPNmmDSTadXSIiIhshSHf3xY1FdwWuNrbY1GPHjj32GOY1qkT7LRBJreyEs/s349Hf/+d08eJiIjqwXBjphROTljZpw9OjhqFoS1b6tr35uej19atmJ2SgjKudkxERHQPhhszF+jujm2DB+PngQPRTruisVoQ8ElmJoK2bMEvJtpOgoiIyFIx3FgAiUSCMUol0kePxpIePeCsXQjwSmUlnti3D08lJuJaZaXIVRIREZkHhhsL4iiT4fXgYKSPHo2Yu7Z0+CknB91++w1rz52DjY0PJyIiugfDjQUKcHHB1kGD8N+oKLTQbgpaWlODFw8fxog9e3CFV3GIiMiGMdxYKIlEgr+2bYtTY8ZgUrt2uvZd166h+5Yt+CY7m1dxiIjIJjHcWLjmcjm+iIzE1sGD4addybhEpcLEpCSM278fRX/a2oGIiMjaMdxYiWF+fjgxahSeCQjQtf2Yk4MeW7bg92vXxCuMiIioiTHcWBEvuRxf9+uHb/v3h5eDAwAgr6oKw+LjsSAtDbUajcgVEhERmR7DjRV62t8fJ0eNwqPaxf8EAMsyMjB4927kVlSIWxwREZGJMdxYqZbOztg2eDDievaETLuFQ1JhIXpt3YpfufAfERFZMYYbKyaVSPDPbt2wb+hQ+DdrBgAoVqnw+L59eDU1ld1URERklRhubEBEixZIHTECY5VKXduHZ85g+J49KORsKiIisjIMNzbCUy7HDwMG4OPevXU7je/Jy0Pvbdtw9Pp1kasjIiIyHoYbGyKRSDA9MBB7Hn0Uvo6OAIDcykoM2LkTX5w/L3J1RERExsFwY4OifHyQMmIEIlu0AABUazR4PjkZLx05ghqOwyEiIgvHcGOj/JydER8djRc7ddK1rc7Kwqi9e1GiUolYGRER0cNhuLFhDjIZVvXpg88jIuAgvf2/wu/XrqHfzp24UF4ucnVERESNw3BDmNq+PXZHR6O5dofxM6WliNixA0kFBSJXRkREZDiGGwIA9PPxQfKwYejs5gYAKKquRvTvv+Pr7GyRKyMiIjIMww3ptHd1RdKwYRji6wsAUGk0mJSUhKXp6RAEQeTqiIiIGobhhvR4ODhg6+DBeKFDB13bwhMnMDMlBWrOpCIiIgvAcEP3sJdKsTo8HO/07Klr+zQrC+MPHECVWi1iZURERA/GcEN1kkgkeKVbN3wZGalb0fjHnByMiI9HKaeKExGRGWO4oXpNbNcOvwwaBGeZDACwr6AAj+zahauVlSJXRkREVDeGG3qgYX5+iH/0UXhrp4qfLClB/507kX3zpsiVERER3Yvhhhqkj7c39sfEIKBZMwDAxYoKDNy1C5mlpSJXRkREpI/hhhqsk5sb9sfEoIu7OwDgSmUlHtm9Gydv3BC5MiIiov9huCGD+Dk7Y++jjyLE0xMAUFBVhcG7dyOlqEjkyoiIiG5juCGDtXB0xO/R0Qj39gYA3FCp8Gh8PPZzuwYiIjIDDDfUKJ5yOXYOGYKBPj4AgPKaGgyPj8fevDyRKyMiIlvHcEON5mpvjy2DByPGzw8AcEutxpi9e7EvP1/kyoiIyJYx3NBDcbazw88DB2Jkq1YAgEq1GqP37mUXFRERiYbhhh6aXCbD9wMGYLj2Ck5FbS1G7dmDJAYcIiISAcMNGYVcJsMPAwfquqhu1tZi5N69OFRYKHJlRERkaxhuyGgcZTL8OGAAolu2BKAdZLxnD45wmjgRETUhhhsyKiftGJzBvr4AgLKaGgyLj0dacbHIlRERka1guCGjc7azwy+PPIJHFAoAQKk24GSVlYlcGRER2QKGGzIJZzs7/DpoECJbtAAAFFZXY+jvvyOnokLkyoiIyNox3JDJNLOzw2+DBqGHdquG3MpKxPz+OwqqqkSujIiIrBnDDZmUh4MDtg8ejI6urgCArPJyDI+PR4lKJXJlRERkrRhuyOQUTk7YOWQIWjs7AwDSbtzAY3v3orK2VuTKiIjIGjHcUJPwd3HBziFD0EIuBwAcKCzEk4mJqNFoRK6MiIisDcMNNZnO7u7YPmQI3OztAQA7r17FC4cOQRAEkSsjIiJrwnBDTaqnlxd+HTQIcunt//X+e+ECFp44IXJVRERkTRhuqMn19/HBV/36QaK9vywjA6uzskStiYiIrAfDDYniiTZt8K/evXX3Z6akYHNurogVERGRtWC4IdFMDwzEP7t1AwBoBAETDhzAQW60SURED4nhhkS1NCQEE9q2BQBUqdV4bO9enC0tFbkqIiKyZAw3JCqpRILP+/bFEO1Gm8UqFUbu2cNVjImIqNEYbkh0DjIZfhgwACHabRouVlTgiYQEVKnVIldGRESWiOGGzIKbgwN+HTQIfk5OAIDkoiI8l5zMNXCIiMhgooebVatWISAgAI6OjggPD8eRI0fqPX7FihUIDAyEk5MTlEol5syZgyp2YViFVs7O+OWRR+AskwEANl68iMUnT4pcFRERWRpRw82mTZsQGxuLRYsW4dixY+jRowdiYmJQUFBQ5/HffPMN5s6di0WLFuHMmTNYt24dNm3ahNdff72JKydT6dW8ud4aOIvT0/F1draoNRERkWURNdx8+OGHeOGFFzB16lR07doVa9asgbOzM9avX1/n8QcPHkRUVBT++te/IiAgAEOHDsX48eMfeLWHLMtjSiXe7dVLd//55GQk3SfwEhER/Zlo4UalUiE1NRXR0dH/K0YqRXR0NJKTk+t8TmRkJFJTU3Vh5sKFC9i2bRtGjBhx3/eprq5GWVmZ3o3M35wuXfB8hw4AAJVGgyf27cOF8nKRqyIiIksgWrgpKiqCWq2GQqHQa1coFMjLy6vzOX/961+xePFi9OvXD/b29mjfvj0eeeSRerul4uLi4O7urrsplUqjfg4yDYlEgpV9+uimiBdVV2NMQgJKVSqRKyMiInMn+oBiQyQkJGDZsmX49NNPcezYMfz000/YunUrlixZct/nzJs3D6WlpbpbLpf4txj2Uim+GzAAnd3cAABnSkvxt6QkqDUakSsjIiJzJlq48fb2hkwmQ35+vl57fn4+fLW/rf/ZggULMHHiRDz//PMIDg7G448/jmXLliEuLg6a+3zhyeVyuLm56d3Icnhop4h7OTgAALZducJdxImIqF6ihRsHBweEhoYiPj5e16bRaBAfH4+IiIg6n1NZWQmpVL9kmXbaMNdDsV7tXV2xsX9/yCS351AtP3UKmy5eFLcoIiIyW6J2S8XGxmLt2rXYsGEDzpw5g2nTpqGiogJTp04FAEyaNAnz5s3THT969GisXr0aGzduRHZ2Nnbv3o0FCxZg9OjRupBD1mlIy5Z4PzRUd/+55GQcLy4WsSIiIjJXdmK++bhx41BYWIiFCxciLy8PISEh2LFjh26QcU5Ojt6Vmvnz50MikWD+/Pm4cuUKWrRogdGjR2Pp0qVifQRqQjMCA5FWXIwNFy7gllqNJ/btw5Hhw9HC0VHs0oiIyIxIBBvrzykrK4O7uztKS0s5/sYCVanVGLx7Nw4XFQEABvj4YFd0NOylFjU2noiIDGTI9ze/EciiOGo32Wyp3YMqsaAAc44eFbkqIiIyJww3ZHH8nJ3x48CBcNBerVmdlYW1586JXBUREZkLhhuySOHe3lgdHq67PzMlBSnarioiIrJtDDdksaa0b4/pgYEAbm/R8PT+/SjiDvFERDaP4YYs2vu9eiHC2xsAkFNRwRWMiYiI4YYsm4NMhk0DBsBHOx1897VrWJyeLnJVREQkJoYbsnitnJ3xTb9+kGpXMH47PR1bLl8WuSoiIhILww1ZhUG+vogLCdHdn3zwIC6Ul4tXEBERiYbhhqzGy1274nGlEgBQolLhycREVNbWilwVERE1NYYbshoSiQTrIyLQydUVAHDixg1MP3KEm6oSEdkYhhuyKm4ODvhh4EA4azdS/c+FC/j8jz9EroqIiJoSww1ZnW4eHlgbEaG7P/voUZy8cUPEioiIqCkx3JBVeiYgANM6dQJwe7PNcYmJKK+pEbkqIiJqCgw3ZLXeDw1FT09PAEBWeTmmHT7M8TdERDaA4YaslqNMho0DBsDV3h4A8O3Fi1jH8TdERFaP4YasWgdXV3zWt6/u/qyjR5HO8TdERFaN4Yas3tP+/vrjb/bvx02OvyEisloMN2QT7h5/k1lWhv/j+jdERFaL4YZswp/H33ydnY3158+LXBUREZkCww3ZjA6urvh3eLju/syUFI6/ISKyQgw3ZFPGBQTgxbvG34w/cID7TxERWRmGG7I5H4SGIkQ7/uZMaSleTk0VuSIiIjImhhuyOY4yGb7u10+3/9Rn587hp5wckasiIiJjYbghm9TZ3R0fhYXp7v/90CHkVlSIWBERERkLww3ZrOc6dMBf2rQBANxQqTApKQlqjUbkqoiI6GEx3JDNkkgk+Hd4ONo0awYASCwoQFxGhshVERHRw2K4IZvmKZfjq6goSCUSAMDi9HQkFRSIXBURET0MhhuyeVE+PlgQHAwAUAsC/paUhBKVSuSqiIiosRhuiAC8HhSEfi1aAAByKirw4uHD3J6BiMhCMdwQAbCTSvHffv3g4eAAAPj+0iV8we0ZiIgsEsMNkVabZs30tmeYlZKCrLIyESsiIqLGYLghusuT/v54vkMHAEClWo1JSUmo4fRwIiKLwnBD9CcfhoWhk6srACDl+nW8nZ4uckVERGQIhhuiP2lmZ4f/REXBTjs9fFlGBpILC0WuioiIGorhhqgOvb29sbB7dwCARhAwKSkJ5TU1IldFREQNwXBDdB+vdeuGSO308As3byL26FGRKyIiooZguCG6DzupFBsiI+FiZwcAWH/+PH7m7uFERGaP4YaoHu1cXbGid2/d/X8cPoxrlZUiVkRERA/CcEP0AFPatcPjSiUA4Hp1NZ47dIirFxMRmTGGG6IHkEgkWBMeDl9HRwDAzqtXsTorS+SqiIjofhhuiBrA29ER6yMjdfdfPXYMZ0pLRayIiIjuh+GGqIFi/PzwUmAgAKBKu3qxSq0WuSoiIvozhhsiAyzv2RNd3N0BAMeKi7GYqxcTEZkdhhsiAzjZ2eE/kZGwl97+q/POqVNcvZiIyMzYNeSgjz/+uMEvOHPmzEYXQ2QJejVvjje7d8cbaWnQCAKmHjyI1JEj0cyuQX+diIjIxCRCA+a0tm3bVu9+YWEhKisr4eHhAQAoKSmBs7MzfHx8cOHCBZMUaixlZWVwd3dHaWkp3NzcxC6HLFStRoOBu3bhUFERAGB6YCA+vms9HCIiMi5Dvr8b1C2VnZ2tuy1duhQhISE4c+YMiouLUVxcjDNnzqBXr15YsmSJUT4Akbmzk0rxRWQknGQyAMCqzEzEX7smclVERAQ08MrN3dq3b48ffvgBPXv21GtPTU3Fk08+iezsbKMWaGy8ckPGtPLsWczS7jmldHbGiVGj4O7gIHJVRETWx+hXbu527do11NbW3tOuVquRn59v6MsRWbT/CwzEYF9fAEBuZSXmcHNNIiLRGRxuhgwZgn/84x84duyYri01NRXTpk1DdHS0UYsjMndSiQTrIiLgZm8PANhw4QJ+zc0VuSoiIttmcLhZv349fH19ERYWBrlcDrlcjj59+kChUODzzz83RY1EZq1Ns2b4KCxMd/8fhw+jqKpKxIqIiGybwWNu7sjKysKZM2cgkUjQuXNndOrUydi1mQTH3JApCIKAsQkJ2HLlCgDgL23aYFP//pBIJCJXRkRkHQz5/m50uAGg2xnZkv4BZ7ghU8m7dQvdt2zB9epqAMB/o6Lw1z8to0BERI1j0gHFAPCf//wHwcHBcHJygpOTE7p3747//ve/jSqWyFr4Ojnh0z59dPdnpKTgSmWliBUREdkmg8PNhx9+iGnTpmHEiBH47rvv8N1332HYsGF48cUX8dFHH5miRiKL8aS/P54JCAAAlKhUeOHQITzExVEiImoEg7ul2rZti7feeguTJk3Sa9+wYQPefPNNrnNDNq+4uhrdt2zBtVu3AACrw8Px944dRa6KiMiymXydm8jIyHvaIyMjcY0rtBLBSy7H2r59dfdfSU3FhfJyESsiIrItBoebDh064LvvvrunfdOmTejYiN9OV61ahYCAADg6OiI8PBxHjhyp9/iSkhJMnz4dLVu2hFwuR6dOnbBt2zaD35fIlIa3aoUXOnQAAFTU1uLZ5GSoNRqRqyIisg0Gb2P81ltvYdy4cUhMTERUVBQAICkpCfHx8XWGnvps2rQJsbGxWLNmDcLDw7FixQrExMQgMzMTPj4+9xyvUqnw6KOPwsfHBz/88ANatWqFS5cu6TbwJDIn74WG4ve8PGTfvIn9BQX4JDMTs7t0EbssIiKr16ip4MeOHcOHH36IM2fOAAC6dOmCl19++Z79ph4kPDwcvXv3xsqVKwEAGo0GSqUSM2bMwNy5c+85fs2aNXjvvfdw9uxZ2GtXhH2Q6upqVGun5gK3++yUSiXH3FCTSMzPx6DduwEAjjIZjo8ciU78/46IyGAmG3NTU1ODZ599Fp6envjqq6+QmpqK1NRUfPXVVwYHG5VKhdTUVL0tG6RSKaKjo5GcnFznc3799VdERERg+vTpUCgUCAoKwrJly6BWq+/7PnFxcXB3d9fdlEqlQXUSPYwBCgVmBAYCAKrUajzH7ikiIpMzKNzY29vjxx9/NMobFxUVQa1WQ6FQ6LUrFArk5eXV+ZwLFy7ghx9+gFqtxrZt27BgwQJ88MEHePvtt+/7PvPmzUNpaanulst9f6iJLe3ZE+1dXAAABwsL8fHZsyJXRERk3QweUDx27Fhs3rzZBKU8mEajgY+PDz777DOEhoZi3LhxeOONN7BmzZr7Pkcul8PNzU3vRtSUmtnZYV1kJO6s4z3/xAlklpaKWhMRkTUzeEBxx44dsXjxYiQlJSE0NBTNmjXTe3zmzJkNeh1vb2/IZDLk5+frtefn58PX17fO57Rs2RL29vaQyWS6ti5duiAvLw8qlQoODg4GfhqiptHfxwczO3fGv86e1XVP7Rs6FDJpoxYJJyKiehgcbtatWwcPDw/deJu7SSSSBocbBwcHhIaGIj4+HmPHjgVw+8pMfHw8XnrppTqfExUVhW+++QYajQZS7ZdCVlYWWrZsyWBDZu/tkBBsu3IF58rLkVxUhBVnz+Llrl3FLouIyOoY/Gtjdnb2fW8XLlww6LViY2Oxdu1abNiwAWfOnMG0adNQUVGBqVOnAgAmTZqEefPm6Y6fNm0aiouLMWvWLGRlZWHr1q1YtmwZpk+fbujHIGpyznZ2WBcRoeueWpCWhrPsniIiMjqDr9zc7WF3BR83bhwKCwuxcOFC5OXlISQkBDt27NANMs7JydFdoQEApVKJnTt3Ys6cOejevTtatWqFWbNm4bXXXnuYj0HUZKJ8fDCrc2esOHsW1RoNnk1Oxn52TxERGVWj1rlZt24dPvroI5w7dw7A7XE4s2fPxvPPP2/0Ao2Ne0uR2CpraxG6dSuytFsyLO/ZE6926yZyVURE5s2ke0stXLgQs2bNwujRo/H999/j+++/x+jRozFnzhwsXLiw0UUT2QrnP82eWnTiBM6we4qIyGgMvnLTokULfPzxxxg/frxe+7fffosZM2agqKjIqAUaG6/ckLl4NTUVH2pX+e7TvDn2x8TAjt1TRER1MumVm5qaGoSFhd3THhoaitraWkNfjshmLe7RA4Hav6BHrl/XBR0iIno4BoebiRMnYvXq1fe0f/bZZ5gwYYJRiiKyBU52dlgfEQGpdkD+ohMncKqkRNyiiIisQKNmS61btw67du1C3759AQCHDx9GTk4OJk2ahNjYWN1xH374oXGqJLJSfVu0QGyXLnj/9GmoNBo8e/AgkoYNY/cUEdFDMHjMzaBBgxr2whIJ9uzZ06iiTIljbsjcVKnVCN26FWfLygAAS0NCMDcoSOSqiIjMiyHf342aCm7JGG7IHB0uKkK/nTuhEQQ4SKVIGTECQR4eYpdFRGQ2TDqgmIiML9zbG69ot2K40z1Vo9GIXBURkWUyeMxNVVUVPvnkE+zduxcFBQXQ/Okf4GPHjhmtOCJbsqh7d2y5fBmnS0uRWlyM906dwuvBwWKXRURkcQwON8899xx27dqFJ598En369Gn01gtEpM9RJsO6iAhEabunFqenY3Tr1gj29BS7NCIii2LwmBt3d3ds27YNUVFRpqrJpDjmhszd68eP451TpwAAvby8cHDYMNhz9hQR2TiTjrlp1aoVXF1dG10cEdVvUffu6ObuDgA4VlyMdzIyRK6IiMiyGBxuPvjgA7z22mu4dOmSKeohsnlymQzrIyMh03b5vp2RgZM3bohcFRGR5TA43ISFhaGqqgrt2rWDq6srvLy89G5E9PDCmjfHP7U7hddw9hQRkUEMHlA8fvx4XLlyBcuWLYNCoeCAYiITWRAcjN8uX0ZGSQmO37iB5RkZWNC9u9hlERGZPYMHFDs7OyM5ORk9evQwVU0mxQHFZElSr19HxI4dUAsC7CQSHB4+HCG8QkpENsikA4o7d+6MW7duNbo4Imq40ObNMVfbPVUrCHg2ORkqtVrkqoiIzJvB4Wb58uV4+eWXkZCQgOvXr6OsrEzvRkTGNT84GMHarRhO3LiBOM6eIiKql8HdUlLteht/HmsjCAIkEgnUZv5bJbulyBIdu34dfdk9RUQ2zJDvb4MHFO/du7fRhRFR4/Rq3hzzgoLwdno6agUBUw8exOHhw+Egk4ldGhGR2eGu4EQWQqVWI3z7dpwsKQFwezbVmxY6sJ+IyFAmvXKTmJhY7+MDBgww9CWJqAEctIv79d2+HbWCgLiMDIxp3Rq9mjcXuzQiIrPS6DE3ei9y1/gbjrkhMq23TpzA4vR0AECwhweOsHuKiGyASaeC37hxQ+9WUFCAHTt2oHfv3ti1a1ejiyaihpkXFIQe2p3C00tK8LY26BAR0W1GG3Ozb98+xMbGIjU11RgvZzK8ckPWIK24GOHa7imZRILkYcMQyu4pIrJiJr1ycz8KhQKZmZnGejkiqkeIlxfeCA4GAKi1i/tVm3mXMBFRUzF4QPHJkyf17guCgGvXrmH58uUICQkxVl1E9ADzgoLwS24u0m7cQIa2e2oJ/w4SERkebkJCQiCRSPDn3qy+ffti/fr1RiuMiOpnL5Xii8hI9Nm+HTUaDd45dQqPKZUIY/cUEdk4g8NNdna23n2pVIoWLVrA0dHRaEURUcN09/TE/KAgLDp58nb31MGDSBkxAnLOniIiG2ZwuPH39zdFHUTUSK8FBeGXy5dxrLgYp0pLsfjkSSzt2VPssoiIRGPwgOKZM2fi448/vqd95cqVmD17tjFqIiID2EulWB8RAXvtGlTvnj6NlKIikasiIhKPweHmxx9/RFRU1D3tkZGR+OGHH4xSFBEZJtjTEwu1s6c02tlTVZw9RUQ2yuBwc/36dbi7u9/T7ubmhiL+tkgkmn9264ZQ7U7hp0tL8dafZjYSEdkKg8NNhw4dsGPHjnvat2/fjnbt2hmlKCIynJ1UivWRkXDQdk+9f/o0DvMXDiKyQQYPKI6NjcVLL72EwsJCDB48GAAQHx+PDz74ACtWrDB2fURkgCAPDyzs3h3z09Jud08dPIjUkSPhyNlTRGRDGrX9wurVq7F06VJcvXoVABAQEIA333wTkyZNMnqBxsbtF8ja1Wo0iNqxA0eLiwEAr3btiuW9eolcFRHRwzHk+/uh9pYqLCyEk5MTXFxcGvsSTY7hhmzBqZIShG3bBpVGA6lEgv1Dh6JvixZil0VE1GhNtrdUixYtLCrYENmKbh4eeLN7dwD/mz11q7ZW5KqIiJqG0TbOJCLz8nLXruij3Yohs6wMi06cELkiIqKmwXBDZKXspFKsi4jQzZ768MwZJBcWilwVEZHpMdwQWbGuHh54q0cPAIAA4NmDB9k9RURWj+GGyMrFdumCcG9vAEBWeTkWsnuKiKycwevcAEBFRQX27duHnJwcqFQqvcdmzpxplMKIyDjstHtP9dq6FdUaDT46cwaPt2mDSM6eIiIrZfBU8OPHj2PEiBGorKxERUUFvLy8UFRUBGdnZ/j4+ODChQumqtUoOBWcbNX7p07htePHAQAdXV1xbORIONs16vcbIqImZ9Kp4HPmzMHo0aNx48YNODk54dChQ7h06RJCQ0Px/vvvN7poIjKtOV26oK+2e+pceTnmp6WJWxARkYkYHG7S0tLw8ssvQyqVQiaTobq6GkqlEu+++y5ef/11U9RIREYg086ekmtnT3189iwS8vJEroqIyPgMDjf29vaQav9x9PHxQU5ODgDA3d0dubm5xq2OiIyqs7s7lvXsCUA7eyo5GWV/GjdHRGTpDA43PXv2REpKCgBg4MCBWLhwIb7++mvMnj0bQUFBRi+QiIxrZufOGOjjAwC4VFGB2NRUkSsiIjIug8PNsmXL0LJlSwDA0qVL4enpiWnTpqGwsBCfffaZ0QskIuOSSiRYHxkJV3t7AMAX58/jV151JSIr8lAbZ1oizpYiuu2L8+fxfHIyAMDH0REnR41CC0dHkasiIqpbk22cSUSWa0q7dhjdujUAoKCqCi8ePgwb+12HiKyUweEmPz8fEydOhJ+fH+zs7CCTyfRuRGQZJBIJ/h0eDm+5HACwOTcXX2Vni1wVEdHDM3gFrylTpiAnJwcLFixAy5YtIZFITFEXETUBhZMT1oSH48nERADAzJQUPKJQQNmsmciVERE1nsFjblxdXbF//36EhISYqCTT4pgbontNOXgQ/9WuLj7E1xc7hgyBlL+4EJEZMemYG6VSyX55IiuzIiwMSmdnAEB8Xh4+zcwUuSIiosYzONysWLECc+fOxcWLF01QDhGJwcPBAesiInT3Xzt+HGdLS0WsiIio8RoUbjw9PeHl5QUvLy8888wzSEhIQPv27eHq6qprv3NrjFWrViEgIACOjo4IDw/HkSNHGvS8jRs3QiKRYOzYsY16XyL6nyEtW+KlwEAAQJVajSkHD6JWoxG5KiIiwzVoQPGKFStMVsCmTZsQGxuLNWvWIDw8HCtWrEBMTAwyMzPho11FtS4XL17EK6+8gv79+5usNiJbE9ezJ3ZdvYqs8nKkXL+O5RkZmN+9u9hlEREZRPRF/MLDw9G7d2+sXLkSAKDRaKBUKjFjxgzMnTu3zueo1WoMGDAAzz77LPbv34+SkhJs3ry5Qe/HAcVE9TtSVIR+O3dCLQiwk0hwcNgwhDZvLnZZRGTjTL6In1qtxg8//IAlS5ZgyZIl+PHHH1FbW2vw66hUKqSmpiI6Ovp/BUmliI6ORrJ25dS6LF68GD4+Pnjuuece+B7V1dUoKyvTuxHR/fXx9sY87T5xtYKAyQcP4lYj/n4TEYnF4HBz6tQpdOrUCZMnT8bPP/+Mn3/+GZMnT0bHjh2RkZFh0GsVFRVBrVZDoVDotSsUCuTl5dX5nAMHDmDdunVYu3Ztg94jLi4O7u7uuptSqTSoRiJb9EZQEHppx9CdKS3F3OPHRa6IiKjhDA43zz//PLp164bLly/j2LFjOHbsGHJzc9G9e3f8/e9/N0WNOuXl5Zg4cSLWrl0Lb2/vBj1n3rx5KC0t1d1yuUEg0QM5yGTYEBkJR+2q4yszM7H9yhWRqyIiahiDVyhOS0vD0aNH4enpqWvz9PTE0qVL0bt3b4Ney9vbGzKZDPn5+Xrt+fn58PX1vef48+fP4+LFixg9erSuTaOdzWFnZ4fMzEy0b99e7zlyuRxy7fLyRNRwXT088F6vXpiRkgIAeC45GWmjRsGHm2sSkZkz+MpNp06d7gkjAFBQUIAOHToY9FoODg4IDQ1FfHy8rk2j0SA+Ph4Rd625cUfnzp2Rnp6OtLQ03W3MmDEYNGgQ0tLS2OVEZGTTOnXCcD8/AEB+VRVeSE7mIp5EZPYMvnITFxeHmTNn4s0330Tfvn0BAIcOHcLixYvxzjvv6A3YbchspNjYWEyePBlhYWHo06cPVqxYgYqKCkydOhUAMGnSJLRq1QpxcXFwdHREkHag4x0eHh4AcE87ET08iUSCdRER6LFlCwqrq7HlyhV8du4c/tGpk9ilERHdl8HhZtSoUQCAp59+Wrdp5p3f5O50FwmCAIlEArVa/cDXGzduHAoLC7Fw4ULk5eUhJCQEO3bs0A0yzsnJgVTaqEldRGQECicnfB4RgccSEgAAL6emYqBCgc7u7uIWRkR0Hwavc7Nv374GHztw4ECDCzI1rnND1DjTjxzBmqwsAEAvLy8kxcTAQTvgmIjI1Az5/hZ9Eb+mxnBD1DiVtbXovW0bzmq7nl/r1g3LevYUuSoishWGfH83qFvq5MmTDX7z7lyqncgqOdvZ4at+/RCxYwdqNBq8e+oUhrZsiUfqmNlIRCSmBl25kUqlkEgkD5wl0dBxNmLilRuih/PeqVO6Rf2Uzs44PnIkPLncAhGZmNGv3GRnZxulMCKyfC937YqdV69ib34+cisr8X9HjuCbfv10EwyIiMTWoHDj7+9v6jqIyEJIJRJ8ERmJkK1bUaJS4btLlzC8VStMatdO7NKIiAA0Yir4HadPn0ZOTg5UKpVe+5gxYx66KCIyb8pmzbA6PBzj9+8HAMw4cgQR3t7oyK5eIjIDBoebCxcu4PHHH0d6erreOJw7l6TNfcwNERnH0/7+2HHlCjZcuICbtbX464EDOBATAzmnhxORyAxeHW/WrFlo27YtCgoK4OzsjFOnTiExMRFhYWFI0C7yRUS24ePevRGovVpzrLgYr3P3cCIyAwaHm+TkZCxevBje3t6QSqWQSqXo16+fblsGIrIdLvb2+KZfPzhoVxFfcfYstnH3cCISmcHhRq1Ww9XVFcDtXb2vXr0K4Pag48zMTONWR0RmL8TLC+/16qW7P/XgQVytrBSxIiKydQaHm6CgIJw4cQIAEB4ejnfffRdJSUlYvHgx2nG2BJFNmh4YiNGtWwMAiqqrMSkpCWqNRuSqiMhWGRxu5s+fD432H63FixcjOzsb/fv3x7Zt2/Dxxx8bvUAiMn93dg9v5ewMANibn493Tp0SuSoislVG2VuquLgYnp6eFrGIF1coJjKdxPx8DPn9d2gEATKJBHsffRRRPj5il0VEVsCQ72+Dr9zUxcvLyyKCDRGZ1gCFAguCgwEAakHA35KSUFxdLXJVRGRrjBJuiIjueCMoCAO0V2tyKirwwqFDD9yXjojImBhuiMioZFIp/hsVBS8HBwDA5txcfJqVJXJVRGRLGG6IyOhaN2uGdRERuvsvp6YipahIxIqIyJYw3BCRSYxRKjGnSxcAQI1Gg3H793P8DRE1CYYbIjKZuJ49EeHtDQC4VFGBKQcPQsPxN0RkYgw3RGQy9lIpvu3fH83lcgDA1itX8MHp0yJXRUTWjuGGiExK2awZ/hMVhTuLRbyRlob9BQWi1kRE1o3hhohMbpifH14PCgJwe/2bv+7fj4KqKpGrIiJrxXBDRE1iUffuGKRQAACu3rqFvx04wP2niMgkGG6IqEnIpFJ81a8ffB0dAQDxeXl4Oz1d5KqIyBox3BBRk/F1csI3/ftDqt2uZUl6OnZdvSpyVURkbRhuiKhJDVQosKRHDwCAAGDCgQO4ePOmuEURkVVhuCGiJvfPbt0wslUrAECxSoUn9+3DrdpakasiImvBcENETU4qkeA/UVHo4OoKADh+4wZePHyYG2wSkVEw3BCRKDwcHPDjwIFoZmcHAPgqO5sbbBKRUTDcEJFogjw88PldG2zGHj3KBf6I6KEx3BCRqJ7298crXbsCAGoFAeMSE3GlslLkqojIkjHcEJHoloaEYIivLwAgv6oKTycmolqtFrkqIrJUDDdEJDo7qRRf9+uHNs2aAQAOFRVhztGjIldFRJaK4YaIzEILR0f8MGAA5NLb/yz9+9w5rD13TuSqiMgSMdwQkdkIbd4cn4aH6+6/dOQIEvPzRayIiCwRww0RmZUp7dtjRmAggNsDjJ9KTEQ2VzAmIgMw3BCR2Xk/NBTRLVsCAIqqqzE2IQHlNTUiV0VEloLhhojMjp1Uio39+qGTdgXjjJISTEpKgoYrGBNRAzDcEJFZ8pTLsfmRR+Bubw8A+PXyZSw8cULkqojIEjDcEJHZCnR3x8b+/SGVSAAAcRkZ+CY7W+SqiMjcMdwQkVkb6ueHD0JDdfefT07GkaIiESsiInPHcENEZm9GYCCebd8eAFCt0WBsQgIucQYVEd0Hww0RmT2JRIJVffqgv48PgNtbNIzauxclKpXIlRGROWK4ISKL4CCT4ceBA9FRO4PqdGkpnkpMhIp7UBHRnzDcEJHFaC6XY8vgwfCWywEAe/Ly8OLhwxA4RZyI7sJwQ0QWpYOrK35+5BHdHlQbLlzAsowMkasiInPCcENEFieyRQtsiIrS3V944gS+5hRxItJiuCEii/SUvz+W9+ypu/98cjI32SQiAAw3RGTBXunaFS906AAAUGk0eGLfPpwqKRG3KCISHcMNEVksiUSClX36IMbPDwBwQ6XC8D17kFNRIXJlRCQmhhsismh2Uik29e+PMC8vAMCVykoMj4/H9epqkSsjIrEw3BCRxXO1t8dvgwfr1sA5W1aG0Xv3oqK2VuTKiEgMDDdEZBV8HB2xfcgQ+Do6AgAOFxXh6cRE1Gg0IldGRE2N4YaIrEZbFxdsHzIEbvb2AIAdV6/i+eRkaLjIH5FNYbghIqvS3dMTm+9a5O+r7Gz889gxrmJMZEMYbojI6gxUKPB1v36QSiQAgI/OnMGS9HSRqyKipmIW4WbVqlUICAiAo6MjwsPDceTIkfseu3btWvTv3x+enp7w9PREdHR0vccTkW16vE0brO7TR3f/rZMn8cHp0yJWRERNRfRws2nTJsTGxmLRokU4duwYevTogZiYGBQUFNR5fEJCAsaPH4+9e/ciOTkZSqUSQ4cOxZUrV5q4ciIyd8937IgPQ0N19/957BhWZ2WJWBERNQWJIHJHdHh4OHr37o2VK1cCADQaDZRKJWbMmIG5c+c+8PlqtRqenp5YuXIlJk2a9MDjy8rK4O7ujtLSUri5uT10/URk/palp2PBiRO6++sjIjC5fXsRKyIiQxny/S3qlRuVSoXU1FRER0fr2qRSKaKjo5GcnNyg16isrERNTQ28tAt4/Vl1dTXKysr0bkRkW+YFBeG1bt10958/dAjfX7okYkVEZEqihpuioiKo1WooFAq9doVCgby8vAa9xmuvvQY/Pz+9gHS3uLg4uLu7625KpfKh6yYiyyKRSLA0JAQvBQYCADSCgL8dOIDfLl8WuTIiMgXRx9w8jOXLl2Pjxo34+eef4ahduOvP5s2bh9LSUt0tNze3iaskInMgkUjwUVgYpmq7o2oFAU8lJjLgEFkhUcONt7c3ZDIZ8vPz9drz8/Ph6+tb73Pff/99LF++HLt27UL37t3ve5xcLoebm5vejYhsk1Qiwb/Dw/FMQAAAoEajwVOJifiFv/QQWRVRw42DgwNCQ0MRHx+va9NoNIiPj0dERMR9n/fuu+9iyZIl2LFjB8LCwpqiVCKyEjKpFBsiIzH+roDzdGIifs7JEbcwIjIa0bulYmNjsXbtWmzYsAFnzpzBtGnTUFFRgalTpwIAJk2ahHnz5umOf+edd7BgwQKsX78eAQEByMvLQ15eHm7evCnWRyAiC2OnDTgT2rYFcLuL6pn9+/ETAw6RVbATu4Bx48ahsLAQCxcuRF5eHkJCQrBjxw7dIOOcnBxIpf/LYKtXr4ZKpcKTTz6p9zqLFi3Cm2++2ZSlE5EFk0ml+CIiAhLc3qLhTsD5pl8/POnvL3Z5RPQQRF/npqlxnRsiuptao8Hzhw7hPxcuAABkEgn+ExWlG5dDRObBYta5ISISm0wqxed9+2KKdhaVWjtN/LNz50SujIgai+GGiGyeTCrF2r598UKHDgAAAcC0w4fx7qlT4hZGRI3CcENEhNvTxFeHh+OVrl11bfOOH8frx4/DxnrviSweww0RkZZEIsHynj2xNCRE1/bOqVOYfuQI1BqNeIURkUEYboiI7iKRSDA3KAgr+/SBRNv273PnMDEpCSq1WtTaiKhhGG6IiOowrVMn/CcqCjLJ7Yiz6dIljNq7F2UqlciVEdGDMNwQEd3HX9u2xU8DB8JRJgMAxOflYeCuXbhSWSlyZURUH4YbIqJ6jGrdGruGDIGXgwMA4GRJCSJ37EBGSYm4hRHRfTHcEBE9QJSPDw7ExKCtiwsA4HJlJQbs3Im9eXkiV0ZEdWG4ISJqgEB3dyTFxCDMywsAUFpTg+F79uAr7crGRGQ+GG6IiBpI4eSEPUOHYkSrVgBu7yg++eBBvHH8ODRcC4fIbDDcEBEZoJmdHX4eOBD/6NhR17b81Cn8Zd8+lNfUiFgZEd3BcENEZCA7qRSr+vTBirAwSLVTxX+9fBn9d+7ExZs3Ra6OiBhuiIgaQSKRYEbnztg6aBDc7e0BAOklJQjfvh37CwpEro7ItjHcEBE9hKF+fkgeNgydXF0BAEXV1Xj099+xKjOTe1IRiYThhojoIQW6u+PgsGGIbtkSwO2BxjNTUjAxKQkVtbUiV0dkexhuiIiMwFMux9ZBgxDbpYuu7duLFxGxfTuyyspErIzI9jDcEBEZiZ1UivdCQ7Gpf3+4asfhnCotRZ/t2/FTTo7I1RHZDoYbIiIje9LfH4eHDUNXd3cAQHlNDZ5KTETs0aOo5s7iRCbHcENEZAKB7u5IHjYMzwQE6Nr+dfYsonbsQGZpqXiFEdkAhhsiIhNxsbfHV1FR+KR3bzhIb/9ze/zGDYRt24b1f/zB2VREJsJwQ0RkQhKJBP8XGIhDw4ejs5sbAKBSrcYLhw5h/IEDKFGpRK6QyPow3BARNYEenp5IGTECL3TooGv7/tIl9Ny6FfHXrolYGZH1YbghImoiznZ2WNO3Lzb17w8PBwcAQE5FBYbGx+OlI0dwk3tTERkFww0RURN70t8fx0eOxCMKha5tdVYWQrZuxb78fBErI7IODDdERCJo06wZdkdH4+PeveEskwEAsm/exODduzE7JYUrGxM9BIYbIiKRSCUSTA8MxPFRo9CvRQtd+yeZmQj+7TdsvXxZxOqILBfDDRGRyDq4umLPo4/iw9BQOGqv4lyqqMCYhAQ8nZiIq5WVIldIZFkYboiIzIBMKsWsLl2QNnIkhvj66tp/zMlB199+w6eZmVBrNCJWSGQ5GG6IiMxIRzc37BwyBBsiI+EtlwO4vX3DjJQUROzYgYOFhSJXSGT+GG6IiMyMRCLB39q1w+kxY/Bs+/a69tTiYvTfuRMTDhxAbkWFiBUSmTeGGyIiM9VcLsfaiAgkDB2KYA8PXfvGixfR5ddfseTkSVRyVhXRPRhuiIjMXH8fHxwdMQKr+vRBc21X1S21Gm+ePImuv/6KL8+f53gcorsw3BARWQA7qRQvduqEzDFjMKtzZ9hJJACA3MpKPJecjJCtW7E5N5ebcRKB4YaIyKJ4yuX4MCwMJ0aNwnA/P1376dJS/GXfPkTt3Im9eXkiVkgkPoYbIiIL1NndHVsGD8beRx9F5F0LAB4uKkL0778jevdu7M3L45UcskkSwcb+zy8rK4O7uztKS0vh5uYmdjlERA9NEARsuXIF89PSkFFSovdYVIsWeD04GDEtW0Ki7coiskSGfH8z3BARWQm1RoNvLl7E2+np+KO8XO+xUC8vzAsKwpjWrSGT8qI9WR6Gm3ow3BCRtavVaPDdpUuIy8jA6dJSvcfau7hgZufOmNK+PVzs7UWqkMhwDDf1YLghIluhEQRszs3FsvR0HL9xQ+8xd3t7vNCxI14KDISyWTORKiRqOIabejDcEJGtEQQBO65exYqzZ/H7tWt6j8kkEjyuVOLvHTtikK8vpByXQ2aK4aYeDDdEZMvSb9zAv86exdfZ2VD9aeG/9i4ueL5jR0xu1w4KJyeRKiSqG8NNPRhuiIiA/Fu3sCYrC2vOnUNBVZXeY3YSCR5TKjG1fXs82rIl7DgAmcwAw009GG6IiP5HpVbj18uX8dm5c4ivY/E/H0dHjPP3x4S2bRHWvDmnk5NoGG7qwXBDRFS38+XlWPfHH/ji/Pl7ruYAQCdXV0xo2xZP+fsj0N1dhArJljHc1IPhhoiofiq1GtuuXsU32dnYcvkyquvYlLOruzvGKpV4XKlETy8vXtEhk2O4qQfDDRFRw5WoVPgxJwffZGdjX34+6vrC8G/WDGOVSoxp3RqRLVrAQSZr8jrJ+jHc1IPhhoiocXIrKvDDpUvYnJuLpMLCOoOOq709Bvv6IqZlS8T4+SHAxaXJ6yTrxHBTD4YbIqKHl3frFn7JzcXPubnYm5eH2vt8lXR2c8OjLVtioEKBAQoFmsvlTVwpWQuGm3ow3BARGdeN6mpsvXIFO69exa5r11BUXX3fY4M8PDDAxwcDFAoM8PHhejrUYAw39WC4ISIyHY0g4FhxMXZevYqdV68iuagImnq+Zjq6uqKPtzf6NG+OPt7e6OHpCTnH7FAdGG7qwXBDRNR0SlQqJObnI7GgAIn5+Th+40a9YcdBKkWIpyd6e3ujp5cXenh4oKuHBxwZeGwew009GG6IiMRTqlIhqbAQifn52F9QgGPFxfdsA/FnMokEndzc0N3DA909PRHs4YEgDw8omzXjXlg2hOGmHgw3RETmo1qtxskbN5By/ToOFxUh5fp1ZJaVNei5jjIZOrq6opObGwLd3NBJewt0c4OHg4OJK6emxnBTD4YbIiLzVqJS4ej160i/cQMnSkqQfuMGTpeWPvAKz928HBwQ4OIC/2bNEODigoBmzeB/589mzeDG8GNxGG7qwXBDRGR5ajQaZJWV4cSNG0gvKcHZ0lJklZXhj/Ly+05Dr4+rvT38nJzQUnvT/ezsrLvv4+gIN3t7rr5sJgz5/rZroprqtWrVKrz33nvIy8tDjx498Mknn6BPnz73Pf7777/HggULcPHiRXTs2BHvvPMORowY0YQVExFRU7KXStHNwwPdPDz02ms1GmTfvInMsjJklZUhs6wM58rKcLGiArmVlfcdvFxeU4PMmpoHdoHZSSTwlsvRXC6//aejI7zv/Ky9eTg4wM3eHu729nDX/uxmbw977qYuGtHDzaZNmxAbG4s1a9YgPDwcK1asQExMDDIzM+Hj43PP8QcPHsT48eMRFxeHUaNG4ZtvvsHYsWNx7NgxBAUFifAJiIhILHZSKTq6uaFjHb/J12g0uFJZiYs3b+JiRQUu3fXn1Vu3cPXWLVTU1tb7+rWCgLyqKuTVsZHogzjJZHDXBp07ocfF3h7OMhmc7ezu+dPpT23N7OzgbGcHR5kMDlIp5No/HaRSyKVSOGjvc1D1vUTvlgoPD0fv3r2xcuVKAIBGo4FSqcSMGTMwd+7ce44fN24cKioqsGXLFl1b3759ERISgjVr1jzw/dgtRUREd5TX1ODarVu4WlmJa7du6W5Xb91CUXU1rldV3f6zuhqVarXY5dbJTiK5HXpkstuh504A0oYfO4kEdlIpZBIJZNqfpXd+1v4p+/Mx9bTJpFJIAUglktu3u36W3PXz3zt2NOrAbovpllKpVEhNTcW8efN0bVKpFNHR0UhOTq7zOcnJyYiNjdVri4mJwebNm+s8vrq6GtV3rZZZ1sBR+EREZP1c7e3ham+PTg34ZbeythbXq6t1YefOn6UqFUpralBWU6P7ubymRq+trKamzr24jKFWEFCrVptd+Hra31+0WWuihpuioiKo1WooFAq9doVCgbNnz9b5nLy8vDqPz8vLq/P4uLg4vPXWW8YpmIiIbJaztptI2ayZwc/VCAJu1tSgorYWlWo1Ku/+809tt/7UdkuthkqjgUqjQfVdP6vubr/rfvWdx7XH1wpCvQsnmopMxO4y0cfcmNq8efP0rvSUlZVBqVSKWBEREdkaqUQCNwcH0aagC4IA9V23Wo3m9p91tD2wXaOBgNuBTXPnzzs37XtpAHiLuEmqqOHG29sbMpkM+fn5eu35+fnw9fWt8zm+vr4GHS+XyyHnLrRERGTDJNoxM1Z/RUNL1HlqDg4OCA0NRXx8vK5No9EgPj4eERERdT4nIiJC73gA2L17932PJyIiItsieoiLjY3F5MmTERYWhj59+mDFihWoqKjA1KlTAQCTJk1Cq1atEBcXBwCYNWsWBg4ciA8++AAjR47Exo0bcfToUXz22WdifgwiIiIyE6KHm3HjxqGwsBALFy5EXl4eQkJCsGPHDt2g4ZycHEjvWggpMjIS33zzDebPn4/XX38dHTt2xObNm7nGDREREQEwg3VumhrXuSEiIrI8hnx/c21oIiIisioMN0RERGRVGG6IiIjIqjDcEBERkVVhuCEiIiKrwnBDREREVoXhhoiIiKwKww0RERFZFYYbIiIisiqib7/Q1O4syFxWViZyJURERNRQd763G7Kxgs2Fm/LycgCAUqkUuRIiIiIyVHl5Odzd3es9xub2ltJoNLh69SpcXV0hkUiM+tplZWVQKpXIzc3lvlUmxPPcNHiemw7PddPgeW4apjrPgiCgvLwcfn5+ehtq18XmrtxIpVK0bt3apO/h5ubGvzhNgOe5afA8Nx2e66bB89w0THGeH3TF5g4OKCYiIiKrwnBDREREVoXhxojkcjkWLVoEuVwudilWjee5afA8Nx2e66bB89w0zOE829yAYiIiIrJuvHJDREREVoXhhoiIiKwKww0RERFZFYYbIiIisioMN0ayatUqBAQEwNHREeHh4Thy5IjYJVmUuLg49O7dG66urvDx8cHYsWORmZmpd0xVVRWmT5+O5s2bw8XFBX/5y1+Qn5+vd0xOTg5GjhwJZ2dn+Pj44NVXX0VtbW1TfhSLsnz5ckgkEsyePVvXxvNsHFeuXMHf/vY3NG/eHE5OTggODsbRo0d1jwuCgIULF6Jly5ZwcnJCdHQ0zp07p/caxcXFmDBhAtzc3ODh4YHnnnsON2/ebOqPYtbUajUWLFiAtm3bwsnJCe3bt8eSJUv09h/iuTZcYmIiRo8eDT8/P0gkEmzevFnvcWOd05MnT6J///5wdHSEUqnEu+++a5wPINBD27hxo+Dg4CCsX79eOHXqlPDCCy8IHh4eQn5+vtilWYyYmBjhiy++EDIyMoS0tDRhxIgRQps2bYSbN2/qjnnxxRcFpVIpxMfHC0ePHhX69u0rREZG6h6vra0VgoKChOjoaOH48ePCtm3bBG9vb2HevHlifCSzd+TIESEgIEDo3r27MGvWLF07z/PDKy4uFvz9/YUpU6YIhw8fFi5cuCDs3LlT+OOPP3THLF++XHB3dxc2b94snDhxQhgzZozQtm1b4datW7pjhg0bJvTo0UM4dOiQsH//fqFDhw7C+PHjxfhIZmvp0qVC8+bNhS1btgjZ2dnC999/L7i4uAj/+te/dMfwXBtu27ZtwhtvvCH89NNPAgDh559/1nvcGOe0tLRUUCgUwoQJE4SMjAzh22+/FZycnIR///vfD10/w40R9OnTR5g+fbruvlqtFvz8/IS4uDgRq7JsBQUFAgBh3759giAIQklJiWBvby98//33umPOnDkjABCSk5MFQbj9l1EqlQp5eXm6Y1avXi24ubkJ1dXVTfsBzFx5ebnQsWNHYffu3cLAgQN14Ybn2Thee+01oV+/fvd9XKPRCL6+vsJ7772nayspKRHkcrnw7bffCoIgCKdPnxYACCkpKbpjtm/fLkgkEuHKlSumK97CjBw5Unj22Wf12p544glhwoQJgiDwXBvDn8ONsc7pp59+Knh6eur9u/Haa68JgYGBD10zu6UekkqlQmpqKqKjo3VtUqkU0dHRSE5OFrEyy1ZaWgoA8PLyAgCkpqaipqZG7zx37twZbdq00Z3n5ORkBAcHQ6FQ6I6JiYlBWVkZTp061YTVm7/p06dj5MiReucT4Hk2ll9//RVhYWF46qmn4OPjg549e2Lt2rW6x7Ozs5GXl6d3nt3d3REeHq53nj08PBAWFqY7Jjo6GlKpFIcPH266D2PmIiMjER8fj6ysLADAiRMncODAAQwfPhwAz7UpGOucJicnY8CAAXBwcNAdExMTg8zMTNy4ceOharS5jTONraioCGq1Wu8fegBQKBQ4e/asSFVZNo1Gg9mzZyMqKgpBQUEAgLy8PDg4OMDDw0PvWIVCgby8PN0xdf13uPMY3bZx40YcO3YMKSkp9zzG82wcFy5cwOrVqxEbG4vXX38dKSkpmDlzJhwcHDB58mTdearrPN59nn18fPQet7Ozg5eXF8/zXebOnYuysjJ07twZMpkMarUaS5cuxYQJEwCA59oEjHVO8/Ly0LZt23te485jnp6eja6R4YbMzvTp05GRkYEDBw6IXYrVyc3NxaxZs7B79244OjqKXY7V0mg0CAsLw7JlywAAPXv2REZGBtasWYPJkyeLXJ11+e677/D111/jm2++Qbdu3ZCWlobZs2fDz8+P59qGsVvqIXl7e0Mmk90zmyQ/Px++vr4iVWW5XnrpJWzZsgV79+5F69atde2+vr5QqVQoKSnRO/7u8+zr61vnf4c7j9HtbqeCggL06tULdnZ2sLOzw759+/Dxxx/Dzs4OCoWC59kIWrZsia5du+q1denSBTk5OQD+d57q+3fD19cXBQUFeo/X1taiuLiY5/kur776KubOnYtnnnkGwcHBmDhxIubMmYO4uDgAPNemYKxzasp/SxhuHpKDgwNCQ0MRHx+va9NoNIiPj0dERISIlVkWQRDw0ksv4eeff8aePXvuuVQZGhoKe3t7vfOcmZmJnJwc3XmOiIhAenq63l+o3bt3w83N7Z4vGls1ZMgQpKenIy0tTXcLCwvDhAkTdD/zPD+8qKioe5YyyMrKgr+/PwCgbdu28PX11TvPZWVlOHz4sN55LikpQWpqqu6YPXv2QKPRIDw8vAk+hWWorKyEVKr/VSaTyaDRaADwXJuCsc5pREQEEhMTUVNToztm9+7dCAwMfKguKQCcCm4MGzduFORyufDll18Kp0+fFv7+978LHh4eerNJqH7Tpk0T3N3dhYSEBOHatWu6W2Vlpe6YF198UWjTpo2wZ88e4ejRo0JERIQQERGhe/zOFOWhQ4cKaWlpwo4dO4QWLVpwivID3D1bShB4no3hyJEjgp2dnbB06VLh3Llzwtdffy04OzsLX331le6Y5cuXCx4eHsIvv/winDx5UnjsscfqnErbs2dP4fDhw8KBAweEjh072vT05LpMnjxZaNWqlW4q+E8//SR4e3sL//znP3XH8Fwbrry8XDh+/Lhw/PhxAYDw4YcfCsePHxcuXbokCIJxzmlJSYmgUCiEiRMnChkZGcLGjRsFZ2dnTgU3J5988onQpk0bwcHBQejTp49w6NAhsUuyKADqvH3xxRe6Y27duiX83//9n+Dp6Sk4OzsLjz/+uHDt2jW917l48aIwfPhwwcnJSfD29hZefvlloaampok/jWX5c7jheTaO3377TQgKChLkcrnQuXNn4bPPPtN7XKPRCAsWLBAUCoUgl8uFIUOGCJmZmXrHXL9+XRg/frzg4uIiuLm5CVOnThXKy8ub8mOYvbKyMmHWrFlCmzZtBEdHR6Fdu3bCG2+8oTe9mOfacHv37q3z3+TJkycLgmC8c3rixAmhX79+glwuF1q1aiUsX77cKPVLBOGuZRyJiIiILBzH3BAREZFVYbghIiIiq8JwQ0RERFaF4YaIiIisCsMNERERWRWGGyIiIrIqDDdERERkVRhuiIiIyKow3BCR0UyZMgVjx44Vu4wm8+WXX0IikUAikWD27Nn1HpuQkKA71pbOEZEY7MQugIgsg0QiqffxRYsW4V//+hfEXvR8ypQpKCkpwebNm5vk/dzc3JCZmYlmzZrp2gICAjB79my9wBMZGYlr165h1qxZqK6ubpLaiGwVww0RNci1a9d0P2/atAkLFy7U2/naxcUFLi4uYpQmKolEAl9f3wce5+DgAF9fXzg5OTHcEJkYu6WIqEF8fX11N3d3d92X+p2bi4vLPd1SjzzyCGbMmIHZs2fD09MTCoUCa9euRUVFBaZOnQpXV1d06NAB27dv13uvjIwMDB8+HC4uLlAoFJg4cSKKiop0j//www8IDg6Gk5MTmjdvjujoaFRUVODNN9/Ehg0b8Msvv+i6gBISEgAAubm5ePrpp+Hh4QEvLy889thjuHjxou4179T+1ltvoUWLFnBzc8OLL74IlUpl0Hl65JFHcOnSJcyZM0dXAxE1LYYbIjKpDRs2wNvbG0eOHMGMGTMwbdo0PPXUU4iMjMSxY8cwdOhQTJw4EZWVlQCAkpISDB48GD179sTRo0exY8cO5Ofn4+mnnwZw+wrS+PHj8eyzz+LMmTNISEjAE088AUEQ8Morr+Dpp5/GsGHDcO3aNVy7dg2RkZGoqalBTEwMXF1dsX//fiQlJcHFxQXDhg3TCy/x8fG61/z222/x008/4a233jLo8/70009o3bo1Fi9erKuBiJoWu6WIyKR69OiB+fPnAwDmzZuH5cuXw9vbGy+88AIAYOHChVi9ejVOnjyJvn37YuXKlejZsyeWLVume43169dDqVQiKysLN2/eRG1tLZ544gn4+/sDAIKDg3XH3un2ubur6KuvvoJGo8Hnn3+uu5LyxRdfwMPDAwkJCRg6dCiA211H69evh7OzM7p164bFixfj1VdfxZIlSyCVNux3QS8vL8hkMri6ujaou4qIjI/hhohMqnv37rqfZTIZmjdvrhdGFAoFAKCgoAAAcOLECezdu7fO8Tvnz5/H0KFDMWTIEAQHByMmJgZDhw7Fk08+CU9Pz/vWcOLECfzxxx9wdXXVa6+qqsL58+d193v06AFnZ2fd/YiICNy8eRO5ubm6IEVE5o/hhohMyt7eXu++RCLRa7tzJUWj0QAAbt68idGjR+Odd96557VatmwJmUyG3bt34+DBg9i1axc++eQTvPHGGzh8+DDatm1bZw03b95EaGgovv7663sea9GiRaM/GxGZJ4YbIjIrvXr1wo8//oiAgADY2dX9T5REIkFUVBSioqKwcOFC+Pv74+eff0ZsbCwcHBygVqvvec1NmzbBx8cHbm5u933vEydO4NatW3BycgIAHDp0CC4uLlAqlQZ9hrpqIKKmwwHFRGRWpk+fjuLiYowfPx4pKSk4f/48du7cialTp0KtVuPw4cNYtmwZjh49ipycHPz0008oLCxEly5dANxeY+bkyZPIzMxEUVERampqMGHCBHh7e+Oxxx7D/v37kZ2djYSEBMycOROXL1/WvbdKpcJzzz2H06dPY9u2bVi0aBFeeumlBo+3uSMgIACJiYm4cuWK3iwvImoaDDdEZFb8/PyQlJQEtVqNoUOHIjg4GLNnz4aHhwekUinc3NyQmJiIESNGoFOnTpg/fz4++OADDB8+HADwwgsvIDAwEGFhYWjRogWSkpLg7OyMxMREtGnTBk888QS6dOmC5557DlVVVXpXcoYMGYKOHTtiwIABGDduHMaMGYM333zT4M+wePFiXLx4Ee3bt2e3F5EIJILYy4kSEZmBxqxs/OWXX2L27NkoKSkx6fsQkWF45YaI6CGUlpbCxcUFr732Wr3H7d+/Hy4uLnUOaiYi4+KAYiKiRvrLX/6Cfv36AQA8PDzqPTYsLAxpaWkAYJPbVBA1JXZLERERkVVhtxQRERFZFYYbIiIisioMN0RERGRVGG6IiIjIqjDcEBERkVVhuCEiIiKrwnBDREREVoXhhoiIiKzK/wPwaELlRv2c+AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(scheduler.alphas_cumprod.cpu(), color=(2/255, 163/255, 163/255), linewidth=2)\n", + "plt.xlabel(\"Timestep [t]\")\n", + "plt.ylabel(\"alpha cumprod\")" + ] + }, + { + "cell_type": "markdown", + "id": "9125f7c8", + "metadata": {}, + "source": [ + "Finally, we define the Inferer, which contains functions that will help during the training and sampling of the model, and the optimizer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8685da6e", + "metadata": {}, + "outputs": [], + "source": [ "inferer = DiffusionInferer(scheduler)\n", "\n", "optimizer = torch.optim.Adam(params=model.parameters(), lr=5e-5)" @@ -335,7 +416,9 @@ "id": "9f371ad8", "metadata": {}, "source": [ - "### Model training" + "## Model training\n", + "\n", + "In this part, we will train the diffusion model to predict the noise added to the images. For this, we are using an MSE loss between the prediction and the original noise. During the training, we are also sampling brain images to evaluate the evolution of the model. In this training, we use Automatic Mixed Precision to save memory and speed up the training." ] }, { @@ -734,7 +817,9 @@ "id": "38724c9b", "metadata": {}, "source": [ - "### Plotting synthetic sample" + "## Sampling Brain Image\n", + "\n", + "In order to sample the brain images, we need to pass the model an image containing just noise and use it to remove the noise of the image iteratively. For that, we will use the `.sample()` function of the `inferer`. " ] }, { @@ -790,10 +875,12 @@ }, { "cell_type": "markdown", - "id": "387365a9", + "id": "f0acc27a", "metadata": {}, "source": [ - "### Sampling with Denoising Diffusion Scheduler" + "### Sampling with Denoising Diffusion Implicit Model Scheduler\n", + "\n", + "Recent papers have proposed different ways to improve the sampling speed by using fewer steps in the denoising process. In this example, we are using a `DDIMScheduler` (from [Song et al. \"Denoising Diffusion Implicit Models\"](https://arxiv.org/abs/2010.02502)) to reduce the original number of steps from 1000 to 250. " ] }, { @@ -831,7 +918,7 @@ { "cell_type": "code", "execution_count": 47, - "id": "1d7858c8", + "id": "89f93ab8", "metadata": {}, "outputs": [ { @@ -854,6 +941,14 @@ "plt.axis(\"off\")\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a39c881c", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py index f8d9ac22..4b20bd16 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py @@ -86,7 +86,18 @@ set_determinism(42) # %% [markdown] -# ## Setup Decathlon Dataset and training and validation dataloaders +# ## Setup Decathlon Dataset and training and validation data loaders +# +# In this tutorial, we will use the 3D T1 weighted brain images from the [2016 and 2017 Brain Tumor Segmentation (BraTS) challenges](https://www.med.upenn.edu/sbia/brats2017/data.html). This dataset can be easily downloaded using the [DecathlonDataset](https://docs.monai.io/en/stable/apps.html#monai.apps.DecathlonDataset) from MONAI (`task="Task01_BrainTumour"`). To load the training and validation images, we are using the `data_transform` transformations that are responsible for the following: +# +# 1. `LoadImaged`: Loads the brain images from files. +# 2. `Lambdad`: Choose channel 1 of the image, which is the T1-weighted image. +# 3. `AddChanneld`: Add the channel dimension of the input data. +# 4. `ScaleIntensityd`: Apply a min-max scaling in the intensity values of each image to be in the `[0, 1]` range. +# 5. `CenterSpatialCropd`: Crop the background of the images using a roi of size `[160, 200, 155]`. +# 6. `Resized`: Resize the images to a volume with size `[32, 40, 32]`. +# +# For the data loader, we are using mini-batches of 8 images, which consumes about 21GB of GPU memory during training. Please, reduce this value to run on smaller GPUs. # %% data_transform = Compose( @@ -128,6 +139,10 @@ # %% [markdown] # ### Define network, scheduler, optimizer, and inferer +# +# We will use a DDPM in this example; for that, we need to define a `DiffusionModelUNet` network that will have as input the noisy images and the values for the timestep `t`, and it will predict the noise that is present in the image. +# +# In this example, we have a network with three levels (with 256, 256, and 512 channels in each). In every level, we will have two residual blocks, and only the last one will have an attention block with a single attention head (with 512 channels). # %% device = torch.device("cuda") @@ -143,6 +158,13 @@ ) model.to(device) + + + +# %% [markdown] +# Together with our U-net, we need to define the Noise Scheduler for the diffusion model. This scheduler is responsible for defining the amount of noise that should be added in each timestep `t` of the diffusion model's Markov chain. Besides that, it has the operations to perform the reverse process, which will remove the noise of the images (a.k.a. denoising process). In this case, we are using a `DDPMScheduler`. Here we are using 1000 timesteps and a `scaled_linear` profile for the beta values (proposed in [Rombach et al. "High-Resolution Image Synthesis with Latent Diffusion Models"](https://arxiv.org/abs/2112.10752)). This profile had better results than the `linear, proposed in the original DDPM's paper. In `beta_start` and `beta_end`, we define the limits for the beta values. These are important to determine how accentuated is the addition of noise in the image. + +# %% scheduler = DDPMScheduler( num_train_timesteps=1000, beta_schedule="scaled_linear", @@ -150,13 +172,23 @@ beta_end=0.0195 ) +# %% +plt.plot(scheduler.alphas_cumprod.cpu(), color=(2/255, 163/255, 163/255), linewidth=2) +plt.xlabel("Timestep [t]") +plt.ylabel("alpha cumprod") + +# %% [markdown] +# Finally, we define the Inferer, which contains functions that will help during the training and sampling of the model, and the optimizer. + +# %% inferer = DiffusionInferer(scheduler) optimizer = torch.optim.Adam(params=model.parameters(), lr=5e-5) - # %% [markdown] -# ### Model training +# ## Model training +# +# In this part, we will train the diffusion model to predict the noise added to the images. For this, we are using an MSE loss between the prediction and the original noise. During the training, we are also sampling brain images to evaluate the evolution of the model. In this training, we use Automatic Mixed Precision to save memory and speed up the training. # %% n_epochs = 150 @@ -256,7 +288,9 @@ # %% [markdown] -# ### Plotting synthetic sample +# ## Sampling Brain Image +# +# In order to sample the brain images, we need to pass the model an image containing just noise and use it to remove the noise of the image iteratively. For that, we will use the `.sample()` function of the `inferer`. # %% model.eval() @@ -276,7 +310,9 @@ plt.show() # %% [markdown] -# ### Sampling with Denoising Diffusion Scheduler +# ### Sampling with Denoising Diffusion Implicit Model Scheduler +# +# Recent papers have proposed different ways to improve the sampling speed by using fewer steps in the denoising process. In this example, we are using a `DDIMScheduler` (from [Song et al. "Denoising Diffusion Implicit Models"](https://arxiv.org/abs/2010.02502)) to reduce the original number of steps from 1000 to 250. # %% scheduler_ddim = DDIMScheduler( @@ -303,3 +339,5 @@ plt.tight_layout() plt.axis("off") plt.show() + +# %% From 63df290b79a16e5f31d16b6e91fd4b1fafed6b78 Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Mon, 20 Mar 2023 20:15:38 +0000 Subject: [PATCH 3/3] Fix formatting Signed-off-by: Walter Hugo Lopez Pinaya --- .../generative/3d_ddpm/3d_ddpm_tutorial.ipynb | 24 ++++++------------- .../generative/3d_ddpm/3d_ddpm_tutorial.py | 17 +++---------- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb index f3730bcd..04038223 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb @@ -7,7 +7,7 @@ "source": [ "# Denoising Diffusion Probabilistic Model on 3D data\n", "\n", - "This tutorial illustrates how to use MONAI for training a denoising diffusion probabilistic model (DDPM)[1] to create synthetic 3D images. \n", + "This tutorial illustrates how to use MONAI for training a denoising diffusion probabilistic model (DDPM)[1] to create synthetic 3D images.\n", "\n", "[1] - [Ho et al. \"Denoising Diffusion Probabilistic Models\"](https://arxiv.org/abs/2006.11239)\n", "\n", @@ -331,8 +331,7 @@ " num_head_channels=[0, 0, 512],\n", " num_res_blocks=2,\n", ")\n", - "model.to(device)\n", - "\n" + "model.to(device)" ] }, { @@ -350,12 +349,7 @@ "metadata": {}, "outputs": [], "source": [ - "scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - " beta_schedule=\"scaled_linear\",\n", - " beta_start=0.0005,\n", - " beta_end=0.0195\n", - ")" + "scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule=\"scaled_linear\", beta_start=0.0005, beta_end=0.0195)" ] }, { @@ -386,7 +380,7 @@ } ], "source": [ - "plt.plot(scheduler.alphas_cumprod.cpu(), color=(2/255, 163/255, 163/255), linewidth=2)\n", + "plt.plot(scheduler.alphas_cumprod.cpu(), color=(2 / 255, 163 / 255, 163 / 255), linewidth=2)\n", "plt.xlabel(\"Timestep [t]\")\n", "plt.ylabel(\"alpha cumprod\")" ] @@ -819,7 +813,7 @@ "source": [ "## Sampling Brain Image\n", "\n", - "In order to sample the brain images, we need to pass the model an image containing just noise and use it to remove the noise of the image iteratively. For that, we will use the `.sample()` function of the `inferer`. " + "In order to sample the brain images, we need to pass the model an image containing just noise and use it to remove the noise of the image iteratively. For that, we will use the `.sample()` function of the `inferer`." ] }, { @@ -880,7 +874,7 @@ "source": [ "### Sampling with Denoising Diffusion Implicit Model Scheduler\n", "\n", - "Recent papers have proposed different ways to improve the sampling speed by using fewer steps in the denoising process. In this example, we are using a `DDIMScheduler` (from [Song et al. \"Denoising Diffusion Implicit Models\"](https://arxiv.org/abs/2010.02502)) to reduce the original number of steps from 1000 to 250. " + "Recent papers have proposed different ways to improve the sampling speed by using fewer steps in the denoising process. In this example, we are using a `DDIMScheduler` (from [Song et al. \"Denoising Diffusion Implicit Models\"](https://arxiv.org/abs/2010.02502)) to reduce the original number of steps from 1000 to 250." ] }, { @@ -899,11 +893,7 @@ ], "source": [ "scheduler_ddim = DDIMScheduler(\n", - " num_train_timesteps=1000,\n", - " beta_schedule=\"scaled_linear\",\n", - " beta_start=0.0005,\n", - " beta_end=0.0195,\n", - " clip_sample=False\n", + " num_train_timesteps=1000, beta_schedule=\"scaled_linear\", beta_start=0.0005, beta_end=0.0195, clip_sample=False\n", ")\n", "\n", "scheduler_ddim.set_timesteps(num_inference_steps=250)\n", diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py index 4b20bd16..bbb00eea 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py @@ -159,21 +159,14 @@ model.to(device) - - # %% [markdown] # Together with our U-net, we need to define the Noise Scheduler for the diffusion model. This scheduler is responsible for defining the amount of noise that should be added in each timestep `t` of the diffusion model's Markov chain. Besides that, it has the operations to perform the reverse process, which will remove the noise of the images (a.k.a. denoising process). In this case, we are using a `DDPMScheduler`. Here we are using 1000 timesteps and a `scaled_linear` profile for the beta values (proposed in [Rombach et al. "High-Resolution Image Synthesis with Latent Diffusion Models"](https://arxiv.org/abs/2112.10752)). This profile had better results than the `linear, proposed in the original DDPM's paper. In `beta_start` and `beta_end`, we define the limits for the beta values. These are important to determine how accentuated is the addition of noise in the image. # %% -scheduler = DDPMScheduler( - num_train_timesteps=1000, - beta_schedule="scaled_linear", - beta_start=0.0005, - beta_end=0.0195 -) +scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule="scaled_linear", beta_start=0.0005, beta_end=0.0195) # %% -plt.plot(scheduler.alphas_cumprod.cpu(), color=(2/255, 163/255, 163/255), linewidth=2) +plt.plot(scheduler.alphas_cumprod.cpu(), color=(2 / 255, 163 / 255, 163 / 255), linewidth=2) plt.xlabel("Timestep [t]") plt.ylabel("alpha cumprod") @@ -316,11 +309,7 @@ # %% scheduler_ddim = DDIMScheduler( - num_train_timesteps=1000, - beta_schedule="scaled_linear", - beta_start=0.0005, - beta_end=0.0195, - clip_sample=False + num_train_timesteps=1000, beta_schedule="scaled_linear", beta_start=0.0005, beta_end=0.0195, clip_sample=False ) scheduler_ddim.set_timesteps(num_inference_steps=250)