From 18e47e3a454409de9e95315e41bd75a5d26f8f82 Mon Sep 17 00:00:00 2001 From: virginiafdez Date: Tue, 6 Jun 2023 09:02:29 +0100 Subject: [PATCH 1/7] Code for SPADE VAE-GAN added, trimmed. Tests added (although at the moment, 3 /4 get executed). Addition of SPADE norm block and auxiliary KLD loss. --- generative/losses/kld_loss.py | 6 + generative/networks/blocks/spade_norm.py | 80 ++++++ generative/networks/nets/spade_network.py | 316 ++++++++++++++++++++++ tests/test_spade_vaegan.py | 113 ++++++++ 4 files changed, 515 insertions(+) create mode 100644 generative/losses/kld_loss.py create mode 100644 generative/networks/blocks/spade_norm.py create mode 100644 generative/networks/nets/spade_network.py create mode 100644 tests/test_spade_vaegan.py diff --git a/generative/losses/kld_loss.py b/generative/losses/kld_loss.py new file mode 100644 index 00000000..4b7e6f31 --- /dev/null +++ b/generative/losses/kld_loss.py @@ -0,0 +1,6 @@ +import torch.nn as nn +import torch + +class KLDLoss(nn.Module): + def forward(self, mu, logvar): + return -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()) diff --git a/generative/networks/blocks/spade_norm.py b/generative/networks/blocks/spade_norm.py new file mode 100644 index 00000000..68991f0c --- /dev/null +++ b/generative/networks/blocks/spade_norm.py @@ -0,0 +1,80 @@ +from __future__ import annotations +import torch +import torch.nn as nn +from monai.networks.blocks import Convolution, ADN +import torch.nn.functional as F + +class SPADE(nn.Module): + """ + SPADE normalisation block based on the 2019 paper by Park et al. (doi: https://doi.org/10.48550/arXiv.1903.07291) + Args: + label_nc: number of semantic labels + norm_nc: number of output channels + kernel_size: kernel size + spatial_dims: number of spatial dimensions + hidden_channels: number of channels in the intermediate gamma and beta layers + normalisation: type of base normalisation used before applying the SPADE normalisation + """ + def __init__(self, + label_nc: int, + norm_nc: int, + kernel_size: int = 3, + spatial_dims: int = 2, + hidden_channels: int = 64, + norm: str | tuple= "INSTANCE", + norm_params: dict = {} + )-> None: + + super().__init__() + + if len(norm_params) != 0: + norm = (norm, norm_params) + self.param_free_norm = ADN(act=None, dropout=0.0, norm = norm, + norm_dim=spatial_dims, + ordering="N", + in_channels=norm_nc) + self.mlp_shared = Convolution(spatial_dims=spatial_dims, + in_channels = label_nc, + out_channels = hidden_channels, + kernel_size= kernel_size, + norm = None, + padding=kernel_size//2, + act="LEAKYRELU") + self.mlp_gamma = Convolution(spatial_dims=spatial_dims, + in_channels=hidden_channels, + out_channels=norm_nc, + kernel_size=kernel_size, + padding = kernel_size//2, + act = None + ) + self.mlp_beta = Convolution(spatial_dims=spatial_dims, + in_channels=hidden_channels, + out_channels=norm_nc, + kernel_size=kernel_size, + padding = kernel_size//2, + act = None + ) + + + def forward(self, + x: torch.Tensor, + segmap: torch.Tensor) -> torch.Tensor: + """ + Args: + x: input tensor + segmap: input segmentation map (bxcx[spatial-dimensions]) where c is the number of semantic channels. + The map will be interpolated to the dimension of x internally. + Returns: + + """ + + # Part 1. generate parameter-free normalized activations + normalized = self.param_free_norm(x) + + # Part 2. produce scaling and bias conditioned on semantic map + segmap = F.interpolate(segmap, size=x.size()[2:], mode='nearest') + actv = self.mlp_shared(segmap) + gamma = self.mlp_gamma(actv) + beta = self.mlp_beta(actv) + out = normalized * (1 + gamma) + beta + return out diff --git a/generative/networks/nets/spade_network.py b/generative/networks/nets/spade_network.py new file mode 100644 index 00000000..d28a069d --- /dev/null +++ b/generative/networks/nets/spade_network.py @@ -0,0 +1,316 @@ +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import torch +import torch.nn as nn +from typing import Union, Sequence +import numpy as np +from monai.networks.blocks import Convolution +from monai.networks.layers import Act +from networks.blocks.spade_norm import SPADE +from monai.utils.enums import StrEnum +import torch.nn.functional as F +from losses.kld_loss import KLDLoss + +class UpsamplingModes(StrEnum): + bicubic = "bicubic" + nearest = "nearest" + bilinear = "bilinear" + +class SPADE_ResNetBlock(nn.Module): + + def __init__(self, + spatial_dims: int, + in_channels: int, + out_channels: int, + label_nc: int, + spade_intermediate_channels: int = 128, + norm: Union[str, tuple] = "INSTANCE", + kernel_size: int = 3,): + + super().__init__() + self.in_channels = in_channels + self.out_channels = out_channels + self.int_channels = min(self.in_channels, self.out_channels) + self.learned_shortcut = self.in_channels != self.out_channels + self.conv_0 = Convolution(spatial_dims = spatial_dims, + in_channels = self.in_channels, + out_channels = self.int_channels, + act = None, + norm = None, + ) + self.conv_1 = Convolution(spatial_dims = spatial_dims, + in_channels = self.int_channels, + out_channels = self.out_channels, + act = None, + norm = None, + ) + self.activation = nn.LeakyReLU(0.2, False) + self.norm_0 = SPADE(label_nc=label_nc, norm_nc=self.in_channels, kernel_size=kernel_size, + spatial_dims=spatial_dims, hidden_channels=spade_intermediate_channels, + norm=norm) + self.norm_1 = SPADE(label_nc=label_nc, norm_nc=self.int_channels, kernel_size=kernel_size, + spatial_dims=spatial_dims, hidden_channels=spade_intermediate_channels, + norm=norm) + + if self.learned_shortcut: + self.conv_s = Convolution(spatial_dims = spatial_dims, + in_channels = self.in_channels, + out_channels = self.out_channels, + act = None, + norm = None, + kernel_size=1, + ) + self.norm_s = SPADE(label_nc=label_nc, norm_nc=self.in_channels, kernel_size=kernel_size, + spatial_dims=spatial_dims, hidden_channels=spade_intermediate_channels, + norm=norm) + + def forward(self, x, seg): + + x_s = self.shortcut(x, seg) + dx = self.conv_0(self.activation(self.norm_0(x, seg))) + dx = self.conv_1(self.activation(self.norm_1(dx, seg))) + out = x_s + dx + return out + + def shortcut(self, x, seg): + if self.learned_shortcut: + x_s = self.conv_s(self.norm_s(x, seg)) + else: + x_s = x + return x_s + +class SPADE_Encoder(nn.Module): + + def __init__(self, + spatial_dims: int, + in_channels: int, + z_dim: int, + num_channels: Sequence[int], + input_shape: Sequence[int], + kernel_size: int = 3, + norm: Union[str, tuple] = "INSTANCE", + act: Union[str, tuple] = (Act.LEAKYRELU, {"negative_slope": 0.2})): + + super().__init__() + self.in_channels = in_channels + self.z_dim = z_dim + self.num_channels = num_channels + if len(input_shape) != spatial_dims: + raise ValueError("Length of parameter input shape must match spatial_dims; got %s" %(input_shape)) + for s_ind, s_ in enumerate(input_shape): + if s_ / (2 ** len(num_channels)) != s_ // (2 ** len(num_channels)): + raise ValueError("Each dimension of your input must be divisible by 2 ** (autoencoder depth)." + "The shape in position %d, %d is not divisible by %d. " %(s_ind, s_, len(num_channels))) + self.input_shape = input_shape + self.latent_spatial_shape = [s_ // (2 ** len(self.num_channels)) for s_ in self.input_shape] + blocks = [] + ch_init = self.in_channels + for ch_ind, ch_value in enumerate(num_channels): + blocks.append(Convolution(spatial_dims = spatial_dims, + in_channels = ch_init, + out_channels= ch_value, + strides=2, + kernel_size=kernel_size, + norm = norm, + act = act)) + ch_init = ch_value + + self.blocks = nn.ModuleList(blocks) + self.fc_mu = nn.Linear(in_features=np.prod(self.latent_spatial_shape) * self.num_channels[-1], + out_features=self.z_dim) + self.fc_var = nn.Linear(in_features=np.prod(self.latent_spatial_shape) * self.num_channels[-1], + out_features=self.z_dim) + + def forward(self, x,): + for block in self.blocks: + x = block(x) + x = x.view(x.size(0), -1) + mu = self.fc_mu(x) + logvar = self.fc_var(x) + return mu, logvar + + def encode(self, x): + + for block in self.blocks: + x = block(x) + x = x.view(x.size(0), -1) + mu = self.fc_mu(x) + logvar = self.fc_var(x) + return self.reparameterize(mu, logvar) + + def reparameterize(self, mu, logvar): + + std = torch.exp(0.5 * logvar) + eps = torch.randn_like(std) + return eps.mul(std) + mu + +class SPADE_Decoder(nn.Module): + + def __init__(self, + spatial_dims: int, + out_channels: int, + label_nc: int, + input_shape: Sequence[int], + num_channels: Sequence[int], + z_dim: Union[int, None] = None, + is_gan: bool = False, + spade_intermediate_channels: int = 128, + norm: Union[str, tuple] = "INSTANCE", + act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + last_act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + kernel_size: int = 3, + upsampling_mode: str = UpsamplingModes.nearest.value, + ): + + super().__init__() + self.is_gan = is_gan + self.out_channels = out_channels + self.label_nc = label_nc + self.num_channels = num_channels + if len(input_shape) != spatial_dims: + raise ValueError("Length of parameter input shape must match spatial_dims; got %s" % (input_shape)) + for s_ind, s_ in enumerate(input_shape): + if s_ / (2 ** len(num_channels)) != s_ // (2 ** len(num_channels)): + raise ValueError("Each dimension of your input must be divisible by 2 ** (autoencoder depth)." + "The shape in position %d, %d is not divisible by %d. " % ( + s_ind, s_, len(num_channels))) + self.latent_spatial_shape = [s_ // (2 ** len(self.num_channels)) for s_ in input_shape] + + if self.is_gan: + self.fc = nn.Linear(label_nc, np.prod(self.latent_spatial_shape) * num_channels[0]) + else: + self.fc = nn.Linear(z_dim, np.prod(self.latent_spatial_shape) * num_channels[0]) + + blocks = [] + num_channels.append(self.out_channels) + self.upsampling = torch.nn.Upsample(scale_factor=2, mode=upsampling_mode) + for ch_ind, ch_value in enumerate(num_channels[:-1]): + blocks.append(SPADE_ResNetBlock(spatial_dims=spatial_dims, + in_channels=ch_value, + out_channels=num_channels[ch_ind+1], + label_nc=label_nc, + spade_intermediate_channels=spade_intermediate_channels, + norm=norm, + kernel_size=kernel_size),) + + self.blocks = torch.nn.ModuleList(blocks) + self.last_conv = Convolution(spatial_dims=spatial_dims, + in_channels=num_channels[-1], + out_channels=out_channels, + padding=(kernel_size-1)//2, + kernel_size=kernel_size, + norm = None, + act=last_act + ) + + + def forward(self, seg, z: torch.Tensor = None): + + + if self.is_gan: + x = F.interpolate(seg, size=tuple(self.latent_spatial_shape)) + x = self.fc(x) + else: + if z is None: + z = torch.randn(seg.size(0), self.opt.z_dim, + dtype=torch.float32, device=seg.get_device()) + x = self.fc(z) + x = x.view(*[-1, self.num_channels[0]]+self.latent_spatial_shape) + + for res_block in self.blocks: + x = res_block(x, seg) + x = self.upsampling(x) + + x = self.last_conv(x) + return x + +class SPADE_Net(nn.Module): + + def __init__( + self, + spatial_dims: int, + in_channels: int, + out_channels: int, + label_nc: int, + input_shape: Sequence[int], + num_channels: Sequence[int], + z_dim: Union[int, None] = None, + is_vae: bool = True, + spade_intermediate_channels: int = 128, + norm:Union[str, tuple] = "INSTANCE", + act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + last_act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + kernel_size: int = 3, + upsampling_mode: str = UpsamplingModes.nearest.value + + ): + + super().__init__() + self.is_vae = is_vae + if self.is_vae and z_dim is None: + ValueError("The latent space dimension mapped by parameter z_dim cannot be None is is_vae is True.") + + self.in_channels = in_channels + self.out_channels = out_channels + self.num_channels = num_channels + self.label_nc = label_nc + self.input_shape = input_shape + self.kld_loss = KLDLoss() + + if self.is_vae: + self.encoder = SPADE_Encoder( + spatial_dims = spatial_dims, + in_channels = in_channels, + z_dim = z_dim, + num_channels = num_channels, + input_shape = input_shape, + kernel_size = kernel_size, + norm = norm, + act = act) + + decoder_channels = num_channels + decoder_channels.reverse() + + self.decoder = SPADE_Decoder( + spatial_dims=spatial_dims, + out_channels=out_channels, + label_nc=label_nc, + input_shape=input_shape, + num_channels= decoder_channels, + z_dim = z_dim, + is_gan = not is_vae, + spade_intermediate_channels = spade_intermediate_channels, + norm = norm, + act = act, + last_act = last_act, + kernel_size=kernel_size, + upsampling_mode=upsampling_mode + ) + + def forward(self, seg: torch.Tensor, x: Union[torch.Tensor, None] = None): + + z = None + if self.is_vae: + z_mu, z_logvar = self.encoder(x) + z = self.encoder.reparameterize(z_mu, z_logvar) + kld_loss = self.kld_loss(z_mu, z_logvar) + return self.decoder(seg, z), kld_loss + else: + return self.decoder(seg, z), + + def encode(self, x: torch.Tensor): + + return self.encoder.encode(x) + + def decode(self, seg: torch.Tensor, z: Union[torch.Tensor, None] = None): + + return self.decoder(seg, z) diff --git a/tests/test_spade_vaegan.py b/tests/test_spade_vaegan.py new file mode 100644 index 00000000..8ea62b9f --- /dev/null +++ b/tests/test_spade_vaegan.py @@ -0,0 +1,113 @@ +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import annotations +import unittest +import torch +from monai.networks import eval_mode +from parameterized import parameterized +from networks.nets.spade_network import SPADE_Net +import numpy as np + +CASE_2D = [[[2, 1, 1, 3, [64, 64], [16, 32, 64, 128], 16, True]]] +CASE_2D_BIS = [[[2, 1, 1, 3, [64, 64], [16, 32, 64, 128], 16, True]]] +CASE_3D = [[[3, 1, 1, 3, [64, 64, 64], [16, 32, 64, 128], 16, True]]] + +def create_Semantic_Data(shape:list, semantic_regions:int): + ''' + To create semantic and image mock inputs for the network. + Args: + shape: input shape + semantic_regions: number of semantic regions + Returns: + ''' + out_label = torch.zeros(shape) + out_image = torch.zeros(shape) + torch.randn(shape)*0.01 + for i in range(1, semantic_regions): + shape_square = [i//np.random.choice(list(range(2, i//2))) for i in shape] + start_point = [np.random.choice(list(range(shape[ind]-shape_square[ind]))) + for ind, i in enumerate(shape)] + if len(shape) == 2: + out_label[start_point[0]:(start_point[0]+shape_square[0]), + start_point[1]:(start_point[1]+shape_square[1])] = i + base_intensity = torch.ones(shape_square) * np.random.randn() + out_image[start_point[0]:(start_point[0] + shape_square[0]), + start_point[1]:(start_point[1] + shape_square[1])] = base_intensity + \ + torch.randn(shape_square)*0.1 + elif len(shape) == 3: + out_label[start_point[0]:(start_point[0]+shape_square[0]), + start_point[1]:(start_point[1]+shape_square[1]), + start_point[2]:(start_point[2] + shape_square[2])] = i + base_intensity = torch.ones(shape_square) * np.random.randn() + out_image[start_point[0]:(start_point[0]+shape_square[0]), + start_point[1]:(start_point[1]+shape_square[1]), + start_point[2]:(start_point[2] + shape_square[2])] = base_intensity + \ + torch.randn(shape_square)*0.1 + else: + ValueError("Supports only 2D and 3D tensors") + + # One hot encode label + out_label_ = torch.zeros([semantic_regions,] + list(out_label.shape)) + for ch in range(semantic_regions): + out_label_[ch, ...] = out_label == ch + + return out_label_.unsqueeze(0), out_image.unsqueeze(0).unsqueeze(0) + +class TestDiffusionModelUNet2D(unittest.TestCase): + + @parameterized.expand(CASE_2D) + def test_forward_2d(self, input_param): + ''' + Check that forward method is called correctly and output shape matches. + ''' + net = SPADE_Net(*input_param) + in_label, in_image = create_Semantic_Data(input_param[4], input_param[3]) + with eval_mode(net): + out, kld = net(in_label, in_image) + self.assertEqual(False, True in torch.isnan(out) or True in torch.isinf(out) + or True in torch.isinf(kld) or True in torch.isinf(kld)) + self.assertEqual(list(out.shape), [1, 1, 64, 64]) + + @parameterized.expand(CASE_2D_BIS) + def test_encoder_decoder(self, input_param): + ''' + Check that forward method is called correctly and output shape matches. + ''' + net = SPADE_Net(*input_param) + in_label, in_image = create_Semantic_Data(input_param[4], input_param[3]) + with eval_mode(net): + out_z = net.encode(in_image) + self.assertEqual(list(out_z.shape), [1, 16]) + out_i = net.decode(in_label, out_z) + self.assertEqual(list(out_i.shape), [1, 1, 64, 64]) + + @parameterized.expand(CASE_3D) + def test_forward_2d(self, input_param): + ''' + Check that forward method is called correctly and output shape matches. + ''' + net = SPADE_Net(*input_param) + in_label, in_image = create_Semantic_Data(input_param[4], input_param[3]) + with eval_mode(net): + out, kld = net(in_label, in_image) + self.assertEqual(False, True in torch.isnan(out) or True in torch.isinf(out) + or True in torch.isinf(kld) or True in torch.isinf(kld)) + self.assertEqual(list(out.shape), [1, 1, 64, 64, 64]) + + def test_shape_wrong(self): + ''' + We input an input shape that isn't divisible by 2**(n downstream steps) + ''' + with self.assertRaises(ValueError): + net = SPADE_Net(1, 1, 8, [16, 16], [16, 32, 64, 128], 16, True) + +if __name__ == "__main__": + unittest.main() From 390eb58e921ad0ec9b87eda63c4c95d5d1c0a324 Mon Sep 17 00:00:00 2001 From: virginiafdez Date: Tue, 20 Jun 2023 22:11:51 +0100 Subject: [PATCH 2/7] Added SPADE network code, tests and jupyter notebook for 2D --- generative/networks/nets/spade_network.py | 4 +- tests/test_spade_vaegan.py | 2 +- .../2d_autoencoderkl_tutorial.ipynb | 41 ++++++++++--------- .../2d_autoencoderkl_tutorial.py | 1 - 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/generative/networks/nets/spade_network.py b/generative/networks/nets/spade_network.py index d28a069d..ebf601e6 100644 --- a/generative/networks/nets/spade_network.py +++ b/generative/networks/nets/spade_network.py @@ -15,10 +15,10 @@ import numpy as np from monai.networks.blocks import Convolution from monai.networks.layers import Act -from networks.blocks.spade_norm import SPADE +from generative.networks.blocks.spade_norm import SPADE from monai.utils.enums import StrEnum import torch.nn.functional as F -from losses.kld_loss import KLDLoss +from generative.losses.kld_loss import KLDLoss class UpsamplingModes(StrEnum): bicubic = "bicubic" diff --git a/tests/test_spade_vaegan.py b/tests/test_spade_vaegan.py index 8ea62b9f..3354d4d6 100644 --- a/tests/test_spade_vaegan.py +++ b/tests/test_spade_vaegan.py @@ -90,7 +90,7 @@ def test_encoder_decoder(self, input_param): self.assertEqual(list(out_i.shape), [1, 1, 64, 64]) @parameterized.expand(CASE_3D) - def test_forward_2d(self, input_param): + def test_forward_3d(self, input_param): ''' Check that forward method is called correctly and output shape matches. ''' diff --git a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb index 11d059c3..2b398ee5 100644 --- a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb +++ b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb @@ -72,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "350736c2", "metadata": {}, "outputs": [ @@ -80,29 +80,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "MONAI version: 1.1.dev2239\n", - "Numpy version: 1.23.3\n", - "Pytorch version: 1.8.0+cu111\n", + "MONAI version: 1.2.dev2304\n", + "Numpy version: 1.23.5\n", + "Pytorch version: 1.13.1+cu117\n", "MONAI flags: HAS_EXT = False, USE_COMPILED = False, USE_META_DICT = False\n", - "MONAI rev id: 13b24fa92b9d98bd0dc6d5cdcb52504fd09e297b\n", - "MONAI __file__: /media/walter/Storage/Projects/GenerativeModels/venv/lib/python3.8/site-packages/monai/__init__.py\n", + "MONAI rev id: 9a57be5aab9f2c2a134768c0c146399150e247a0\n", + "MONAI __file__: /home/vf19/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/monai/__init__.py\n", "\n", "Optional dependencies:\n", "Pytorch Ignite version: 0.4.10\n", - "Nibabel version: 4.0.2\n", - "scikit-image version: NOT INSTALLED or UNKNOWN VERSION.\n", - "Pillow version: 9.2.0\n", - "Tensorboard version: 2.11.0\n", - "gdown version: NOT INSTALLED or UNKNOWN VERSION.\n", - "TorchVision version: 0.9.0+cu111\n", + "ITK version: 5.3.0\n", + "Nibabel version: 5.0.0\n", + "scikit-image version: 0.19.3\n", + "Pillow version: 9.4.0\n", + "Tensorboard version: 2.12.0\n", + "gdown version: 4.6.3\n", + "TorchVision version: 0.14.1+cu117\n", "tqdm version: 4.64.1\n", - "lmdb version: NOT INSTALLED or UNKNOWN VERSION.\n", - "psutil version: 5.9.3\n", - "pandas version: NOT INSTALLED or UNKNOWN VERSION.\n", + "lmdb version: 1.4.0\n", + "psutil version: 5.9.4\n", + "pandas version: 1.5.3\n", "einops version: 0.6.0\n", - "transformers version: NOT INSTALLED or UNKNOWN VERSION.\n", - "mlflow version: NOT INSTALLED or UNKNOWN VERSION.\n", - "pynrrd version: NOT INSTALLED or UNKNOWN VERSION.\n", + "transformers version: 4.21.3\n", + "mlflow version: 2.1.1\n", + "pynrrd version: 1.0.0\n", "\n", "For details about installing the optional dependencies, please visit:\n", " https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n", @@ -115,7 +116,7 @@ "import shutil\n", "import tempfile\n", "import time\n", - "\n", + "from pathlib import Path\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import torch\n", @@ -1229,7 +1230,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.9.16" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py index 53ccf898..39e44730 100644 --- a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py +++ b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py @@ -42,7 +42,6 @@ import shutil import tempfile import time - import matplotlib.pyplot as plt import numpy as np import torch From 97737b19a4b4a7b4778d482c3660f83741e515a9 Mon Sep 17 00:00:00 2001 From: virginiafdez Date: Tue, 20 Jun 2023 22:23:10 +0100 Subject: [PATCH 3/7] Added SPADE network code, tests and jupyter notebook for 2D --- .../2d_spade_gan/2d_spade_vae.ipynb | 937 ++++++++++++++++++ .../generative/2d_spade_gan/2d_spade_vae.py | 330 ++++++ 2 files changed, 1267 insertions(+) create mode 100644 tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb create mode 100644 tutorials/generative/2d_spade_gan/2d_spade_vae.py diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb new file mode 100644 index 00000000..c7c29aaf --- /dev/null +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb @@ -0,0 +1,937 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 5, + "id": "1f7ba8ce", + "metadata": {}, + "outputs": [], + "source": [ + "# Copyright (c) MONAI Consortium\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "# http://www.apache.org/licenses/LICENSE-2.0\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "id": "102909fb", + "metadata": {}, + "source": [ + "# SPADE VAE-GAN" + ] + }, + { + "cell_type": "markdown", + "id": "7d4cbc3c", + "metadata": {}, + "source": [ + "This notebook creates a mock SPADE VAE-GAN based on the paper \"Semantic Image Synthesis with Spatially-Adaptive Normalization\" (2019) by Park T, Liu MY, Wang TC, Zhu JY. More information available at: https://github.com/NVlabs/SPADE" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e059c423", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "import os\n", + "import tempfile\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import torch\n", + "from pathlib import Path\n", + "import zipfile\n", + "import gdown\n", + "from monai.data import DataLoader\n", + "from tqdm import tqdm\n", + "from generative.losses import PatchAdversarialLoss, PerceptualLoss\n", + "from generative.networks.nets import MultiScalePatchDiscriminator\n", + "import numpy as np\n", + "import monai\n", + "from generative.networks.nets.spade_network import SPADE_Net" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e76296e7", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Temporary directory used: /tmp/tmpy_otj3u5 \n" + ] + } + ], + "source": [ + "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\")\n", + "root_dir = tempfile.mkdtemp() if directory is None else directory\n", + "root_dir = Path(root_dir)\n", + "print(\"Temporary directory used: %s \" %root_dir)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2483148a", + "metadata": {}, + "outputs": [], + "source": [ + "# INPUT PARAMETERS\n", + "input_shape = [128, 128]\n", + "batch_size = 6\n", + "num_workers = 4\n", + "num_epochs = 100\n", + "lambda_perc = 1.0\n", + "lambda_feat = 0.1\n", + "lambda_kld = 0.00001\n", + "loss_adv = 1.0" + ] + }, + { + "cell_type": "markdown", + "id": "3f2448ba", + "metadata": {}, + "source": [ + "### Data" + ] + }, + { + "cell_type": "markdown", + "id": "2c91eec2", + "metadata": {}, + "source": [ + "The data for this notebook comes from the public dataset OASIS (Open Access Series of Imaging Studies) [1]. The images have been registered to MNI space using ANTsPy, and then subsampled to 2mm isotropic resolution. Geodesic Information Flows (GIF) [2] has been used to segment 5 regions: cerebrospinal fluid (CSF), grey matter (GM), white matter (WM), deep grey matter (DGM) and brainstem. In addition, BaMos [3] has been used to provide white matter hyperintensities segmentations (WMH). The available dataset contains:\n", + "- T1-weighted images\n", + "- FLAIR weighted images\n", + "- Segmentations with the following labels: 0 (background), 1 (CSF), 2 (GM), 3 (WM), 4 (DGM), 5 (brainstem) and 6 (WMH).\n", + "\n", + "_**Acknowledgments**: \"Data were provided by OASIS-3: Longitudinal Multimodal Neuroimaging: Principal Investigators: T. Benzinger, D. Marcus, J. Morris; NIH P30 AG066444, P50 AG00561, P30 NS09857781, P01 AG026276, P01 AG003991, R01 AG043434, UL1 TR000448, R01 EB009352. AV-45 doses were provided by Avid Radiopharmaceuticals, a wholly owned subsidiary of Eli Lilly.”_\n", + "\n", + "\n", + "Citations:\n", + "\n", + "[1] Marcus, DS, Wang, TH, Parker, J, Csernansky, JG, Morris, JC, Buckner. Open Access Series of Imaging Studies (OASIS): Cross-Sectional MRI Data in Young, Middle Aged, Nondemented, and Demented Older Adults, RL. Journal of Cognitive Neuroscience, 19, 1498-1507. doi: 10.1162/jocn.2007.19.9.1498\n", + "\n", + "[2] Cardoso MJ, Modat M, Wolz R, Melbourne A, Cash D, Rueckert D, Ourselin S. Geodesic Information Flows: Spatially-Variant Graphs and Their Application to Segmentation and Fusion. IEEE Trans Med Imaging. 2015 Sep;34(9):1976-88. doi: 10.1109/TMI.2015.2418298. Epub 2015 Apr 14. PMID: 25879909.\n", + "\n", + "[3] Fiford CM, Sudre CH, Pemberton H, Walsh P, Manning E, Malone IB, Nicholas J, Bouvy WH, Carmichael OT, Biessels GJ, Cardoso MJ, Barnes J; Alzheimer’s Disease Neuroimaging Initiative. Automated White Matter Hyperintensity Segmentation Using Bayesian Model Selection: Assessment and Correlations with Cognitive Change. Neuroinformatics. 2020 Jun;18(3):429-449. doi: 10.1007/s12021-019-09439-6. PMID: 32062817; PMCID: PMC7338814.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "dc560f7e", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Downloading...\n", + "From: https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5\n", + "To: /tmp/tmpy_otj3u5/data.zip\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 384M/384M [00:06<00:00, 62.8MB/s]\n" + ] + }, + { + "data": { + "text/plain": [ + "'/tmp/tmpy_otj3u5/data.zip'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdown.download(\"https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5\",\n", + " str(root_dir / 'data.zip'))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "cd7dd6ec", + "metadata": {}, + "outputs": [], + "source": [ + "zip_obj = zipfile.ZipFile(os.path.join(root_dir, 'data.zip'), 'r')\n", + "zip_obj.extractall(root_dir)\n", + "images_T1 = root_dir / \"OASIS_SMALL-SUBSET/T1\"\n", + "images_FLAIR = root_dir / \"OASIS_SMALL-SUBSET/FLAIR\"\n", + "labels = root_dir / \"OASIS_SMALL-SUBSET/Segmentations\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d48987b9", + "metadata": {}, + "outputs": [], + "source": [ + "# We create the data dictionaries that we need\n", + "all_images = [os.path.join(images_T1, i) for i in os.listdir(images_T1)] + \\\n", + " [os.path.join(images_FLAIR, i) for i in os.listdir(images_FLAIR)]\n", + "np.random.shuffle(all_images)\n", + "corresponding_labels = [os.path.join(labels, i.split(\"/\")[-1].replace(i.split(\"/\")[-1].split(\"_\")[0], \"Parcellation\"))\n", + " for i in all_images]\n", + "input_dict = [{'image': i, 'label': corresponding_labels[ind]} for ind, i in enumerate(all_images)]\n", + "input_dict_train = input_dict[:int(len(input_dict)*0.9)]\n", + "input_dict_val = input_dict[int(len(input_dict)*0.9):]" + ] + }, + { + "cell_type": "markdown", + "id": "9916ca5a", + "metadata": {}, + "source": [ + "### Dataloaders" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "8ab79cdc", + "metadata": { + "lines_to_end_of_cell_marker": 2 + }, + "outputs": [], + "source": [ + "preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain\n", + "crop_shape = input_shape + [1]\n", + "base_transforms = [\n", + " monai.transforms.LoadImaged(keys = ['label', 'image']),\n", + " monai.transforms.EnsureChannelFirstd(keys=['image', 'label']),\n", + " monai.transforms.CenterSpatialCropd(keys=['label', 'image'],\n", + " roi_size=preliminar_shape),\n", + " monai.transforms.RandSpatialCropd(keys = ['label', 'image'],\n", + " roi_size=crop_shape, max_roi_size=crop_shape),\n", + " monai.transforms.SqueezeDimd(keys=['label', 'image'], dim = -1),\n", + " monai.transforms.Resized(keys = ['image', 'label'], spatial_size=input_shape),\n", + "]\n", + "last_transforms = [\n", + " monai.transforms.CopyItemsd(keys=['label'], names=['label_channel']),\n", + " monai.transforms.Lambdad(keys=['label_channel'],\n", + " func=lambda l: l != 0),\n", + " monai.transforms.MaskIntensityd(keys=['image'], mask_key='label_channel'),\n", + " monai.transforms.NormalizeIntensityd(keys=['image']),\n", + " monai.transforms.ToTensord(keys=['image', 'label'])\n", + " ]\n", + "\n", + "aug_transforms = [\n", + " monai.transforms.RandBiasFieldd(coeff_range=(0, 0.005), prob=0.33, keys=['image']),\n", + " monai.transforms.RandAdjustContrastd(gamma=(0.9, 1.15), prob=0.33, keys=['image']),\n", + " monai.transforms.RandGaussianNoised(prob=0.33, mean=0.0, std=np.random.uniform(0.005, 0.015),\n", + " keys=['image']),\n", + " monai.transforms.RandAffined(rotate_range=[-0.05, 0.05], shear_range=[0.001, 0.05],\n", + " scale_range=[0, 0.05], padding_mode='zeros',\n", + " mode='nearest', prob=0.33, keys=['label', 'image'])\n", + " ]\n", + "\n", + "train_transforms = monai.transforms.Compose(base_transforms + aug_transforms + last_transforms)\n", + "val_transforms = monai.transforms.Compose(base_transforms + last_transforms)\n", + "\n", + "train_dataset = monai.data.dataset.Dataset(input_dict_train, train_transforms)\n", + "val_dataset = monai.data.dataset.Dataset(input_dict_val, val_transforms)\n", + "train_loader = DataLoader(train_dataset, shuffle=True, batch_size=batch_size, num_workers=num_workers)\n", + "val_loader = DataLoader(val_dataset, shuffle=False, drop_last=False, batch_size=batch_size, num_workers=num_workers)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "98d14e75", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([6, 1, 128, 128])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Sanity check\n", + "batch = next(iter(train_loader))\n", + "print(batch['image'].shape)\n", + "plt.subplot(1,2,1)\n", + "plt.imshow(batch['image'][0,0,...], cmap = 'gist_gray'); plt.axis('off')\n", + "plt.subplot(1,2,2)\n", + "plt.imshow(batch['label'][0,0,...], cmap = \"jet\"); plt.axis('off')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "63de4490", + "metadata": {}, + "source": [ + "### Network creation and losses" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "fa17d864", + "metadata": {}, + "outputs": [], + "source": [ + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "8f126b17", + "metadata": {}, + "outputs": [], + "source": [ + "def one_hot(input_label, label_nc):\n", + " # One hot encoding function for the labels\n", + " shape_ = list(input_label.shape)\n", + " shape_[1] = label_nc\n", + " label_out = torch.zeros(shape_)\n", + " for channel in range(label_nc):\n", + " label_out[:, channel, ...] = input_label[:, 0, ...] == channel\n", + " return label_out" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6af2779b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "255c90c7", + "metadata": {}, + "outputs": [], + "source": [ + "def picture_results(input_label, input_image, output_image):\n", + " f = plt.figure(figsize = (4, 1.5))\n", + " plt.subplot(1,3,1)\n", + " plt.imshow(torch.argmax(input_label, 1)[0,...].detach().cpu(), cmap = 'jet')\n", + " plt.axis('off')\n", + " plt.title(\"Label\")\n", + " plt.subplot(1,3,2)\n", + " plt.imshow(input_image[0,0,...].detach().cpu(), cmap = 'gist_gray')\n", + " plt.axis('off')\n", + " plt.title(\"Input image\")\n", + " plt.subplot(1,3,3)\n", + " plt.imshow(output_image[0,0,...].detach().cpu(), cmap = 'gist_gray')\n", + " plt.axis('off')\n", + " plt.title(\"Output image\")\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eaa62145", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c18dbad8", + "metadata": {}, + "outputs": [], + "source": [ + "def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat, device):\n", + " criterion = torch.nn.L1Loss()\n", + " num_D = len(input_features_disc_fake)\n", + " GAN_Feat_loss = torch.zeros(1).to(device)\n", + " for i in range(num_D): # for each discriminator\n", + " num_intermediate_outputs = len(input_features_disc_fake[i])\n", + " for j in range(num_intermediate_outputs): # for each layer output\n", + " unweighted_loss = criterion(input_features_disc_fake[i][j],\n", + " input_features_disc_real[i][j].detach())\n", + " GAN_Feat_loss += unweighted_loss * lambda_feat / num_D\n", + " return GAN_Feat_loss" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "89989c34", + "metadata": {}, + "outputs": [], + "source": [ + "net = SPADE_Net(spatial_dims = 2,\n", + " in_channels = 1,\n", + " out_channels = 1,\n", + " label_nc = 6,\n", + " input_shape = input_shape,\n", + " num_channels = [16, 32, 64, 128],\n", + " z_dim = 16,\n", + " is_vae = True)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "5b8b676f", + "metadata": {}, + "outputs": [], + "source": [ + "discriminator = MultiScalePatchDiscriminator(num_d = 2,\n", + " num_layers_d = 3,\n", + " spatial_dims = 2,\n", + " num_channels = 8,\n", + " in_channels = 7,\n", + " out_channels = 7,\n", + " minimum_size_im = 128,\n", + " norm = \"INSTANCE\",\n", + " kernel_size = 3\n", + " )\n", + "\n", + "adversarial_loss = PatchAdversarialLoss(reduction = \"sum\", criterion = \"hinge\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "36ea4308", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", + "Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=VGG16_Weights.IMAGENET1K_V1`. You can also use `weights=VGG16_Weights.DEFAULT` to get the most up-to-date weights.\n" + ] + } + ], + "source": [ + "perceptual_loss = PerceptualLoss(spatial_dims = 2,\n", + " network_type = \"vgg\",\n", + " is_fake_3d = False,\n", + " pretrained = True)\n", + "perceptual_loss=perceptual_loss.to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "3b57abd3", + "metadata": {}, + "outputs": [], + "source": [ + "optimizer_G = torch.optim.Adam(net.parameters(), lr = 0.0002)\n", + "optimizer_D = torch.optim.Adam(discriminator.parameters(), lr = 0.0004)" + ] + }, + { + "cell_type": "markdown", + "id": "b8fde71b", + "metadata": {}, + "source": [ + "### Training loop\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "918eac0a", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|█████| 15/15 [00:08<00:00, 1.74it/s, kld=378, perceptual=0.395, generator=2.04, feature=0.206, discriminator=3.69]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████| 2/2 [00:00<00:00, 3.18it/s, kld=252, perceptual=0.362, generator=2.1, feature=0.204, discriminator=3.61]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.18it/s, kld=279, perceptual=0.395, generator=2.15, feature=0.202, discriminator=3.7]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████| 2/2 [00:00<00:00, 3.25it/s, kld=184, perceptual=0.421, generator=2.2, feature=0.196, discriminator=3.36]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.14it/s, kld=207, perceptual=0.421, generator=2.32, feature=0.214, discriminator=2.83]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|███████| 2/2 [00:00<00:00, 3.47it/s, kld=125, perceptual=0.414, generator=2.33, feature=0.222, discriminator=2.82]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=131, perceptual=0.384, generator=2.31, feature=0.219, discriminator=2.68]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████| 2/2 [00:00<00:00, 3.38it/s, kld=87.2, perceptual=0.403, generator=2.35, feature=0.221, discriminator=2.59]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:07<00:00, 2.12it/s, kld=170, perceptual=0.353, generator=2.46, feature=0.17, discriminator=2.51]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|███████| 2/2 [00:00<00:00, 3.34it/s, kld=113, perceptual=0.339, generator=2.48, feature=0.174, discriminator=2.51]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=181, perceptual=0.321, generator=2.52, feature=0.203, discriminator=2.23]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|███████| 2/2 [00:00<00:00, 2.59it/s, kld=151, perceptual=0.348, generator=2.49, feature=0.198, discriminator=2.25]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=179, perceptual=0.365, generator=1.58, feature=0.125, discriminator=3.83]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|███████| 2/2 [00:00<00:00, 3.08it/s, kld=108, perceptual=0.384, generator=1.93, feature=0.183, discriminator=3.43]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.15it/s, kld=407, perceptual=0.38, generator=1.84, feature=0.127, discriminator=3.41]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|███████| 2/2 [00:00<00:00, 3.35it/s, kld=302, perceptual=0.393, generator=2.02, feature=0.133, discriminator=2.79]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=356, perceptual=0.365, generator=2.34, feature=0.166, discriminator=2.39]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████| 2/2 [00:00<00:00, 3.20it/s, kld=237, perceptual=0.37, generator=2.35, feature=0.176, discriminator=2.37]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + " 60%|████▏ | 9/15 [00:04<00:03, 1.87it/s, kld=194, perceptual=0.35, generator=2.63, feature=0.156, discriminator=2.57]\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[0;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", + "Cell \u001B[0;32mIn[22], line 36\u001B[0m\n\u001B[1;32m 34\u001B[0m optimizer_D\u001B[38;5;241m.\u001B[39mzero_grad()\n\u001B[1;32m 35\u001B[0m loss_d \u001B[38;5;241m=\u001B[39m loss_d_r \u001B[38;5;241m+\u001B[39m loss_g_f\n\u001B[0;32m---> 36\u001B[0m \u001B[43mloss_d\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbackward\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 37\u001B[0m optimizer_D\u001B[38;5;241m.\u001B[39mstep()\n\u001B[1;32m 39\u001B[0m \u001B[38;5;66;03m# Store\u001B[39;00m\n", + "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/_tensor.py:479\u001B[0m, in \u001B[0;36mTensor.backward\u001B[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001B[0m\n\u001B[1;32m 432\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124mr\u001B[39m\u001B[38;5;124;03m\"\"\"Computes the gradient of current tensor w.r.t. graph leaves.\u001B[39;00m\n\u001B[1;32m 433\u001B[0m \n\u001B[1;32m 434\u001B[0m \u001B[38;5;124;03mThe graph is differentiated using the chain rule. If the tensor is\u001B[39;00m\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 476\u001B[0m \u001B[38;5;124;03m used to compute the attr::tensors.\u001B[39;00m\n\u001B[1;32m 477\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[1;32m 478\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m has_torch_function_unary(\u001B[38;5;28mself\u001B[39m):\n\u001B[0;32m--> 479\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mhandle_torch_function\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 480\u001B[0m \u001B[43m \u001B[49m\u001B[43mTensor\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbackward\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 481\u001B[0m \u001B[43m \u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 482\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[1;32m 483\u001B[0m \u001B[43m \u001B[49m\u001B[43mgradient\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mgradient\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 484\u001B[0m \u001B[43m \u001B[49m\u001B[43mretain_graph\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretain_graph\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 485\u001B[0m \u001B[43m \u001B[49m\u001B[43mcreate_graph\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mcreate_graph\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 486\u001B[0m \u001B[43m \u001B[49m\u001B[43minputs\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43minputs\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 487\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 488\u001B[0m torch\u001B[38;5;241m.\u001B[39mautograd\u001B[38;5;241m.\u001B[39mbackward(\n\u001B[1;32m 489\u001B[0m \u001B[38;5;28mself\u001B[39m, gradient, retain_graph, create_graph, inputs\u001B[38;5;241m=\u001B[39minputs\n\u001B[1;32m 490\u001B[0m )\n", + "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/overrides.py:1534\u001B[0m, in \u001B[0;36mhandle_torch_function\u001B[0;34m(public_api, relevant_args, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1528\u001B[0m warnings\u001B[38;5;241m.\u001B[39mwarn(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mDefining your `__torch_function__ as a plain method is deprecated and \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1529\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mwill be an error in future, please define it as a classmethod.\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 1530\u001B[0m \u001B[38;5;167;01mDeprecationWarning\u001B[39;00m)\n\u001B[1;32m 1532\u001B[0m \u001B[38;5;66;03m# Use `public_api` instead of `implementation` so __torch_function__\u001B[39;00m\n\u001B[1;32m 1533\u001B[0m \u001B[38;5;66;03m# implementations can do equality/identity comparisons.\u001B[39;00m\n\u001B[0;32m-> 1534\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[43mtorch_func_method\u001B[49m\u001B[43m(\u001B[49m\u001B[43mpublic_api\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtypes\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1536\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m result \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28mNotImplemented\u001B[39m:\n\u001B[1;32m 1537\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m result\n", + "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/monai/data/meta_tensor.py:276\u001B[0m, in \u001B[0;36mMetaTensor.__torch_function__\u001B[0;34m(cls, func, types, args, kwargs)\u001B[0m\n\u001B[1;32m 274\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m kwargs \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[1;32m 275\u001B[0m kwargs \u001B[38;5;241m=\u001B[39m {}\n\u001B[0;32m--> 276\u001B[0m ret \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43msuper\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m__torch_function__\u001B[49m\u001B[43m(\u001B[49m\u001B[43mfunc\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtypes\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 277\u001B[0m \u001B[38;5;66;03m# if `out` has been used as argument, metadata is not copied, nothing to do.\u001B[39;00m\n\u001B[1;32m 278\u001B[0m \u001B[38;5;66;03m# if \"out\" in kwargs:\u001B[39;00m\n\u001B[1;32m 279\u001B[0m \u001B[38;5;66;03m# return ret\u001B[39;00m\n\u001B[1;32m 280\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m _not_requiring_metadata(ret):\n", + "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/_tensor.py:1279\u001B[0m, in \u001B[0;36mTensor.__torch_function__\u001B[0;34m(cls, func, types, args, kwargs)\u001B[0m\n\u001B[1;32m 1276\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mNotImplemented\u001B[39m\n\u001B[1;32m 1278\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m _C\u001B[38;5;241m.\u001B[39mDisableTorchFunction():\n\u001B[0;32m-> 1279\u001B[0m ret \u001B[38;5;241m=\u001B[39m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1280\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m func \u001B[38;5;129;01min\u001B[39;00m get_default_nowrap_functions():\n\u001B[1;32m 1281\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m ret\n", + "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/_tensor.py:488\u001B[0m, in \u001B[0;36mTensor.backward\u001B[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001B[0m\n\u001B[1;32m 478\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m has_torch_function_unary(\u001B[38;5;28mself\u001B[39m):\n\u001B[1;32m 479\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m handle_torch_function(\n\u001B[1;32m 480\u001B[0m Tensor\u001B[38;5;241m.\u001B[39mbackward,\n\u001B[1;32m 481\u001B[0m (\u001B[38;5;28mself\u001B[39m,),\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 486\u001B[0m inputs\u001B[38;5;241m=\u001B[39minputs,\n\u001B[1;32m 487\u001B[0m )\n\u001B[0;32m--> 488\u001B[0m \u001B[43mtorch\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mautograd\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbackward\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 489\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mgradient\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mretain_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcreate_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43minputs\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43minputs\u001B[49m\n\u001B[1;32m 490\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/autograd/__init__.py:197\u001B[0m, in \u001B[0;36mbackward\u001B[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001B[0m\n\u001B[1;32m 192\u001B[0m retain_graph \u001B[38;5;241m=\u001B[39m create_graph\n\u001B[1;32m 194\u001B[0m \u001B[38;5;66;03m# The reason we repeat same the comment below is that\u001B[39;00m\n\u001B[1;32m 195\u001B[0m \u001B[38;5;66;03m# some Python versions print out the first line of a multi-line function\u001B[39;00m\n\u001B[1;32m 196\u001B[0m \u001B[38;5;66;03m# calls in the traceback and some print out the last line\u001B[39;00m\n\u001B[0;32m--> 197\u001B[0m \u001B[43mVariable\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_execution_engine\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mrun_backward\u001B[49m\u001B[43m(\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;66;43;03m# Calls into the C++ engine to run the backward pass\u001B[39;49;00m\n\u001B[1;32m 198\u001B[0m \u001B[43m \u001B[49m\u001B[43mtensors\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mgrad_tensors_\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mretain_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcreate_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43minputs\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 199\u001B[0m \u001B[43m \u001B[49m\u001B[43mallow_unreachable\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43maccumulate_grad\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m)\u001B[49m\n", + "\u001B[0;31mKeyboardInterrupt\u001B[0m: " + ] + } + ], + "source": [ + "net = net.to(device)\n", + "discriminator = discriminator.to(device)\n", + "torch.autograd.set_detect_anomaly(True)\n", + "for epoch in range(num_epochs):\n", + " print(\"Epoch %d/%d\" %(epoch, num_epochs))\n", + " train_bar = tqdm(enumerate(train_loader), total=len(train_loader), ncols=120)\n", + " losses_epoch = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0}\n", + " for step, d in train_bar:\n", + " image = d['image'].to(device)\n", + " with torch.no_grad():\n", + " label = one_hot(d['label'], 6).to(device)\n", + " optimizer_G.zero_grad()\n", + "\n", + " # Losses gen\n", + " out, kld_loss = net(label, image)\n", + " disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1))\n", + " loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False)\n", + " disc_reals, features_reals = discriminator(torch.cat([image, label], 1))\n", + " loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device)\n", + " loss_perc = perceptual_loss(out, target = image)\n", + " total_loss = loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat\n", + " total_loss.backward(retain_graph = True)\n", + " optimizer_G.step()\n", + "\n", + " # Store\n", + " losses_epoch['kld'] += kld_loss.item()\n", + " losses_epoch['perceptual'] += loss_perc.item()\n", + " losses_epoch['generator'] += loss_g.item()\n", + " #Train disc\n", + " out, _ = net(label, image)\n", + " disc_fakes, _ = discriminator(torch.cat([out, label], 1))\n", + " loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True)\n", + " loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True)\n", + " optimizer_D.zero_grad()\n", + " loss_d = loss_d_r + loss_g_f\n", + " loss_d.backward()\n", + " optimizer_D.step()\n", + "\n", + " # Store\n", + " losses_epoch['feature'] = loss_feat.item()\n", + " losses_epoch['discriminator'] = loss_d_r.item() + loss_g_f.item()\n", + "\n", + " train_bar.set_postfix(\n", + " {\"kld\": kld_loss.item(),\n", + " \"perceptual\": loss_perc.item(),\n", + " \"generator\": loss_g.item(),\n", + " \"feature\": loss_feat.item(),\n", + " \"discriminator\": loss_d_r.item() + loss_g_f.item(),\n", + " })\n", + "\n", + " val_bar = tqdm(enumerate(val_loader), total=len(val_loader), ncols=120)\n", + " losses_epoch_val = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0}\n", + " for step, d in val_bar:\n", + " image = d['image'].to(device)\n", + " with torch.no_grad():\n", + " label = one_hot(d['label'], 6).to(device)\n", + " # Losses gen\n", + " out, kld_loss = net(label, image)\n", + " disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1))\n", + " loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False)\n", + " disc_reals, features_reals = discriminator(torch.cat([image, label], 1))\n", + " loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device)\n", + " loss_perc = perceptual_loss(out, target = image)\n", + " total_loss = loss_adv * loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat\n", + " # Store\n", + " losses_epoch_val['kld'] += kld_loss.item()\n", + " losses_epoch_val['perceptual'] += loss_perc.item()\n", + " losses_epoch_val['generator'] += loss_g.item()\n", + " #Train disc\n", + " out, _ = net(label, image)\n", + " disc_fakes, _ = discriminator(torch.cat([out, label], 1))\n", + " loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True)\n", + " loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True)\n", + " loss_d = loss_adv * (loss_d_r + loss_g_f)\n", + "\n", + " # Store\n", + " losses_epoch_val['feature'] = loss_feat.item()\n", + " losses_epoch_val['discriminator'] = loss_d_r.item() + loss_g_f.item()\n", + "\n", + " val_bar.set_postfix(\n", + " {\"kld\": kld_loss.item(),\n", + " \"perceptual\": loss_perc.item(),\n", + " \"generator\": loss_g.item(),\n", + " \"feature\": loss_feat.item(),\n", + " \"discriminator\": loss_d_r.item() + loss_g_f.item(),\n", + " })\n", + " if step == 0 and epoch%10==0:\n", + " picture_results(label, image, out)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f579376b", + "metadata": { + "pycharm": { + "name": "#%%" + } + }, + "outputs": [], + "source": [ + "\n" + ] + } + ], + "metadata": { + "jupytext": { + "formats": "ipynb,py:light" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.py b/tutorials/generative/2d_spade_gan/2d_spade_vae.py new file mode 100644 index 00000000..1f2a93ac --- /dev/null +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.py @@ -0,0 +1,330 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.14.4 +# kernelspec: +# display_name: Python 3 (ipykernel) +# language: python +# name: python3 +# --- + +# + +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# - + +# # SPADE VAE-GAN + +# This notebook creates a mock SPADE VAE-GAN based on the paper "Semantic Image Synthesis with Spatially-Adaptive Normalization" (2019) by Park T, Liu MY, Wang TC, Zhu JY. More information available at: https://github.com/NVlabs/SPADE + +import os +import tempfile +import matplotlib.pyplot as plt +import numpy as np +import torch +from pathlib import Path +import zipfile +import gdown +from monai.data import DataLoader +from tqdm import tqdm +from generative.losses import PatchAdversarialLoss, PerceptualLoss +from generative.networks.nets import MultiScalePatchDiscriminator +import numpy as np +import monai +from generative.networks.nets.spade_network import SPADE_Net + +directory = os.environ.get("MONAI_DATA_DIRECTORY") +root_dir = tempfile.mkdtemp() if directory is None else directory +root_dir = Path(root_dir) +print("Temporary directory used: %s " %root_dir) + +# INPUT PARAMETERS +input_shape = [128, 128] +batch_size = 6 +num_workers = 4 +num_epochs = 100 +lambda_perc = 1.0 +lambda_feat = 0.1 +lambda_kld = 0.00001 +loss_adv = 1.0 + +# ### Data + +# The data for this notebook comes from the public dataset OASIS (Open Access Series of Imaging Studies) [1]. The images have been registered to MNI space using ANTsPy, and then subsampled to 2mm isotropic resolution. Geodesic Information Flows (GIF) [2] has been used to segment 5 regions: cerebrospinal fluid (CSF), grey matter (GM), white matter (WM), deep grey matter (DGM) and brainstem. In addition, BaMos [3] has been used to provide white matter hyperintensities segmentations (WMH). The available dataset contains: +# - T1-weighted images +# - FLAIR weighted images +# - Segmentations with the following labels: 0 (background), 1 (CSF), 2 (GM), 3 (WM), 4 (DGM), 5 (brainstem) and 6 (WMH). +# +# _**Acknowledgments**: "Data were provided by OASIS-3: Longitudinal Multimodal Neuroimaging: Principal Investigators: T. Benzinger, D. Marcus, J. Morris; NIH P30 AG066444, P50 AG00561, P30 NS09857781, P01 AG026276, P01 AG003991, R01 AG043434, UL1 TR000448, R01 EB009352. AV-45 doses were provided by Avid Radiopharmaceuticals, a wholly owned subsidiary of Eli Lilly.”_ +# +# +# Citations: +# +# [1] Marcus, DS, Wang, TH, Parker, J, Csernansky, JG, Morris, JC, Buckner. Open Access Series of Imaging Studies (OASIS): Cross-Sectional MRI Data in Young, Middle Aged, Nondemented, and Demented Older Adults, RL. Journal of Cognitive Neuroscience, 19, 1498-1507. doi: 10.1162/jocn.2007.19.9.1498 +# +# [2] Cardoso MJ, Modat M, Wolz R, Melbourne A, Cash D, Rueckert D, Ourselin S. Geodesic Information Flows: Spatially-Variant Graphs and Their Application to Segmentation and Fusion. IEEE Trans Med Imaging. 2015 Sep;34(9):1976-88. doi: 10.1109/TMI.2015.2418298. Epub 2015 Apr 14. PMID: 25879909. +# +# [3] Fiford CM, Sudre CH, Pemberton H, Walsh P, Manning E, Malone IB, Nicholas J, Bouvy WH, Carmichael OT, Biessels GJ, Cardoso MJ, Barnes J; Alzheimer’s Disease Neuroimaging Initiative. Automated White Matter Hyperintensity Segmentation Using Bayesian Model Selection: Assessment and Correlations with Cognitive Change. Neuroinformatics. 2020 Jun;18(3):429-449. doi: 10.1007/s12021-019-09439-6. PMID: 32062817; PMCID: PMC7338814. +# + +gdown.download("https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5", + str(root_dir / 'data.zip')) + +zip_obj = zipfile.ZipFile(os.path.join(root_dir, 'data.zip'), 'r') +zip_obj.extractall(root_dir) +images_T1 = root_dir / "OASIS_SMALL-SUBSET/T1" +images_FLAIR = root_dir / "OASIS_SMALL-SUBSET/FLAIR" +labels = root_dir / "OASIS_SMALL-SUBSET/Segmentations" + +# We create the data dictionaries that we need +all_images = [os.path.join(images_T1, i) for i in os.listdir(images_T1)] + \ + [os.path.join(images_FLAIR, i) for i in os.listdir(images_FLAIR)] +np.random.shuffle(all_images) +corresponding_labels = [os.path.join(labels, i.split("/")[-1].replace(i.split("/")[-1].split("_")[0], "Parcellation")) + for i in all_images] +input_dict = [{'image': i, 'label': corresponding_labels[ind]} for ind, i in enumerate(all_images)] +input_dict_train = input_dict[:int(len(input_dict)*0.9)] +input_dict_val = input_dict[int(len(input_dict)*0.9):] + +# ### Dataloaders + +# + +preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain +crop_shape = input_shape + [1] +base_transforms = [ + monai.transforms.LoadImaged(keys = ['label', 'image']), + monai.transforms.EnsureChannelFirstd(keys=['image', 'label']), + monai.transforms.CenterSpatialCropd(keys=['label', 'image'], + roi_size=preliminar_shape), + monai.transforms.RandSpatialCropd(keys = ['label', 'image'], + roi_size=crop_shape, max_roi_size=crop_shape), + monai.transforms.SqueezeDimd(keys=['label', 'image'], dim = -1), + monai.transforms.Resized(keys = ['image', 'label'], spatial_size=input_shape), +] +last_transforms = [ + monai.transforms.CopyItemsd(keys=['label'], names=['label_channel']), + monai.transforms.Lambdad(keys=['label_channel'], + func=lambda l: l != 0), + monai.transforms.MaskIntensityd(keys=['image'], mask_key='label_channel'), + monai.transforms.NormalizeIntensityd(keys=['image']), + monai.transforms.ToTensord(keys=['image', 'label']) + ] + +aug_transforms = [ + monai.transforms.RandBiasFieldd(coeff_range=(0, 0.005), prob=0.33, keys=['image']), + monai.transforms.RandAdjustContrastd(gamma=(0.9, 1.15), prob=0.33, keys=['image']), + monai.transforms.RandGaussianNoised(prob=0.33, mean=0.0, std=np.random.uniform(0.005, 0.015), + keys=['image']), + monai.transforms.RandAffined(rotate_range=[-0.05, 0.05], shear_range=[0.001, 0.05], + scale_range=[0, 0.05], padding_mode='zeros', + mode='nearest', prob=0.33, keys=['label', 'image']) + ] + +train_transforms = monai.transforms.Compose(base_transforms + aug_transforms + last_transforms) +val_transforms = monai.transforms.Compose(base_transforms + last_transforms) + +train_dataset = monai.data.dataset.Dataset(input_dict_train, train_transforms) +val_dataset = monai.data.dataset.Dataset(input_dict_val, val_transforms) +train_loader = DataLoader(train_dataset, shuffle=True, batch_size=batch_size, num_workers=num_workers) +val_loader = DataLoader(val_dataset, shuffle=False, drop_last=False, batch_size=batch_size, num_workers=num_workers) + + +# - + +# Sanity check +batch = next(iter(train_loader)) +print(batch['image'].shape) +plt.subplot(1,2,1) +plt.imshow(batch['image'][0,0,...], cmap = 'gist_gray'); plt.axis('off') +plt.subplot(1,2,2) +plt.imshow(batch['label'][0,0,...], cmap = "jet"); plt.axis('off') +plt.show() + +# ### Network creation and losses + +device = "cuda" if torch.cuda.is_available() else "cpu" + + +def one_hot(input_label, label_nc): + # One hot encoding function for the labels + shape_ = list(input_label.shape) + shape_[1] = label_nc + label_out = torch.zeros(shape_) + for channel in range(label_nc): + label_out[:, channel, ...] = input_label[:, 0, ...] == channel + return label_out + + + +def picture_results(input_label, input_image, output_image): + f = plt.figure(figsize = (4, 1.5)) + plt.subplot(1,3,1) + plt.imshow(torch.argmax(input_label, 1)[0,...].detach().cpu(), cmap = 'jet') + plt.axis('off') + plt.title("Label") + plt.subplot(1,3,2) + plt.imshow(input_image[0,0,...].detach().cpu(), cmap = 'gist_gray') + plt.axis('off') + plt.title("Input image") + plt.subplot(1,3,3) + plt.imshow(output_image[0,0,...].detach().cpu(), cmap = 'gist_gray') + plt.axis('off') + plt.title("Output image") + plt.show() + + + +def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat, device): + criterion = torch.nn.L1Loss() + num_D = len(input_features_disc_fake) + GAN_Feat_loss = torch.zeros(1).to(device) + for i in range(num_D): # for each discriminator + num_intermediate_outputs = len(input_features_disc_fake[i]) + for j in range(num_intermediate_outputs): # for each layer output + unweighted_loss = criterion(input_features_disc_fake[i][j], + input_features_disc_real[i][j].detach()) + GAN_Feat_loss += unweighted_loss * lambda_feat / num_D + return GAN_Feat_loss + + +net = SPADE_Net(spatial_dims = 2, + in_channels = 1, + out_channels = 1, + label_nc = 6, + input_shape = input_shape, + num_channels = [16, 32, 64, 128], + z_dim = 16, + is_vae = True) + +# + +discriminator = MultiScalePatchDiscriminator(num_d = 2, + num_layers_d = 3, + spatial_dims = 2, + num_channels = 8, + in_channels = 7, + out_channels = 7, + minimum_size_im = 128, + norm = "INSTANCE", + kernel_size = 3 + ) + +adversarial_loss = PatchAdversarialLoss(reduction = "sum", criterion = "hinge") +# - + +perceptual_loss = PerceptualLoss(spatial_dims = 2, + network_type = "vgg", + is_fake_3d = False, + pretrained = True) +perceptual_loss=perceptual_loss.to(device) + +optimizer_G = torch.optim.Adam(net.parameters(), lr = 0.0002) +optimizer_D = torch.optim.Adam(discriminator.parameters(), lr = 0.0004) + +# ### Training loop +# + +net = net.to(device) +discriminator = discriminator.to(device) +torch.autograd.set_detect_anomaly(True) +for epoch in range(num_epochs): + print("Epoch %d/%d" %(epoch, num_epochs)) + train_bar = tqdm(enumerate(train_loader), total=len(train_loader), ncols=120) + losses_epoch = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0} + for step, d in train_bar: + image = d['image'].to(device) + with torch.no_grad(): + label = one_hot(d['label'], 6).to(device) + optimizer_G.zero_grad() + + # Losses gen + out, kld_loss = net(label, image) + disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1)) + loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False) + disc_reals, features_reals = discriminator(torch.cat([image, label], 1)) + loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device) + loss_perc = perceptual_loss(out, target = image) + total_loss = loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat + total_loss.backward(retain_graph = True) + optimizer_G.step() + + # Store + losses_epoch['kld'] += kld_loss.item() + losses_epoch['perceptual'] += loss_perc.item() + losses_epoch['generator'] += loss_g.item() + #Train disc + out, _ = net(label, image) + disc_fakes, _ = discriminator(torch.cat([out, label], 1)) + loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True) + loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True) + optimizer_D.zero_grad() + loss_d = loss_d_r + loss_g_f + loss_d.backward() + optimizer_D.step() + + # Store + losses_epoch['feature'] = loss_feat.item() + losses_epoch['discriminator'] = loss_d_r.item() + loss_g_f.item() + + train_bar.set_postfix( + {"kld": kld_loss.item(), + "perceptual": loss_perc.item(), + "generator": loss_g.item(), + "feature": loss_feat.item(), + "discriminator": loss_d_r.item() + loss_g_f.item(), + }) + + val_bar = tqdm(enumerate(val_loader), total=len(val_loader), ncols=120) + losses_epoch_val = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0} + for step, d in val_bar: + image = d['image'].to(device) + with torch.no_grad(): + label = one_hot(d['label'], 6).to(device) + # Losses gen + out, kld_loss = net(label, image) + disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1)) + loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False) + disc_reals, features_reals = discriminator(torch.cat([image, label], 1)) + loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device) + loss_perc = perceptual_loss(out, target = image) + total_loss = loss_adv * loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat + # Store + losses_epoch_val['kld'] += kld_loss.item() + losses_epoch_val['perceptual'] += loss_perc.item() + losses_epoch_val['generator'] += loss_g.item() + #Train disc + out, _ = net(label, image) + disc_fakes, _ = discriminator(torch.cat([out, label], 1)) + loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True) + loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True) + loss_d = loss_adv * (loss_d_r + loss_g_f) + + # Store + losses_epoch_val['feature'] = loss_feat.item() + losses_epoch_val['discriminator'] = loss_d_r.item() + loss_g_f.item() + + val_bar.set_postfix( + {"kld": kld_loss.item(), + "perceptual": loss_perc.item(), + "generator": loss_g.item(), + "feature": loss_feat.item(), + "discriminator": loss_d_r.item() + loss_g_f.item(), + }) + if step == 0 and epoch%10==0: + picture_results(label, image, out) + +# + pycharm={"name": "#%%"} + + From e77599e4d1728ccb4659133d480a5dd5e68f87d7 Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Thu, 22 Jun 2023 09:22:17 +0100 Subject: [PATCH 4/7] Add tutorial outputs Signed-off-by: Walter Hugo Lopez Pinaya --- .../2d_spade_gan/2d_spade_vae.ipynb | 1723 +++++++++++++++-- 1 file changed, 1593 insertions(+), 130 deletions(-) diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb index c7c29aaf..bf7271c3 100644 --- a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "id": "1f7ba8ce", "metadata": {}, "outputs": [], @@ -37,12 +37,23 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 2, "id": "e059c423", "metadata": { "scrolled": true }, - "outputs": [], + "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", + "A matching Triton is not available, some optimizations will not be enabled.\n", + "Error caught was: No module named 'triton'\n" + ] + } + ], "source": [ "import os\n", "import tempfile\n", @@ -63,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 3, "id": "e76296e7", "metadata": { "scrolled": false @@ -73,7 +84,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Temporary directory used: /tmp/tmpy_otj3u5 \n" + "Temporary directory used: /tmp/tmpo8gppqh6 \n" ] } ], @@ -86,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "id": "2483148a", "metadata": {}, "outputs": [], @@ -134,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 5, "id": "dc560f7e", "metadata": { "scrolled": true @@ -146,17 +157,17 @@ "text": [ "Downloading...\n", "From: https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5\n", - "To: /tmp/tmpy_otj3u5/data.zip\n", - "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 384M/384M [00:06<00:00, 62.8MB/s]\n" + "To: /tmp/tmpo8gppqh6/data.zip\n", + "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 384M/384M [00:05<00:00, 69.6MB/s]\n" ] }, { "data": { "text/plain": [ - "'/tmp/tmpy_otj3u5/data.zip'" + "'/tmp/tmpo8gppqh6/data.zip'" ] }, - "execution_count": 9, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -168,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 6, "id": "cd7dd6ec", "metadata": {}, "outputs": [], @@ -182,7 +193,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "id": "d48987b9", "metadata": {}, "outputs": [], @@ -208,12 +219,21 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "id": "8ab79cdc", "metadata": { "lines_to_end_of_cell_marker": 2 }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", + "monai.transforms.croppad.dictionary RandSpatialCropd.__init__:random_size: Current default value of argument `random_size=True` has been deprecated since version 1.1. It will be changed to `random_size=False` in version 1.3.\n" + ] + } + ], "source": [ "preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain\n", "crop_shape = input_shape + [1]\n", @@ -257,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 9, "id": "98d14e75", "metadata": {}, "outputs": [ @@ -270,7 +290,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -300,7 +320,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 10, "id": "fa17d864", "metadata": {}, "outputs": [], @@ -310,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 11, "id": "8f126b17", "metadata": {}, "outputs": [], @@ -335,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 12, "id": "255c90c7", "metadata": {}, "outputs": [], @@ -367,7 +387,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 13, "id": "c18dbad8", "metadata": {}, "outputs": [], @@ -387,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 14, "id": "89989c34", "metadata": {}, "outputs": [], @@ -404,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 15, "id": "5b8b676f", "metadata": {}, "outputs": [], @@ -425,7 +445,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 16, "id": "36ea4308", "metadata": { "scrolled": false @@ -436,7 +456,9 @@ "output_type": "stream", "text": [ "The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - "Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=VGG16_Weights.IMAGENET1K_V1`. You can also use `weights=VGG16_Weights.DEFAULT` to get the most up-to-date weights.\n" + "Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=VGG16_Weights.IMAGENET1K_V1`. You can also use `weights=VGG16_Weights.DEFAULT` to get the most up-to-date weights.\n", + "Downloading: \"https://download.pytorch.org/models/vgg16-397923af.pth\" to /home/walter/.cache/torch/hub/checkpoints/vgg16-397923af.pth\n", + "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 528M/528M [00:07<00:00, 77.9MB/s]\n" ] } ], @@ -450,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 17, "id": "3b57abd3", "metadata": {}, "outputs": [], @@ -469,7 +491,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 18, "id": "918eac0a", "metadata": { "scrolled": false @@ -486,13 +508,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|█████| 15/15 [00:08<00:00, 1.74it/s, kld=378, perceptual=0.395, generator=2.04, feature=0.206, discriminator=3.69]\n", - " 0%| | 0/2 [00:00" ] @@ -504,7 +526,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████| 2/2 [00:00<00:00, 3.18it/s, kld=252, perceptual=0.362, generator=2.1, feature=0.204, discriminator=3.61]" + "100%|███████| 2/2 [00:00<00:00, 3.21it/s, kld=197, perceptual=0.339, generator=1.93, feature=0.121, discriminator=3.94]" ] }, { @@ -519,32 +541,31 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.18it/s, kld=279, perceptual=0.395, generator=2.15, feature=0.202, discriminator=3.7]\n", - " 0%| | 0/2 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/100\n" + ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|████████| 2/2 [00:00<00:00, 3.25it/s, kld=184, perceptual=0.421, generator=2.2, feature=0.196, discriminator=3.36]" + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=155, perceptual=0.238, generator=2.41, feature=0.147, discriminator=3.03]\n", + "100%|████████| 2/2 [00:00<00:00, 3.92it/s, kld=179, perceptual=0.34, generator=2.41, feature=0.183, discriminator=2.95]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 2/100\n" + "Epoch 3/100\n" ] }, { @@ -552,32 +573,31 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.14it/s, kld=207, perceptual=0.421, generator=2.32, feature=0.214, discriminator=2.83]\n", - " 0%| | 0/2 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/100\n" + ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.47it/s, kld=125, perceptual=0.414, generator=2.33, feature=0.222, discriminator=2.82]" + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.19it/s, kld=483, perceptual=0.47, generator=2.29, feature=0.238, discriminator=2.82]\n", + "100%|███████| 2/2 [00:00<00:00, 4.43it/s, kld=296, perceptual=0.449, generator=2.33, feature=0.237, discriminator=2.78]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 3/100\n" + "Epoch 5/100\n" ] }, { @@ -585,32 +605,31 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=131, perceptual=0.384, generator=2.31, feature=0.219, discriminator=2.68]\n", - " 0%| | 0/2 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/100\n" + ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████| 2/2 [00:00<00:00, 3.38it/s, kld=87.2, perceptual=0.403, generator=2.35, feature=0.221, discriminator=2.59]" + "\n", + "100%|████| 15/15 [00:06<00:00, 2.17it/s, kld=80.9, perceptual=0.406, generator=2.88, feature=0.245, discriminator=2.05]\n", + "100%|██████| 2/2 [00:00<00:00, 3.98it/s, kld=51.4, perceptual=0.422, generator=2.89, feature=0.249, discriminator=1.97]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 4/100\n" + "Epoch 7/100\n" ] }, { @@ -618,32 +637,47 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:07<00:00, 2.12it/s, kld=170, perceptual=0.353, generator=2.46, feature=0.17, discriminator=2.51]\n", - " 0%| | 0/2 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8/100\n" + ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.34it/s, kld=113, perceptual=0.339, generator=2.48, feature=0.174, discriminator=2.51]" + "\n", + "100%|███████| 15/15 [00:07<00:00, 2.14it/s, kld=130, perceptual=0.4, generator=2.91, feature=0.203, discriminator=1.89]\n", + "100%|███████| 2/2 [00:00<00:00, 3.42it/s, kld=101, perceptual=0.385, generator=2.94, feature=0.185, discriminator=2.08]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 5/100\n" + "Epoch 9/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=156, perceptual=0.352, generator=2.68, feature=0.184, discriminator=2.03]\n", + "100%|██████| 2/2 [00:00<00:00, 4.28it/s, kld=97.8, perceptual=0.343, generator=2.63, feature=0.183, discriminator=2.08]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10/100\n" ] }, { @@ -651,13 +685,13 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=181, perceptual=0.321, generator=2.52, feature=0.203, discriminator=2.23]\n", - " 0%| | 0/2 [00:00" ] @@ -669,14 +703,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 2.59it/s, kld=151, perceptual=0.348, generator=2.49, feature=0.198, discriminator=2.25]" + "100%|███████| 2/2 [00:00<00:00, 3.39it/s, kld=149, perceptual=0.372, generator=2.91, feature=0.186, discriminator=1.79]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 6/100\n" + "Epoch 11/100\n" ] }, { @@ -684,32 +718,31 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=179, perceptual=0.365, generator=1.58, feature=0.125, discriminator=3.83]\n", - " 0%| | 0/2 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12/100\n" + ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.08it/s, kld=108, perceptual=0.384, generator=1.93, feature=0.183, discriminator=3.43]" + "\n", + "100%|█| 15/15 [00:06<00:00, 2.23it/s, kld=1.21e+3, perceptual=0.379, generator=2.97, feature=0.186, discriminator=1.68]\n", + "100%|██████████| 2/2 [00:00<00:00, 4.23it/s, kld=817, perceptual=0.401, generator=3, feature=0.189, discriminator=1.66]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 7/100\n" + "Epoch 13/100\n" ] }, { @@ -717,32 +750,111 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.15it/s, kld=407, perceptual=0.38, generator=1.84, feature=0.127, discriminator=3.41]\n", - " 0%| | 0/2 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14/100\n" + ] }, { "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.35it/s, kld=302, perceptual=0.393, generator=2.02, feature=0.133, discriminator=2.79]" + "\n", + "100%|█| 15/15 [00:06<00:00, 2.24it/s, kld=2.05e+3, perceptual=0.386, generator=2.48, feature=0.177, discriminator=2.18]\n", + "100%|███| 2/2 [00:00<00:00, 4.27it/s, kld=1.31e+3, perceptual=0.326, generator=2.54, feature=0.166, discriminator=2.24]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 8/100\n" + "Epoch 15/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.18it/s, kld=1.19e+3, perceptual=0.337, generator=2.82, feature=0.173, discriminator=1.79]\n", + "100%|████████| 2/2 [00:00<00:00, 4.00it/s, kld=730, perceptual=0.329, generator=2.82, feature=0.17, discriminator=1.78]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.18it/s, kld=383, perceptual=0.348, generator=2.8, feature=0.144, discriminator=1.78]\n", + "100%|████████| 2/2 [00:00<00:00, 3.79it/s, kld=204, perceptual=0.328, generator=2.87, feature=0.146, discriminator=1.8]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=327, perceptual=0.349, generator=2.62, feature=0.0884, discriminator=3.06]\n", + "100%|██████| 2/2 [00:00<00:00, 4.21it/s, kld=198, perceptual=0.337, generator=2.67, feature=0.0891, discriminator=3.01]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.17it/s, kld=780, perceptual=0.363, generator=2.98, feature=0.0928, discriminator=2.89]\n", + "100%|██████| 2/2 [00:00<00:00, 3.25it/s, kld=522, perceptual=0.379, generator=2.94, feature=0.0919, discriminator=2.82]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=711, perceptual=0.346, generator=1.89, feature=0.0815, discriminator=3.88]\n", + "100%|██████| 2/2 [00:00<00:00, 4.29it/s, kld=413, perceptual=0.327, generator=2.01, feature=0.0848, discriminator=3.68]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20/100\n" ] }, { @@ -750,13 +862,13 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=356, perceptual=0.365, generator=2.34, feature=0.166, discriminator=2.39]\n", - " 0%| | 0/2 [00:00" ] @@ -768,14 +880,62 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████| 2/2 [00:00<00:00, 3.20it/s, kld=237, perceptual=0.37, generator=2.35, feature=0.176, discriminator=2.37]" + "100%|███████| 2/2 [00:00<00:00, 3.01it/s, kld=203, perceptual=0.336, generator=1.99, feature=0.078, discriminator=3.71]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 9/100\n" + "Epoch 21/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=174, perceptual=0.353, generator=2.58, feature=0.0856, discriminator=3.15]\n", + "100%|██████| 2/2 [00:00<00:00, 4.24it/s, kld=114, perceptual=0.274, generator=2.73, feature=0.0881, discriminator=3.83]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.21it/s, kld=195, perceptual=0.36, generator=2.49, feature=0.106, discriminator=3.85]\n", + "100%|███████| 2/2 [00:00<00:00, 3.47it/s, kld=141, perceptual=0.343, generator=2.38, feature=0.0823, discriminator=3.8]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=407, perceptual=0.355, generator=2.13, feature=0.0831, discriminator=3.37]\n", + "100%|███████| 2/2 [00:00<00:00, 4.19it/s, kld=190, perceptual=0.316, generator=2.47, feature=0.108, discriminator=3.25]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24/100\n" ] }, { @@ -783,24 +943,1327 @@ "output_type": "stream", "text": [ "\n", - " 60%|████▏ | 9/15 [00:04<00:03, 1.87it/s, kld=194, perceptual=0.35, generator=2.63, feature=0.156, discriminator=2.57]\n" + "100%|█████| 15/15 [00:06<00:00, 2.18it/s, kld=380, perceptual=0.375, generator=1.69, feature=0.108, discriminator=3.62]\n", + "100%|███████| 2/2 [00:00<00:00, 4.01it/s, kld=234, perceptual=0.348, generator=1.86, feature=0.103, discriminator=3.33]" ] }, { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[0;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", - "Cell \u001B[0;32mIn[22], line 36\u001B[0m\n\u001B[1;32m 34\u001B[0m optimizer_D\u001B[38;5;241m.\u001B[39mzero_grad()\n\u001B[1;32m 35\u001B[0m loss_d \u001B[38;5;241m=\u001B[39m loss_d_r \u001B[38;5;241m+\u001B[39m loss_g_f\n\u001B[0;32m---> 36\u001B[0m \u001B[43mloss_d\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbackward\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 37\u001B[0m optimizer_D\u001B[38;5;241m.\u001B[39mstep()\n\u001B[1;32m 39\u001B[0m \u001B[38;5;66;03m# Store\u001B[39;00m\n", - "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/_tensor.py:479\u001B[0m, in \u001B[0;36mTensor.backward\u001B[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001B[0m\n\u001B[1;32m 432\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124mr\u001B[39m\u001B[38;5;124;03m\"\"\"Computes the gradient of current tensor w.r.t. graph leaves.\u001B[39;00m\n\u001B[1;32m 433\u001B[0m \n\u001B[1;32m 434\u001B[0m \u001B[38;5;124;03mThe graph is differentiated using the chain rule. If the tensor is\u001B[39;00m\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 476\u001B[0m \u001B[38;5;124;03m used to compute the attr::tensors.\u001B[39;00m\n\u001B[1;32m 477\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[1;32m 478\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m has_torch_function_unary(\u001B[38;5;28mself\u001B[39m):\n\u001B[0;32m--> 479\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mhandle_torch_function\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 480\u001B[0m \u001B[43m \u001B[49m\u001B[43mTensor\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbackward\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 481\u001B[0m \u001B[43m \u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 482\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[1;32m 483\u001B[0m \u001B[43m \u001B[49m\u001B[43mgradient\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mgradient\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 484\u001B[0m \u001B[43m \u001B[49m\u001B[43mretain_graph\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretain_graph\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 485\u001B[0m \u001B[43m \u001B[49m\u001B[43mcreate_graph\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mcreate_graph\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 486\u001B[0m \u001B[43m \u001B[49m\u001B[43minputs\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43minputs\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 487\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 488\u001B[0m torch\u001B[38;5;241m.\u001B[39mautograd\u001B[38;5;241m.\u001B[39mbackward(\n\u001B[1;32m 489\u001B[0m \u001B[38;5;28mself\u001B[39m, gradient, retain_graph, create_graph, inputs\u001B[38;5;241m=\u001B[39minputs\n\u001B[1;32m 490\u001B[0m )\n", - "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/overrides.py:1534\u001B[0m, in \u001B[0;36mhandle_torch_function\u001B[0;34m(public_api, relevant_args, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1528\u001B[0m warnings\u001B[38;5;241m.\u001B[39mwarn(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mDefining your `__torch_function__ as a plain method is deprecated and \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1529\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mwill be an error in future, please define it as a classmethod.\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 1530\u001B[0m \u001B[38;5;167;01mDeprecationWarning\u001B[39;00m)\n\u001B[1;32m 1532\u001B[0m \u001B[38;5;66;03m# Use `public_api` instead of `implementation` so __torch_function__\u001B[39;00m\n\u001B[1;32m 1533\u001B[0m \u001B[38;5;66;03m# implementations can do equality/identity comparisons.\u001B[39;00m\n\u001B[0;32m-> 1534\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[43mtorch_func_method\u001B[49m\u001B[43m(\u001B[49m\u001B[43mpublic_api\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtypes\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1536\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m result \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28mNotImplemented\u001B[39m:\n\u001B[1;32m 1537\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m result\n", - "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/monai/data/meta_tensor.py:276\u001B[0m, in \u001B[0;36mMetaTensor.__torch_function__\u001B[0;34m(cls, func, types, args, kwargs)\u001B[0m\n\u001B[1;32m 274\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m kwargs \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[1;32m 275\u001B[0m kwargs \u001B[38;5;241m=\u001B[39m {}\n\u001B[0;32m--> 276\u001B[0m ret \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43msuper\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m__torch_function__\u001B[49m\u001B[43m(\u001B[49m\u001B[43mfunc\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtypes\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 277\u001B[0m \u001B[38;5;66;03m# if `out` has been used as argument, metadata is not copied, nothing to do.\u001B[39;00m\n\u001B[1;32m 278\u001B[0m \u001B[38;5;66;03m# if \"out\" in kwargs:\u001B[39;00m\n\u001B[1;32m 279\u001B[0m \u001B[38;5;66;03m# return ret\u001B[39;00m\n\u001B[1;32m 280\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m _not_requiring_metadata(ret):\n", - "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/_tensor.py:1279\u001B[0m, in \u001B[0;36mTensor.__torch_function__\u001B[0;34m(cls, func, types, args, kwargs)\u001B[0m\n\u001B[1;32m 1276\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mNotImplemented\u001B[39m\n\u001B[1;32m 1278\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m _C\u001B[38;5;241m.\u001B[39mDisableTorchFunction():\n\u001B[0;32m-> 1279\u001B[0m ret \u001B[38;5;241m=\u001B[39m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1280\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m func \u001B[38;5;129;01min\u001B[39;00m get_default_nowrap_functions():\n\u001B[1;32m 1281\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m ret\n", - "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/_tensor.py:488\u001B[0m, in \u001B[0;36mTensor.backward\u001B[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001B[0m\n\u001B[1;32m 478\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m has_torch_function_unary(\u001B[38;5;28mself\u001B[39m):\n\u001B[1;32m 479\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m handle_torch_function(\n\u001B[1;32m 480\u001B[0m Tensor\u001B[38;5;241m.\u001B[39mbackward,\n\u001B[1;32m 481\u001B[0m (\u001B[38;5;28mself\u001B[39m,),\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 486\u001B[0m inputs\u001B[38;5;241m=\u001B[39minputs,\n\u001B[1;32m 487\u001B[0m )\n\u001B[0;32m--> 488\u001B[0m \u001B[43mtorch\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mautograd\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbackward\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 489\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mgradient\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mretain_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcreate_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43minputs\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43minputs\u001B[49m\n\u001B[1;32m 490\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n", - "File \u001B[0;32m~/PycharmProjects/GenerativeModels/venv/lib/python3.9/site-packages/torch/autograd/__init__.py:197\u001B[0m, in \u001B[0;36mbackward\u001B[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001B[0m\n\u001B[1;32m 192\u001B[0m retain_graph \u001B[38;5;241m=\u001B[39m create_graph\n\u001B[1;32m 194\u001B[0m \u001B[38;5;66;03m# The reason we repeat same the comment below is that\u001B[39;00m\n\u001B[1;32m 195\u001B[0m \u001B[38;5;66;03m# some Python versions print out the first line of a multi-line function\u001B[39;00m\n\u001B[1;32m 196\u001B[0m \u001B[38;5;66;03m# calls in the traceback and some print out the last line\u001B[39;00m\n\u001B[0;32m--> 197\u001B[0m \u001B[43mVariable\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_execution_engine\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mrun_backward\u001B[49m\u001B[43m(\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;66;43;03m# Calls into the C++ engine to run the backward pass\u001B[39;49;00m\n\u001B[1;32m 198\u001B[0m \u001B[43m \u001B[49m\u001B[43mtensors\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mgrad_tensors_\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mretain_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcreate_graph\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43minputs\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 199\u001B[0m \u001B[43m \u001B[49m\u001B[43mallow_unreachable\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43maccumulate_grad\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m)\u001B[49m\n", - "\u001B[0;31mKeyboardInterrupt\u001B[0m: " + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=207, perceptual=0.345, generator=1.8, feature=0.0924, discriminator=3.78]\n", + "100%|█████████| 2/2 [00:00<00:00, 4.41it/s, kld=129, perceptual=0.348, generator=1.97, feature=0.1, discriminator=3.72]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=294, perceptual=0.334, generator=2.76, feature=0.119, discriminator=2.83]\n", + "100%|████████| 2/2 [00:00<00:00, 4.38it/s, kld=211, perceptual=0.355, generator=2.52, feature=0.123, discriminator=2.9]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.20it/s, kld=384, perceptual=0.361, generator=2.86, feature=0.126, discriminator=2.7]\n", + "100%|███████| 2/2 [00:00<00:00, 3.77it/s, kld=164, perceptual=0.341, generator=3.05, feature=0.147, discriminator=2.77]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.22it/s, kld=257, perceptual=0.354, generator=1.4, feature=0.0816, discriminator=3.77]\n", + "100%|███████| 2/2 [00:00<00:00, 4.09it/s, kld=173, perceptual=0.356, generator=1.36, feature=0.0792, discriminator=3.7]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=166, perceptual=0.366, generator=1.22, feature=0.0643, discriminator=3.9]\n", + "100%|██████| 2/2 [00:00<00:00, 3.98it/s, kld=92.5, perceptual=0.314, generator=1.46, feature=0.065, discriminator=3.55]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=171, perceptual=0.331, generator=1.94, feature=0.0693, discriminator=3.74]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████| 2/2 [00:00<00:00, 3.36it/s, kld=143, perceptual=0.311, generator=1.89, feature=0.0648, discriminator=3.33]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=264, perceptual=0.363, generator=1.98, feature=0.0766, discriminator=3.99]\n", + "100%|██████| 2/2 [00:00<00:00, 3.75it/s, kld=178, perceptual=0.348, generator=1.96, feature=0.0681, discriminator=3.98]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|███| 15/15 [00:06<00:00, 2.20it/s, kld=85.9, perceptual=0.308, generator=2.05, feature=0.0725, discriminator=3.94]\n", + "100%|██████| 2/2 [00:00<00:00, 3.43it/s, kld=55.1, perceptual=0.327, generator=2.17, feature=0.113, discriminator=3.84]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=110, perceptual=0.293, generator=2.17, feature=0.0944, discriminator=3.92]\n", + "100%|██████| 2/2 [00:00<00:00, 3.94it/s, kld=110, perceptual=0.329, generator=2.01, feature=0.0707, discriminator=4.03]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.26it/s, kld=203, perceptual=0.329, generator=2.42, feature=0.0917, discriminator=3.65]\n", + "100%|███████| 2/2 [00:00<00:00, 2.71it/s, kld=106, perceptual=0.29, generator=2.39, feature=0.0954, discriminator=3.58]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=282, perceptual=0.28, generator=2.44, feature=0.0842, discriminator=3.62]\n", + "100%|██████| 2/2 [00:00<00:00, 4.21it/s, kld=206, perceptual=0.284, generator=2.42, feature=0.0789, discriminator=3.64]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.20it/s, kld=313, perceptual=0.333, generator=2.3, feature=0.0794, discriminator=4.01]\n", + "100%|███████| 2/2 [00:00<00:00, 4.14it/s, kld=192, perceptual=0.285, generator=2.4, feature=0.0781, discriminator=4.01]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=101, perceptual=0.297, generator=2.4, feature=0.0699, discriminator=3.96]\n", + "100%|█████| 2/2 [00:00<00:00, 3.69it/s, kld=56.2, perceptual=0.279, generator=2.44, feature=0.0671, discriminator=3.96]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|███| 15/15 [00:06<00:00, 2.17it/s, kld=94.7, perceptual=0.296, generator=2.37, feature=0.0693, discriminator=3.91]\n", + "100%|███████| 2/2 [00:00<00:00, 4.23it/s, kld=64, perceptual=0.239, generator=2.42, feature=0.0572, discriminator=3.95]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.22it/s, kld=154, perceptual=0.293, generator=2.28, feature=0.055, discriminator=3.9]\n", + "100%|███████| 2/2 [00:00<00:00, 3.99it/s, kld=93.5, perceptual=0.27, generator=2.25, feature=0.0545, discriminator=3.9]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.20it/s, kld=268, perceptual=0.227, generator=2.26, feature=0.052, discriminator=3.98]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|███████| 2/2 [00:00<00:00, 3.34it/s, kld=247, perceptual=0.269, generator=2.15, feature=0.056, discriminator=3.95]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=195, perceptual=0.231, generator=2.14, feature=0.054, discriminator=4.01]\n", + "100%|██████| 2/2 [00:00<00:00, 4.25it/s, kld=128, perceptual=0.238, generator=2.14, feature=0.0585, discriminator=4.02]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=312, perceptual=0.238, generator=2.29, feature=0.0563, discriminator=3.91]\n", + "100%|███████| 2/2 [00:00<00:00, 3.29it/s, kld=217, perceptual=0.24, generator=2.29, feature=0.0595, discriminator=3.89]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=653, perceptual=0.225, generator=2.5, feature=0.0637, discriminator=3.79]\n", + "100%|██████| 2/2 [00:00<00:00, 4.31it/s, kld=390, perceptual=0.256, generator=2.43, feature=0.0642, discriminator=3.72]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.21it/s, kld=860, perceptual=0.261, generator=2.38, feature=0.0658, discriminator=3.85]\n", + "100%|██████| 2/2 [00:00<00:00, 3.70it/s, kld=513, perceptual=0.241, generator=2.41, feature=0.0746, discriminator=3.82]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=422, perceptual=0.282, generator=2.38, feature=0.0676, discriminator=3.99]\n", + "100%|███████| 2/2 [00:00<00:00, 4.23it/s, kld=325, perceptual=0.234, generator=2.5, feature=0.0701, discriminator=4.01]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.19it/s, kld=2.07e+3, perceptual=0.257, generator=2.42, feature=0.0706, discriminator=3.89\n", + "100%|██| 2/2 [00:00<00:00, 3.85it/s, kld=1.21e+3, perceptual=0.247, generator=2.43, feature=0.0692, discriminator=3.88]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=338, perceptual=0.263, generator=2.39, feature=0.0861, discriminator=4.03]\n", + "100%|███████| 2/2 [00:00<00:00, 4.18it/s, kld=248, perceptual=0.246, generator=2.5, feature=0.0764, discriminator=3.86]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=331, perceptual=0.246, generator=2.47, feature=0.0839, discriminator=3.71]\n", + "100%|███████| 2/2 [00:00<00:00, 4.31it/s, kld=205, perceptual=0.243, generator=2.39, feature=0.088, discriminator=3.79]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██| 15/15 [00:06<00:00, 2.19it/s, kld=3.41e+3, perceptual=0.248, generator=2.58, feature=0.12, discriminator=3.76]\n", + "100%|████| 2/2 [00:00<00:00, 3.71it/s, kld=2.19e+3, perceptual=0.26, generator=2.55, feature=0.125, discriminator=3.59]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.21it/s, kld=1.09e+3, perceptual=0.246, generator=2.76, feature=0.128, discriminator=3.32]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|███████| 2/2 [00:00<00:00, 3.31it/s, kld=704, perceptual=0.241, generator=2.83, feature=0.145, discriminator=3.18]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.19it/s, kld=1.35e+3, perceptual=0.247, generator=1.95, feature=0.0697, discriminator=3.94\n", + "100%|██████| 2/2 [00:00<00:00, 4.27it/s, kld=891, perceptual=0.269, generator=1.84, feature=0.0785, discriminator=4.04]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.25it/s, kld=373, perceptual=0.286, generator=1.98, feature=0.0785, discriminator=3.87]\n", + "100%|███████| 2/2 [00:00<00:00, 3.92it/s, kld=274, perceptual=0.285, generator=2.02, feature=0.0876, discriminator=3.8]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.16it/s, kld=637, perceptual=0.264, generator=2.5, feature=0.0888, discriminator=3.63]\n", + "100%|██████| 2/2 [00:00<00:00, 3.50it/s, kld=417, perceptual=0.268, generator=2.46, feature=0.0777, discriminator=3.49]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=584, perceptual=0.274, generator=2.46, feature=0.095, discriminator=3.23]\n", + "100%|██████| 2/2 [00:00<00:00, 4.24it/s, kld=420, perceptual=0.254, generator=2.53, feature=0.0873, discriminator=3.37]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.19it/s, kld=842, perceptual=0.272, generator=1.82, feature=0.0686, discriminator=3.99]\n", + "100%|██████| 2/2 [00:00<00:00, 4.11it/s, kld=521, perceptual=0.256, generator=1.91, feature=0.0724, discriminator=3.97]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=301, perceptual=0.292, generator=2.01, feature=0.0822, discriminator=3.88]\n", + "100%|███████| 2/2 [00:00<00:00, 4.03it/s, kld=169, perceptual=0.291, generator=2.27, feature=0.103, discriminator=3.59]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=835, perceptual=0.302, generator=2.35, feature=0.104, discriminator=3.89]\n", + "100%|█████████| 2/2 [00:00<00:00, 4.33it/s, kld=517, perceptual=0.341, generator=2.3, feature=0.119, discriminator=3.6]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.18it/s, kld=425, perceptual=0.322, generator=2.7, feature=0.174, discriminator=3.03]\n", + "100%|███████| 2/2 [00:00<00:00, 4.24it/s, kld=245, perceptual=0.326, generator=2.72, feature=0.162, discriminator=3.07]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=139, perceptual=0.302, generator=2.79, feature=0.149, discriminator=2.91]\n", + "100%|██████| 2/2 [00:00<00:00, 4.20it/s, kld=69.9, perceptual=0.284, generator=2.83, feature=0.137, discriminator=2.89]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.20it/s, kld=210, perceptual=0.278, generator=2.84, feature=0.133, discriminator=2.84]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████| 2/2 [00:00<00:00, 3.44it/s, kld=132, perceptual=0.257, generator=2.86, feature=0.12, discriminator=2.85]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=835, perceptual=0.266, generator=1.8, feature=0.0844, discriminator=3.96]\n", + "100%|██████| 2/2 [00:00<00:00, 3.26it/s, kld=767, perceptual=0.293, generator=1.72, feature=0.0979, discriminator=3.83]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.19it/s, kld=908, perceptual=0.306, generator=1.62, feature=0.102, discriminator=3.5]\n", + "100%|███████| 2/2 [00:00<00:00, 4.25it/s, kld=568, perceptual=0.324, generator=1.66, feature=0.107, discriminator=3.45]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=865, perceptual=0.304, generator=1.54, feature=0.0938, discriminator=3.68]\n", + "100%|██████| 2/2 [00:00<00:00, 3.77it/s, kld=668, perceptual=0.295, generator=1.62, feature=0.0881, discriminator=3.65]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=915, perceptual=0.272, generator=1.26, feature=0.074, discriminator=3.78]\n", + "100%|██████| 2/2 [00:00<00:00, 4.09it/s, kld=570, perceptual=0.299, generator=1.21, feature=0.0785, discriminator=3.76]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=343, perceptual=0.268, generator=1.28, feature=0.0697, discriminator=3.87]\n", + "100%|███████| 2/2 [00:00<00:00, 4.37it/s, kld=209, perceptual=0.278, generator=1.2, feature=0.0735, discriminator=3.81]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.25it/s, kld=495, perceptual=0.252, generator=1.18, feature=0.0635, discriminator=3.82]\n", + "100%|██████| 2/2 [00:00<00:00, 3.88it/s, kld=337, perceptual=0.267, generator=1.15, feature=0.0676, discriminator=3.88]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.21it/s, kld=677, perceptual=0.271, generator=1.25, feature=0.0701, discriminator=3.95]\n", + "100%|██████| 2/2 [00:00<00:00, 4.08it/s, kld=563, perceptual=0.279, generator=1.11, feature=0.0637, discriminator=3.93]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.29it/s, kld=373, perceptual=0.283, generator=1.24, feature=0.0668, discriminator=3.91]\n", + "100%|██████| 2/2 [00:00<00:00, 3.75it/s, kld=235, perceptual=0.266, generator=1.25, feature=0.0631, discriminator=3.89]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=455, perceptual=0.275, generator=1.23, feature=0.0644, discriminator=3.96]\n", + "100%|██████| 2/2 [00:00<00:00, 4.21it/s, kld=363, perceptual=0.263, generator=1.19, feature=0.0624, discriminator=3.91]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=519, perceptual=0.264, generator=1.29, feature=0.0628, discriminator=3.9]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████| 2/2 [00:00<00:00, 3.35it/s, kld=375, perceptual=0.261, generator=1.29, feature=0.0589, discriminator=3.89]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=329, perceptual=0.242, generator=1.18, feature=0.0615, discriminator=4.02]\n", + "100%|███████| 2/2 [00:00<00:00, 3.73it/s, kld=205, perceptual=0.267, generator=1.16, feature=0.067, discriminator=3.97]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=629, perceptual=0.233, generator=1.37, feature=0.0524, discriminator=3.98]\n", + "100%|██████| 2/2 [00:00<00:00, 4.20it/s, kld=417, perceptual=0.233, generator=1.38, feature=0.0535, discriminator=3.95]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=198, perceptual=0.245, generator=1.45, feature=0.0611, discriminator=3.97]\n", + "100%|███████| 2/2 [00:00<00:00, 4.12it/s, kld=129, perceptual=0.263, generator=1.43, feature=0.071, discriminator=3.99]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=466, perceptual=0.279, generator=1.78, feature=0.0656, discriminator=3.92]\n", + "100%|██████| 2/2 [00:00<00:00, 3.96it/s, kld=308, perceptual=0.278, generator=1.79, feature=0.0681, discriminator=3.86]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=736, perceptual=0.245, generator=1.53, feature=0.0834, discriminator=4.15]\n", + "100%|██████| 2/2 [00:00<00:00, 4.08it/s, kld=668, perceptual=0.235, generator=1.41, feature=0.0861, discriminator=4.06]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=815, perceptual=0.277, generator=1.98, feature=0.129, discriminator=3.59]\n", + "100%|███████| 2/2 [00:00<00:00, 4.03it/s, kld=525, perceptual=0.268, generator=2.05, feature=0.133, discriminator=3.32]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.24it/s, kld=1e+3, perceptual=0.276, generator=2.28, feature=0.115, discriminator=3.72]\n", + "100%|███████| 2/2 [00:00<00:00, 3.66it/s, kld=660, perceptual=0.282, generator=2.32, feature=0.133, discriminator=3.53]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██| 15/15 [00:06<00:00, 2.21it/s, kld=1.36e+3, perceptual=0.279, generator=2.47, feature=0.14, discriminator=2.85]\n", + "100%|███████| 2/2 [00:00<00:00, 4.23it/s, kld=957, perceptual=0.297, generator=2.59, feature=0.138, discriminator=2.82]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.22it/s, kld=2.86e+3, perceptual=0.311, generator=1.84, feature=0.142, discriminator=3.38]\n", + "100%|████| 2/2 [00:00<00:00, 3.54it/s, kld=2.04e+3, perceptual=0.328, generator=1.89, feature=0.148, discriminator=3.5]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.17it/s, kld=699, perceptual=0.338, generator=2.35, feature=0.14, discriminator=2.54]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|████████| 2/2 [00:00<00:00, 3.51it/s, kld=409, perceptual=0.331, generator=2.58, feature=0.147, discriminator=2.5]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.25it/s, kld=491, perceptual=0.355, generator=2.74, feature=0.146, discriminator=2.93]\n", + "100%|███████| 2/2 [00:00<00:00, 2.61it/s, kld=359, perceptual=0.314, generator=2.85, feature=0.143, discriminator=2.95]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.24it/s, kld=517, perceptual=0.334, generator=2.67, feature=0.14, discriminator=3.12]\n", + "100%|████████| 2/2 [00:00<00:00, 3.93it/s, kld=384, perceptual=0.326, generator=2.72, feature=0.14, discriminator=3.09]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=1.27e+3, perceptual=0.302, generator=1.8, feature=0.0732, discriminator=4]\n", + "100%|███████| 2/2 [00:00<00:00, 3.94it/s, kld=815, perceptual=0.31, generator=1.76, feature=0.0643, discriminator=3.98]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.20it/s, kld=1.01e+3, perceptual=0.281, generator=1.79, feature=0.0657, discriminator=3.96\n", + "100%|███████| 2/2 [00:00<00:00, 4.20it/s, kld=590, perceptual=0.263, generator=1.86, feature=0.071, discriminator=3.95]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=465, perceptual=0.253, generator=1.94, feature=0.0742, discriminator=3.63]\n", + "100%|███████| 2/2 [00:00<00:00, 4.08it/s, kld=329, perceptual=0.251, generator=1.95, feature=0.0817, discriminator=3.5]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=862, perceptual=0.243, generator=1.09, feature=0.0589, discriminator=3.92]\n", + "100%|██████| 2/2 [00:00<00:00, 3.89it/s, kld=591, perceptual=0.238, generator=1.14, feature=0.0605, discriminator=3.81]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.18it/s, kld=1.08e+3, perceptual=0.24, generator=1.74, feature=0.0678, discriminator=3.54]\n", + "100%|███████| 2/2 [00:00<00:00, 4.11it/s, kld=677, perceptual=0.231, generator=1.8, feature=0.0649, discriminator=3.91]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=958, perceptual=0.316, generator=1.8, feature=0.0715, discriminator=3.97]\n", + "100%|██████| 2/2 [00:00<00:00, 4.26it/s, kld=618, perceptual=0.301, generator=1.81, feature=0.0668, discriminator=3.96]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|███| 15/15 [00:06<00:00, 2.16it/s, kld=1.17e+3, perceptual=0.311, generator=1.31, feature=0.0658, discriminator=4]\n", + "100%|██████| 2/2 [00:00<00:00, 3.89it/s, kld=989, perceptual=0.305, generator=1.23, feature=0.0674, discriminator=3.95]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██| 15/15 [00:06<00:00, 2.23it/s, kld=2.17e+3, perceptual=0.294, generator=1.94, feature=0.101, discriminator=3.3]\n", + " 0%| | 0/2 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|█████| 2/2 [00:00<00:00, 2.79it/s, kld=1.5e+3, perceptual=0.301, generator=1.96, feature=0.12, discriminator=3.16]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.24it/s, kld=1.88e+3, perceptual=0.29, generator=2.02, feature=0.0721, discriminator=3.34]\n", + "100%|██| 2/2 [00:00<00:00, 4.14it/s, kld=1.26e+3, perceptual=0.249, generator=1.96, feature=0.0852, discriminator=3.27]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.19it/s, kld=1.49e+3, perceptual=0.253, generator=1.96, feature=0.0624, discriminator=3.82\n", + "100%|██████| 2/2 [00:00<00:00, 3.80it/s, kld=862, perceptual=0.256, generator=1.96, feature=0.0589, discriminator=3.98]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|██████| 15/15 [00:06<00:00, 2.23it/s, kld=592, perceptual=0.252, generator=1.11, feature=0.108, discriminator=4.4]\n", + "100%|█████████| 2/2 [00:00<00:00, 3.92it/s, kld=365, perceptual=0.278, generator=1.19, feature=0.13, discriminator=4.5]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.21it/s, kld=1.65e+3, perceptual=0.267, generator=1.77, feature=0.121, discriminator=3.45]\n", + "100%|███| 2/2 [00:00<00:00, 4.14it/s, kld=1.05e+3, perceptual=0.244, generator=1.85, feature=0.123, discriminator=3.18]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|█| 15/15 [00:06<00:00, 2.24it/s, kld=1.53e+3, perceptual=0.279, generator=1.74, feature=0.114, discriminator=3.33]\n", + "100%|██████| 2/2 [00:00<00:00, 4.29it/s, kld=826, perceptual=0.259, generator=1.69, feature=0.0888, discriminator=3.51]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=940, perceptual=0.264, generator=1.88, feature=0.0612, discriminator=3.97]\n", + "100%|██████| 2/2 [00:00<00:00, 4.26it/s, kld=580, perceptual=0.262, generator=1.55, feature=0.0873, discriminator=4.16]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=588, perceptual=0.275, generator=1.81, feature=0.0542, discriminator=3.85]\n", + "100%|██████| 2/2 [00:00<00:00, 3.94it/s, kld=549, perceptual=0.262, generator=1.94, feature=0.0645, discriminator=3.75]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=658, perceptual=0.284, generator=1.73, feature=0.0515, discriminator=3.94]\n", + "100%|██████| 2/2 [00:00<00:00, 4.15it/s, kld=362, perceptual=0.271, generator=1.79, feature=0.0583, discriminator=3.94]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99/100\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=808, perceptual=0.281, generator=1.83, feature=0.0545, discriminator=3.86]\n", + "100%|██████| 2/2 [00:00<00:00, 2.92it/s, kld=598, perceptual=0.266, generator=1.79, feature=0.0619, discriminator=3.89]\n" ] } ], @@ -929,9 +2392,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From 067998b90260cf86962459caa8217149456c43a1 Mon Sep 17 00:00:00 2001 From: virginiafdez Date: Wed, 5 Jul 2023 09:40:38 +0100 Subject: [PATCH 5/7] Implemented changes as per PR correction: adding docstrings, removing blank lines, modifying the notebook to take losses more into account + conclusion. --- generative/losses/kld_loss.py | 11 + generative/networks/blocks/spade_norm.py | 11 + generative/networks/nets/spade_network.py | 70 ++- .../2d_spade_gan/2d_spade_vae.ipynb | 586 ++++++++++-------- .../generative/2d_spade_gan/2d_spade_vae.py | 26 +- 5 files changed, 421 insertions(+), 283 deletions(-) diff --git a/generative/losses/kld_loss.py b/generative/losses/kld_loss.py index 4b7e6f31..d3178b84 100644 --- a/generative/losses/kld_loss.py +++ b/generative/losses/kld_loss.py @@ -1,3 +1,14 @@ +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import torch.nn as nn import torch diff --git a/generative/networks/blocks/spade_norm.py b/generative/networks/blocks/spade_norm.py index 68991f0c..419f740e 100644 --- a/generative/networks/blocks/spade_norm.py +++ b/generative/networks/blocks/spade_norm.py @@ -1,3 +1,14 @@ +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + from __future__ import annotations import torch import torch.nn as nn diff --git a/generative/networks/nets/spade_network.py b/generative/networks/nets/spade_network.py index ebf601e6..0be1d9c8 100644 --- a/generative/networks/nets/spade_network.py +++ b/generative/networks/nets/spade_network.py @@ -26,6 +26,17 @@ class UpsamplingModes(StrEnum): bilinear = "bilinear" class SPADE_ResNetBlock(nn.Module): + """ + Creates a Residual Block with SPADE normalisation. + Args: + spatial_dims: number of spatial dimensions + in_channels: number of input channels + out_channels: number of output channels + label_nc: number of semantic channels that will be taken into account in SPADE normalisation blocks + spade_intermediate_channels: number of intermediate channels in the middle conv. layers in SPADE normalisation blocks + norm: base normalisation type used on top of SPADE + kernel_size: convolutional kernel size + """ def __init__(self, spatial_dims: int, @@ -74,7 +85,6 @@ def __init__(self, norm=norm) def forward(self, x, seg): - x_s = self.shortcut(x, seg) dx = self.conv_0(self.activation(self.norm_0(x, seg))) dx = self.conv_1(self.activation(self.norm_1(dx, seg))) @@ -89,7 +99,19 @@ def shortcut(self, x, seg): return x_s class SPADE_Encoder(nn.Module): - + """ + Encoding branch of a VAE compatible with a SPADE-like generator + Args: + spatial_dims: number of spatial dimensions + in_channels: number of input channels + z_dim: latent space dimension of the VAE containing the image sytle information + num_channels: number of output after each downsampling block + input_shape: spatial input shape of the tensor, necessary to do the reshaping after the linear layers + of the autoencoder (HxWx[D]) + kernel_size: convolutional kernel size + norm: normalisation layer type + act: activation type + """ def __init__(self, spatial_dims: int, in_channels: int, @@ -139,7 +161,6 @@ def forward(self, x,): return mu, logvar def encode(self, x): - for block in self.blocks: x = block(x) x = x.view(x.size(0), -1) @@ -154,7 +175,25 @@ def reparameterize(self, mu, logvar): return eps.mul(std) + mu class SPADE_Decoder(nn.Module): - + """ + Decoder branch of a SPADE-like generator. It can be used independently, without an encoding branch, + behaving like a GAN, or coupled to a SPADE encoder. + Args: + label_nc: number of semantic labels + spatial_dims: number of spatial dimensions + out_channels: number of output channels + label_nc: number of semantic channels used for the SPADE normalisation blocks + input_shape: spatial input shape of the tensor, necessary to do the reshaping after the linear layers + num_channels: number of output after each downsampling block + z_dim: latent space dimension of the VAE containing the image sytle information (None if encoder is not used) + is_gan: whether the decoder is going to be coupled to an autoencoder or not (true: not, false: yes) + spade_intermediate_channels: number of channels in the intermediate layers of the SPADE normalisation blocks + norm: base normalisation type + act: activation layer type + last_act: activation layer type for the last layer of the network (can differ from previous) + kernel_size: convolutional kernel size + upsampling_mode: upsampling mode (nearest, bilinear etc.) + """ def __init__(self, spatial_dims: int, out_channels: int, @@ -214,8 +253,6 @@ def __init__(self, def forward(self, seg, z: torch.Tensor = None): - - if self.is_gan: x = F.interpolate(seg, size=tuple(self.latent_spatial_shape)) x = self.fc(x) @@ -235,6 +272,26 @@ def forward(self, seg, z: torch.Tensor = None): class SPADE_Net(nn.Module): + """ + SPADE Network, implemented based on the code by Park, T et al. in "Semantic Image Synthesis with Spatially-Adaptive Normalization" + (https://github.com/NVlabs/SPADE) + Args: + spatial_dims: number of spatial dimensions + in_channels: number of input channels + out_channels: number of output channels + label_nc: number of semantic channels used for the SPADE normalisation blocks + input_shape: spatial input shape of the tensor, necessary to do the reshaping after the linear layers + num_channels: number of output after each downsampling block + z_dim: latent space dimension of the VAE containing the image sytle information (None if encoder is not used) + is_vae: whether the decoder is going to be coupled to an autoencoder (true) or not (false) + spade_intermediate_channels: number of channels in the intermediate layers of the SPADE normalisation blocks + norm: base normalisation type + act: activation layer type + last_act: activation layer type for the last layer of the network (can differ from previous) + kernel_size: convolutional kernel size + upsampling_mode: upsampling mode (nearest, bilinear etc.) + """ + def __init__( self, spatial_dims: int, @@ -297,7 +354,6 @@ def __init__( ) def forward(self, seg: torch.Tensor, x: Union[torch.Tensor, None] = None): - z = None if self.is_vae: z_mu, z_logvar = self.encoder(x) diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb index bf7271c3..e5c64a3d 100644 --- a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb @@ -37,23 +37,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "e059c423", "metadata": { "scrolled": true }, - "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", - "A matching Triton is not available, some optimizations will not be enabled.\n", - "Error caught was: No module named 'triton'\n" - ] - } - ], + "outputs": [], "source": [ "import os\n", "import tempfile\n", @@ -74,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "e76296e7", "metadata": { "scrolled": false @@ -84,7 +73,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Temporary directory used: /tmp/tmpo8gppqh6 \n" + "Temporary directory used: /tmp/tmpz0rbc_3s \n" ] } ], @@ -97,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 26, "id": "2483148a", "metadata": {}, "outputs": [], @@ -145,7 +134,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "dc560f7e", "metadata": { "scrolled": true @@ -157,17 +146,17 @@ "text": [ "Downloading...\n", "From: https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5\n", - "To: /tmp/tmpo8gppqh6/data.zip\n", - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 384M/384M [00:05<00:00, 69.6MB/s]\n" + "To: /tmp/tmpz0rbc_3s/data.zip\n", + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 384M/384M [00:05<00:00, 67.0MB/s]\n" ] }, { "data": { "text/plain": [ - "'/tmp/tmpo8gppqh6/data.zip'" + "'/tmp/tmpz0rbc_3s/data.zip'" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -179,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "id": "cd7dd6ec", "metadata": {}, "outputs": [], @@ -193,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "d48987b9", "metadata": {}, "outputs": [], @@ -219,21 +208,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "8ab79cdc", "metadata": { "lines_to_end_of_cell_marker": 2 }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "monai.transforms.io.dictionary LoadImaged.__init__:image_only: Current default value of argument `image_only=False` has been deprecated since version 1.1. It will be changed to `image_only=True` in version 1.3.\n", - "monai.transforms.croppad.dictionary RandSpatialCropd.__init__:random_size: Current default value of argument `random_size=True` has been deprecated since version 1.1. It will be changed to `random_size=False` in version 1.3.\n" - ] - } - ], + "outputs": [], "source": [ "preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain\n", "crop_shape = input_shape + [1]\n", @@ -277,7 +257,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "98d14e75", "metadata": {}, "outputs": [ @@ -290,7 +270,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -320,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "fa17d864", "metadata": {}, "outputs": [], @@ -330,7 +310,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "8f126b17", "metadata": {}, "outputs": [], @@ -355,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "255c90c7", "metadata": {}, "outputs": [], @@ -387,7 +367,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "id": "c18dbad8", "metadata": {}, "outputs": [], @@ -407,7 +387,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "id": "89989c34", "metadata": {}, "outputs": [], @@ -424,7 +404,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "id": "5b8b676f", "metadata": {}, "outputs": [], @@ -445,7 +425,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "id": "36ea4308", "metadata": { "scrolled": false @@ -456,9 +436,7 @@ "output_type": "stream", "text": [ "The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.\n", - "Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=VGG16_Weights.IMAGENET1K_V1`. You can also use `weights=VGG16_Weights.DEFAULT` to get the most up-to-date weights.\n", - "Downloading: \"https://download.pytorch.org/models/vgg16-397923af.pth\" to /home/walter/.cache/torch/hub/checkpoints/vgg16-397923af.pth\n", - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 528M/528M [00:07<00:00, 77.9MB/s]\n" + "Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=VGG16_Weights.IMAGENET1K_V1`. You can also use `weights=VGG16_Weights.DEFAULT` to get the most up-to-date weights.\n" ] } ], @@ -472,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "id": "3b57abd3", "metadata": {}, "outputs": [], @@ -491,7 +469,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 27, "id": "918eac0a", "metadata": { "scrolled": false @@ -508,13 +486,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|█████| 15/15 [00:16<00:00, 1.12s/it, kld=293, perceptual=0.339, generator=1.94, feature=0.125, discriminator=3.96]\n", - " 0%| | 0/2 [00:00" ] @@ -526,7 +504,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.21it/s, kld=197, perceptual=0.339, generator=1.93, feature=0.121, discriminator=3.94]" + "100%|██████| 2/2 [00:00<00:00, 3.22it/s, kld=63.6, perceptual=0.254, generator=3.38, feature=0.125, discriminator=1.77]" ] }, { @@ -541,8 +519,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=162, perceptual=0.361, generator=1.99, feature=0.127, discriminator=3.79]\n", - "100%|███████| 2/2 [00:00<00:00, 4.02it/s, kld=116, perceptual=0.324, generator=2.09, feature=0.131, discriminator=3.63]" + "100%|█████| 15/15 [00:06<00:00, 2.26it/s, kld=754, perceptual=0.354, generator=3.46, feature=0.168, discriminator=1.79]\n", + "100%|████████| 2/2 [00:00<00:00, 4.36it/s, kld=359, perceptual=0.36, generator=3.44, feature=0.173, discriminator=1.85]" ] }, { @@ -557,8 +535,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=155, perceptual=0.238, generator=2.41, feature=0.147, discriminator=3.03]\n", - "100%|████████| 2/2 [00:00<00:00, 3.92it/s, kld=179, perceptual=0.34, generator=2.41, feature=0.183, discriminator=2.95]" + "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=298, perceptual=0.324, generator=3.57, feature=0.167, discriminator=1.58]\n", + "100%|████████| 2/2 [00:00<00:00, 4.07it/s, kld=346, perceptual=0.34, generator=3.57, feature=0.167, discriminator=1.63]" ] }, { @@ -573,8 +551,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=199, perceptual=0.286, generator=2.31, feature=0.164, discriminator=3.36]\n", - "100%|█████████| 2/2 [00:00<00:00, 4.28it/s, kld=144, perceptual=0.3, generator=2.53, feature=0.179, discriminator=2.68]" + "100%|███████| 15/15 [00:06<00:00, 2.27it/s, kld=313, perceptual=0.32, generator=3.57, feature=0.166, discriminator=1.6]\n", + "100%|███████| 2/2 [00:00<00:00, 4.36it/s, kld=262, perceptual=0.325, generator=3.49, feature=0.164, discriminator=1.63]" ] }, { @@ -589,8 +567,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.19it/s, kld=483, perceptual=0.47, generator=2.29, feature=0.238, discriminator=2.82]\n", - "100%|███████| 2/2 [00:00<00:00, 4.43it/s, kld=296, perceptual=0.449, generator=2.33, feature=0.237, discriminator=2.78]" + "100%|█████| 15/15 [00:06<00:00, 2.28it/s, kld=213, perceptual=0.305, generator=3.52, feature=0.168, discriminator=1.67]\n", + "100%|███████| 2/2 [00:00<00:00, 4.45it/s, kld=101, perceptual=0.307, generator=3.58, feature=0.164, discriminator=1.65]" ] }, { @@ -605,8 +583,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.25it/s, kld=258, perceptual=0.456, generator=2.84, feature=0.273, discriminator=2.15]\n", - "100%|███████| 2/2 [00:00<00:00, 4.31it/s, kld=150, perceptual=0.466, generator=2.83, feature=0.275, discriminator=2.15]" + "100%|██████| 15/15 [00:06<00:00, 2.23it/s, kld=119, perceptual=0.302, generator=3.6, feature=0.165, discriminator=1.51]\n", + "100%|██████| 2/2 [00:00<00:00, 3.79it/s, kld=68.9, perceptual=0.288, generator=3.58, feature=0.165, discriminator=1.61]" ] }, { @@ -621,8 +599,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.17it/s, kld=80.9, perceptual=0.406, generator=2.88, feature=0.245, discriminator=2.05]\n", - "100%|██████| 2/2 [00:00<00:00, 3.98it/s, kld=51.4, perceptual=0.422, generator=2.89, feature=0.249, discriminator=1.97]" + "100%|██████| 15/15 [00:06<00:00, 2.21it/s, kld=114, perceptual=0.286, generator=3.59, feature=0.163, discriminator=1.5]\n", + "100%|████████| 2/2 [00:00<00:00, 4.25it/s, kld=80, perceptual=0.278, generator=3.59, feature=0.161, discriminator=1.51]" ] }, { @@ -637,8 +615,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.19it/s, kld=101, perceptual=0.375, generator=2.75, feature=0.194, discriminator=2.1]\n", - "100%|██████| 2/2 [00:00<00:00, 4.16it/s, kld=73.3, perceptual=0.341, generator=2.81, feature=0.162, discriminator=2.65]" + "100%|████████| 15/15 [00:06<00:00, 2.28it/s, kld=116, perceptual=0.263, generator=3.6, feature=0.16, discriminator=1.5]\n", + "100%|█████████| 2/2 [00:00<00:00, 4.44it/s, kld=73.9, perceptual=0.269, generator=3.6, feature=0.16, discriminator=1.5]" ] }, { @@ -653,8 +631,8 @@ "output_type": "stream", "text": [ "\n", - "100%|███████| 15/15 [00:07<00:00, 2.14it/s, kld=130, perceptual=0.4, generator=2.91, feature=0.203, discriminator=1.89]\n", - "100%|███████| 2/2 [00:00<00:00, 3.42it/s, kld=101, perceptual=0.385, generator=2.94, feature=0.185, discriminator=2.08]" + "100%|███████| 15/15 [00:06<00:00, 2.22it/s, kld=100, perceptual=0.25, generator=3.6, feature=0.155, discriminator=1.53]\n", + "100%|█████████| 2/2 [00:00<00:00, 4.31it/s, kld=54.1, perceptual=0.26, generator=3.6, feature=0.154, discriminator=1.5]" ] }, { @@ -669,8 +647,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=156, perceptual=0.352, generator=2.68, feature=0.184, discriminator=2.03]\n", - "100%|██████| 2/2 [00:00<00:00, 4.28it/s, kld=97.8, perceptual=0.343, generator=2.63, feature=0.183, discriminator=2.08]" + "100%|████| 15/15 [00:06<00:00, 2.19it/s, kld=97.2, perceptual=0.243, generator=3.54, feature=0.149, discriminator=1.57]\n", + "100%|██████| 2/2 [00:00<00:00, 4.01it/s, kld=69.7, perceptual=0.252, generator=3.62, feature=0.141, discriminator=1.46]" ] }, { @@ -685,13 +663,13 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.25it/s, kld=159, perceptual=0.347, generator=2.92, feature=0.185, discriminator=1.76]\n", - " 0%| | 0/2 [00:00" ] @@ -703,7 +681,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.39it/s, kld=149, perceptual=0.372, generator=2.91, feature=0.186, discriminator=1.79]" + "100%|████████| 2/2 [00:00<00:00, 3.42it/s, kld=109, perceptual=0.258, generator=3.54, feature=0.128, discriminator=1.6]" ] }, { @@ -718,8 +696,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.20it/s, kld=155, perceptual=0.336, generator=2.94, feature=0.162, discriminator=2.13]\n", - "100%|██████| 2/2 [00:00<00:00, 3.88it/s, kld=98.6, perceptual=0.314, generator=2.96, feature=0.145, discriminator=2.31]" + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=413, perceptual=0.325, generator=3.21, feature=0.144, discriminator=2.18]\n", + "100%|███████| 2/2 [00:00<00:00, 3.80it/s, kld=252, perceptual=0.325, generator=3.39, feature=0.141, discriminator=1.88]" ] }, { @@ -734,8 +712,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.23it/s, kld=1.21e+3, perceptual=0.379, generator=2.97, feature=0.186, discriminator=1.68]\n", - "100%|██████████| 2/2 [00:00<00:00, 4.23it/s, kld=817, perceptual=0.401, generator=3, feature=0.189, discriminator=1.66]" + "100%|█████| 15/15 [00:06<00:00, 2.26it/s, kld=238, perceptual=0.311, generator=3.55, feature=0.169, discriminator=1.67]\n", + "100%|████████| 2/2 [00:00<00:00, 4.29it/s, kld=214, perceptual=0.317, generator=3.57, feature=0.17, discriminator=1.61]" ] }, { @@ -750,8 +728,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=118, perceptual=0.377, generator=3.04, feature=0.168, discriminator=2.01]\n", - "100%|██████| 2/2 [00:00<00:00, 3.45it/s, kld=72.6, perceptual=0.365, generator=3.06, feature=0.179, discriminator=1.59]" + "100%|█████| 15/15 [00:06<00:00, 2.25it/s, kld=110, perceptual=0.304, generator=3.57, feature=0.177, discriminator=1.55]\n", + "100%|███████| 2/2 [00:00<00:00, 4.01it/s, kld=53.1, perceptual=0.314, generator=3.58, feature=0.176, discriminator=1.5]" ] }, { @@ -766,8 +744,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.24it/s, kld=2.05e+3, perceptual=0.386, generator=2.48, feature=0.177, discriminator=2.18]\n", - "100%|███| 2/2 [00:00<00:00, 4.27it/s, kld=1.31e+3, perceptual=0.326, generator=2.54, feature=0.166, discriminator=2.24]" + "100%|████████| 15/15 [00:06<00:00, 2.16it/s, kld=129, perceptual=0.27, generator=3.6, feature=0.17, discriminator=1.52]\n", + "100%|████████| 2/2 [00:00<00:00, 4.45it/s, kld=83.5, perceptual=0.295, generator=3.6, feature=0.17, discriminator=1.47]" ] }, { @@ -782,8 +760,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.18it/s, kld=1.19e+3, perceptual=0.337, generator=2.82, feature=0.173, discriminator=1.79]\n", - "100%|████████| 2/2 [00:00<00:00, 4.00it/s, kld=730, perceptual=0.329, generator=2.82, feature=0.17, discriminator=1.78]" + "100%|████| 15/15 [00:06<00:00, 2.29it/s, kld=74.5, perceptual=0.254, generator=3.59, feature=0.166, discriminator=1.52]\n", + "100%|███████| 2/2 [00:00<00:00, 4.49it/s, kld=38.9, perceptual=0.285, generator=3.6, feature=0.166, discriminator=1.47]" ] }, { @@ -798,8 +776,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.18it/s, kld=383, perceptual=0.348, generator=2.8, feature=0.144, discriminator=1.78]\n", - "100%|████████| 2/2 [00:00<00:00, 3.79it/s, kld=204, perceptual=0.328, generator=2.87, feature=0.146, discriminator=1.8]" + "100%|██████| 15/15 [00:06<00:00, 2.29it/s, kld=103, perceptual=0.25, generator=3.63, feature=0.162, discriminator=1.45]\n", + "100%|███████| 2/2 [00:00<00:00, 4.36it/s, kld=80.4, perceptual=0.246, generator=3.6, feature=0.159, discriminator=1.47]" ] }, { @@ -814,8 +792,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=327, perceptual=0.349, generator=2.62, feature=0.0884, discriminator=3.06]\n", - "100%|██████| 2/2 [00:00<00:00, 4.21it/s, kld=198, perceptual=0.337, generator=2.67, feature=0.0891, discriminator=3.01]" + "100%|████| 15/15 [00:06<00:00, 2.28it/s, kld=95.8, perceptual=0.247, generator=3.62, feature=0.162, discriminator=1.44]\n", + "100%|████████| 2/2 [00:00<00:00, 4.44it/s, kld=60, perceptual=0.233, generator=3.51, feature=0.166, discriminator=1.59]" ] }, { @@ -830,8 +808,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.17it/s, kld=780, perceptual=0.363, generator=2.98, feature=0.0928, discriminator=2.89]\n", - "100%|██████| 2/2 [00:00<00:00, 3.25it/s, kld=522, perceptual=0.379, generator=2.94, feature=0.0919, discriminator=2.82]" + "100%|█████| 15/15 [00:06<00:00, 2.33it/s, kld=476, perceptual=0.248, generator=3.36, feature=0.152, discriminator=1.84]\n", + "100%|███████| 2/2 [00:00<00:00, 2.86it/s, kld=181, perceptual=0.251, generator=3.59, feature=0.172, discriminator=1.53]" ] }, { @@ -846,8 +824,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=711, perceptual=0.346, generator=1.89, feature=0.0815, discriminator=3.88]\n", - "100%|██████| 2/2 [00:00<00:00, 4.29it/s, kld=413, perceptual=0.327, generator=2.01, feature=0.0848, discriminator=3.68]" + "100%|██████| 15/15 [00:06<00:00, 2.23it/s, kld=478, perceptual=0.285, generator=3.52, feature=0.15, discriminator=1.87]\n", + "100%|██████| 2/2 [00:00<00:00, 4.42it/s, kld=483, perceptual=0.304, generator=2.73, feature=0.0971, discriminator=2.46]" ] }, { @@ -862,13 +840,13 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.17it/s, kld=329, perceptual=0.339, generator=2.13, feature=0.0703, discriminator=3.87]\n", - " 0%| | 0/2 [00:00" ] @@ -880,7 +858,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.01it/s, kld=203, perceptual=0.336, generator=1.99, feature=0.078, discriminator=3.71]" + "100%|███████| 2/2 [00:00<00:00, 2.95it/s, kld=530, perceptual=0.346, generator=3.16, feature=0.143, discriminator=1.94]" ] }, { @@ -895,8 +873,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=174, perceptual=0.353, generator=2.58, feature=0.0856, discriminator=3.15]\n", - "100%|██████| 2/2 [00:00<00:00, 4.24it/s, kld=114, perceptual=0.274, generator=2.73, feature=0.0881, discriminator=3.83]" + "100%|██████| 15/15 [00:06<00:00, 2.24it/s, kld=143, perceptual=0.382, generator=3.6, feature=0.218, discriminator=1.46]\n", + "100%|██████| 2/2 [00:00<00:00, 4.35it/s, kld=80.1, perceptual=0.399, generator=3.61, feature=0.225, discriminator=1.44]" ] }, { @@ -911,8 +889,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.21it/s, kld=195, perceptual=0.36, generator=2.49, feature=0.106, discriminator=3.85]\n", - "100%|███████| 2/2 [00:00<00:00, 3.47it/s, kld=141, perceptual=0.343, generator=2.38, feature=0.0823, discriminator=3.8]" + "100%|█████| 15/15 [00:06<00:00, 2.25it/s, kld=179, perceptual=0.344, generator=3.59, feature=0.209, discriminator=1.51]\n", + "100%|██████| 2/2 [00:00<00:00, 4.43it/s, kld=91.7, perceptual=0.366, generator=3.62, feature=0.217, discriminator=1.38]" ] }, { @@ -927,8 +905,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=407, perceptual=0.355, generator=2.13, feature=0.0831, discriminator=3.37]\n", - "100%|███████| 2/2 [00:00<00:00, 4.19it/s, kld=190, perceptual=0.316, generator=2.47, feature=0.108, discriminator=3.25]" + "100%|██████| 15/15 [00:06<00:00, 2.21it/s, kld=336, perceptual=0.31, generator=3.59, feature=0.182, discriminator=1.49]\n", + "100%|████████| 2/2 [00:00<00:00, 4.46it/s, kld=216, perceptual=0.311, generator=3.6, feature=0.185, discriminator=1.48]" ] }, { @@ -943,8 +921,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.18it/s, kld=380, perceptual=0.375, generator=1.69, feature=0.108, discriminator=3.62]\n", - "100%|███████| 2/2 [00:00<00:00, 4.01it/s, kld=234, perceptual=0.348, generator=1.86, feature=0.103, discriminator=3.33]" + "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=423, perceptual=0.271, generator=3.58, feature=0.157, discriminator=1.53]\n", + "100%|███████| 2/2 [00:00<00:00, 4.07it/s, kld=136, perceptual=0.269, generator=3.59, feature=0.168, discriminator=1.52]" ] }, { @@ -959,8 +937,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=207, perceptual=0.345, generator=1.8, feature=0.0924, discriminator=3.78]\n", - "100%|█████████| 2/2 [00:00<00:00, 4.41it/s, kld=129, perceptual=0.348, generator=1.97, feature=0.1, discriminator=3.72]" + "100%|██████| 15/15 [00:06<00:00, 2.26it/s, kld=349, perceptual=0.276, generator=3.6, feature=0.155, discriminator=1.45]\n", + "100%|███████| 2/2 [00:00<00:00, 4.41it/s, kld=220, perceptual=0.272, generator=3.61, feature=0.156, discriminator=1.45]" ] }, { @@ -975,8 +953,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=294, perceptual=0.334, generator=2.76, feature=0.119, discriminator=2.83]\n", - "100%|████████| 2/2 [00:00<00:00, 4.38it/s, kld=211, perceptual=0.355, generator=2.52, feature=0.123, discriminator=2.9]" + "100%|█████| 15/15 [00:06<00:00, 2.31it/s, kld=109, perceptual=0.265, generator=3.62, feature=0.156, discriminator=1.46]\n", + "100%|███████| 2/2 [00:00<00:00, 4.00it/s, kld=117, perceptual=0.246, generator=3.59, feature=0.157, discriminator=1.52]" ] }, { @@ -991,8 +969,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.20it/s, kld=384, perceptual=0.361, generator=2.86, feature=0.126, discriminator=2.7]\n", - "100%|███████| 2/2 [00:00<00:00, 3.77it/s, kld=164, perceptual=0.341, generator=3.05, feature=0.147, discriminator=2.77]" + "100%|█████| 15/15 [00:06<00:00, 2.27it/s, kld=209, perceptual=0.235, generator=3.61, feature=0.154, discriminator=1.47]\n", + "100%|███████| 2/2 [00:00<00:00, 4.47it/s, kld=120, perceptual=0.256, generator=3.61, feature=0.156, discriminator=1.43]" ] }, { @@ -1007,8 +985,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.22it/s, kld=257, perceptual=0.354, generator=1.4, feature=0.0816, discriminator=3.77]\n", - "100%|███████| 2/2 [00:00<00:00, 4.09it/s, kld=173, perceptual=0.356, generator=1.36, feature=0.0792, discriminator=3.7]" + "100%|██████| 15/15 [00:06<00:00, 2.33it/s, kld=146, perceptual=0.231, generator=3.61, feature=0.15, discriminator=1.44]\n", + "100%|██████| 2/2 [00:00<00:00, 4.35it/s, kld=76.3, perceptual=0.248, generator=3.61, feature=0.153, discriminator=1.41]" ] }, { @@ -1023,8 +1001,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=166, perceptual=0.366, generator=1.22, feature=0.0643, discriminator=3.9]\n", - "100%|██████| 2/2 [00:00<00:00, 3.98it/s, kld=92.5, perceptual=0.314, generator=1.46, feature=0.065, discriminator=3.55]" + "100%|█████| 15/15 [00:06<00:00, 2.28it/s, kld=180, perceptual=0.225, generator=3.59, feature=0.147, discriminator=1.45]\n", + "100%|███████| 2/2 [00:00<00:00, 4.18it/s, kld=98.1, perceptual=0.228, generator=3.6, feature=0.149, discriminator=1.43]" ] }, { @@ -1039,13 +1017,13 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=171, perceptual=0.331, generator=1.94, feature=0.0693, discriminator=3.74]\n", - " 0%| | 0/2 [00:00" ] @@ -1057,7 +1035,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████| 2/2 [00:00<00:00, 3.36it/s, kld=143, perceptual=0.311, generator=1.89, feature=0.0648, discriminator=3.33]" + "100%|█████████| 2/2 [00:00<00:00, 3.31it/s, kld=90, perceptual=0.226, generator=3.6, feature=0.142, discriminator=1.43]" ] }, { @@ -1072,8 +1050,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=264, perceptual=0.363, generator=1.98, feature=0.0766, discriminator=3.99]\n", - "100%|██████| 2/2 [00:00<00:00, 3.75it/s, kld=178, perceptual=0.348, generator=1.96, feature=0.0681, discriminator=3.98]" + "100%|██████| 15/15 [00:06<00:00, 2.21it/s, kld=114, perceptual=0.227, generator=3.63, feature=0.145, discriminator=1.4]\n", + "100%|██████| 2/2 [00:00<00:00, 4.38it/s, kld=62.7, perceptual=0.212, generator=3.64, feature=0.144, discriminator=1.32]" ] }, { @@ -1088,8 +1066,8 @@ "output_type": "stream", "text": [ "\n", - "100%|███| 15/15 [00:06<00:00, 2.20it/s, kld=85.9, perceptual=0.308, generator=2.05, feature=0.0725, discriminator=3.94]\n", - "100%|██████| 2/2 [00:00<00:00, 3.43it/s, kld=55.1, perceptual=0.327, generator=2.17, feature=0.113, discriminator=3.84]" + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=102, perceptual=0.229, generator=3.62, feature=0.149, discriminator=1.36]\n", + "100%|██████| 2/2 [00:00<00:00, 4.42it/s, kld=89.2, perceptual=0.233, generator=3.63, feature=0.143, discriminator=1.36]" ] }, { @@ -1104,8 +1082,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=110, perceptual=0.293, generator=2.17, feature=0.0944, discriminator=3.92]\n", - "100%|██████| 2/2 [00:00<00:00, 3.94it/s, kld=110, perceptual=0.329, generator=2.01, feature=0.0707, discriminator=4.03]" + "100%|███████| 15/15 [00:06<00:00, 2.23it/s, kld=155, perceptual=0.2, generator=3.61, feature=0.144, discriminator=1.38]\n", + "100%|██████| 2/2 [00:00<00:00, 4.19it/s, kld=70.7, perceptual=0.226, generator=3.61, feature=0.144, discriminator=1.41]" ] }, { @@ -1120,8 +1098,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.26it/s, kld=203, perceptual=0.329, generator=2.42, feature=0.0917, discriminator=3.65]\n", - "100%|███████| 2/2 [00:00<00:00, 2.71it/s, kld=106, perceptual=0.29, generator=2.39, feature=0.0954, discriminator=3.58]" + "100%|██████| 15/15 [00:06<00:00, 2.24it/s, kld=118, perceptual=0.217, generator=3.6, feature=0.144, discriminator=1.38]\n", + "100%|██████| 2/2 [00:00<00:00, 4.08it/s, kld=77.5, perceptual=0.204, generator=3.62, feature=0.145, discriminator=1.37]" ] }, { @@ -1136,8 +1114,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=282, perceptual=0.28, generator=2.44, feature=0.0842, discriminator=3.62]\n", - "100%|██████| 2/2 [00:00<00:00, 4.21it/s, kld=206, perceptual=0.284, generator=2.42, feature=0.0789, discriminator=3.64]" + "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=128, perceptual=0.199, generator=3.49, feature=0.138, discriminator=1.54]\n", + "100%|██████| 2/2 [00:00<00:00, 4.23it/s, kld=72.3, perceptual=0.219, generator=3.58, feature=0.146, discriminator=1.42]" ] }, { @@ -1152,8 +1130,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.20it/s, kld=313, perceptual=0.333, generator=2.3, feature=0.0794, discriminator=4.01]\n", - "100%|███████| 2/2 [00:00<00:00, 4.14it/s, kld=192, perceptual=0.285, generator=2.4, feature=0.0781, discriminator=4.01]" + "100%|█████| 15/15 [00:06<00:00, 2.29it/s, kld=137, perceptual=0.206, generator=3.62, feature=0.144, discriminator=1.37]\n", + "100%|██████| 2/2 [00:00<00:00, 4.47it/s, kld=98.9, perceptual=0.222, generator=3.63, feature=0.145, discriminator=1.42]" ] }, { @@ -1168,8 +1146,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=101, perceptual=0.297, generator=2.4, feature=0.0699, discriminator=3.96]\n", - "100%|█████| 2/2 [00:00<00:00, 3.69it/s, kld=56.2, perceptual=0.279, generator=2.44, feature=0.0671, discriminator=3.96]" + "100%|█████| 15/15 [00:06<00:00, 2.18it/s, kld=250, perceptual=0.227, generator=3.61, feature=0.148, discriminator=1.47]\n", + "100%|███████| 2/2 [00:00<00:00, 4.23it/s, kld=142, perceptual=0.217, generator=3.58, feature=0.148, discriminator=1.45]" ] }, { @@ -1184,8 +1162,8 @@ "output_type": "stream", "text": [ "\n", - "100%|███| 15/15 [00:06<00:00, 2.17it/s, kld=94.7, perceptual=0.296, generator=2.37, feature=0.0693, discriminator=3.91]\n", - "100%|███████| 2/2 [00:00<00:00, 4.23it/s, kld=64, perceptual=0.239, generator=2.42, feature=0.0572, discriminator=3.95]" + "100%|█████| 15/15 [00:06<00:00, 2.32it/s, kld=101, perceptual=0.208, generator=3.62, feature=0.145, discriminator=1.36]\n", + "100%|██████| 2/2 [00:00<00:00, 4.44it/s, kld=66.2, perceptual=0.211, generator=3.63, feature=0.145, discriminator=1.35]" ] }, { @@ -1200,8 +1178,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.22it/s, kld=154, perceptual=0.293, generator=2.28, feature=0.055, discriminator=3.9]\n", - "100%|███████| 2/2 [00:00<00:00, 3.99it/s, kld=93.5, perceptual=0.27, generator=2.25, feature=0.0545, discriminator=3.9]" + "100%|████| 15/15 [00:06<00:00, 2.25it/s, kld=99.7, perceptual=0.209, generator=3.61, feature=0.146, discriminator=1.37]\n", + "100%|██████| 2/2 [00:00<00:00, 3.83it/s, kld=74.2, perceptual=0.202, generator=3.62, feature=0.143, discriminator=1.38]" ] }, { @@ -1216,13 +1194,13 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.20it/s, kld=268, perceptual=0.227, generator=2.26, feature=0.052, discriminator=3.98]\n", - " 0%| | 0/2 [00:00" ] @@ -1234,7 +1212,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.34it/s, kld=247, perceptual=0.269, generator=2.15, feature=0.056, discriminator=3.95]" + "100%|██████| 2/2 [00:00<00:00, 3.33it/s, kld=86.4, perceptual=0.205, generator=3.63, feature=0.142, discriminator=1.36]" ] }, { @@ -1249,8 +1227,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=195, perceptual=0.231, generator=2.14, feature=0.054, discriminator=4.01]\n", - "100%|██████| 2/2 [00:00<00:00, 4.25it/s, kld=128, perceptual=0.238, generator=2.14, feature=0.0585, discriminator=4.02]" + "100%|█████| 15/15 [00:06<00:00, 2.22it/s, kld=87.2, perceptual=0.208, generator=3.64, feature=0.138, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 3.98it/s, kld=73.5, perceptual=0.197, generator=3.62, feature=0.141, discriminator=1.35]" ] }, { @@ -1265,8 +1243,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=312, perceptual=0.238, generator=2.29, feature=0.0563, discriminator=3.91]\n", - "100%|███████| 2/2 [00:00<00:00, 3.29it/s, kld=217, perceptual=0.24, generator=2.29, feature=0.0595, discriminator=3.89]" + "100%|█████| 15/15 [00:06<00:00, 2.25it/s, kld=120, perceptual=0.219, generator=3.62, feature=0.148, discriminator=1.34]\n", + "100%|██████| 2/2 [00:00<00:00, 4.48it/s, kld=55.8, perceptual=0.207, generator=3.63, feature=0.136, discriminator=1.33]" ] }, { @@ -1281,8 +1259,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=653, perceptual=0.225, generator=2.5, feature=0.0637, discriminator=3.79]\n", - "100%|██████| 2/2 [00:00<00:00, 4.31it/s, kld=390, perceptual=0.256, generator=2.43, feature=0.0642, discriminator=3.72]" + "100%|█████| 15/15 [00:06<00:00, 2.27it/s, kld=95.9, perceptual=0.198, generator=3.64, feature=0.135, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 4.34it/s, kld=57.2, perceptual=0.209, generator=3.66, feature=0.135, discriminator=1.25]" ] }, { @@ -1297,8 +1275,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.21it/s, kld=860, perceptual=0.261, generator=2.38, feature=0.0658, discriminator=3.85]\n", - "100%|██████| 2/2 [00:00<00:00, 3.70it/s, kld=513, perceptual=0.241, generator=2.41, feature=0.0746, discriminator=3.82]" + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=128, perceptual=0.197, generator=3.62, feature=0.132, discriminator=1.34]\n", + "100%|██████| 2/2 [00:00<00:00, 3.98it/s, kld=82.2, perceptual=0.182, generator=3.62, feature=0.124, discriminator=1.35]" ] }, { @@ -1313,8 +1291,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=422, perceptual=0.282, generator=2.38, feature=0.0676, discriminator=3.99]\n", - "100%|███████| 2/2 [00:00<00:00, 4.23it/s, kld=325, perceptual=0.234, generator=2.5, feature=0.0701, discriminator=4.01]" + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=108, perceptual=0.184, generator=3.63, feature=0.126, discriminator=1.32]\n", + "100%|██████| 2/2 [00:00<00:00, 4.10it/s, kld=72.3, perceptual=0.195, generator=3.64, feature=0.132, discriminator=1.29]" ] }, { @@ -1329,8 +1307,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.19it/s, kld=2.07e+3, perceptual=0.257, generator=2.42, feature=0.0706, discriminator=3.89\n", - "100%|██| 2/2 [00:00<00:00, 3.85it/s, kld=1.21e+3, perceptual=0.247, generator=2.43, feature=0.0692, discriminator=3.88]" + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=115, perceptual=0.188, generator=3.62, feature=0.126, discriminator=1.32]\n", + "100%|██████| 2/2 [00:00<00:00, 4.20it/s, kld=60.3, perceptual=0.213, generator=3.65, feature=0.129, discriminator=1.27]" ] }, { @@ -1345,8 +1323,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=338, perceptual=0.263, generator=2.39, feature=0.0861, discriminator=4.03]\n", - "100%|███████| 2/2 [00:00<00:00, 4.18it/s, kld=248, perceptual=0.246, generator=2.5, feature=0.0764, discriminator=3.86]" + "100%|█████| 15/15 [00:06<00:00, 2.18it/s, kld=105, perceptual=0.206, generator=3.64, feature=0.127, discriminator=1.28]\n", + "100%|██████| 2/2 [00:00<00:00, 4.34it/s, kld=59.4, perceptual=0.202, generator=3.66, feature=0.125, discriminator=1.26]" ] }, { @@ -1361,8 +1339,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=331, perceptual=0.246, generator=2.47, feature=0.0839, discriminator=3.71]\n", - "100%|███████| 2/2 [00:00<00:00, 4.31it/s, kld=205, perceptual=0.243, generator=2.39, feature=0.088, discriminator=3.79]" + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=106, perceptual=0.176, generator=3.63, feature=0.128, discriminator=1.32]\n", + "100%|███████| 2/2 [00:00<00:00, 4.31it/s, kld=55.1, perceptual=0.21, generator=3.64, feature=0.134, discriminator=1.29]" ] }, { @@ -1377,8 +1355,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██| 15/15 [00:06<00:00, 2.19it/s, kld=3.41e+3, perceptual=0.248, generator=2.58, feature=0.12, discriminator=3.76]\n", - "100%|████| 2/2 [00:00<00:00, 3.71it/s, kld=2.19e+3, perceptual=0.26, generator=2.55, feature=0.125, discriminator=3.59]" + "100%|████| 15/15 [00:06<00:00, 2.26it/s, kld=88.5, perceptual=0.192, generator=3.62, feature=0.131, discriminator=1.33]\n", + "100%|████████| 2/2 [00:00<00:00, 4.29it/s, kld=63.5, perceptual=0.2, generator=3.61, feature=0.131, discriminator=1.35]" ] }, { @@ -1393,13 +1371,13 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.21it/s, kld=1.09e+3, perceptual=0.246, generator=2.76, feature=0.128, discriminator=3.32]\n", - " 0%| | 0/2 [00:00" ] @@ -1411,7 +1389,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████| 2/2 [00:00<00:00, 3.31it/s, kld=704, perceptual=0.241, generator=2.83, feature=0.145, discriminator=3.18]" + "100%|██████| 2/2 [00:00<00:00, 3.45it/s, kld=52.4, perceptual=0.203, generator=3.65, feature=0.133, discriminator=1.27]" ] }, { @@ -1426,8 +1404,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.19it/s, kld=1.35e+3, perceptual=0.247, generator=1.95, feature=0.0697, discriminator=3.94\n", - "100%|██████| 2/2 [00:00<00:00, 4.27it/s, kld=891, perceptual=0.269, generator=1.84, feature=0.0785, discriminator=4.04]" + "100%|████| 15/15 [00:06<00:00, 2.27it/s, kld=87.7, perceptual=0.192, generator=3.62, feature=0.131, discriminator=1.34]\n", + "100%|███████| 2/2 [00:00<00:00, 4.27it/s, kld=50.3, perceptual=0.207, generator=3.64, feature=0.133, discriminator=1.3]" ] }, { @@ -1442,8 +1420,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.25it/s, kld=373, perceptual=0.286, generator=1.98, feature=0.0785, discriminator=3.87]\n", - "100%|███████| 2/2 [00:00<00:00, 3.92it/s, kld=274, perceptual=0.285, generator=2.02, feature=0.0876, discriminator=3.8]" + "100%|████| 15/15 [00:06<00:00, 2.30it/s, kld=91.9, perceptual=0.184, generator=3.62, feature=0.127, discriminator=1.33]\n", + "100%|██████| 2/2 [00:00<00:00, 4.32it/s, kld=65.7, perceptual=0.182, generator=3.62, feature=0.128, discriminator=1.35]" ] }, { @@ -1458,8 +1436,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.16it/s, kld=637, perceptual=0.264, generator=2.5, feature=0.0888, discriminator=3.63]\n", - "100%|██████| 2/2 [00:00<00:00, 3.50it/s, kld=417, perceptual=0.268, generator=2.46, feature=0.0777, discriminator=3.49]" + "100%|████| 15/15 [00:06<00:00, 2.29it/s, kld=84.6, perceptual=0.193, generator=3.62, feature=0.136, discriminator=1.34]\n", + "100%|██████| 2/2 [00:00<00:00, 4.45it/s, kld=67.2, perceptual=0.176, generator=3.63, feature=0.129, discriminator=1.32]" ] }, { @@ -1474,8 +1452,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=584, perceptual=0.274, generator=2.46, feature=0.095, discriminator=3.23]\n", - "100%|██████| 2/2 [00:00<00:00, 4.24it/s, kld=420, perceptual=0.254, generator=2.53, feature=0.0873, discriminator=3.37]" + "100%|████████| 15/15 [00:06<00:00, 2.31it/s, kld=91.9, perceptual=0.2, generator=3.64, feature=0.14, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 4.49it/s, kld=43.8, perceptual=0.204, generator=3.64, feature=0.133, discriminator=1.28]" ] }, { @@ -1490,8 +1468,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.19it/s, kld=842, perceptual=0.272, generator=1.82, feature=0.0686, discriminator=3.99]\n", - "100%|██████| 2/2 [00:00<00:00, 4.11it/s, kld=521, perceptual=0.256, generator=1.91, feature=0.0724, discriminator=3.97]" + "100%|█████| 15/15 [00:06<00:00, 2.29it/s, kld=118, perceptual=0.183, generator=3.64, feature=0.129, discriminator=1.28]\n", + "100%|███████| 2/2 [00:00<00:00, 4.44it/s, kld=71.7, perceptual=0.195, generator=3.6, feature=0.141, discriminator=1.37]" ] }, { @@ -1506,8 +1484,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=301, perceptual=0.292, generator=2.01, feature=0.0822, discriminator=3.88]\n", - "100%|███████| 2/2 [00:00<00:00, 4.03it/s, kld=169, perceptual=0.291, generator=2.27, feature=0.103, discriminator=3.59]" + "100%|██████| 15/15 [00:06<00:00, 2.35it/s, kld=102, perceptual=0.202, generator=3.63, feature=0.137, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 4.18it/s, kld=64.4, perceptual=0.188, generator=3.62, feature=0.133, discriminator=1.33]" ] }, { @@ -1522,8 +1500,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.15it/s, kld=835, perceptual=0.302, generator=2.35, feature=0.104, discriminator=3.89]\n", - "100%|█████████| 2/2 [00:00<00:00, 4.33it/s, kld=517, perceptual=0.341, generator=2.3, feature=0.119, discriminator=3.6]" + "100%|████| 15/15 [00:06<00:00, 2.28it/s, kld=96.8, perceptual=0.181, generator=3.61, feature=0.125, discriminator=1.36]\n", + "100%|██████| 2/2 [00:00<00:00, 4.54it/s, kld=54.1, perceptual=0.201, generator=3.59, feature=0.136, discriminator=1.36]" ] }, { @@ -1538,8 +1516,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.18it/s, kld=425, perceptual=0.322, generator=2.7, feature=0.174, discriminator=3.03]\n", - "100%|███████| 2/2 [00:00<00:00, 4.24it/s, kld=245, perceptual=0.326, generator=2.72, feature=0.162, discriminator=3.07]" + "100%|█████| 15/15 [00:06<00:00, 2.33it/s, kld=137, perceptual=0.195, generator=3.62, feature=0.134, discriminator=1.35]\n", + "100%|██████| 2/2 [00:00<00:00, 4.09it/s, kld=64.9, perceptual=0.198, generator=3.63, feature=0.133, discriminator=1.32]" ] }, { @@ -1554,8 +1532,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=139, perceptual=0.302, generator=2.79, feature=0.149, discriminator=2.91]\n", - "100%|██████| 2/2 [00:00<00:00, 4.20it/s, kld=69.9, perceptual=0.284, generator=2.83, feature=0.137, discriminator=2.89]" + "100%|█████| 15/15 [00:06<00:00, 2.33it/s, kld=77.3, perceptual=0.189, generator=3.64, feature=0.13, discriminator=1.29]\n", + "100%|██████| 2/2 [00:00<00:00, 3.47it/s, kld=48.4, perceptual=0.187, generator=3.65, feature=0.132, discriminator=1.26]" ] }, { @@ -1570,13 +1548,13 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.20it/s, kld=210, perceptual=0.278, generator=2.84, feature=0.133, discriminator=2.84]\n", - " 0%| | 0/2 [00:00" ] @@ -1588,7 +1566,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████| 2/2 [00:00<00:00, 3.44it/s, kld=132, perceptual=0.257, generator=2.86, feature=0.12, discriminator=2.85]" + "100%|██████| 2/2 [00:00<00:00, 3.59it/s, kld=45.9, perceptual=0.196, generator=3.65, feature=0.133, discriminator=1.26]" ] }, { @@ -1603,8 +1581,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=835, perceptual=0.266, generator=1.8, feature=0.0844, discriminator=3.96]\n", - "100%|██████| 2/2 [00:00<00:00, 3.26it/s, kld=767, perceptual=0.293, generator=1.72, feature=0.0979, discriminator=3.83]" + "100%|█████| 15/15 [00:06<00:00, 2.22it/s, kld=91.5, perceptual=0.192, generator=3.64, feature=0.134, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 4.30it/s, kld=51.4, perceptual=0.175, generator=3.63, feature=0.127, discriminator=1.29]" ] }, { @@ -1619,8 +1597,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.19it/s, kld=908, perceptual=0.306, generator=1.62, feature=0.102, discriminator=3.5]\n", - "100%|███████| 2/2 [00:00<00:00, 4.25it/s, kld=568, perceptual=0.324, generator=1.66, feature=0.107, discriminator=3.45]" + "100%|████| 15/15 [00:06<00:00, 2.24it/s, kld=89.7, perceptual=0.199, generator=3.65, feature=0.132, discriminator=1.25]\n", + "100%|██████| 2/2 [00:00<00:00, 4.25it/s, kld=51.4, perceptual=0.179, generator=3.59, feature=0.133, discriminator=1.36]" ] }, { @@ -1635,8 +1613,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=865, perceptual=0.304, generator=1.54, feature=0.0938, discriminator=3.68]\n", - "100%|██████| 2/2 [00:00<00:00, 3.77it/s, kld=668, perceptual=0.295, generator=1.62, feature=0.0881, discriminator=3.65]" + "100%|██████| 15/15 [00:06<00:00, 2.22it/s, kld=85.4, perceptual=0.18, generator=3.61, feature=0.13, discriminator=1.34]\n", + "100%|██████| 2/2 [00:00<00:00, 3.02it/s, kld=69.2, perceptual=0.195, generator=3.62, feature=0.135, discriminator=1.33]" ] }, { @@ -1651,8 +1629,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=915, perceptual=0.272, generator=1.26, feature=0.074, discriminator=3.78]\n", - "100%|██████| 2/2 [00:00<00:00, 4.09it/s, kld=570, perceptual=0.299, generator=1.21, feature=0.0785, discriminator=3.76]" + "100%|██████| 15/15 [00:06<00:00, 2.30it/s, kld=113, perceptual=0.185, generator=3.64, feature=0.126, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 4.46it/s, kld=67.6, perceptual=0.206, generator=3.65, feature=0.128, discriminator=1.27]" ] }, { @@ -1667,8 +1645,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=343, perceptual=0.268, generator=1.28, feature=0.0697, discriminator=3.87]\n", - "100%|███████| 2/2 [00:00<00:00, 4.37it/s, kld=209, perceptual=0.278, generator=1.2, feature=0.0735, discriminator=3.81]" + "100%|██████| 15/15 [00:06<00:00, 2.27it/s, kld=79, perceptual=0.163, generator=3.61, feature=0.124, discriminator=1.33]\n", + "100%|██████| 2/2 [00:00<00:00, 3.91it/s, kld=47.8, perceptual=0.198, generator=3.63, feature=0.133, discriminator=1.28]" ] }, { @@ -1683,8 +1661,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.25it/s, kld=495, perceptual=0.252, generator=1.18, feature=0.0635, discriminator=3.82]\n", - "100%|██████| 2/2 [00:00<00:00, 3.88it/s, kld=337, perceptual=0.267, generator=1.15, feature=0.0676, discriminator=3.88]" + "100%|██████| 15/15 [00:07<00:00, 2.13it/s, kld=80.8, perceptual=0.174, generator=3.63, feature=0.13, discriminator=1.3]\n", + "100%|███████| 2/2 [00:00<00:00, 4.20it/s, kld=62.5, perceptual=0.172, generator=3.63, feature=0.134, discriminator=1.3]" ] }, { @@ -1699,8 +1677,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.21it/s, kld=677, perceptual=0.271, generator=1.25, feature=0.0701, discriminator=3.95]\n", - "100%|██████| 2/2 [00:00<00:00, 4.08it/s, kld=563, perceptual=0.279, generator=1.11, feature=0.0637, discriminator=3.93]" + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=88.8, perceptual=0.208, generator=3.64, feature=0.135, discriminator=1.28]\n", + "100%|██████| 2/2 [00:00<00:00, 4.25it/s, kld=48.4, perceptual=0.196, generator=3.64, feature=0.135, discriminator=1.28]" ] }, { @@ -1715,8 +1693,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.29it/s, kld=373, perceptual=0.283, generator=1.24, feature=0.0668, discriminator=3.91]\n", - "100%|██████| 2/2 [00:00<00:00, 3.75it/s, kld=235, perceptual=0.266, generator=1.25, feature=0.0631, discriminator=3.89]" + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=100, perceptual=0.202, generator=3.63, feature=0.135, discriminator=1.29]\n", + "100%|██████| 2/2 [00:00<00:00, 4.05it/s, kld=61.3, perceptual=0.208, generator=3.65, feature=0.135, discriminator=1.27]" ] }, { @@ -1731,8 +1709,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=455, perceptual=0.275, generator=1.23, feature=0.0644, discriminator=3.96]\n", - "100%|██████| 2/2 [00:00<00:00, 4.21it/s, kld=363, perceptual=0.263, generator=1.19, feature=0.0624, discriminator=3.91]" + "100%|█████| 15/15 [00:06<00:00, 2.29it/s, kld=116, perceptual=0.201, generator=3.64, feature=0.134, discriminator=1.29]\n", + "100%|████████| 2/2 [00:00<00:00, 4.46it/s, kld=68, perceptual=0.188, generator=3.64, feature=0.132, discriminator=1.29]" ] }, { @@ -1747,13 +1725,13 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=519, perceptual=0.264, generator=1.29, feature=0.0628, discriminator=3.9]\n", - " 0%| | 0/2 [00:00" ] @@ -1765,7 +1743,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████| 2/2 [00:00<00:00, 3.35it/s, kld=375, perceptual=0.261, generator=1.29, feature=0.0589, discriminator=3.89]" + "100%|███████| 2/2 [00:00<00:00, 3.44it/s, kld=54.3, perceptual=0.17, generator=3.64, feature=0.126, discriminator=1.29]" ] }, { @@ -1780,8 +1758,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=329, perceptual=0.242, generator=1.18, feature=0.0615, discriminator=4.02]\n", - "100%|███████| 2/2 [00:00<00:00, 3.73it/s, kld=205, perceptual=0.267, generator=1.16, feature=0.067, discriminator=3.97]" + "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=102, perceptual=0.186, generator=3.65, feature=0.132, discriminator=1.27]\n", + "100%|██████| 2/2 [00:00<00:00, 4.29it/s, kld=63.4, perceptual=0.191, generator=3.66, feature=0.131, discriminator=1.25]" ] }, { @@ -1796,8 +1774,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=629, perceptual=0.233, generator=1.37, feature=0.0524, discriminator=3.98]\n", - "100%|██████| 2/2 [00:00<00:00, 4.20it/s, kld=417, perceptual=0.233, generator=1.38, feature=0.0535, discriminator=3.95]" + "100%|█████| 15/15 [00:06<00:00, 2.17it/s, kld=161, perceptual=0.191, generator=3.64, feature=0.132, discriminator=1.29]\n", + "100%|███████| 2/2 [00:00<00:00, 4.33it/s, kld=77.6, perceptual=0.165, generator=3.64, feature=0.13, discriminator=1.27]" ] }, { @@ -1812,8 +1790,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=198, perceptual=0.245, generator=1.45, feature=0.0611, discriminator=3.97]\n", - "100%|███████| 2/2 [00:00<00:00, 4.12it/s, kld=129, perceptual=0.263, generator=1.43, feature=0.071, discriminator=3.99]" + "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=102, perceptual=0.185, generator=3.61, feature=0.132, discriminator=1.31]\n", + "100%|██████| 2/2 [00:00<00:00, 4.36it/s, kld=64.2, perceptual=0.204, generator=3.64, feature=0.137, discriminator=1.29]" ] }, { @@ -1828,8 +1806,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=466, perceptual=0.279, generator=1.78, feature=0.0656, discriminator=3.92]\n", - "100%|██████| 2/2 [00:00<00:00, 3.96it/s, kld=308, perceptual=0.278, generator=1.79, feature=0.0681, discriminator=3.86]" + "100%|█████| 15/15 [00:06<00:00, 2.18it/s, kld=71.9, perceptual=0.188, generator=3.63, feature=0.135, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 4.13it/s, kld=50.9, perceptual=0.206, generator=3.65, feature=0.131, discriminator=1.26]" ] }, { @@ -1844,8 +1822,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=736, perceptual=0.245, generator=1.53, feature=0.0834, discriminator=4.15]\n", - "100%|██████| 2/2 [00:00<00:00, 4.08it/s, kld=668, perceptual=0.235, generator=1.41, feature=0.0861, discriminator=4.06]" + "100%|████| 15/15 [00:06<00:00, 2.25it/s, kld=72.6, perceptual=0.179, generator=3.65, feature=0.124, discriminator=1.26]\n", + "100%|███████| 2/2 [00:00<00:00, 4.15it/s, kld=44.3, perceptual=0.182, generator=3.58, feature=0.13, discriminator=1.34]" ] }, { @@ -1860,8 +1838,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=815, perceptual=0.277, generator=1.98, feature=0.129, discriminator=3.59]\n", - "100%|███████| 2/2 [00:00<00:00, 4.03it/s, kld=525, perceptual=0.268, generator=2.05, feature=0.133, discriminator=3.32]" + "100%|██████| 15/15 [00:06<00:00, 2.20it/s, kld=165, perceptual=0.177, generator=3.64, feature=0.131, discriminator=1.3]\n", + "100%|████████| 2/2 [00:00<00:00, 4.08it/s, kld=95, perceptual=0.205, generator=3.63, feature=0.138, discriminator=1.31]" ] }, { @@ -1876,8 +1854,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.24it/s, kld=1e+3, perceptual=0.276, generator=2.28, feature=0.115, discriminator=3.72]\n", - "100%|███████| 2/2 [00:00<00:00, 3.66it/s, kld=660, perceptual=0.282, generator=2.32, feature=0.133, discriminator=3.53]" + "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=107, perceptual=0.179, generator=3.64, feature=0.126, discriminator=1.28]\n", + "100%|███████| 2/2 [00:00<00:00, 4.41it/s, kld=56.1, perceptual=0.203, generator=3.63, feature=0.138, discriminator=1.3]" ] }, { @@ -1892,8 +1870,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██| 15/15 [00:06<00:00, 2.21it/s, kld=1.36e+3, perceptual=0.279, generator=2.47, feature=0.14, discriminator=2.85]\n", - "100%|███████| 2/2 [00:00<00:00, 4.23it/s, kld=957, perceptual=0.297, generator=2.59, feature=0.138, discriminator=2.82]" + "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=82.6, perceptual=0.174, generator=3.63, feature=0.126, discriminator=1.29]\n", + "100%|███████| 2/2 [00:00<00:00, 4.19it/s, kld=56.4, perceptual=0.19, generator=3.64, feature=0.136, discriminator=1.26]" ] }, { @@ -1908,8 +1886,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.22it/s, kld=2.86e+3, perceptual=0.311, generator=1.84, feature=0.142, discriminator=3.38]\n", - "100%|████| 2/2 [00:00<00:00, 3.54it/s, kld=2.04e+3, perceptual=0.328, generator=1.89, feature=0.148, discriminator=3.5]" + "100%|████| 15/15 [00:06<00:00, 2.29it/s, kld=88.3, perceptual=0.177, generator=3.65, feature=0.123, discriminator=1.26]\n", + "100%|███████| 2/2 [00:00<00:00, 4.33it/s, kld=55.7, perceptual=0.17, generator=3.65, feature=0.128, discriminator=1.24]" ] }, { @@ -1924,13 +1902,13 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.17it/s, kld=699, perceptual=0.338, generator=2.35, feature=0.14, discriminator=2.54]\n", - " 0%| | 0/2 [00:00" ] @@ -1942,7 +1920,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████| 2/2 [00:00<00:00, 3.51it/s, kld=409, perceptual=0.331, generator=2.58, feature=0.147, discriminator=2.5]" + "100%|██████| 2/2 [00:00<00:00, 3.51it/s, kld=62.6, perceptual=0.191, generator=3.66, feature=0.132, discriminator=1.24]" ] }, { @@ -1957,8 +1935,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.25it/s, kld=491, perceptual=0.355, generator=2.74, feature=0.146, discriminator=2.93]\n", - "100%|███████| 2/2 [00:00<00:00, 2.61it/s, kld=359, perceptual=0.314, generator=2.85, feature=0.143, discriminator=2.95]" + "100%|████| 15/15 [00:06<00:00, 2.27it/s, kld=93.2, perceptual=0.183, generator=3.64, feature=0.132, discriminator=1.29]\n", + "100%|███████| 2/2 [00:00<00:00, 4.39it/s, kld=64.2, perceptual=0.197, generator=3.66, feature=0.13, discriminator=1.24]" ] }, { @@ -1973,8 +1951,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.24it/s, kld=517, perceptual=0.334, generator=2.67, feature=0.14, discriminator=3.12]\n", - "100%|████████| 2/2 [00:00<00:00, 3.93it/s, kld=384, perceptual=0.326, generator=2.72, feature=0.14, discriminator=3.09]" + "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=90.5, perceptual=0.176, generator=3.65, feature=0.131, discriminator=1.28]\n", + "100%|██████| 2/2 [00:00<00:00, 4.01it/s, kld=61.5, perceptual=0.199, generator=3.67, feature=0.131, discriminator=1.23]" ] }, { @@ -1989,8 +1967,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=1.27e+3, perceptual=0.302, generator=1.8, feature=0.0732, discriminator=4]\n", - "100%|███████| 2/2 [00:00<00:00, 3.94it/s, kld=815, perceptual=0.31, generator=1.76, feature=0.0643, discriminator=3.98]" + "100%|████| 15/15 [00:06<00:00, 2.26it/s, kld=89.7, perceptual=0.184, generator=3.66, feature=0.129, discriminator=1.24]\n", + "100%|██████| 2/2 [00:00<00:00, 4.12it/s, kld=61.7, perceptual=0.181, generator=3.66, feature=0.123, discriminator=1.25]" ] }, { @@ -2005,8 +1983,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.20it/s, kld=1.01e+3, perceptual=0.281, generator=1.79, feature=0.0657, discriminator=3.96\n", - "100%|███████| 2/2 [00:00<00:00, 4.20it/s, kld=590, perceptual=0.263, generator=1.86, feature=0.071, discriminator=3.95]" + "100%|████| 15/15 [00:06<00:00, 2.22it/s, kld=89.6, perceptual=0.181, generator=3.65, feature=0.133, discriminator=1.25]\n", + "100%|███████| 2/2 [00:00<00:00, 4.47it/s, kld=46.8, perceptual=0.178, generator=3.65, feature=0.13, discriminator=1.26]" ] }, { @@ -2021,8 +1999,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=465, perceptual=0.253, generator=1.94, feature=0.0742, discriminator=3.63]\n", - "100%|███████| 2/2 [00:00<00:00, 4.08it/s, kld=329, perceptual=0.251, generator=1.95, feature=0.0817, discriminator=3.5]" + "100%|█████| 15/15 [00:06<00:00, 2.27it/s, kld=96.5, perceptual=0.192, generator=3.64, feature=0.13, discriminator=1.28]\n", + "100%|███████| 2/2 [00:00<00:00, 4.30it/s, kld=66.1, perceptual=0.19, generator=3.63, feature=0.133, discriminator=1.29]" ] }, { @@ -2037,8 +2015,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=862, perceptual=0.243, generator=1.09, feature=0.0589, discriminator=3.92]\n", - "100%|██████| 2/2 [00:00<00:00, 3.89it/s, kld=591, perceptual=0.238, generator=1.14, feature=0.0605, discriminator=3.81]" + "100%|█████| 15/15 [00:06<00:00, 2.23it/s, kld=150, perceptual=0.197, generator=3.65, feature=0.134, discriminator=1.27]\n", + "100%|████████| 2/2 [00:00<00:00, 4.41it/s, kld=72, perceptual=0.208, generator=3.62, feature=0.141, discriminator=1.32]" ] }, { @@ -2053,8 +2031,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.18it/s, kld=1.08e+3, perceptual=0.24, generator=1.74, feature=0.0678, discriminator=3.54]\n", - "100%|███████| 2/2 [00:00<00:00, 4.11it/s, kld=677, perceptual=0.231, generator=1.8, feature=0.0649, discriminator=3.91]" + "100%|██████| 15/15 [00:06<00:00, 2.26it/s, kld=119, perceptual=0.178, generator=3.63, feature=0.129, discriminator=1.3]\n", + "100%|██████| 2/2 [00:00<00:00, 4.19it/s, kld=81.4, perceptual=0.176, generator=3.63, feature=0.133, discriminator=1.28]" ] }, { @@ -2069,8 +2047,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=958, perceptual=0.316, generator=1.8, feature=0.0715, discriminator=3.97]\n", - "100%|██████| 2/2 [00:00<00:00, 4.26it/s, kld=618, perceptual=0.301, generator=1.81, feature=0.0668, discriminator=3.96]" + "100%|██████| 15/15 [00:06<00:00, 2.23it/s, kld=102, perceptual=0.173, generator=3.64, feature=0.13, discriminator=1.26]\n", + "100%|███████| 2/2 [00:00<00:00, 4.28it/s, kld=54.9, perceptual=0.192, generator=3.63, feature=0.136, discriminator=1.3]" ] }, { @@ -2085,8 +2063,8 @@ "output_type": "stream", "text": [ "\n", - "100%|███| 15/15 [00:06<00:00, 2.16it/s, kld=1.17e+3, perceptual=0.311, generator=1.31, feature=0.0658, discriminator=4]\n", - "100%|██████| 2/2 [00:00<00:00, 3.89it/s, kld=989, perceptual=0.305, generator=1.23, feature=0.0674, discriminator=3.95]" + "100%|█████| 15/15 [00:06<00:00, 2.22it/s, kld=105, perceptual=0.178, generator=3.63, feature=0.137, discriminator=1.29]\n", + "100%|██████| 2/2 [00:00<00:00, 4.18it/s, kld=85.9, perceptual=0.173, generator=3.64, feature=0.129, discriminator=1.28]" ] }, { @@ -2101,13 +2079,13 @@ "output_type": "stream", "text": [ "\n", - "100%|██| 15/15 [00:06<00:00, 2.23it/s, kld=2.17e+3, perceptual=0.294, generator=1.94, feature=0.101, discriminator=3.3]\n", - " 0%| | 0/2 [00:00" ] @@ -2119,7 +2097,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|█████| 2/2 [00:00<00:00, 2.79it/s, kld=1.5e+3, perceptual=0.301, generator=1.96, feature=0.12, discriminator=3.16]" + "100%|██████| 2/2 [00:00<00:00, 3.52it/s, kld=50.1, perceptual=0.159, generator=3.65, feature=0.126, discriminator=1.28]" ] }, { @@ -2134,8 +2112,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.24it/s, kld=1.88e+3, perceptual=0.29, generator=2.02, feature=0.0721, discriminator=3.34]\n", - "100%|██| 2/2 [00:00<00:00, 4.14it/s, kld=1.26e+3, perceptual=0.249, generator=1.96, feature=0.0852, discriminator=3.27]" + "100%|██████| 15/15 [00:06<00:00, 2.22it/s, kld=120, perceptual=0.175, generator=3.65, feature=0.13, discriminator=1.26]\n", + "100%|██████| 2/2 [00:00<00:00, 3.88it/s, kld=54.5, perceptual=0.193, generator=3.64, feature=0.136, discriminator=1.27]" ] }, { @@ -2150,8 +2128,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.19it/s, kld=1.49e+3, perceptual=0.253, generator=1.96, feature=0.0624, discriminator=3.82\n", - "100%|██████| 2/2 [00:00<00:00, 3.80it/s, kld=862, perceptual=0.256, generator=1.96, feature=0.0589, discriminator=3.98]" + "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=85.1, perceptual=0.178, generator=3.67, feature=0.133, discriminator=1.22]\n", + "100%|██████| 2/2 [00:00<00:00, 4.22it/s, kld=56.2, perceptual=0.163, generator=3.66, feature=0.129, discriminator=1.24]" ] }, { @@ -2166,8 +2144,8 @@ "output_type": "stream", "text": [ "\n", - "100%|██████| 15/15 [00:06<00:00, 2.23it/s, kld=592, perceptual=0.252, generator=1.11, feature=0.108, discriminator=4.4]\n", - "100%|█████████| 2/2 [00:00<00:00, 3.92it/s, kld=365, perceptual=0.278, generator=1.19, feature=0.13, discriminator=4.5]" + "100%|██████| 15/15 [00:06<00:00, 2.19it/s, kld=98, perceptual=0.177, generator=3.64, feature=0.136, discriminator=1.27]\n", + "100%|██████| 2/2 [00:00<00:00, 4.38it/s, kld=63.8, perceptual=0.192, generator=3.66, feature=0.131, discriminator=1.24]" ] }, { @@ -2182,8 +2160,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.21it/s, kld=1.65e+3, perceptual=0.267, generator=1.77, feature=0.121, discriminator=3.45]\n", - "100%|███| 2/2 [00:00<00:00, 4.14it/s, kld=1.05e+3, perceptual=0.244, generator=1.85, feature=0.123, discriminator=3.18]" + "100%|█████| 15/15 [00:06<00:00, 2.22it/s, kld=117, perceptual=0.189, generator=3.64, feature=0.134, discriminator=1.29]\n", + "100%|██████| 2/2 [00:00<00:00, 4.20it/s, kld=62.4, perceptual=0.158, generator=3.63, feature=0.124, discriminator=1.29]" ] }, { @@ -2198,8 +2176,8 @@ "output_type": "stream", "text": [ "\n", - "100%|█| 15/15 [00:06<00:00, 2.24it/s, kld=1.53e+3, perceptual=0.279, generator=1.74, feature=0.114, discriminator=3.33]\n", - "100%|██████| 2/2 [00:00<00:00, 4.29it/s, kld=826, perceptual=0.259, generator=1.69, feature=0.0888, discriminator=3.51]" + "100%|█████| 15/15 [00:06<00:00, 2.24it/s, kld=115, perceptual=0.186, generator=3.67, feature=0.131, discriminator=1.22]\n", + "100%|██████| 2/2 [00:00<00:00, 4.25it/s, kld=72.7, perceptual=0.161, generator=3.64, feature=0.126, discriminator=1.28]" ] }, { @@ -2214,8 +2192,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.20it/s, kld=940, perceptual=0.264, generator=1.88, feature=0.0612, discriminator=3.97]\n", - "100%|██████| 2/2 [00:00<00:00, 4.26it/s, kld=580, perceptual=0.262, generator=1.55, feature=0.0873, discriminator=4.16]" + "100%|████| 15/15 [00:06<00:00, 2.16it/s, kld=83.2, perceptual=0.161, generator=3.66, feature=0.127, discriminator=1.24]\n", + "100%|████████| 2/2 [00:00<00:00, 4.27it/s, kld=76, perceptual=0.166, generator=3.65, feature=0.128, discriminator=1.27]" ] }, { @@ -2230,8 +2208,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=588, perceptual=0.275, generator=1.81, feature=0.0542, discriminator=3.85]\n", - "100%|██████| 2/2 [00:00<00:00, 3.94it/s, kld=549, perceptual=0.262, generator=1.94, feature=0.0645, discriminator=3.75]" + "100%|█████| 15/15 [00:06<00:00, 2.21it/s, kld=100, perceptual=0.173, generator=3.64, feature=0.128, discriminator=1.27]\n", + "100%|███████| 2/2 [00:00<00:00, 3.91it/s, kld=52.8, perceptual=0.16, generator=3.64, feature=0.122, discriminator=1.27]" ] }, { @@ -2246,8 +2224,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.18it/s, kld=658, perceptual=0.284, generator=1.73, feature=0.0515, discriminator=3.94]\n", - "100%|██████| 2/2 [00:00<00:00, 4.15it/s, kld=362, perceptual=0.271, generator=1.79, feature=0.0583, discriminator=3.94]" + "100%|█████| 15/15 [00:06<00:00, 2.19it/s, kld=105, perceptual=0.188, generator=3.63, feature=0.133, discriminator=1.29]\n", + "100%|██████| 2/2 [00:00<00:00, 4.30it/s, kld=66.9, perceptual=0.182, generator=3.66, feature=0.131, discriminator=1.22]" ] }, { @@ -2262,8 +2240,8 @@ "output_type": "stream", "text": [ "\n", - "100%|████| 15/15 [00:06<00:00, 2.23it/s, kld=808, perceptual=0.281, generator=1.83, feature=0.0545, discriminator=3.86]\n", - "100%|██████| 2/2 [00:00<00:00, 2.92it/s, kld=598, perceptual=0.266, generator=1.79, feature=0.0619, discriminator=3.89]\n" + "100%|██████| 15/15 [00:06<00:00, 2.24it/s, kld=107, perceptual=0.164, generator=3.64, feature=0.126, discriminator=1.3]\n", + "100%|███████| 2/2 [00:00<00:00, 3.99it/s, kld=63.3, perceptual=0.16, generator=3.66, feature=0.129, discriminator=1.25]\n" ] } ], @@ -2271,6 +2249,8 @@ "net = net.to(device)\n", "discriminator = discriminator.to(device)\n", "torch.autograd.set_detect_anomaly(True)\n", + "losses = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []}\n", + "losses_val = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []}\n", "for epoch in range(num_epochs):\n", " print(\"Epoch %d/%d\" %(epoch, num_epochs))\n", " train_bar = tqdm(enumerate(train_loader), total=len(train_loader), ncols=120)\n", @@ -2355,22 +2335,78 @@ " \"discriminator\": loss_d_r.item() + loss_g_f.item(),\n", " })\n", " if step == 0 and epoch%10==0:\n", - " picture_results(label, image, out)" + " picture_results(label, image, out)\n", + " for key, val in losses_epoch.items():\n", + " losses[key].append(val / len(train_loader))\n", + " for key, val in losses_epoch_val.items():\n", + " losses_val[key].append(val / len(val_loader))\n", + " " ] }, { "cell_type": "code", - "execution_count": null, - "id": "f579376b", + "execution_count": 28, + "id": "d79c8ced", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAPdCAYAAABFjSsGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xT1fsH8M/NbDrSdC8KZe8loxRkCQoIyhRFlIoKIkMQRUVkiQxFEeWLIPwEByiKAiIyxLKRDWXvUQqlmzadSZp7fn+cJmnoICltk7bP+/XqK8nNbXJyKHnuOec55wiMMQZCCCGEOCWJowtACCGEkOJRoCaEEEKcGAVqQgghxIlRoCaEEEKcGAVqQgghxIlRoCaEEEKcGAVqQgghxIlRoCaEEEKcGAVqQgghxIlRoCakGps1axYEQUBycnKx57zyyisICwt76GvdunULgiDg+++/L7sCEkIoUBNCCCHOjAI1IYQQ4sQoUBNCCCFOjAI1IcRKTEwM6tWrh2bNmiEhIaHIc9LS0vDKK6/A09MTGo0GkZGRSEtLq9iCElJNyBxdAEKI87h+/TqeeOIJeHt7Y+fOnfD19S10DmMM/fv3x4EDBzBmzBg0btwYGzduRGRkpANKTEjVR4GaEAIAuHTpEnr06IGQkBDs2LEDXl5eRZ63efNm7Nu3D5999hmmTJkCAHjzzTfRvXv3iiwuIdUGdX0TQnDu3Dl07doVYWFh+Pfff4sN0gCwdetWyGQyvPnmm+ZjUqkUEyZMqIiiElLtUKAmhOCZZ56Bh4cHduzYAbVaXeK5MTExCAoKgru7u9Xxhg0blmcRCam2KFATQjB48GBcv34da9eudXRRCCEPoDFqQggWLlwImUyGsWPHwsPDAy+++GKx59aqVQtRUVHIzMy0alVfvny5IopKSLVDLWpCCARBwIoVKzBkyBBERkZi8+bNxZ779NNPIy8vD8uWLTMfMxqNWLJkSUUUlZBqh1rUhBAAgEQiwZo1azBgwAAMHToUW7duxRNPPFHovGeeeQadOnXCBx98gFu3bqFJkybYsGED0tPTHVBqQqo+alETQszkcjl+//13dOjQAf3798eRI0cKnSORSLB582YMHz4ca9aswbRp0xASEoIffvjBASUmpOoTGGPM0YUghBBCSNGoRU0IIYQ4MQrUhBBCiBOjQE0IIYQ4MQrUhBBCiBOjQE0IIYQ4sSo7j1oURcTFxcHDwwOCIDi6OIQQQogZYwwZGRkIDg6GRFJym7nKBuq4uDiEhoY6uhiEEEJIsWJjY1GjRo0Sz6mygdrDwwMAr4SH7QZECCGEVCStVovQ0FBzrCpJlQ3Upu5utVpNgZoQQohTsmVolpLJCCGEECdGgZqUn6Q7wJG/AVqllhBCSo0CNSk/X74OTO8HXDzs6JIQQkilRYGalJ+EGH6beNux5SCEkEqMAjUpP9lafpuT4dhyEEJIJUaBmpSfrHR+m02BmhBCSosCNSkfRiOQm8Xvm1rWhBBC7EaBmpSPgsGZur4JIaTUKFCT8lEwUFPXNyGElBoFalI+qEVNCCFlwu5AvW/fPjzzzDMIDg6GIAjYtGmT1fOMMcyYMQNBQUFQqVTo2bMnrl69anVOamoqhg8fDrVaDY1Gg9deew2ZmZlW55w5cwadO3eGi4sLQkND8dlnn9n/6YjjmBLJAGpRE0LII7A7UGdlZaFly5ZYunRpkc9/9tln+Prrr7F8+XIcOXIEbm5u6NWrF3Jzc83nDB8+HOfPn8fOnTuxZcsW7Nu3D6NHjzY/r9Vq8dRTT6FWrVo4ceIEFi5ciFmzZmHFihWl+IjEIahFTQghZYM9AgBs48aN5seiKLLAwEC2cOFC87G0tDSmVCrZL7/8whhj7MKFCwwAO3bsmPmcbdu2MUEQ2N27dxljjH3zzTfMy8uL6XQ68znvv/8+a9iwYbFlyc3NZenp6eaf2NhYBoClp6c/ykckpbXrF8aeBP958zFHl4YQQpxKenq6zTGqTMeob968ifj4ePTs2dN8zNPTE+Hh4Th06BAA4NChQ9BoNGjbtq35nJ49e0IikeDIkSPmc7p06QKFQmE+p1evXrh8+TLu379f5HvPnz8fnp6e5h/ai9rBrLq+aXoWIYSUVpkG6vj4eABAQECA1fGAgADzc/Hx8fD397d6XiaTwdvb2+qcol6j4Hs8aOrUqUhPTzf/xMbGPvoHIqVHXd+EEFImqsx+1EqlEkql0tHFICaUTEYIIWWiTFvUgYGBAICEhASr4wkJCebnAgMDkZiYaPV8Xl4eUlNTrc4p6jUKvgdxcgVb1LpsvlIZIYQQu5VpoK5duzYCAwMRFRVlPqbVanHkyBFEREQAACIiIpCWloYTJ06Yz9m1axdEUUR4eLj5nH379sFgMJjP2blzJxo2bAgvL6+yLDIpLw+OS+dmFn0eIYSQEtkdqDMzMxEdHY3o6GgAPIEsOjoat2/fhiAImDRpEj755BNs3rwZZ8+exYgRIxAcHIwBAwYAABo3bozevXtj1KhROHr0KA4ePIjx48fjhRdeQHBwMADgxRdfhEKhwGuvvYbz58/j119/xVdffYXJkyeX2Qcn5axg1zdA3d+EEFJa9qaU7969mwEo9BMZGckY41O0pk+fzgICAphSqWQ9evRgly9ftnqNlJQUNmzYMObu7s7UajUbOXIky8jIsDrn9OnT7PHHH2dKpZKFhISwBQsW2FVOe1LfSTmY8oRletaTYOzWeUeXiBBCnIY9MUpgjDEHXieUG61WC09PT6Snp0OtVju6ONXP+HbAleOWx18dBhqHO648hBDiROyJUbTWNykfD3Z90xQtQggpFQrUpHyYkslc3PIfU6AmhJDSoEBNyocpUPvW4LfUoiaEkFKhQE3KXp4B0OXw+74h/JYCNSGElAoFalL2Cs6hNgVq6vomhJBSoUBNyp4pkUzpCrjnL1BDG3MQQkipUKAmZc8UlN08AZUHv09d34QQUioUqEnZy8oP1K5qwDU/UFPXNyGElAoFalL2TF3fbmpqURNCyCOiQE3Knqnr29WTWtSEEPKIKFCTsmceo6YWNSGEPCoK1KTsmbu+Pfk4NUAtakIIKSUK1KTsZReVTEbTswghpDQoUJOyZ2pRu1LXNyGEPCoK1KTsFZxHXTCZrGruqEoIIeWKAjUpewW7vk0tatEI6HMdVyZCCKmkKFCTsmfV9e1uOU4JZYQQYjcK1KTsFez6lkgse1LTODUhhNiNAjUpewW7vgveUqAmhBC7UaAmZa9g1zdgSSjLoilahBBiLwrUpOwV7PoGaIoWIYQ8AgrUpfHDDGDhKzTdqCj6XMCg5/fdHmhRUzIZIYTYjQK1vUQR+GUesPMHIPaSo0vjfAp2b7vkZ3xTi5oQQkqNArW9cjL4nGAASIx1bFmckTmRzAOQSvl9FbWoCSGktGSOLkClk3Hfcj+JAnUhBRPJdDmANsXS9U0takIIsRu1qO2VlWa5T4G6sIKJZNP7AS/XsoxZU6AmhBC7UYvaXtSiLpkpUMuVQPQuft/di9/S9CxCCLEbtajtlUmBukSmru+cTH7bvAvgH5p/zM4WdVY6kGcou7IRQkglRIHaXtSiLpmpRZ2WyG+fGF66rG9tCjC8JvDBk2VbPkIIqWSo69teD7aoGQMEwXHlcTamQG1qWcecB2SK/OfsCNQ3z/LXOn8QMBotGeSEEFLNUIvaXplplvu5WdaPiSVAm2z6Grhxmt+3p0WdfJffGvMsrXNCCKmGKFDbq2CLGqDu7wcVDNSte/JbfQ6/tadFnRJnuZ9859HLRQghlRQFantRoC6ZNoXfengDPV/m93Oz+W22HVnfKXct95MoUBNCqi8K1PbKoEBdIlPr+bUFgE8wv5+bnwFemq5vgOqYEFKtUaC2l6lF7RvCbymIWDPNlXb34q3qgsd0OXzM2RYFW9TU9U0IqcYoUNvLlDxWuwW/pUBtcf00kJo/tuyqtix0kl1g3No0v/phkilQE0IIQIHafqYWdZ38QJ1423FlcTa/fQbEXef33TwBdX6LWpcDSPNnAtqSUCaK1slkdDFECKnGKFDbgzFLoKYWtTXGgNO7LI/d1LxV/eUB4P8u2LfoSXqSdRc5JZMRQqoxWvDEHrnZliUtTYE6+Q5vAUqq+TVP3DUgNd7y2FXNF4Jp2ok/dlPzixxbWtSmbm+JlG8pmnKX6pgQUm2V+TffrFmzIAiC1U+jRo3Mz+fm5mLcuHHw8fGBu7s7Bg8ejISEBKvXuH37Nvr27QtXV1f4+/tjypQpyMuzMQmpPJla01IZUKMBD0QGPW8BVndn9lo/dvO0fmzek9qGKVqmQF2rCa/jPAPVMSGk2iqXFnXTpk3x77//Wt5EZnmbt99+G3///TfWr18PT09PjB8/HoMGDcLBgwcBAEajEX379kVgYCD+++8/3Lt3DyNGjIBcLse8efPKo7i2MwVqdw0gVwBegUDqPd797RXg0KI53Nl9lvuCALi48ft7fwNiLvDWMWBb17dpfDogDEhPpjomhFRr5dKXKJPJEBgYaP7x9fUFAKSnp+O7777DokWL8MQTT6BNmzZYvXo1/vvvPxw+fBgA8M8//+DChQtYs2YNWrVqhT59+mDOnDlYunQp9Hp9eRTXdqaMb1M2s1/+rlCJNE5tFahN3d4AsGM1sGY278IGbOv6Nk3N8g2x1DGNUxNCqqlyCdRXr15FcHAw6tSpg+HDh+P2bZ4ZfeLECRgMBvTs2dN8bqNGjVCzZk0cOnQIAHDo0CE0b94cAQGW1lOvXr2g1Wpx/vz5Yt9Tp9NBq9Va/ZQ5c4v6gUBd3RPKEmL4j6nVXLDb2zSXWsj/U7OlRW3q+vYJAfxq5B+jQE0IqZ7KPFCHh4fj+++/x/bt27Fs2TLcvHkTnTt3RkZGBuLj46FQKKDRaKx+JyAgAPHxPBEpPj7eKkibnjc9V5z58+fD09PT/BMaGlq2HwywrEomCMCBDbToiYl3EPD5XmDAW/yxq9rynEf+RY2phW1vi9o3P1BX9zomhFRbZT5G3adPH/P9Fi1aIDw8HLVq1cJvv/0GlUpV1m9nNnXqVEyePNn8WKvVln2wNrWor50CPh7Mx6gBCiJyBdCiC6BNBjZ8+UCgzm9RM5Hf2tuiNq0dTl3fhJBqqtznu2g0GjRo0ADXrl1DYGAg9Ho90tLSrM5JSEhAYCAPeoGBgYWywE2PTecURalUQq1WW/2UOVOgzssfK9flbzZR3QO1iSmju2DXt2mYQLQjUBfVoqaub0JINVXugTozMxPXr19HUFAQ2rRpA7lcjqioKPPzly9fxu3btxEREQEAiIiIwNmzZ5GYaNmDeOfOnVCr1WjSpEl5F7dkBfeedlUDoxfy+9U5UKfGA0sn8KEA0xaXRbWoTfPPsx6SO6DLsQwx+NIYNSGElHmgfvfdd7F3717cunUL//33HwYOHAipVIphw4bB09MTr732GiZPnozdu3fjxIkTGDlyJCIiItChQwcAwFNPPYUmTZrg5ZdfxunTp7Fjxw589NFHGDduHJRKZVkX1z4Ft7j0CwXa9+X3k+8CGxYDZ/c7pFgOdWYv8Of/gJ8/sQThogK1QcdvH9aiNnV7K115y7xgi9rUKieEkGqkzAP1nTt3MGzYMDRs2BBDhw6Fj48PDh8+DD8/PwDAl19+iX79+mHw4MHo0qULAgMDsWHDBvPvS6VSbNmyBVKpFBEREXjppZcwYsQIfPzxx2VdVPsV3OLSN4SPUUtlfPx1+dvAtpWOK5ujmKZlNe9SdNd3007AlweB/hP444clk5nmUPsE8wQ0061Bz+dUE0JINVPmyWTr1q0r8XkXFxcsXboUS5cuLfacWrVqYevWrWVdtEdXsEXtEwxIpTxgJ8TwY0e28C5emdwx5XME04pkzbsAx7bz+wVb1GpvoGlHy8piD2tRFxyfBvIXlgngXezJdwAv/7IrOyGEVAK0eLI9TIH63e+B4TP4fdNcalcP3uI+d8AhRXOI9GQgJn9ue7PORbeoTWzdlKNgxrcJTdEihFRjFKjtYd6LujkQVJvfNwXqGvnrmf+3qaJL5Timi5JaTQCNHxB7kT/2CbKcwxiw8Stgzy/88cO6vpMfaFEDljqmhDJCSDVEgdoeD65MBliCiHf+1LH/NvHgVB2czw/UzbsAKfeAG2f4eHLL7pZzBAFYNRXY9n/8sb1d30CBFjUFakJI9UOB2lZ6HZ86BAB/fwvcz58+ZgrUgoRnKifeBq5HO6SIFS7+Jr+t0xI4uZPfr98G8PS1Ps+U+Q3w7vGSLmSK6vqmKVqEkGqMArWtCiaS/fapZbqRKVCnxvGWpUQKzBoAfDm66resp/8O/JYIdH8ROL6DH2vzVOHzCvZAiKLlgqcoRbWoaU11Qkg1Vi7bXFZJBQM1YNly0RRErp607BCVeJtP1WrVHeg+rOLKWNEEgY9Ni6KlRV1UoC7YogZ497eLa+HzRNEyPauorm9qURNCqiFqUduq4BxqTz8+bQjgeyZLJJYg3aIr0O0Ffn/ZJOvfq6punObTr1TuQOOIws+bWtTy/AVrikso06ZYVjDzLpCQVnCMuqr3UhBCyAOoRW2rrDTLfZ9gy321N/D+Gj6XuuvzPBvcoAeunwJiLwP/9z7w9ooKLy4AHvT+WATIFMDgt8v2te9e5Z+tdnNAkb/ZSsvulguYgtT5LWq5gg8ZPNg7YWLq9tb4W89FN7WuDToezB8cAyeEkCqMArWtMh5Y7KSggt3bl44CX78JKPK7dretBJ4cATR7vPzLWFBqPPDJUOBc/rKmnQcD/jXL7vVvXwIObuQXKKZ500V1ewOWFrWbhremb54FGrYrfF5RU7MAy6In9xP4ODUFakJINUJd37Z6cFWy4qh9gGsngZhzwFMj+bGv3uCt7Ipy7gAwtrUlSAPAhUNl+x6J+aux+dWwTNNq26voc/uNAb48ALR/mj++crzo84rK+DahKVqEkGqKArWtSmpRFxRUhydP5RmAHi/xbtyYC8Dvn5d/GQG+uMi73XiLulYToMMz/PjFMg7UCbf4rSDwzxoQBgTXK/rckPp8ze8W3fjjqyeKPq+ojG8TSigjhFRTFKhtZWpR936dtxCLIwh8LjEAxF0DRuVvhfn3t+VbPgAwGoHlk3li22NPAl8fsSS2lXWL2rS+uekCpm0v/tlL0iC/Xm6ctiSNFVRSi9qfpmgRQqonCtS2MiWTBdUpuUUNAPUf47dXTwAd+/P7ibfLf/ens/v4Tl4AcO8GvzVlYV8/Behzy+69TF3fcdf5bXHj0wBftWzjV8Dxf/iGHQYd72V4UHFj1AC1qAkh1RYFaluZWo4eXiWfB1ha1FdP8ESrkPr5j0+WT9lMDv1puX/vOrDiXSAwjCdi5RmK73IuDVOLOuUuX+Sl1RPFn5tyl09V+3WBdd0UdR5QcqCmFjUhpJqhQG2rjFR+e/LfklfWAizB6NZZnkRWUnAqS9L8qVG1W/Dbv78Fjm61tKrLqvtbr7Nes7tROOCuKf58U9Z35n1LXTyYUMYYn/IFAN5F9FiE5m96cvEIkJleqmITQkhlRIHaVqb9lA9ufPh+04G1+fSjxwfzta0rKlDH5Qe63q8Cgyfnv+dJoHEHfr+sEsoUSmBzFtBpIH/82JMln29amSw3i68LDhSui0tHLF3zN6Ktn0u8zQO1qxrQ5/C54YQQUk3QPGpbafNb1B7egPQh1SYIwJKjlscVFahvnuG3tVsAfd8AOg4AmncGzuzjxy8c4i3XhyV92UIQLK3i5l1KPtfNk5/PGBBclx8zJZSZLno2fm05v+vzlvuMAfNe4OPX+vyejH9WA5GzH/0zEEJIJUAtalvlaPmtaTtLe5iSyxJu8ZW1ysPZ/ZYEsjotAIULD9IA0KAtv7hIvVd2Y7yJt/lrSaS867skEomla9xVzQP3gwllx7fz28eetF7dbNfP/AJDmwJ0y19YJikWuFLOFz2EEOIkKFDbwphnGZcuaupQcUTRsnKXaY5xeSWU/fM9v1Wq+KIrJozxoFqjAX9cFuPUfy0DPh7M79drDajcHv47pnHqrHSgXv6Fi6lFfvuiZfrbkHf4rUEPHN0G/N97/PGwacBTr1heb6uDlmUlhJAKRoHaFplplvsBNi7DmRIHDPQEXm3Iu3jLu/v7wn/8NrC29fF184HXG/OLDaBsxqnPH7QE2aY2Lo1qGqfOSC1cF79+ym8VLnyaV8Z94K1w4KOneT0G1eFrlTfuYBl22LUWyMl89M9CCCFOjgK1LQouH2qaJvQw3kG8W9jUxVtwbnVZMxot85kbPtAN3Sg/kSwtkd+WRYvatCoZYPsa5uP+B3x5kJ//YKA+8je/bdqJj2W7a6zXJR/9BQ/iSpXl8+VmAXt/e5RPQQghlQIFalvYunxoQYJg6eK9eqJ8W9S3zgLG/JW+Wvewfq5JBN9e0tQrUBYLn8Tfstxv2sm232kcDjTtyINwg7b82I3TfKnTzPxEvSHv8ltBACat5Oc9GWlZNAYAWhRIXNu2srSfgBBCKg0K1LYwBbnQhkCnQbb/XsHgbAra8TctGeRl5ewBy/26rayfU6p4sAYAV49HX/gkz8CT0gAgoFbpkuuC61oSytZ8zMfy67UG2vW2nOPlD/zvGDDle+ss9VZPAA3aAYIEuHgYuHmu9J+FEEIqAQrUtjB1fXsFWvZWtkXBQO3hxcdaAb67Vlk6+Q+/lUgtSWMFtcxfNUzlwW8fpfs76Y5lmdJmD5mWVdC1U3wZ0aNbrXsbTElh3V+07XUe6wn87yjQaQB//OMMvgCLMzv/H/BiDWDLcv5Yr+PbhDLm2HIRQioFCtS2MAVqdxuWDy2o4CYUxrzy6/6+dorfBoYVvRhL6/xAnZW/otejJJQVHJ82Tf+yxakovozo7l/4Y1NdiEZ+22WofeUYOIkH/IMbgcmPW5Y0dTaiCCwdz+eBr5wCfNALGOzNE/yWT3Z06QghlQAFaluY5h7bGwyC6vLuZn1ufkJZfnAq6xZ171f5rSlx7EEN2gFKV56ABfDNO7K0pXsvU1IaYPv4NGCd9Q1Y6gLgFxdFre9dkjotgAnf8Ne9chwY+xhwbDv/Nzq0GVgzB/h6LM9Qd6S9v1oupHIyee+HLps/3rjYkkhHCCHFoJXJbJF4m9+alui0lUQCPDMWkMr5mGx5tahvnee3pu7kB8kVwJgvAU0A8M143n29eDTw4S/2r1Jmmv7l7mVZf9sWDwZqU0IZADRoD0iltr9W9G7gg55AjYbANyeBOUN4sJ7Wp/C5W5bxlc5GfWadSW6vpDu8q9q03aatNAF8PN00XBBUF5i1Edi+igfqz18Blp8BfIJKXzZCSJVGLWpb3E/gt26e9v/uawuAV+bwxCtTII27bj03+1GZlg6t06L4c/qOBjr1B6b9xuci7/21dHtkm1qozR7nFyK2Mu06Zsqg9/SzzIl+poT9vYtSpyXvUr59ka/G1r4v8PRoy/MyBdDlOaDHS/xCZO+vfD77qg+B03v4tpsFx4ez0vnFTuzlwu+VZ+AJb5F1gFcbAPt+t72caUnAwkgepNv14TkE967z29cW8M+RnsyDtSjaVweEkGqDArUtTPtIe/iUfN7DeHhZWqRlsUKZLgeY8oRl1ynThhclaRLBgwTAx4xN3bK2Op+fYW5Ptzdg3aI2GoH5w/i4vXcQ37zEHmpvoHZzfn/qU8Ca2UCtpsB3l3mrOU8PZGcA737PW9wtuvLhh3XzgSndgWHBwEAND94D1Pz+6GbAa414F/pfy3jwvnYKGN8O+HEmD9j6XOCT54DfFj48ESwnG5g3jO+fXaMB8OE6Ps0svB8fl1coeY+GUgWc+AfYsNi+OiCkoDN7+YWrs7t8DJg1EPhmIu+lIjahQG0LUzKZxr90v88Y8Ms8YO7zQN3W/NilI3yZTKOx9Nm///c+cHq3pWwav5LPP7OPtyrb9AI6PMOnR30y1PbxasYsY6qmDHZbmRLxMlL5PtnHtvEg9fFmfmsv00Ygxjw+tavny0BoA2D2n/z1jm8HVn8I+IXysewZf/AgGVyP9wRka4E7V3hAB/hFlFzBg/OSscALQcCE9jwRUO0DvL8G6D+Bn/t/7wFfv2lZ7a1g/ehz+YXd+08A0VF8Dvv0PwA3Ne/NmPOX5SKjZmNgzGJ+f9UHPOGOVE/aVL5ev9Fo/++ePwi82w2Y1JH3/mVnAHt+5UHRWSTdAT59mf+f+m8TsOlr4JW6PI8kkfaYfxiBsao5R0Sr1cLT0xPp6elQq9WP9mKDfYGMFB4M3vvR/t+/fQkY04K3ylp0A87sKXyOq5ovBuLuBXgFAM+OAyKeLf41j223HpNt8xQwf0fJ5ZjZnydavf4p0Pt1YGxrPv5e7zGgz+u8ZetVwsVI7BXgtYb8/qrLRU8FK05uNvDsA2uCT/sV6GpntreJ6fPXbg4s3G29vvmeX/mOWyZunsDGNMvjdZ8CybH8czftxBPZVO48wP77E19IxdQ66TgAmLic/5sAfIrZ8rd5UHbX8G5s0ch/dDmFg/eQd4DRnxf/ORjjY+wHNvALiJdmAcM+LH7MnjF+MZGt5cMPD9vJLTuD50SkJ/GLCH0u73Go1dS2369IjPFcA5UHX7OgLHZ5qwzirgNTuvFgVqMBX/in5wje62KLKd35kA4A1GrCZxiYZnh0HAC8Oo9fFDqC0cgbKb/Ot+yXoFDx5NaM/A2KZHK+lv9LM8r+31yXwxtati5UVYHsiVEUqG3Rz5VvsTjsQ2Dk3NK9xj8/8LFIgC+HacvqYBH9gXFfF06CSksC3mjOr55rNwdungWem8ITpkqy8Sve3V2/Df8yuH8P+G4qb1kDPFC07M6TrzoNBDx9Lb977yZvSe7PH6PdZrDvS54xPofa3QtIucvHlp9/3/bfL8rVk/wLqKgW+eqPgF/y/628A4HV1/jmIYwBw0P5lxnALxRe/4znEBQs64bFwLeTeQDv8hxfIa1ZZ15H//0JLBhuyaIvTlAd4Ptrhb98EmL4awyYwJ/LzQaWTgB2rOLPt+4JfLCGXxwwxoPtzTPA/j+AgxssyY1eAcATw3nZajXl3exx13nL7NoJXse3LxTfY+Ppy//GHh/EF8rR+Bf/b8oYEHeN98ok3OLz2Zs+bl8SYHF0OUDUGp5cZ9pRzS8UaNuL9/6ENuJl9fR1rguL4hj0fH2AqDU8UA6axP/PF+X2JT698MFd9bwDebBW+/CgplDx6ZfNuxSegrnrZ+DLUZbZBAD/e06K5bkPEgnQ61Xg5VkPn12hz+V/N+nJvN4fvHDPTOMLDd1PAELq8XPUxQwJ5mbz/yf/beKPH/zee3kWb7SYLjJ6jgD6jQH+XMK/gwquSGgvfS6weSm/SMhIBQLC+N9sqx58dUPvoJIvCnKy+AwXbTLPp/GvaV9Ojg0oUKOMA/VzfvwPd8oPwJMjSv86300Ffl3Ak52ad+YBds5fgG8okJMB/L0C+OML/h/RaORJSEpX/gfdfzwPSIzxlvHhv3ggMBp419F7PwE9Xyr5/W+e4wH+Qf41+R9jwWx0QcLH0/uM4v+ZTuywfOG7a4AN9wu/jrNJuce7tAt+SeYZ+BfogQ3A0b/5Z5Irecu36/OWhLw8A+9ONG12AvDzXD14i+/NxUBgHR6ojm3n49/pSfw8dw0waDLfSETlbl2mnExgaAD/Ul24G2jZzfLczh95l7oum/+eTAFkpRVONHNx438LptwJgP/N5BmKrgf/mvzfUuECyPPr4tx+Swa+iUTCs9S9g3hXvdKVt9wTY3m5Mx4MJkH8QqfTQD6k4OYFRP3Il5it/xi/oDj1L//SbNmd9/o0bMd7IZLu8Nbz8R3AgfWW1fpc3HivhOni8UEeXoCbhtexm4YH767P84D4sIsGY16BgCjkXyRl8ZX2Uu/xCxCJFKjZBAipzy8WSurZuJ/A/ybcNfy1RJGvP//9NMuWswAPmq/OB7q9YB0cbp7lreEHg7RcWfznV/vwnq+uzwP343kX8qUj1uf4hQKrrgAJN/l3zqE/+XGFC19/4Pn3LdvOpifzQH/oTz4UlHLX+sLOJ5gPLWn8eVd6zPnCF36evkD9trxXLuJZ/rd4PwGY/gxw5Riva+T/jlcA0HcM/53+4/mxbf8HLH7DMjPCZORc4IWpljqLuQDs/IF39QfW5jk5dVryiwWplJeLMZ7z8eNMfuFaHE8//reWkcr/puq05L0QSbF8WeOCFz0A/78Q1gwIawo06cg/6yOiQI0yDtQ5+f+ZvQMLf/HaQxR5N+fBjZZjU38Buud30679BPhhuuU570D+RwPwZKxer/L/qKum8i9V0xe4py+w4pyle7Ykvy3kC55kpvEgkBIHfLKVf7Heu8G/aPb9VnSSmSDw/wjNuwJf7ClFBTiZ66eB5ZMsV/QA8MtdSzcZY/xLYecPvF6yC4zlL9jJr9ABYNt3wJev8y72QW8DAydavgiL8unL/GJBEHiuwMBJPGDrcniw+GQo/0IsyMUVaNuHD7+0eYq3LI9t42U7/BcP0qZ/H4C3wPQ5vOdk9EJ+LM/AV6Vr3pnf3/wN7+a/c9my8ExJJBK+KUpgGH/v0sxccPPkAcM0k8IkoBbQ/y2gx3B+IXR2Hw/ip3fx3o+H7eMeXI9fbD0Zyevg3g0g/gYPPjfP8vXwYy4UHwCLIlcAAbX5BXFgbd4qS0/i/zduRFsulBQuPNFUKrX0dmj8eWDe/wcPfgAfaglryi+C5S7A/vU8UGj8eS9Km6d4foQumx9r0Y1fkOlz+AXFpaOWi8EHy9n1Bb4N7Nzn+TmvfwoMzd8i9vxBns9imrHh4cXr+tZZy9+O1esp+feNaangBwWE8efTkwrvb+/px2dg7P6ZL5ds+p5yceO9fkPeKfwdenQb8NkI3noF+GfW5fD6GvgWnymy+xfg8tES/7kK8Qrkwb7zYH4xsvMH/rox52ybZSFX8u/blDjr4489CSz4x76yFIECNco4UJel3Gx+Feyq5sGxTkvrrlt9Lv8CXfku/8IJa8a/EIu7OuzxEu+6Le08XMYKdwHt/JFPK4LAr6Zb9+BfSv+s5s/3HAG890Pp3s/ZMMa7oVe+y790PviZ/8d+kF7HWzDZGbz3o2ZjSzC+n8ADQ62mvCX6MPcTgC9e5UMBJhp/Pr64cDfvOr0eDbzdqfCYd52WQHhf69b/rXM8+z89iX8hvr2SB4m4a/yx6cLD9O/asB3v1iu4gE/9NsCcLfxLadda4I8vATDewgyqC9y9ws+r1RT49gwv17aVwJZvgdhLlk1hTKRyoO1TPABBANbN4y2WBwOlixvfgKXrc/ziY/Yg/gXf42XgiRf5xeqeX4HfPwc++o3//7h7ja8D0HEADzp/L7dM+yupNVoUuYL3DHj6AlcK9CgVvBAuTsELIxNXD2Do+3xIYkRtHsBdPfj/3wf/LQGgYXt+oeyZ3318/TQwawC/YHswJ8aYxy8q9/7KLwByMvnfw3s/8L8dgP8b7/0VGLfEOuGTMZ6fsnKKZZaIiSlX488lRX9GF3cenHq8xDfWuXUeeL8H/w5r3YMnyJ47wHtPCraKg+sC/cby7vbWPayH0kwy0/iWtneu8KCYZ7C+IC5IIuWv03kI/5u/dJT/XWam8XKavscK1nOtJrw1bNqWd+42Pgsk5gK/2LxynPckmr5fW3Tj+wkMmsQvKLQpwIg6/P88ANRqBjz3LvBUZNFltAMFajhxoLbVf38C81/kV9c1GvIr5C3LeCsD4F+YE76x3k3qUV08Avy3Edi0hL/vy7OAl2fy5xjji3RsW8mndxXssq0KjEbecnmUHhN73b7EL9p2/sDrW64E1ifxL3ZjHnDyXx5s717l3ZuXj1oCw4C3gLFf8fsp9/iUs1pNgem/AzWLWYjm1095l6ApkLl68C+9ToP4l2hj05aoScDI+kD7p4GR83gLOno3D45D3wOeHsXP2/8H7yECeEu535t8XFmu5F/+pmSoi0eAiQ+smicI/GJj+HRLkDHo+TCT6YtaIuGf6eZZ/viVT4AXp1mGkAC+RnyTDnzs/FRUgeV+NfwCI/M+/6L2rcFb3VlpPM9Cn8u7ML88YPmCv3MF2PClZU32pp1475Gbmpcp/iZvkZ3dzwNW08eBv5ZaWtGNOwAzNvCL5otHgEkRxecHNO3E673P64Uv7rQpfGw3cg6/qAL4xcm5/fwzBNTi/x6fv8I/5483LReNpvczfaavxvDvDBc3fiFaMAhKpLxnqFV3/nuxl4HoXfzn8lHeojYFveHTgciP+f2EGGBcm6J7Odw8eb37BAHvrH74TJTrp4GFI/jqia9/xv+91s7hrWtR5IFfIuW9AaYEuQc1exxYtN/y+f/6hg9tndlr6SmSynjv1QtTLXVqIor8QnD1NP55BQFYftoyO4Mx3lC5d533VNW1YRqsDShQowoEaoBf4c/ox784V57nmbB3r/KrwfZPF72ud2ndvQq80cKS7NG6JzBve9kkC5GSaVP5srL1Hit505e0JP6le/RvnvxlSsbL0gI/fwK8NJMnzJUkNZ63uDQBfDzRxbX493rwS1afy8fNTUk1MRd4gmJQHR5wiksqup/Ap/XFnOe/4xPEu+RNAbogbQofZoj6ybJ5jETKA/SLH1nyN9bNB36aWbjV6+nHZySYFtiZ3Jm39h4U1oznX5gS+gr6dw3w1RuWccrRXwBD8tdlXzOHbwRTkH9Nvt96xDPWx3U5vLfh1nn+2VPu8oDUrjcPuCUlMz3Y0/XVmKIXKBo5Dxg2tfjXmd7PeplaSX7uSWhjniTZfVjx3yOiyANU6j3+dxJS3/q5K8d51/nRv3lA7Pcm734vLnGutBgD3unCL5RS4vhjVw+eS1CrKf+/MGBC4d/LuM+naeZk8qTJkma0APzzLBnHe7dGLSz+greMUKBGFQnUAP/DPLqN7xZV3BdhWWCMZx5vXsq7G5dF2zbmTUh5uXsVOPQX772pX8TyuOcO8B4Jg45fQMjkfHx7UoGAdvJfHiTTk/lFgFwBdBsGNGpfcqC8dZ4PExh0POfAlDyUk8lbd9G7eHJVkwjghQ8ffoH0qNZ+wuflJ8TwlrExj48VrzhX8nvfuwmk5c+t9gnmFwi2TvtyRnkGHoA1fpV++h4FalShQF2RjHnAwU38S+xR1sUmhJQfo5HnS7h7Fd8jQpyePTGqEkxKJBVGKgO6DHF0KQghJZFK7d9tjlRqtIQoIYQQ4sQoUBNCCCFOrMp2fZuG3rVaGzecIIQQQiqIKTbZkiZWZQN1RgafoB4aGurgkhBCCCFFy8jIgKenZ4nnVNmsb1EUERcXBw8PDwiPmMav1WoRGhqK2NhYyiC3A9Vb6VC9lQ7VW+lQvZXeo9QdYwwZGRkIDg6G5CEbflTZFrVEIkGNGjXK9DXVajX9IZcC1VvpUL2VDtVb6VC9lV5p6+5hLWkTSiYjhBBCnBgFakIIIcSJUaC2gVKpxMyZM6FUVuKl9xyA6q10qN5Kh+qtdKjeSq+i6q7KJpMRQgghVQG1qAkhhBAnRoGaEEIIcWIUqAkhhBAnRoGaEEIIcWIUqG2wdOlShIWFwcXFBeHh4Th69Kiji+RU5s+fj3bt2sHDwwP+/v4YMGAALl++bHVObm4uxo0bBx8fH7i7u2Pw4MFISEhwUImdz4IFCyAIAiZNmmQ+RnVWvLt37+Kll16Cj48PVCoVmjdvjuPHj5ufZ4xhxowZCAoKgkqlQs+ePXH16lUHltjxjEYjpk+fjtq1a0OlUqFu3bqYM2eO1VrTVG/Avn378MwzzyA4OBiCIGDTpk1Wz9tSR6mpqRg+fDjUajU0Gg1ee+01ZGZmlr5QjJRo3bp1TKFQsFWrVrHz58+zUaNGMY1GwxISEhxdNKfRq1cvtnr1anbu3DkWHR3Nnn76aVazZk2WmZlpPmfMmDEsNDSURUVFsePHj7MOHTqwjh07OrDUzuPo0aMsLCyMtWjRgk2cONF8nOqsaKmpqaxWrVrslVdeYUeOHGE3btxgO3bsYNeuXTOfs2DBAubp6ck2bdrETp8+zZ599llWu3ZtlpOT48CSO9bcuXOZj48P27JlC7t58yZbv349c3d3Z1999ZX5HKo3xrZu3cqmTZvGNmzYwACwjRs3Wj1vSx317t2btWzZkh0+fJjt37+f1atXjw0bNqzUZaJA/RDt27dn48aNMz82Go0sODiYzZ8/34Glcm6JiYkMANu7dy9jjLG0tDQml8vZ+vXrzedcvHiRAWCHDh1yVDGdQkZGBqtfvz7buXMn69q1qzlQU50V7/3332ePP/54sc+LosgCAwPZwoULzcfS0tKYUqlkv/zyS0UU0Sn17duXvfrqq1bHBg0axIYPH84Yo3oryoOB2pY6unDhAgPAjh07Zj5n27ZtTBAEdvfu3VKVg7q+S6DX63HixAn07NnTfEwikaBnz544dOiQA0vm3NLT0wEA3t7eAIATJ07AYDBY1WOjRo1Qs2bNal+P48aNQ9++fa3qBqA6K8nmzZvRtm1bPPfcc/D390fr1q2xcuVK8/M3b95EfHy8Vd15enoiPDy8Wtddx44dERUVhStXrgAATp8+jQMHDqBPnz4AqN5sYUsdHTp0CBqNBm3btjWf07NnT0gkEhw5cqRU71tlN+UoC8nJyTAajQgICLA6HhAQgEuXLjmoVM5NFEVMmjQJnTp1QrNmzQAA8fHxUCgU0Gg0VucGBAQgPj7eAaV0DuvWrcPJkydx7NixQs9RnRXvxo0bWLZsGSZPnowPP/wQx44dw1tvvQWFQoHIyEhz/RT1/7Y6190HH3wArVaLRo0aQSqVwmg0Yu7cuRg+fDgAUL3ZwJY6io+Ph7+/v9XzMpkM3t7epa5HCtSkTI0bNw7nzp3DgQMHHF0UpxYbG4uJEydi586dcHFxcXRxKhVRFNG2bVvMmzcPANC6dWucO3cOy5cvR2RkpINL57x+++03rF27Fj///DOaNm2K6OhoTJo0CcHBwVRvTo66vkvg6+sLqVRaKNM2ISEBgYGBDiqV8xo/fjy2bNmC3bt3W20xGhgYCL1ej7S0NKvzq3M9njhxAomJiXjssccgk8kgk8mwd+9efP3115DJZAgICKA6K0ZQUBCaNGlidaxx48a4ffs2AJjrh/7fWpsyZQo++OADvPDCC2jevDlefvllvP3225g/fz4Aqjdb2FJHgYGBSExMtHo+Ly8Pqamppa5HCtQlUCgUaNOmDaKioszHRFFEVFQUIiIiHFgy58IYw/jx47Fx40bs2rULtWvXtnq+TZs2kMvlVvV4+fJl3L59u9rWY48ePXD27FlER0ebf9q2bYvhw4eb71OdFa1Tp06Fpv9duXIFtWrVAgDUrl0bgYGBVnWn1Wpx5MiRal132dnZkEisv/KlUilEUQRA9WYLW+ooIiICaWlpOHHihPmcXbt2QRRFhIeHl+6NS5WCVo2sW7eOKZVK9v3337MLFy6w0aNHM41Gw+Lj4x1dNKfx5ptvMk9PT7Znzx5279498092drb5nDFjxrCaNWuyXbt2sePHj7OIiAgWERHhwFI7n4JZ34xRnRXn6NGjTCaTsblz57KrV6+ytWvXMldXV7ZmzRrzOQsWLGAajYb9+eef7MyZM6x///7VbprRgyIjI1lISIh5etaGDRuYr68ve++998znUL3xmRinTp1ip06dYgDYokWL2KlTp1hMTAxjzLY66t27N2vdujU7cuQIO3DgAKtfvz5NzypvS5YsYTVr1mQKhYK1b9+eHT582NFFcioAivxZvXq1+ZycnBw2duxY5uXlxVxdXdnAgQPZvXv3HFdoJ/RgoKY6K95ff/3FmjVrxpRKJWvUqBFbsWKF1fOiKLLp06ezgIAAplQqWY8ePdjly5cdVFrnoNVq2cSJE1nNmjWZi4sLq1OnDps2bRrT6XTmc6jeGNu9e3eR32eRkZGMMdvqKCUlhQ0bNoy5u7sztVrNRo4cyTIyMkpdJtrmkhBCCHFiNEZNCCGEODEK1IQQQogTo0BNCCGEODEK1IQQQogTo0BNCCGEODEK1IQQQogTo0BNCCGEODEK1IQQQogTo0BNCClTgiBg06ZNji4GIVUGBWpCqpBXXnkFgiAU+undu7eji0YIKSXaj5qQKqZ3795YvXq11TGlUumg0hBCHhW1qAmpYpRKJQIDA61+vLy8APBu6WXLlqFPnz5QqVSoU6cOfv/9d6vfP3v2LJ544gmoVCr4+Phg9OjRyMzMtDpn1apVaNq0KZRKJYKCgjB+/Hir55OTkzFw4EC4urqifv362Lx5s/m5+/fvY/jw4fDz84NKpUL9+vULXVgQQiwoUBNSzUyfPh2DBw/G6dOnMXz4cLzwwgu4ePEiACArKwu9evWCl5cXjh07hvXr1+Pff/+1CsTLli3DuHHjMHr0aJw9exabN29GvXr1rN5j9uzZGDp0KM6cOYOnn34aw4cPR2pqqvn9L1y4gG3btuHixYtYtmwZfH19K64CCKlsSr8ZGCHE2URGRjKpVMrc3NysfubOncsY41uSjhkzxup3wsPD2ZtvvskYY2zFihXMy8uLZWZmmp//+++/mUQiMe/BHhwczKZNm1ZsGQCwjz76yPw4MzOTAWDbtm1jjDH2zDPPsJEjR5bNByakGqAxakKqmO7du2PZsmVWx7y9vc33IyIirJ6LiIhAdHQ0AODixYto2bIl3NzczM936tQJoiji8uXLEAQBcXFx6NGjR4llaNGihfm+m5sb1Go1EhMTAQBvvvkmBg8ejJMnT+Kpp57CgAED0LFjx1J9VkKqAwrUhFQxbm5uhbqiy4pKpbLpPLlcbvVYEASIoggA6NOnD2JiYrB161bs3LkTPXr0wLhx4/D555+XeXkJqQpojJqQaubw4cOFHjdu3BgA0LhxY5w+fRpZWVnm5w8ePAiJRIKGDRvCw8MDYWFhiIqKeqQy+Pn5ITIyEmvWrMHixYuxYsWKR3o9QqoyalETUsXodDrEx8dbHZPJZOaErfXr16Nt27Z4/PHHsXbtWhw9ehTfffcdAGD48OGYOXMmIiMjMWvWLCQlJWHChAl4+eWXERAQAACYNWsWxowZA39/f/Tp0wcZGRk4ePAgJkyYYFP5ZsyYgTZt2qBp06bQ6XTYsmWL+UKBEFIYBWpCqpjt27cjKCjI6ljDhg1x6dIlADwje926dRg7diyCgoLwyy+/oEmTJgAAV1dX7NixAxMnTkS7du3g6uqKwYMHY9GiRebXioyMRG5uLr788ku8++678PX1xZAhQ2wun0KhwNSpU3Hr1i2oVCp07twZ69atK4NPTkjVJDDGmKMLQQipGIIgYOPGjRgwYICji0IIsRGNURNCCCFOjAI1IYQQ4sRojJqQaoRGugipfKhFTQghhDgxCtSEEEKIE6NATQghhDgxCtSEEEKIE6NATQghhDgxCtSEEEKIE6NATQghhDgxCtSEEEKIE6NATQghhDgxCtSEEEKIE6NATQghhDgxCtSEEEKIE6NATQghhDgxCtSEEEKIE6NATQipEm7dugVBEPD99987uiiElCkK1ISQcnPhwgXMmjULt27dcnRRCKm0KFATQsrNhQsXMHv2bArUhDwCCtSEVHHZ2dmOLgIh5BFQoCbEgWbNmgVBEHDp0iUMHToUarUaPj4+mDhxInJzc63OXbNmDdq0aQOVSgVvb2+88MILiI2NtTqnW7duaNasGU6cOIEuXbrA1dUVH374IQAgNzcXs2bNQoMGDeDi4oKgoCAMGjQI169fN/++KIpYvHgxmjZtChcXFwQEBOCNN97A/fv3rd4nLCwM/fr1wz///INWrVrBxcUFTZo0wYYNG8znfP/993juuecAAN27d4cgCBAEAXv27AEACIKAWbNmFaqTsLAwvPLKK+bHqampePfdd9G8eXO4u7tDrVajT58+OH36tN31TUhlRIGaECcwdOhQ5ObmYv78+Xj66afx9ddfY/To0ebn586dixEjRqB+/fpYtGgRJk2ahKioKHTp0gVpaWlWr5WSkoI+ffqgVatWWLx4Mbp37w6j0Yh+/fph9uzZaNOmDb744gtMnDgR6enpOHfunPl333jjDUyZMgWdOnXCV199hZEjR2Lt2rXo1asXDAaD1ftcvXoVzz//PPr06YP58+dDJpPhueeew86dOwEAXbp0wVtvvQUA+PDDD/HTTz/hp59+QuPGje2qmxs3bmDTpk3o168fFi1ahClTpuDs2bPo2rUr4uLi7HotQiolRghxmJkzZzIA7Nlnn7U6PnbsWAaAnT59mt26dYtJpVI2d+5cq3POnj3LZDKZ1fGuXbsyAGz58uVW565atYoBYIsWLSpUBlEUGWOM7d+/nwFga9eutXp++/bthY7XqlWLAWB//PGH+Vh6ejoLCgpirVu3Nh9bv349A8B2795d6H0BsJkzZxY6XqtWLRYZGWl+nJuby4xGo9U5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cXFYsWIFBgwYgFatWpXpaxNCbEOBmpBK6vr164iJicHKlSvx+uuvl8t7xMXFYfbs2QgLC6NATYiDUNc3IZVUYmIiAECj0Ti2IKWQm5sLURQdXQxCKgUK1IRUQq+88gq6du0KAHjuuecgCAK6desGALh06RKGDBkCb29vuLi4oG3btti8ebPV76empuLdd99F8+bN4e7uDrVajT59+uD06dPmc/bs2YN27doBAEaOHAlBECAIAr7//nsAQFhYGF555ZVCZevWrZu5LKbXEQQB69atw0cffYSQkBC4urpCq9UCAI4cOYLevXvD09MTrq6u6Nq1Kw4ePFhGNUVI5Udd34RUQm+88QZCQkIwb948vPXWW2jXrh0CAgJw/vx5dOrUCSEhIfjggw/g5uaG3377DQMGDMAff/yBgQMHAgBu3LiBTZs24bnnnkPt2rWRkJCAb7/9Fl27dsWFCxcQHByMxo0b4+OPP8aMGTMwevRodO7cGQDQsWPHUpV5zpw5UCgUePfdd6HT6aBQKLBr1y706dMHbdq0wcyZMyGRSLB69Wo88cQT2L9/P9q3b19mdUZIpcUIIZXS7t27GQC2fv1687EePXqw5s2bs9zcXPMxURRZx44dWf369c3HcnNzmdFotHq9mzdvMqVSyT7++GPzsWPHjjEAbPXq1YXev1atWiwyMrLQ8a5du7KuXbsWKmedOnVYdna2Vbnq16/PevXqxURRNB/Pzs5mtWvXZk8++aRN9UBIVUdd34RUEampqdi1axeGDh2KjIwMJCcnIzk5GSkpKejVqxeuXr2Ku3fvAgCUSiUkEv7f32g0IiUlBe7u7mjYsCFOnjxZLuWLjIyESqUyP46OjsbVq1fx4osvIiUlxVzerKws9OjRA/v27aNxbEJAXd+EVBnXrl0DYwzTp0/H9OnTizwnMTERISEhEEURX331Fb755hvcvHkTRqPRfI6Pj0+5lK927dpWj69evQqAB/DipKenw8vLq1zKQ0hlQYGakCrC1Pp899130atXryLPqVevHgBg3rx5mD59Ol599VXMmTMH3t7ekEgkmDRpks2tWEEQijxuNBohlUoLHS/Ymi5Y3oULFxY79cvd3d2mshBSlVGgJqSKqFOnDgBALpejZ8+eJZ77+++/o3v37vjuu++sjqelpcHX19f8uLhgDABeXl5IS0srdDwmJsZclpLU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StUpbfpWdSO/GA6cMmrUg1sYt0MopZSqtTqpUb/zzju0atUKX19f+vfvz9q1ayvdf+7cuXTs2BFfX1+6devG999/7/L8nXfeiclkcnmMGDGiLkJV9SUtz5gMYXuKsYZuTVYMUkopVUatE/V//vMfHn30UaZMmcLGjRvp0aMHw4cPJyUlpdz9f//9d2655RbuueceNm3axKhRoxg1ahTbt2932W/EiBEcP37c+fjyyy9rG6qqTyGn53DOKTJmMFJKKVUnap2oX3vtNe677z7uuusuOnfuzLvvvou/vz8fffRRufu/+eabjBgxgscff5xOnTrx/PPP06tXL/71r3+57Ge1WomOjnY+wsLCahuqqk+lp/c7keu+OJRSqpGpVaIuLCxkw4YNDBs2rOSAZjPDhg1j1apV5b5m1apVLvsDDB8+vMz+K1asIDIykg4dOvDAAw+QmnrG2rNnKCgoIDMz0+WhGlDpqSrfWuO+OJRSqpGpVaI+efIkNpuNqKgol+1RUVEkJZWzTiiQlJR01v1HjBjBp59+yrJly3j55Zf5+eefGTlyJDZbxU2qM2bMICQkxPmIi4urxTtTtRKgi3EopVRd8chR3zfffLPz/926daN79+60bduWFStWMHRo+csoTp48mUcffdT5fWZmpibrhjaynbH+7q3d3B2JUko1GrVK1E2bNsVisZCcnOyyPTk5mejo6HJfEx0dXa39Adq0aUPTpk35448/KkzUVqsVq7UBFqVXFbu6A1ze1n3rYiulVCNUq6ZvHx8fevfuzbJly5zb7HY7y5YtIz6+/AW34+PjXfYHWLp0aYX7Axw9epTU1FRiYmJqE65qCJqklVKqTtV61Pejjz7K+++/zyeffMKuXbt44IEHyMnJ4a677gLgjjvuYPLkyc79J02axOLFi3n11VfZvXs3U6dOZf369UycOBGA7OxsHn/8cVavXs2hQ4dYtmwZ11xzDe3atWP48OG1DVcppZQ6p9S6+nPTTTdx4sQJnnvuOZKSkrjwwgtZvHixc8DYkSNHMJtLrgcGDBjAF198wd/+9jeefvpp2rdvz/z58+natSsAFouFrVu38sknn5Cenk5sbCxXXHEFzz//vDZtK6WUOu+YRETcHUR9yMzMJCQkhIyMDIKDg90djlJKKeVUnRyli3IopZRSHkwTtVJKKeXBNFErpZRSHkwTtVJK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ZDJhMpmccRQXF/P88887z9OqVSuefvppCgoKypT3n/70J5YsWUKfPn3w8/Mr9+eilKfwcncASjVW27Zt44orriAiIoKpU6dSXFzMlClTiIqKqvR1U6dOZcaMGdx7773069ePzMxM1q9fz8aNG7n88ssBI7ENHjwYb29vxo0bR6tWrdi/fz//+9//mD59usvxbrjhBtq3b8+LL77I2Xq6fv31VxYsWMCECRMAmDFjBn/605944okn+Pe//82DDz7IqVOn+Mc//sHdd9/N8uXLz1oOX3zxBVlZWdx///2YTCb+8Y9/cN1113HgwAFnS8LSpUs5cOAAd911F9HR0ezYsYNZs2axY8cOVq9ejclk4rrrrmPv3r18+eWXvP766zRt2hSAiIgIAO69914++eQTrr/+ev7617+yZs0aZsyYwa5du5g3b55LTHv27OGWW27h/vvv57777qNDhw5nfR9KuY0operFqFGjxNfXVw4fPuzctnPnTrFYLFL6T69ly5YyduxY5/c9evSQq666qtJjX3zxxRIUFORybBERu93u/P+UKVMEkFtuuaXM6x3PlQaI1WqVgwcPOre99957Akh0dLRkZmY6t0+ePFkAl33Hjh0rLVu2dH5/8OBBAaRJkyaSlpbm3P7tt98KIP/73/+c23Jzc8vE+OWXXwogv/zyi3PbP//5zzLnFRHZvHmzAHLvvfe6bH/ssccEkOXLlzu3tWzZUgBZvHhxmXMq5Ym06VupemCz2ViyZAmjRo2iRYsWzu2dOnVi+PDhlb42NDSUHTt2sG/fvnKfP3HiBL/88gt33323y7GBcm+5Gj9+fJXjHjp0qEvzdf/+/QEYPXo0QUFBZbYfOHDgrMe86aabCAsLc34/ePDgMq/18/Nz/j8/P5+TJ09y0UUXAbBx48aznuP7778H4NFHH3XZ/te//hWA7777zmV769atz/pzUMpTaKJWqh6cOHGCvLw82rdvX+a5szWz/v3vfyc9PZ0LLriAbt268fjjj7N161bn844E17Vr1yrF0rp16yrHfWbiDwkJASAuLq7c7adOnar2MR1Ju/Rr09LSmDRpElFRUfj5+REREeGMOyMj46znOHz4MGazmXbt2rlsj46OJjQ0lMOHD7tsr06ZKOVumqiV8jAXX3wx+/fv56OPPqJr16588MEH9OrViw8++KBGxytdWz0bi8VS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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot losses\n", + "colors = ['orangered', 'royalblue', 'hotpink', 'lime', 'goldenrod']\n", + "plt.figure(figsize=(5,10))\n", + "ind = 0\n", + "for key, val in losses.items():\n", + " plt.subplot(len(losses.keys()),1,ind+1)\n", + " plt.plot(val, color = colors[ind], linestyle = '-')\n", + " plt.plot(losses_val[key], color = colors[ind], linestyle = '--')\n", + " plt.title(key)\n", + " plt.xlabel(\"Epochs\")\n", + " ind+=1;\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "c3cf096f", "metadata": { "pycharm": { "name": "#%%" } }, - "outputs": [], "source": [ - "\n" + "**Conclusion**: from early on, the network shows the capability of discern between the different semantic layers. To achieve good image quality, more images and training time are needed (to avoid overfitting, seen in some loss plots of previous example), as well as thorough optimisation, such as establishing an adversarial schedule that makes sure that the discriminator and generator and the discriminator are trained only when their performance does not exceed a certain limit.\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8cf9ab5f", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -2392,9 +2428,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.py b/tutorials/generative/2d_spade_gan/2d_spade_vae.py index 1f2a93ac..3bb1f04f 100644 --- a/tutorials/generative/2d_spade_gan/2d_spade_vae.py +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.py @@ -239,6 +239,8 @@ def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat net = net.to(device) discriminator = discriminator.to(device) torch.autograd.set_detect_anomaly(True) +losses = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []} +losses_val = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []} for epoch in range(num_epochs): print("Epoch %d/%d" %(epoch, num_epochs)) train_bar = tqdm(enumerate(train_loader), total=len(train_loader), ncols=120) @@ -324,7 +326,29 @@ def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat }) if step == 0 and epoch%10==0: picture_results(label, image, out) + for key, val in losses_epoch.items(): + losses[key].append(val / len(train_loader)) + for key, val in losses_epoch_val.items(): + losses_val[key].append(val / len(val_loader)) + + +# Plot losses +colors = ['orangered', 'royalblue', 'hotpink', 'lime', 'goldenrod'] +plt.figure(figsize=(5,10)) +ind = 0 +for key, val in losses.items(): + plt.subplot(len(losses.keys()),1,ind+1) + plt.plot(val, color = colors[ind], linestyle = '-') + plt.plot(losses_val[key], color = colors[ind], linestyle = '--') + plt.title(key) + plt.xlabel("Epochs") + ind+=1; +plt.tight_layout() +plt.show() -# + pycharm={"name": "#%%"} +# + [markdown] pycharm={"name": "#%%"} +# **Conclusion**: from early on, the network shows the capability of discern between the different semantic layers. To achieve good image quality, more images and training time are needed (to avoid overfitting, seen in some loss plots of previous example), as well as thorough optimisation, such as establishing an adversarial schedule that makes sure that the discriminator and generator and the discriminator are trained only when their performance does not exceed a certain limit. +# +# - From 39ed0f161b31c722c1f99f972a77231415a02b80 Mon Sep 17 00:00:00 2001 From: Mark Graham Date: Wed, 5 Jul 2023 10:22:11 -0600 Subject: [PATCH 6/7] Addresses hidden comments and runtests with autofix --- generative/losses/kld_loss.py | 5 +- generative/networks/blocks/spade_norm.py | 90 ++--- generative/networks/nets/spade_network.py | 314 ++++++++++-------- tests/test_spade_vaegan.py | 94 +++--- .../2d_spade_gan/2d_spade_vae.ipynb | 46 +-- .../generative/2d_spade_gan/2d_spade_vae.py | 274 +++++++-------- 6 files changed, 434 insertions(+), 389 deletions(-) diff --git a/generative/losses/kld_loss.py b/generative/losses/kld_loss.py index d3178b84..ebcaf52b 100644 --- a/generative/losses/kld_loss.py +++ b/generative/losses/kld_loss.py @@ -9,8 +9,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -import torch.nn as nn +from __future__ import annotations + import torch +import torch.nn as nn + class KLDLoss(nn.Module): def forward(self, mu, logvar): diff --git a/generative/networks/blocks/spade_norm.py b/generative/networks/blocks/spade_norm.py index 419f740e..0fe735e8 100644 --- a/generative/networks/blocks/spade_norm.py +++ b/generative/networks/blocks/spade_norm.py @@ -10,80 +10,84 @@ # limitations under the License. from __future__ import annotations + import torch import torch.nn as nn -from monai.networks.blocks import Convolution, ADN import torch.nn.functional as F +from monai.networks.blocks import ADN, Convolution + class SPADE(nn.Module): """ SPADE normalisation block based on the 2019 paper by Park et al. (doi: https://doi.org/10.48550/arXiv.1903.07291) + Args: label_nc: number of semantic labels norm_nc: number of output channels kernel_size: kernel size spatial_dims: number of spatial dimensions hidden_channels: number of channels in the intermediate gamma and beta layers - normalisation: type of base normalisation used before applying the SPADE normalisation + norm: type of base normalisation used before applying the SPADE normalisation + norm_params: parameters for the base normalisation """ - def __init__(self, - label_nc: int, - norm_nc: int, - kernel_size: int = 3, - spatial_dims: int = 2, - hidden_channels: int = 64, - norm: str | tuple= "INSTANCE", - norm_params: dict = {} - )-> None: + + def __init__( + self, + label_nc: int, + norm_nc: int, + kernel_size: int = 3, + spatial_dims: int = 2, + hidden_channels: int = 64, + norm: str | tuple = "INSTANCE", + norm_params: dict = {}, + ) -> None: super().__init__() if len(norm_params) != 0: norm = (norm, norm_params) - self.param_free_norm = ADN(act=None, dropout=0.0, norm = norm, - norm_dim=spatial_dims, - ordering="N", - in_channels=norm_nc) - self.mlp_shared = Convolution(spatial_dims=spatial_dims, - in_channels = label_nc, - out_channels = hidden_channels, - kernel_size= kernel_size, - norm = None, - padding=kernel_size//2, - act="LEAKYRELU") - self.mlp_gamma = Convolution(spatial_dims=spatial_dims, - in_channels=hidden_channels, - out_channels=norm_nc, - kernel_size=kernel_size, - padding = kernel_size//2, - act = None - ) - self.mlp_beta = Convolution(spatial_dims=spatial_dims, - in_channels=hidden_channels, - out_channels=norm_nc, - kernel_size=kernel_size, - padding = kernel_size//2, - act = None - ) - + self.param_free_norm = ADN( + act=None, dropout=0.0, norm=norm, norm_dim=spatial_dims, ordering="N", in_channels=norm_nc + ) + self.mlp_shared = Convolution( + spatial_dims=spatial_dims, + in_channels=label_nc, + out_channels=hidden_channels, + kernel_size=kernel_size, + norm=None, + padding=kernel_size // 2, + act="LEAKYRELU", + ) + self.mlp_gamma = Convolution( + spatial_dims=spatial_dims, + in_channels=hidden_channels, + out_channels=norm_nc, + kernel_size=kernel_size, + padding=kernel_size // 2, + act=None, + ) + self.mlp_beta = Convolution( + spatial_dims=spatial_dims, + in_channels=hidden_channels, + out_channels=norm_nc, + kernel_size=kernel_size, + padding=kernel_size // 2, + act=None, + ) - def forward(self, - x: torch.Tensor, - segmap: torch.Tensor) -> torch.Tensor: + def forward(self, x: torch.Tensor, segmap: torch.Tensor) -> torch.Tensor: """ Args: x: input tensor segmap: input segmentation map (bxcx[spatial-dimensions]) where c is the number of semantic channels. The map will be interpolated to the dimension of x internally. - Returns: - """ # Part 1. generate parameter-free normalized activations normalized = self.param_free_norm(x) # Part 2. produce scaling and bias conditioned on semantic map - segmap = F.interpolate(segmap, size=x.size()[2:], mode='nearest') + segmap = F.interpolate(segmap, size=x.size()[2:], mode="nearest") actv = self.mlp_shared(segmap) gamma = self.mlp_gamma(actv) beta = self.mlp_beta(actv) diff --git a/generative/networks/nets/spade_network.py b/generative/networks/nets/spade_network.py index 0be1d9c8..b2ff2833 100644 --- a/generative/networks/nets/spade_network.py +++ b/generative/networks/nets/spade_network.py @@ -9,25 +9,32 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import annotations + +from typing import Sequence, Union + +import numpy as np import torch import torch.nn as nn -from typing import Union, Sequence -import numpy as np +import torch.nn.functional as F from monai.networks.blocks import Convolution from monai.networks.layers import Act -from generative.networks.blocks.spade_norm import SPADE from monai.utils.enums import StrEnum -import torch.nn.functional as F + from generative.losses.kld_loss import KLDLoss +from generative.networks.blocks.spade_norm import SPADE + class UpsamplingModes(StrEnum): bicubic = "bicubic" nearest = "nearest" bilinear = "bilinear" + class SPADE_ResNetBlock(nn.Module): """ Creates a Residual Block with SPADE normalisation. + Args: spatial_dims: number of spatial dimensions in_channels: number of input channels @@ -38,51 +45,67 @@ class SPADE_ResNetBlock(nn.Module): kernel_size: convolutional kernel size """ - def __init__(self, - spatial_dims: int, - in_channels: int, - out_channels: int, - label_nc: int, - spade_intermediate_channels: int = 128, - norm: Union[str, tuple] = "INSTANCE", - kernel_size: int = 3,): + def __init__( + self, + spatial_dims: int, + in_channels: int, + out_channels: int, + label_nc: int, + spade_intermediate_channels: int = 128, + norm: Union[str, tuple] = "INSTANCE", + kernel_size: int = 3, + ): super().__init__() self.in_channels = in_channels self.out_channels = out_channels self.int_channels = min(self.in_channels, self.out_channels) self.learned_shortcut = self.in_channels != self.out_channels - self.conv_0 = Convolution(spatial_dims = spatial_dims, - in_channels = self.in_channels, - out_channels = self.int_channels, - act = None, - norm = None, - ) - self.conv_1 = Convolution(spatial_dims = spatial_dims, - in_channels = self.int_channels, - out_channels = self.out_channels, - act = None, - norm = None, - ) + self.conv_0 = Convolution( + spatial_dims=spatial_dims, in_channels=self.in_channels, out_channels=self.int_channels, act=None, norm=None + ) + self.conv_1 = Convolution( + spatial_dims=spatial_dims, + in_channels=self.int_channels, + out_channels=self.out_channels, + act=None, + norm=None, + ) self.activation = nn.LeakyReLU(0.2, False) - self.norm_0 = SPADE(label_nc=label_nc, norm_nc=self.in_channels, kernel_size=kernel_size, - spatial_dims=spatial_dims, hidden_channels=spade_intermediate_channels, - norm=norm) - self.norm_1 = SPADE(label_nc=label_nc, norm_nc=self.int_channels, kernel_size=kernel_size, - spatial_dims=spatial_dims, hidden_channels=spade_intermediate_channels, - norm=norm) + self.norm_0 = SPADE( + label_nc=label_nc, + norm_nc=self.in_channels, + kernel_size=kernel_size, + spatial_dims=spatial_dims, + hidden_channels=spade_intermediate_channels, + norm=norm, + ) + self.norm_1 = SPADE( + label_nc=label_nc, + norm_nc=self.int_channels, + kernel_size=kernel_size, + spatial_dims=spatial_dims, + hidden_channels=spade_intermediate_channels, + norm=norm, + ) if self.learned_shortcut: - self.conv_s = Convolution(spatial_dims = spatial_dims, - in_channels = self.in_channels, - out_channels = self.out_channels, - act = None, - norm = None, - kernel_size=1, - ) - self.norm_s = SPADE(label_nc=label_nc, norm_nc=self.in_channels, kernel_size=kernel_size, - spatial_dims=spatial_dims, hidden_channels=spade_intermediate_channels, - norm=norm) + self.conv_s = Convolution( + spatial_dims=spatial_dims, + in_channels=self.in_channels, + out_channels=self.out_channels, + act=None, + norm=None, + kernel_size=1, + ) + self.norm_s = SPADE( + label_nc=label_nc, + norm_nc=self.in_channels, + kernel_size=kernel_size, + spatial_dims=spatial_dims, + hidden_channels=spade_intermediate_channels, + norm=norm, + ) def forward(self, x, seg): x_s = self.shortcut(x, seg) @@ -98,9 +121,11 @@ def shortcut(self, x, seg): x_s = x return x_s + class SPADE_Encoder(nn.Module): """ Encoding branch of a VAE compatible with a SPADE-like generator + Args: spatial_dims: number of spatial dimensions in_channels: number of input channels @@ -112,47 +137,58 @@ class SPADE_Encoder(nn.Module): norm: normalisation layer type act: activation type """ - def __init__(self, - spatial_dims: int, - in_channels: int, - z_dim: int, - num_channels: Sequence[int], - input_shape: Sequence[int], - kernel_size: int = 3, - norm: Union[str, tuple] = "INSTANCE", - act: Union[str, tuple] = (Act.LEAKYRELU, {"negative_slope": 0.2})): + + def __init__( + self, + spatial_dims: int, + in_channels: int, + z_dim: int, + num_channels: Sequence[int], + input_shape: Sequence[int], + kernel_size: int = 3, + norm: Union[str, tuple] = "INSTANCE", + act: Union[str, tuple] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + ): super().__init__() self.in_channels = in_channels self.z_dim = z_dim self.num_channels = num_channels if len(input_shape) != spatial_dims: - raise ValueError("Length of parameter input shape must match spatial_dims; got %s" %(input_shape)) + raise ValueError("Length of parameter input shape must match spatial_dims; got %s" % (input_shape)) for s_ind, s_ in enumerate(input_shape): if s_ / (2 ** len(num_channels)) != s_ // (2 ** len(num_channels)): - raise ValueError("Each dimension of your input must be divisible by 2 ** (autoencoder depth)." - "The shape in position %d, %d is not divisible by %d. " %(s_ind, s_, len(num_channels))) + raise ValueError( + "Each dimension of your input must be divisible by 2 ** (autoencoder depth)." + "The shape in position %d, %d is not divisible by %d. " % (s_ind, s_, len(num_channels)) + ) self.input_shape = input_shape self.latent_spatial_shape = [s_ // (2 ** len(self.num_channels)) for s_ in self.input_shape] blocks = [] ch_init = self.in_channels for ch_ind, ch_value in enumerate(num_channels): - blocks.append(Convolution(spatial_dims = spatial_dims, - in_channels = ch_init, - out_channels= ch_value, - strides=2, - kernel_size=kernel_size, - norm = norm, - act = act)) + blocks.append( + Convolution( + spatial_dims=spatial_dims, + in_channels=ch_init, + out_channels=ch_value, + strides=2, + kernel_size=kernel_size, + norm=norm, + act=act, + ) + ) ch_init = ch_value self.blocks = nn.ModuleList(blocks) - self.fc_mu = nn.Linear(in_features=np.prod(self.latent_spatial_shape) * self.num_channels[-1], - out_features=self.z_dim) - self.fc_var = nn.Linear(in_features=np.prod(self.latent_spatial_shape) * self.num_channels[-1], - out_features=self.z_dim) + self.fc_mu = nn.Linear( + in_features=np.prod(self.latent_spatial_shape) * self.num_channels[-1], out_features=self.z_dim + ) + self.fc_var = nn.Linear( + in_features=np.prod(self.latent_spatial_shape) * self.num_channels[-1], out_features=self.z_dim + ) - def forward(self, x,): + def forward(self, x): for block in self.blocks: x = block(x) x = x.view(x.size(0), -1) @@ -174,10 +210,12 @@ def reparameterize(self, mu, logvar): eps = torch.randn_like(std) return eps.mul(std) + mu + class SPADE_Decoder(nn.Module): """ Decoder branch of a SPADE-like generator. It can be used independently, without an encoding branch, behaving like a GAN, or coupled to a SPADE encoder. + Args: label_nc: number of semantic labels spatial_dims: number of spatial dimensions @@ -194,21 +232,23 @@ class SPADE_Decoder(nn.Module): kernel_size: convolutional kernel size upsampling_mode: upsampling mode (nearest, bilinear etc.) """ - def __init__(self, - spatial_dims: int, - out_channels: int, - label_nc: int, - input_shape: Sequence[int], - num_channels: Sequence[int], - z_dim: Union[int, None] = None, - is_gan: bool = False, - spade_intermediate_channels: int = 128, - norm: Union[str, tuple] = "INSTANCE", - act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), - last_act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), - kernel_size: int = 3, - upsampling_mode: str = UpsamplingModes.nearest.value, - ): + + def __init__( + self, + spatial_dims: int, + out_channels: int, + label_nc: int, + input_shape: Sequence[int], + num_channels: Sequence[int], + z_dim: Union[int, None] = None, + is_gan: bool = False, + spade_intermediate_channels: int = 128, + norm: Union[str, tuple] = "INSTANCE", + act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + last_act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + kernel_size: int = 3, + upsampling_mode: str = UpsamplingModes.nearest.value, + ): super().__init__() self.is_gan = is_gan @@ -219,9 +259,10 @@ def __init__(self, raise ValueError("Length of parameter input shape must match spatial_dims; got %s" % (input_shape)) for s_ind, s_ in enumerate(input_shape): if s_ / (2 ** len(num_channels)) != s_ // (2 ** len(num_channels)): - raise ValueError("Each dimension of your input must be divisible by 2 ** (autoencoder depth)." - "The shape in position %d, %d is not divisible by %d. " % ( - s_ind, s_, len(num_channels))) + raise ValueError( + "Each dimension of your input must be divisible by 2 ** (autoencoder depth)." + "The shape in position %d, %d is not divisible by %d. " % (s_ind, s_, len(num_channels)) + ) self.latent_spatial_shape = [s_ // (2 ** len(self.num_channels)) for s_ in input_shape] if self.is_gan: @@ -233,24 +274,28 @@ def __init__(self, num_channels.append(self.out_channels) self.upsampling = torch.nn.Upsample(scale_factor=2, mode=upsampling_mode) for ch_ind, ch_value in enumerate(num_channels[:-1]): - blocks.append(SPADE_ResNetBlock(spatial_dims=spatial_dims, - in_channels=ch_value, - out_channels=num_channels[ch_ind+1], - label_nc=label_nc, - spade_intermediate_channels=spade_intermediate_channels, - norm=norm, - kernel_size=kernel_size),) + blocks.append( + SPADE_ResNetBlock( + spatial_dims=spatial_dims, + in_channels=ch_value, + out_channels=num_channels[ch_ind + 1], + label_nc=label_nc, + spade_intermediate_channels=spade_intermediate_channels, + norm=norm, + kernel_size=kernel_size, + ) + ) self.blocks = torch.nn.ModuleList(blocks) - self.last_conv = Convolution(spatial_dims=spatial_dims, - in_channels=num_channels[-1], - out_channels=out_channels, - padding=(kernel_size-1)//2, - kernel_size=kernel_size, - norm = None, - act=last_act - ) - + self.last_conv = Convolution( + spatial_dims=spatial_dims, + in_channels=num_channels[-1], + out_channels=out_channels, + padding=(kernel_size - 1) // 2, + kernel_size=kernel_size, + norm=None, + act=last_act, + ) def forward(self, seg, z: torch.Tensor = None): if self.is_gan: @@ -258,10 +303,9 @@ def forward(self, seg, z: torch.Tensor = None): x = self.fc(x) else: if z is None: - z = torch.randn(seg.size(0), self.opt.z_dim, - dtype=torch.float32, device=seg.get_device()) + z = torch.randn(seg.size(0), self.opt.z_dim, dtype=torch.float32, device=seg.get_device()) x = self.fc(z) - x = x.view(*[-1, self.num_channels[0]]+self.latent_spatial_shape) + x = x.view(*[-1, self.num_channels[0]] + self.latent_spatial_shape) for res_block in self.blocks: x = res_block(x, seg) @@ -270,11 +314,13 @@ def forward(self, seg, z: torch.Tensor = None): x = self.last_conv(x) return x + class SPADE_Net(nn.Module): """ SPADE Network, implemented based on the code by Park, T et al. in "Semantic Image Synthesis with Spatially-Adaptive Normalization" (https://github.com/NVlabs/SPADE) + Args: spatial_dims: number of spatial dimensions in_channels: number of input channels @@ -293,22 +339,21 @@ class SPADE_Net(nn.Module): """ def __init__( - self, - spatial_dims: int, - in_channels: int, - out_channels: int, - label_nc: int, - input_shape: Sequence[int], - num_channels: Sequence[int], - z_dim: Union[int, None] = None, - is_vae: bool = True, - spade_intermediate_channels: int = 128, - norm:Union[str, tuple] = "INSTANCE", - act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), - last_act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), - kernel_size: int = 3, - upsampling_mode: str = UpsamplingModes.nearest.value - + self, + spatial_dims: int, + in_channels: int, + out_channels: int, + label_nc: int, + input_shape: Sequence[int], + num_channels: Sequence[int], + z_dim: Union[int, None] = None, + is_vae: bool = True, + spade_intermediate_channels: int = 128, + norm: Union[str, tuple] = "INSTANCE", + act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + last_act: Union[str, tuple, None] = (Act.LEAKYRELU, {"negative_slope": 0.2}), + kernel_size: int = 3, + upsampling_mode: str = UpsamplingModes.nearest.value, ): super().__init__() @@ -325,14 +370,15 @@ def __init__( if self.is_vae: self.encoder = SPADE_Encoder( - spatial_dims = spatial_dims, - in_channels = in_channels, - z_dim = z_dim, - num_channels = num_channels, - input_shape = input_shape, - kernel_size = kernel_size, - norm = norm, - act = act) + spatial_dims=spatial_dims, + in_channels=in_channels, + z_dim=z_dim, + num_channels=num_channels, + input_shape=input_shape, + kernel_size=kernel_size, + norm=norm, + act=act, + ) decoder_channels = num_channels decoder_channels.reverse() @@ -342,15 +388,15 @@ def __init__( out_channels=out_channels, label_nc=label_nc, input_shape=input_shape, - num_channels= decoder_channels, - z_dim = z_dim, - is_gan = not is_vae, - spade_intermediate_channels = spade_intermediate_channels, - norm = norm, - act = act, - last_act = last_act, + num_channels=decoder_channels, + z_dim=z_dim, + is_gan=not is_vae, + spade_intermediate_channels=spade_intermediate_channels, + norm=norm, + act=act, + last_act=last_act, kernel_size=kernel_size, - upsampling_mode=upsampling_mode + upsampling_mode=upsampling_mode, ) def forward(self, seg: torch.Tensor, x: Union[torch.Tensor, None] = None): @@ -361,7 +407,7 @@ def forward(self, seg: torch.Tensor, x: Union[torch.Tensor, None] = None): kld_loss = self.kld_loss(z_mu, z_logvar) return self.decoder(seg, z), kld_loss else: - return self.decoder(seg, z), + return (self.decoder(seg, z),) def encode(self, x: torch.Tensor): diff --git a/tests/test_spade_vaegan.py b/tests/test_spade_vaegan.py index 3354d4d6..e030b81e 100644 --- a/tests/test_spade_vaegan.py +++ b/tests/test_spade_vaegan.py @@ -10,79 +10,91 @@ # limitations under the License. from __future__ import annotations + import unittest + +import numpy as np import torch from monai.networks import eval_mode from parameterized import parameterized -from networks.nets.spade_network import SPADE_Net -import numpy as np + +from generative.networks.nets.spade_network import SPADE_Net CASE_2D = [[[2, 1, 1, 3, [64, 64], [16, 32, 64, 128], 16, True]]] CASE_2D_BIS = [[[2, 1, 1, 3, [64, 64], [16, 32, 64, 128], 16, True]]] CASE_3D = [[[3, 1, 1, 3, [64, 64, 64], [16, 32, 64, 128], 16, True]]] -def create_Semantic_Data(shape:list, semantic_regions:int): - ''' + +def create_semantic_data(shape: list, semantic_regions: int): + """ To create semantic and image mock inputs for the network. Args: shape: input shape semantic_regions: number of semantic regions Returns: - ''' + """ out_label = torch.zeros(shape) - out_image = torch.zeros(shape) + torch.randn(shape)*0.01 + out_image = torch.zeros(shape) + torch.randn(shape) * 0.01 for i in range(1, semantic_regions): - shape_square = [i//np.random.choice(list(range(2, i//2))) for i in shape] - start_point = [np.random.choice(list(range(shape[ind]-shape_square[ind]))) - for ind, i in enumerate(shape)] + shape_square = [i // np.random.choice(list(range(2, i // 2))) for i in shape] + start_point = [np.random.choice(list(range(shape[ind] - shape_square[ind]))) for ind, i in enumerate(shape)] if len(shape) == 2: - out_label[start_point[0]:(start_point[0]+shape_square[0]), - start_point[1]:(start_point[1]+shape_square[1])] = i + out_label[ + start_point[0] : (start_point[0] + shape_square[0]), start_point[1] : (start_point[1] + shape_square[1]) + ] = i base_intensity = torch.ones(shape_square) * np.random.randn() - out_image[start_point[0]:(start_point[0] + shape_square[0]), - start_point[1]:(start_point[1] + shape_square[1])] = base_intensity + \ - torch.randn(shape_square)*0.1 + out_image[ + start_point[0] : (start_point[0] + shape_square[0]), start_point[1] : (start_point[1] + shape_square[1]) + ] = (base_intensity + torch.randn(shape_square) * 0.1) elif len(shape) == 3: - out_label[start_point[0]:(start_point[0]+shape_square[0]), - start_point[1]:(start_point[1]+shape_square[1]), - start_point[2]:(start_point[2] + shape_square[2])] = i + out_label[ + start_point[0] : (start_point[0] + shape_square[0]), + start_point[1] : (start_point[1] + shape_square[1]), + start_point[2] : (start_point[2] + shape_square[2]), + ] = i base_intensity = torch.ones(shape_square) * np.random.randn() - out_image[start_point[0]:(start_point[0]+shape_square[0]), - start_point[1]:(start_point[1]+shape_square[1]), - start_point[2]:(start_point[2] + shape_square[2])] = base_intensity + \ - torch.randn(shape_square)*0.1 + out_image[ + start_point[0] : (start_point[0] + shape_square[0]), + start_point[1] : (start_point[1] + shape_square[1]), + start_point[2] : (start_point[2] + shape_square[2]), + ] = (base_intensity + torch.randn(shape_square) * 0.1) else: ValueError("Supports only 2D and 3D tensors") # One hot encode label - out_label_ = torch.zeros([semantic_regions,] + list(out_label.shape)) + out_label_ = torch.zeros([semantic_regions] + list(out_label.shape)) for ch in range(semantic_regions): out_label_[ch, ...] = out_label == ch return out_label_.unsqueeze(0), out_image.unsqueeze(0).unsqueeze(0) -class TestDiffusionModelUNet2D(unittest.TestCase): +class TestDiffusionModelUNet2D(unittest.TestCase): @parameterized.expand(CASE_2D) def test_forward_2d(self, input_param): - ''' + """ Check that forward method is called correctly and output shape matches. - ''' + """ net = SPADE_Net(*input_param) - in_label, in_image = create_Semantic_Data(input_param[4], input_param[3]) + in_label, in_image = create_semantic_data(input_param[4], input_param[3]) with eval_mode(net): out, kld = net(in_label, in_image) - self.assertEqual(False, True in torch.isnan(out) or True in torch.isinf(out) - or True in torch.isinf(kld) or True in torch.isinf(kld)) + self.assertEqual( + False, + True in torch.isnan(out) + or True in torch.isinf(out) + or True in torch.isinf(kld) + or True in torch.isinf(kld), + ) self.assertEqual(list(out.shape), [1, 1, 64, 64]) @parameterized.expand(CASE_2D_BIS) def test_encoder_decoder(self, input_param): - ''' + """ Check that forward method is called correctly and output shape matches. - ''' + """ net = SPADE_Net(*input_param) - in_label, in_image = create_Semantic_Data(input_param[4], input_param[3]) + in_label, in_image = create_semantic_data(input_param[4], input_param[3]) with eval_mode(net): out_z = net.encode(in_image) self.assertEqual(list(out_z.shape), [1, 16]) @@ -91,23 +103,29 @@ def test_encoder_decoder(self, input_param): @parameterized.expand(CASE_3D) def test_forward_3d(self, input_param): - ''' + """ Check that forward method is called correctly and output shape matches. - ''' + """ net = SPADE_Net(*input_param) - in_label, in_image = create_Semantic_Data(input_param[4], input_param[3]) + in_label, in_image = create_semantic_data(input_param[4], input_param[3]) with eval_mode(net): out, kld = net(in_label, in_image) - self.assertEqual(False, True in torch.isnan(out) or True in torch.isinf(out) - or True in torch.isinf(kld) or True in torch.isinf(kld)) + self.assertEqual( + False, + True in torch.isnan(out) + or True in torch.isinf(out) + or True in torch.isinf(kld) + or True in torch.isinf(kld), + ) self.assertEqual(list(out.shape), [1, 1, 64, 64, 64]) def test_shape_wrong(self): - ''' + """ We input an input shape that isn't divisible by 2**(n downstream steps) - ''' + """ with self.assertRaises(ValueError): net = SPADE_Net(1, 1, 8, [16, 16], [16, 32, 64, 128], 16, True) + if __name__ == "__main__": unittest.main() diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb index e5c64a3d..9f5333b6 100644 --- a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb @@ -65,9 +65,7 @@ "cell_type": "code", "execution_count": 2, "id": "e76296e7", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -357,14 +355,6 @@ " plt.show()" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "eaa62145", - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": 12, @@ -427,9 +417,7 @@ "cell_type": "code", "execution_count": 15, "id": "36ea4308", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stderr", @@ -472,7 +460,7 @@ "execution_count": 27, "id": "918eac0a", "metadata": { - "scrolled": false + "lines_to_next_cell": 2 }, "outputs": [ { @@ -2339,8 +2327,7 @@ " for key, val in losses_epoch.items():\n", " losses[key].append(val / len(train_loader))\n", " for key, val in losses_epoch_val.items():\n", - " losses_val[key].append(val / len(val_loader))\n", - " " + " losses_val[key].append(val / len(val_loader))" ] }, { @@ -2380,6 +2367,7 @@ "cell_type": "markdown", "id": "c3cf096f", "metadata": { + "lines_to_next_cell": 0, "pycharm": { "name": "#%%" } @@ -2387,26 +2375,6 @@ "source": [ "**Conclusion**: from early on, the network shows the capability of discern between the different semantic layers. To achieve good image quality, more images and training time are needed (to avoid overfitting, seen in some loss plots of previous example), as well as thorough optimisation, such as establishing an adversarial schedule that makes sure that the discriminator and generator and the discriminator are trained only when their performance does not exceed a certain limit.\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8cf9ab5f", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -2428,9 +2396,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.8.13" } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.py b/tutorials/generative/2d_spade_gan/2d_spade_vae.py index 3bb1f04f..ec286f29 100644 --- a/tutorials/generative/2d_spade_gan/2d_spade_vae.py +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.py @@ -49,7 +49,7 @@ directory = os.environ.get("MONAI_DATA_DIRECTORY") root_dir = tempfile.mkdtemp() if directory is None else directory root_dir = Path(root_dir) -print("Temporary directory used: %s " %root_dir) +print("Temporary directory used: %s " % root_dir) # INPUT PARAMETERS input_shape = [128, 128] @@ -80,58 +80,63 @@ # [3] Fiford CM, Sudre CH, Pemberton H, Walsh P, Manning E, Malone IB, Nicholas J, Bouvy WH, Carmichael OT, Biessels GJ, Cardoso MJ, Barnes J; Alzheimer’s Disease Neuroimaging Initiative. Automated White Matter Hyperintensity Segmentation Using Bayesian Model Selection: Assessment and Correlations with Cognitive Change. Neuroinformatics. 2020 Jun;18(3):429-449. doi: 10.1007/s12021-019-09439-6. PMID: 32062817; PMCID: PMC7338814. # -gdown.download("https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5", - str(root_dir / 'data.zip')) +gdown.download( + "https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5", str(root_dir / "data.zip") +) -zip_obj = zipfile.ZipFile(os.path.join(root_dir, 'data.zip'), 'r') +zip_obj = zipfile.ZipFile(os.path.join(root_dir, "data.zip"), "r") zip_obj.extractall(root_dir) images_T1 = root_dir / "OASIS_SMALL-SUBSET/T1" images_FLAIR = root_dir / "OASIS_SMALL-SUBSET/FLAIR" labels = root_dir / "OASIS_SMALL-SUBSET/Segmentations" # We create the data dictionaries that we need -all_images = [os.path.join(images_T1, i) for i in os.listdir(images_T1)] + \ - [os.path.join(images_FLAIR, i) for i in os.listdir(images_FLAIR)] +all_images = [os.path.join(images_T1, i) for i in os.listdir(images_T1)] + [ + os.path.join(images_FLAIR, i) for i in os.listdir(images_FLAIR) +] np.random.shuffle(all_images) -corresponding_labels = [os.path.join(labels, i.split("/")[-1].replace(i.split("/")[-1].split("_")[0], "Parcellation")) - for i in all_images] -input_dict = [{'image': i, 'label': corresponding_labels[ind]} for ind, i in enumerate(all_images)] -input_dict_train = input_dict[:int(len(input_dict)*0.9)] -input_dict_val = input_dict[int(len(input_dict)*0.9):] +corresponding_labels = [ + os.path.join(labels, i.split("/")[-1].replace(i.split("/")[-1].split("_")[0], "Parcellation")) for i in all_images +] +input_dict = [{"image": i, "label": corresponding_labels[ind]} for ind, i in enumerate(all_images)] +input_dict_train = input_dict[: int(len(input_dict) * 0.9)] +input_dict_val = input_dict[int(len(input_dict) * 0.9) :] # ### Dataloaders # + -preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain +preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain crop_shape = input_shape + [1] base_transforms = [ - monai.transforms.LoadImaged(keys = ['label', 'image']), - monai.transforms.EnsureChannelFirstd(keys=['image', 'label']), - monai.transforms.CenterSpatialCropd(keys=['label', 'image'], - roi_size=preliminar_shape), - monai.transforms.RandSpatialCropd(keys = ['label', 'image'], - roi_size=crop_shape, max_roi_size=crop_shape), - monai.transforms.SqueezeDimd(keys=['label', 'image'], dim = -1), - monai.transforms.Resized(keys = ['image', 'label'], spatial_size=input_shape), + monai.transforms.LoadImaged(keys=["label", "image"]), + monai.transforms.EnsureChannelFirstd(keys=["image", "label"]), + monai.transforms.CenterSpatialCropd(keys=["label", "image"], roi_size=preliminar_shape), + monai.transforms.RandSpatialCropd(keys=["label", "image"], roi_size=crop_shape, max_roi_size=crop_shape), + monai.transforms.SqueezeDimd(keys=["label", "image"], dim=-1), + monai.transforms.Resized(keys=["image", "label"], spatial_size=input_shape), ] last_transforms = [ - monai.transforms.CopyItemsd(keys=['label'], names=['label_channel']), - monai.transforms.Lambdad(keys=['label_channel'], - func=lambda l: l != 0), - monai.transforms.MaskIntensityd(keys=['image'], mask_key='label_channel'), - monai.transforms.NormalizeIntensityd(keys=['image']), - monai.transforms.ToTensord(keys=['image', 'label']) - ] + monai.transforms.CopyItemsd(keys=["label"], names=["label_channel"]), + monai.transforms.Lambdad(keys=["label_channel"], func=lambda l: l != 0), + monai.transforms.MaskIntensityd(keys=["image"], mask_key="label_channel"), + monai.transforms.NormalizeIntensityd(keys=["image"]), + monai.transforms.ToTensord(keys=["image", "label"]), +] aug_transforms = [ - monai.transforms.RandBiasFieldd(coeff_range=(0, 0.005), prob=0.33, keys=['image']), - monai.transforms.RandAdjustContrastd(gamma=(0.9, 1.15), prob=0.33, keys=['image']), - monai.transforms.RandGaussianNoised(prob=0.33, mean=0.0, std=np.random.uniform(0.005, 0.015), - keys=['image']), - monai.transforms.RandAffined(rotate_range=[-0.05, 0.05], shear_range=[0.001, 0.05], - scale_range=[0, 0.05], padding_mode='zeros', - mode='nearest', prob=0.33, keys=['label', 'image']) - ] + monai.transforms.RandBiasFieldd(coeff_range=(0, 0.005), prob=0.33, keys=["image"]), + monai.transforms.RandAdjustContrastd(gamma=(0.9, 1.15), prob=0.33, keys=["image"]), + monai.transforms.RandGaussianNoised(prob=0.33, mean=0.0, std=np.random.uniform(0.005, 0.015), keys=["image"]), + monai.transforms.RandAffined( + rotate_range=[-0.05, 0.05], + shear_range=[0.001, 0.05], + scale_range=[0, 0.05], + padding_mode="zeros", + mode="nearest", + prob=0.33, + keys=["label", "image"], + ), +] train_transforms = monai.transforms.Compose(base_transforms + aug_transforms + last_transforms) val_transforms = monai.transforms.Compose(base_transforms + last_transforms) @@ -146,11 +151,13 @@ # Sanity check batch = next(iter(train_loader)) -print(batch['image'].shape) -plt.subplot(1,2,1) -plt.imshow(batch['image'][0,0,...], cmap = 'gist_gray'); plt.axis('off') -plt.subplot(1,2,2) -plt.imshow(batch['label'][0,0,...], cmap = "jet"); plt.axis('off') +print(batch["image"].shape) +plt.subplot(1, 2, 1) +plt.imshow(batch["image"][0, 0, ...], cmap="gist_gray") +plt.axis("off") +plt.subplot(1, 2, 2) +plt.imshow(batch["label"][0, 0, ...], cmap="jet") +plt.axis("off") plt.show() # ### Network creation and losses @@ -168,25 +175,23 @@ def one_hot(input_label, label_nc): return label_out - def picture_results(input_label, input_image, output_image): - f = plt.figure(figsize = (4, 1.5)) - plt.subplot(1,3,1) - plt.imshow(torch.argmax(input_label, 1)[0,...].detach().cpu(), cmap = 'jet') - plt.axis('off') + f = plt.figure(figsize=(4, 1.5)) + plt.subplot(1, 3, 1) + plt.imshow(torch.argmax(input_label, 1)[0, ...].detach().cpu(), cmap="jet") + plt.axis("off") plt.title("Label") - plt.subplot(1,3,2) - plt.imshow(input_image[0,0,...].detach().cpu(), cmap = 'gist_gray') - plt.axis('off') + plt.subplot(1, 3, 2) + plt.imshow(input_image[0, 0, ...].detach().cpu(), cmap="gist_gray") + plt.axis("off") plt.title("Input image") - plt.subplot(1,3,3) - plt.imshow(output_image[0,0,...].detach().cpu(), cmap = 'gist_gray') - plt.axis('off') + plt.subplot(1, 3, 3) + plt.imshow(output_image[0, 0, ...].detach().cpu(), cmap="gist_gray") + plt.axis("off") plt.title("Output image") plt.show() - def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat, device): criterion = torch.nn.L1Loss() num_D = len(input_features_disc_fake) @@ -194,44 +199,43 @@ def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat for i in range(num_D): # for each discriminator num_intermediate_outputs = len(input_features_disc_fake[i]) for j in range(num_intermediate_outputs): # for each layer output - unweighted_loss = criterion(input_features_disc_fake[i][j], - input_features_disc_real[i][j].detach()) + unweighted_loss = criterion(input_features_disc_fake[i][j], input_features_disc_real[i][j].detach()) GAN_Feat_loss += unweighted_loss * lambda_feat / num_D return GAN_Feat_loss -net = SPADE_Net(spatial_dims = 2, - in_channels = 1, - out_channels = 1, - label_nc = 6, - input_shape = input_shape, - num_channels = [16, 32, 64, 128], - z_dim = 16, - is_vae = True) +net = SPADE_Net( + spatial_dims=2, + in_channels=1, + out_channels=1, + label_nc=6, + input_shape=input_shape, + num_channels=[16, 32, 64, 128], + z_dim=16, + is_vae=True, +) # + -discriminator = MultiScalePatchDiscriminator(num_d = 2, - num_layers_d = 3, - spatial_dims = 2, - num_channels = 8, - in_channels = 7, - out_channels = 7, - minimum_size_im = 128, - norm = "INSTANCE", - kernel_size = 3 - ) - -adversarial_loss = PatchAdversarialLoss(reduction = "sum", criterion = "hinge") +discriminator = MultiScalePatchDiscriminator( + num_d=2, + num_layers_d=3, + spatial_dims=2, + num_channels=8, + in_channels=7, + out_channels=7, + minimum_size_im=128, + norm="INSTANCE", + kernel_size=3, +) + +adversarial_loss = PatchAdversarialLoss(reduction="sum", criterion="hinge") # - -perceptual_loss = PerceptualLoss(spatial_dims = 2, - network_type = "vgg", - is_fake_3d = False, - pretrained = True) -perceptual_loss=perceptual_loss.to(device) +perceptual_loss = PerceptualLoss(spatial_dims=2, network_type="vgg", is_fake_3d=False, pretrained=True) +perceptual_loss = perceptual_loss.to(device) -optimizer_G = torch.optim.Adam(net.parameters(), lr = 0.0002) -optimizer_D = torch.optim.Adam(discriminator.parameters(), lr = 0.0004) +optimizer_G = torch.optim.Adam(net.parameters(), lr=0.0002) +optimizer_D = torch.optim.Adam(discriminator.parameters(), lr=0.0004) # ### Training loop # @@ -239,92 +243,96 @@ def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat net = net.to(device) discriminator = discriminator.to(device) torch.autograd.set_detect_anomaly(True) -losses = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []} -losses_val = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []} +losses = {"kld": [], "perceptual": [], "feature": [], "generator": [], "discriminator": []} +losses_val = {"kld": [], "perceptual": [], "feature": [], "generator": [], "discriminator": []} for epoch in range(num_epochs): - print("Epoch %d/%d" %(epoch, num_epochs)) + print("Epoch %d/%d" % (epoch, num_epochs)) train_bar = tqdm(enumerate(train_loader), total=len(train_loader), ncols=120) - losses_epoch = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0} + losses_epoch = {"kld": 0, "perceptual": 0, "feature": 0, "generator": 0, "discriminator": 0} for step, d in train_bar: - image = d['image'].to(device) + image = d["image"].to(device) with torch.no_grad(): - label = one_hot(d['label'], 6).to(device) + label = one_hot(d["label"], 6).to(device) optimizer_G.zero_grad() # Losses gen out, kld_loss = net(label, image) disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1)) - loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False) + loss_g = adversarial_loss(disc_fakes, target_is_real=True, for_discriminator=False) disc_reals, features_reals = discriminator(torch.cat([image, label], 1)) loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device) - loss_perc = perceptual_loss(out, target = image) - total_loss = loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat - total_loss.backward(retain_graph = True) + loss_perc = perceptual_loss(out, target=image) + total_loss = loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat + total_loss.backward(retain_graph=True) optimizer_G.step() # Store - losses_epoch['kld'] += kld_loss.item() - losses_epoch['perceptual'] += loss_perc.item() - losses_epoch['generator'] += loss_g.item() - #Train disc + losses_epoch["kld"] += kld_loss.item() + losses_epoch["perceptual"] += loss_perc.item() + losses_epoch["generator"] += loss_g.item() + # Train disc out, _ = net(label, image) disc_fakes, _ = discriminator(torch.cat([out, label], 1)) - loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True) - loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True) + loss_d_r = adversarial_loss(disc_reals, target_is_real=True, for_discriminator=True) + loss_g_f = adversarial_loss(disc_fakes, target_is_real=False, for_discriminator=True) optimizer_D.zero_grad() loss_d = loss_d_r + loss_g_f loss_d.backward() optimizer_D.step() # Store - losses_epoch['feature'] = loss_feat.item() - losses_epoch['discriminator'] = loss_d_r.item() + loss_g_f.item() + losses_epoch["feature"] = loss_feat.item() + losses_epoch["discriminator"] = loss_d_r.item() + loss_g_f.item() train_bar.set_postfix( - {"kld": kld_loss.item(), - "perceptual": loss_perc.item(), - "generator": loss_g.item(), - "feature": loss_feat.item(), - "discriminator": loss_d_r.item() + loss_g_f.item(), - }) + { + "kld": kld_loss.item(), + "perceptual": loss_perc.item(), + "generator": loss_g.item(), + "feature": loss_feat.item(), + "discriminator": loss_d_r.item() + loss_g_f.item(), + } + ) val_bar = tqdm(enumerate(val_loader), total=len(val_loader), ncols=120) - losses_epoch_val = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0} + losses_epoch_val = {"kld": 0, "perceptual": 0, "feature": 0, "generator": 0, "discriminator": 0} for step, d in val_bar: - image = d['image'].to(device) + image = d["image"].to(device) with torch.no_grad(): - label = one_hot(d['label'], 6).to(device) + label = one_hot(d["label"], 6).to(device) # Losses gen out, kld_loss = net(label, image) disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1)) - loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False) + loss_g = adversarial_loss(disc_fakes, target_is_real=True, for_discriminator=False) disc_reals, features_reals = discriminator(torch.cat([image, label], 1)) loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device) - loss_perc = perceptual_loss(out, target = image) - total_loss = loss_adv * loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat + loss_perc = perceptual_loss(out, target=image) + total_loss = loss_adv * loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat # Store - losses_epoch_val['kld'] += kld_loss.item() - losses_epoch_val['perceptual'] += loss_perc.item() - losses_epoch_val['generator'] += loss_g.item() - #Train disc + losses_epoch_val["kld"] += kld_loss.item() + losses_epoch_val["perceptual"] += loss_perc.item() + losses_epoch_val["generator"] += loss_g.item() + # Train disc out, _ = net(label, image) disc_fakes, _ = discriminator(torch.cat([out, label], 1)) - loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True) - loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True) + loss_d_r = adversarial_loss(disc_reals, target_is_real=True, for_discriminator=True) + loss_g_f = adversarial_loss(disc_fakes, target_is_real=False, for_discriminator=True) loss_d = loss_adv * (loss_d_r + loss_g_f) # Store - losses_epoch_val['feature'] = loss_feat.item() - losses_epoch_val['discriminator'] = loss_d_r.item() + loss_g_f.item() + losses_epoch_val["feature"] = loss_feat.item() + losses_epoch_val["discriminator"] = loss_d_r.item() + loss_g_f.item() val_bar.set_postfix( - {"kld": kld_loss.item(), - "perceptual": loss_perc.item(), - "generator": loss_g.item(), - "feature": loss_feat.item(), - "discriminator": loss_d_r.item() + loss_g_f.item(), - }) - if step == 0 and epoch%10==0: + { + "kld": kld_loss.item(), + "perceptual": loss_perc.item(), + "generator": loss_g.item(), + "feature": loss_feat.item(), + "discriminator": loss_d_r.item() + loss_g_f.item(), + } + ) + if step == 0 and epoch % 10 == 0: picture_results(label, image, out) for key, val in losses_epoch.items(): losses[key].append(val / len(train_loader)) @@ -333,16 +341,16 @@ def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat # Plot losses -colors = ['orangered', 'royalblue', 'hotpink', 'lime', 'goldenrod'] -plt.figure(figsize=(5,10)) +colors = ["orangered", "royalblue", "hotpink", "lime", "goldenrod"] +plt.figure(figsize=(5, 10)) ind = 0 for key, val in losses.items(): - plt.subplot(len(losses.keys()),1,ind+1) - plt.plot(val, color = colors[ind], linestyle = '-') - plt.plot(losses_val[key], color = colors[ind], linestyle = '--') + plt.subplot(len(losses.keys()), 1, ind + 1) + plt.plot(val, color=colors[ind], linestyle="-") + plt.plot(losses_val[key], color=colors[ind], linestyle="--") plt.title(key) plt.xlabel("Epochs") - ind+=1; + ind += 1 plt.tight_layout() plt.show() @@ -350,5 +358,3 @@ def feature_loss(input_features_disc_fake, input_features_disc_real, lambda_feat # **Conclusion**: from early on, the network shows the capability of discern between the different semantic layers. To achieve good image quality, more images and training time are needed (to avoid overfitting, seen in some loss plots of previous example), as well as thorough optimisation, such as establishing an adversarial schedule that makes sure that the discriminator and generator and the discriminator are trained only when their performance does not exceed a certain limit. # # - - - From 1b421954a9f08070c5d1aa3231abf85092ca8627 Mon Sep 17 00:00:00 2001 From: Mark Graham Date: Wed, 5 Jul 2023 10:25:08 -0600 Subject: [PATCH 7/7] Fix tutorial formatting --- .../2d_spade_gan/2d_spade_vae.ipynb | 277 +++++++++--------- 1 file changed, 139 insertions(+), 138 deletions(-) diff --git a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb index 9f5333b6..125ecd8b 100644 --- a/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb +++ b/tutorials/generative/2d_spade_gan/2d_spade_vae.ipynb @@ -79,7 +79,7 @@ "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\")\n", "root_dir = tempfile.mkdtemp() if directory is None else directory\n", "root_dir = Path(root_dir)\n", - "print(\"Temporary directory used: %s \" %root_dir)" + "print(\"Temporary directory used: %s \" % root_dir)" ] }, { @@ -160,8 +160,9 @@ } ], "source": [ - "gdown.download(\"https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5\",\n", - " str(root_dir / 'data.zip'))" + "gdown.download(\n", + " \"https://drive.google.com/uc?export=download&id=1SX_MCzQe-vyq09QYxECk32wZ2vxp9rx5\", str(root_dir / \"data.zip\")\n", + ")" ] }, { @@ -171,7 +172,7 @@ "metadata": {}, "outputs": [], "source": [ - "zip_obj = zipfile.ZipFile(os.path.join(root_dir, 'data.zip'), 'r')\n", + "zip_obj = zipfile.ZipFile(os.path.join(root_dir, \"data.zip\"), \"r\")\n", "zip_obj.extractall(root_dir)\n", "images_T1 = root_dir / \"OASIS_SMALL-SUBSET/T1\"\n", "images_FLAIR = root_dir / \"OASIS_SMALL-SUBSET/FLAIR\"\n", @@ -186,14 +187,16 @@ "outputs": [], "source": [ "# We create the data dictionaries that we need\n", - "all_images = [os.path.join(images_T1, i) for i in os.listdir(images_T1)] + \\\n", - " [os.path.join(images_FLAIR, i) for i in os.listdir(images_FLAIR)]\n", + "all_images = [os.path.join(images_T1, i) for i in os.listdir(images_T1)] + [\n", + " os.path.join(images_FLAIR, i) for i in os.listdir(images_FLAIR)\n", + "]\n", "np.random.shuffle(all_images)\n", - "corresponding_labels = [os.path.join(labels, i.split(\"/\")[-1].replace(i.split(\"/\")[-1].split(\"_\")[0], \"Parcellation\"))\n", - " for i in all_images]\n", - "input_dict = [{'image': i, 'label': corresponding_labels[ind]} for ind, i in enumerate(all_images)]\n", - "input_dict_train = input_dict[:int(len(input_dict)*0.9)]\n", - "input_dict_val = input_dict[int(len(input_dict)*0.9):]" + "corresponding_labels = [\n", + " os.path.join(labels, i.split(\"/\")[-1].replace(i.split(\"/\")[-1].split(\"_\")[0], \"Parcellation\")) for i in all_images\n", + "]\n", + "input_dict = [{\"image\": i, \"label\": corresponding_labels[ind]} for ind, i in enumerate(all_images)]\n", + "input_dict_train = input_dict[: int(len(input_dict) * 0.9)]\n", + "input_dict_val = input_dict[int(len(input_dict) * 0.9) :]" ] }, { @@ -213,36 +216,38 @@ }, "outputs": [], "source": [ - "preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain\n", + "preliminar_shape = input_shape + [50] # We take random slices fron the center of the brain\n", "crop_shape = input_shape + [1]\n", "base_transforms = [\n", - " monai.transforms.LoadImaged(keys = ['label', 'image']),\n", - " monai.transforms.EnsureChannelFirstd(keys=['image', 'label']),\n", - " monai.transforms.CenterSpatialCropd(keys=['label', 'image'],\n", - " roi_size=preliminar_shape),\n", - " monai.transforms.RandSpatialCropd(keys = ['label', 'image'],\n", - " roi_size=crop_shape, max_roi_size=crop_shape),\n", - " monai.transforms.SqueezeDimd(keys=['label', 'image'], dim = -1),\n", - " monai.transforms.Resized(keys = ['image', 'label'], spatial_size=input_shape),\n", + " monai.transforms.LoadImaged(keys=[\"label\", \"image\"]),\n", + " monai.transforms.EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " monai.transforms.CenterSpatialCropd(keys=[\"label\", \"image\"], roi_size=preliminar_shape),\n", + " monai.transforms.RandSpatialCropd(keys=[\"label\", \"image\"], roi_size=crop_shape, max_roi_size=crop_shape),\n", + " monai.transforms.SqueezeDimd(keys=[\"label\", \"image\"], dim=-1),\n", + " monai.transforms.Resized(keys=[\"image\", \"label\"], spatial_size=input_shape),\n", "]\n", "last_transforms = [\n", - " monai.transforms.CopyItemsd(keys=['label'], names=['label_channel']),\n", - " monai.transforms.Lambdad(keys=['label_channel'],\n", - " func=lambda l: l != 0),\n", - " monai.transforms.MaskIntensityd(keys=['image'], mask_key='label_channel'),\n", - " monai.transforms.NormalizeIntensityd(keys=['image']),\n", - " monai.transforms.ToTensord(keys=['image', 'label'])\n", - " ]\n", + " monai.transforms.CopyItemsd(keys=[\"label\"], names=[\"label_channel\"]),\n", + " monai.transforms.Lambdad(keys=[\"label_channel\"], func=lambda l: l != 0),\n", + " monai.transforms.MaskIntensityd(keys=[\"image\"], mask_key=\"label_channel\"),\n", + " monai.transforms.NormalizeIntensityd(keys=[\"image\"]),\n", + " monai.transforms.ToTensord(keys=[\"image\", \"label\"]),\n", + "]\n", "\n", "aug_transforms = [\n", - " monai.transforms.RandBiasFieldd(coeff_range=(0, 0.005), prob=0.33, keys=['image']),\n", - " monai.transforms.RandAdjustContrastd(gamma=(0.9, 1.15), prob=0.33, keys=['image']),\n", - " monai.transforms.RandGaussianNoised(prob=0.33, mean=0.0, std=np.random.uniform(0.005, 0.015),\n", - " keys=['image']),\n", - " monai.transforms.RandAffined(rotate_range=[-0.05, 0.05], shear_range=[0.001, 0.05],\n", - " scale_range=[0, 0.05], padding_mode='zeros',\n", - " mode='nearest', prob=0.33, keys=['label', 'image'])\n", - " ]\n", + " monai.transforms.RandBiasFieldd(coeff_range=(0, 0.005), prob=0.33, keys=[\"image\"]),\n", + " monai.transforms.RandAdjustContrastd(gamma=(0.9, 1.15), prob=0.33, keys=[\"image\"]),\n", + " monai.transforms.RandGaussianNoised(prob=0.33, mean=0.0, std=np.random.uniform(0.005, 0.015), keys=[\"image\"]),\n", + " monai.transforms.RandAffined(\n", + " rotate_range=[-0.05, 0.05],\n", + " shear_range=[0.001, 0.05],\n", + " scale_range=[0, 0.05],\n", + " padding_mode=\"zeros\",\n", + " mode=\"nearest\",\n", + " prob=0.33,\n", + " keys=[\"label\", \"image\"],\n", + " ),\n", + "]\n", "\n", "train_transforms = monai.transforms.Compose(base_transforms + aug_transforms + last_transforms)\n", "val_transforms = monai.transforms.Compose(base_transforms + last_transforms)\n", @@ -280,11 +285,13 @@ "source": [ "# Sanity check\n", "batch = next(iter(train_loader))\n", - "print(batch['image'].shape)\n", - "plt.subplot(1,2,1)\n", - "plt.imshow(batch['image'][0,0,...], cmap = 'gist_gray'); plt.axis('off')\n", - "plt.subplot(1,2,2)\n", - "plt.imshow(batch['label'][0,0,...], cmap = \"jet\"); plt.axis('off')\n", + "print(batch[\"image\"].shape)\n", + "plt.subplot(1, 2, 1)\n", + "plt.imshow(batch[\"image\"][0, 0, ...], cmap=\"gist_gray\")\n", + "plt.axis(\"off\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.imshow(batch[\"label\"][0, 0, ...], cmap=\"jet\")\n", + "plt.axis(\"off\")\n", "plt.show()" ] }, @@ -323,14 +330,6 @@ " return label_out" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "6af2779b", - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": 11, @@ -339,18 +338,18 @@ "outputs": [], "source": [ "def picture_results(input_label, input_image, output_image):\n", - " f = plt.figure(figsize = (4, 1.5))\n", - " plt.subplot(1,3,1)\n", - " plt.imshow(torch.argmax(input_label, 1)[0,...].detach().cpu(), cmap = 'jet')\n", - " plt.axis('off')\n", + " f = plt.figure(figsize=(4, 1.5))\n", + " plt.subplot(1, 3, 1)\n", + " plt.imshow(torch.argmax(input_label, 1)[0, ...].detach().cpu(), cmap=\"jet\")\n", + " plt.axis(\"off\")\n", " plt.title(\"Label\")\n", - " plt.subplot(1,3,2)\n", - " plt.imshow(input_image[0,0,...].detach().cpu(), cmap = 'gist_gray')\n", - " plt.axis('off')\n", + " plt.subplot(1, 3, 2)\n", + " plt.imshow(input_image[0, 0, ...].detach().cpu(), cmap=\"gist_gray\")\n", + " plt.axis(\"off\")\n", " plt.title(\"Input image\")\n", - " plt.subplot(1,3,3)\n", - " plt.imshow(output_image[0,0,...].detach().cpu(), cmap = 'gist_gray')\n", - " plt.axis('off')\n", + " plt.subplot(1, 3, 3)\n", + " plt.imshow(output_image[0, 0, ...].detach().cpu(), cmap=\"gist_gray\")\n", + " plt.axis(\"off\")\n", " plt.title(\"Output image\")\n", " plt.show()" ] @@ -369,8 +368,7 @@ " for i in range(num_D): # for each discriminator\n", " num_intermediate_outputs = len(input_features_disc_fake[i])\n", " for j in range(num_intermediate_outputs): # for each layer output\n", - " unweighted_loss = criterion(input_features_disc_fake[i][j],\n", - " input_features_disc_real[i][j].detach())\n", + " unweighted_loss = criterion(input_features_disc_fake[i][j], input_features_disc_real[i][j].detach())\n", " GAN_Feat_loss += unweighted_loss * lambda_feat / num_D\n", " return GAN_Feat_loss" ] @@ -382,14 +380,16 @@ "metadata": {}, "outputs": [], "source": [ - "net = SPADE_Net(spatial_dims = 2,\n", - " in_channels = 1,\n", - " out_channels = 1,\n", - " label_nc = 6,\n", - " input_shape = input_shape,\n", - " num_channels = [16, 32, 64, 128],\n", - " z_dim = 16,\n", - " is_vae = True)" + "net = SPADE_Net(\n", + " spatial_dims=2,\n", + " in_channels=1,\n", + " out_channels=1,\n", + " label_nc=6,\n", + " input_shape=input_shape,\n", + " num_channels=[16, 32, 64, 128],\n", + " z_dim=16,\n", + " is_vae=True,\n", + ")" ] }, { @@ -399,18 +399,19 @@ "metadata": {}, "outputs": [], "source": [ - "discriminator = MultiScalePatchDiscriminator(num_d = 2,\n", - " num_layers_d = 3,\n", - " spatial_dims = 2,\n", - " num_channels = 8,\n", - " in_channels = 7,\n", - " out_channels = 7,\n", - " minimum_size_im = 128,\n", - " norm = \"INSTANCE\",\n", - " kernel_size = 3\n", - " )\n", + "discriminator = MultiScalePatchDiscriminator(\n", + " num_d=2,\n", + " num_layers_d=3,\n", + " spatial_dims=2,\n", + " num_channels=8,\n", + " in_channels=7,\n", + " out_channels=7,\n", + " minimum_size_im=128,\n", + " norm=\"INSTANCE\",\n", + " kernel_size=3,\n", + ")\n", "\n", - "adversarial_loss = PatchAdversarialLoss(reduction = \"sum\", criterion = \"hinge\")" + "adversarial_loss = PatchAdversarialLoss(reduction=\"sum\", criterion=\"hinge\")" ] }, { @@ -429,11 +430,8 @@ } ], "source": [ - "perceptual_loss = PerceptualLoss(spatial_dims = 2,\n", - " network_type = \"vgg\",\n", - " is_fake_3d = False,\n", - " pretrained = True)\n", - "perceptual_loss=perceptual_loss.to(device)" + "perceptual_loss = PerceptualLoss(spatial_dims=2, network_type=\"vgg\", is_fake_3d=False, pretrained=True)\n", + "perceptual_loss = perceptual_loss.to(device)" ] }, { @@ -443,8 +441,8 @@ "metadata": {}, "outputs": [], "source": [ - "optimizer_G = torch.optim.Adam(net.parameters(), lr = 0.0002)\n", - "optimizer_D = torch.optim.Adam(discriminator.parameters(), lr = 0.0004)" + "optimizer_G = torch.optim.Adam(net.parameters(), lr=0.0002)\n", + "optimizer_D = torch.optim.Adam(discriminator.parameters(), lr=0.0004)" ] }, { @@ -2237,92 +2235,96 @@ "net = net.to(device)\n", "discriminator = discriminator.to(device)\n", "torch.autograd.set_detect_anomaly(True)\n", - "losses = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []}\n", - "losses_val = {'kld': [], 'perceptual': [], 'feature': [], 'generator': [], 'discriminator': []}\n", + "losses = {\"kld\": [], \"perceptual\": [], \"feature\": [], \"generator\": [], \"discriminator\": []}\n", + "losses_val = {\"kld\": [], \"perceptual\": [], \"feature\": [], \"generator\": [], \"discriminator\": []}\n", "for epoch in range(num_epochs):\n", - " print(\"Epoch %d/%d\" %(epoch, num_epochs))\n", + " print(\"Epoch %d/%d\" % (epoch, num_epochs))\n", " train_bar = tqdm(enumerate(train_loader), total=len(train_loader), ncols=120)\n", - " losses_epoch = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0}\n", + " losses_epoch = {\"kld\": 0, \"perceptual\": 0, \"feature\": 0, \"generator\": 0, \"discriminator\": 0}\n", " for step, d in train_bar:\n", - " image = d['image'].to(device)\n", + " image = d[\"image\"].to(device)\n", " with torch.no_grad():\n", - " label = one_hot(d['label'], 6).to(device)\n", + " label = one_hot(d[\"label\"], 6).to(device)\n", " optimizer_G.zero_grad()\n", "\n", " # Losses gen\n", " out, kld_loss = net(label, image)\n", " disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1))\n", - " loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False)\n", + " loss_g = adversarial_loss(disc_fakes, target_is_real=True, for_discriminator=False)\n", " disc_reals, features_reals = discriminator(torch.cat([image, label], 1))\n", " loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device)\n", - " loss_perc = perceptual_loss(out, target = image)\n", - " total_loss = loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat\n", - " total_loss.backward(retain_graph = True)\n", + " loss_perc = perceptual_loss(out, target=image)\n", + " total_loss = loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat\n", + " total_loss.backward(retain_graph=True)\n", " optimizer_G.step()\n", "\n", " # Store\n", - " losses_epoch['kld'] += kld_loss.item()\n", - " losses_epoch['perceptual'] += loss_perc.item()\n", - " losses_epoch['generator'] += loss_g.item()\n", - " #Train disc\n", + " losses_epoch[\"kld\"] += kld_loss.item()\n", + " losses_epoch[\"perceptual\"] += loss_perc.item()\n", + " losses_epoch[\"generator\"] += loss_g.item()\n", + " # Train disc\n", " out, _ = net(label, image)\n", " disc_fakes, _ = discriminator(torch.cat([out, label], 1))\n", - " loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True)\n", - " loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True)\n", + " loss_d_r = adversarial_loss(disc_reals, target_is_real=True, for_discriminator=True)\n", + " loss_g_f = adversarial_loss(disc_fakes, target_is_real=False, for_discriminator=True)\n", " optimizer_D.zero_grad()\n", " loss_d = loss_d_r + loss_g_f\n", " loss_d.backward()\n", " optimizer_D.step()\n", "\n", " # Store\n", - " losses_epoch['feature'] = loss_feat.item()\n", - " losses_epoch['discriminator'] = loss_d_r.item() + loss_g_f.item()\n", + " losses_epoch[\"feature\"] = loss_feat.item()\n", + " losses_epoch[\"discriminator\"] = loss_d_r.item() + loss_g_f.item()\n", "\n", " train_bar.set_postfix(\n", - " {\"kld\": kld_loss.item(),\n", - " \"perceptual\": loss_perc.item(),\n", - " \"generator\": loss_g.item(),\n", - " \"feature\": loss_feat.item(),\n", - " \"discriminator\": loss_d_r.item() + loss_g_f.item(),\n", - " })\n", + " {\n", + " \"kld\": kld_loss.item(),\n", + " \"perceptual\": loss_perc.item(),\n", + " \"generator\": loss_g.item(),\n", + " \"feature\": loss_feat.item(),\n", + " \"discriminator\": loss_d_r.item() + loss_g_f.item(),\n", + " }\n", + " )\n", "\n", " val_bar = tqdm(enumerate(val_loader), total=len(val_loader), ncols=120)\n", - " losses_epoch_val = {'kld': 0, 'perceptual': 0, 'feature': 0, 'generator': 0, 'discriminator': 0}\n", + " losses_epoch_val = {\"kld\": 0, \"perceptual\": 0, \"feature\": 0, \"generator\": 0, \"discriminator\": 0}\n", " for step, d in val_bar:\n", - " image = d['image'].to(device)\n", + " image = d[\"image\"].to(device)\n", " with torch.no_grad():\n", - " label = one_hot(d['label'], 6).to(device)\n", + " label = one_hot(d[\"label\"], 6).to(device)\n", " # Losses gen\n", " out, kld_loss = net(label, image)\n", " disc_fakes, features_fakes = discriminator(torch.cat([out, label], 1))\n", - " loss_g = adversarial_loss(disc_fakes, target_is_real = True, for_discriminator = False)\n", + " loss_g = adversarial_loss(disc_fakes, target_is_real=True, for_discriminator=False)\n", " disc_reals, features_reals = discriminator(torch.cat([image, label], 1))\n", " loss_feat = feature_loss(features_fakes, features_reals, lambda_feat, device)\n", - " loss_perc = perceptual_loss(out, target = image)\n", - " total_loss = loss_adv * loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat\n", + " loss_perc = perceptual_loss(out, target=image)\n", + " total_loss = loss_adv * loss_g + loss_perc * lambda_perc + kld_loss * lambda_kld + loss_feat * lambda_feat\n", " # Store\n", - " losses_epoch_val['kld'] += kld_loss.item()\n", - " losses_epoch_val['perceptual'] += loss_perc.item()\n", - " losses_epoch_val['generator'] += loss_g.item()\n", - " #Train disc\n", + " losses_epoch_val[\"kld\"] += kld_loss.item()\n", + " losses_epoch_val[\"perceptual\"] += loss_perc.item()\n", + " losses_epoch_val[\"generator\"] += loss_g.item()\n", + " # Train disc\n", " out, _ = net(label, image)\n", " disc_fakes, _ = discriminator(torch.cat([out, label], 1))\n", - " loss_d_r = adversarial_loss(disc_reals, target_is_real = True, for_discriminator = True)\n", - " loss_g_f = adversarial_loss(disc_fakes, target_is_real = False, for_discriminator = True)\n", + " loss_d_r = adversarial_loss(disc_reals, target_is_real=True, for_discriminator=True)\n", + " loss_g_f = adversarial_loss(disc_fakes, target_is_real=False, for_discriminator=True)\n", " loss_d = loss_adv * (loss_d_r + loss_g_f)\n", "\n", " # Store\n", - " losses_epoch_val['feature'] = loss_feat.item()\n", - " losses_epoch_val['discriminator'] = loss_d_r.item() + loss_g_f.item()\n", + " losses_epoch_val[\"feature\"] = loss_feat.item()\n", + " losses_epoch_val[\"discriminator\"] = loss_d_r.item() + loss_g_f.item()\n", "\n", " val_bar.set_postfix(\n", - " {\"kld\": kld_loss.item(),\n", - " \"perceptual\": loss_perc.item(),\n", - " \"generator\": loss_g.item(),\n", - " \"feature\": loss_feat.item(),\n", - " \"discriminator\": loss_d_r.item() + loss_g_f.item(),\n", - " })\n", - " if step == 0 and epoch%10==0:\n", + " {\n", + " \"kld\": kld_loss.item(),\n", + " \"perceptual\": loss_perc.item(),\n", + " \"generator\": loss_g.item(),\n", + " \"feature\": loss_feat.item(),\n", + " \"discriminator\": loss_d_r.item() + loss_g_f.item(),\n", + " }\n", + " )\n", + " if step == 0 and epoch % 10 == 0:\n", " picture_results(label, image, out)\n", " for key, val in losses_epoch.items():\n", " losses[key].append(val / len(train_loader))\n", @@ -2349,16 +2351,16 @@ ], "source": [ "# Plot losses\n", - "colors = ['orangered', 'royalblue', 'hotpink', 'lime', 'goldenrod']\n", - "plt.figure(figsize=(5,10))\n", + "colors = [\"orangered\", \"royalblue\", \"hotpink\", \"lime\", \"goldenrod\"]\n", + "plt.figure(figsize=(5, 10))\n", "ind = 0\n", "for key, val in losses.items():\n", - " plt.subplot(len(losses.keys()),1,ind+1)\n", - " plt.plot(val, color = colors[ind], linestyle = '-')\n", - " plt.plot(losses_val[key], color = colors[ind], linestyle = '--')\n", + " plt.subplot(len(losses.keys()), 1, ind + 1)\n", + " plt.plot(val, color=colors[ind], linestyle=\"-\")\n", + " plt.plot(losses_val[key], color=colors[ind], linestyle=\"--\")\n", " plt.title(key)\n", " plt.xlabel(\"Epochs\")\n", - " ind+=1;\n", + " ind += 1\n", "plt.tight_layout()\n", "plt.show()" ] @@ -2367,7 +2369,6 @@ "cell_type": "markdown", "id": "c3cf096f", "metadata": { - "lines_to_next_cell": 0, "pycharm": { "name": "#%%" }