From cc10b5f1e51c4a3c543b6d529619b7402adb94d1 Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Sat, 28 Jan 2023 21:55:58 +0000 Subject: [PATCH 1/5] Remove CLang and build options from runtests.sh Signed-off-by: Walter Hugo Lopez Pinaya --- .clang-format | 88 --------------------------------------------------- runtests.sh | 54 +------------------------------ 2 files changed, 1 insertion(+), 141 deletions(-) delete mode 100644 .clang-format diff --git a/.clang-format b/.clang-format deleted file mode 100644 index d4d02071..00000000 --- a/.clang-format +++ /dev/null @@ -1,88 +0,0 @@ ---- -AccessModifierOffset: -1 -AlignAfterOpenBracket: AlwaysBreak -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlinesLeft: true -AlignOperands: false -AlignTrailingComments: false -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: false -AllowShortCaseLabelsOnASingleLine: false -AllowShortFunctionsOnASingleLine: Empty -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: true -AlwaysBreakTemplateDeclarations: true -BinPackArguments: false -BinPackParameters: false -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - BeforeCatch: false - BeforeElse: false - IndentBraces: false -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Attach -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: false -ColumnLimit: 120 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -ForEachMacros: [ FOR_EACH_RANGE, FOR_EACH, ] -IncludeCategories: - - Regex: '^<.*\.h(pp)?>' - Priority: 1 - - Regex: '^<.*' - Priority: 2 - - Regex: '.*' - Priority: 3 -IndentCaseLabels: true -IndentWidth: 2 -IndentWrappedFunctionNames: false -KeepEmptyLinesAtTheStartOfBlocks: false -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: false -PenaltyBreakBeforeFirstCallParameter: 1 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 2000000 -PointerAlignment: Left -ReflowComments: true -SortIncludes: true -SpaceAfterCStyleCast: false -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInContainerLiterals: true -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp11 -TabWidth: 8 -UseTab: Never -... diff --git a/runtests.sh b/runtests.sh index 7b2c8dfd..77d3e11a 100755 --- a/runtests.sh +++ b/runtests.sh @@ -38,14 +38,12 @@ doNetTests=false doDryRun=false doZooTests=false doUnitTests=false -doBuild=false doBlackFormat=false doBlackFix=false doIsortFormat=false doIsortFix=false doFlake8Format=false doPylintFormat=false -doClangFormat=false doCopyRight=false doPytypeFormat=false doMypyFormat=false @@ -58,7 +56,7 @@ NUM_PARALLEL=1 PY_EXE=${MONAI_PY_EXE:-$(which python)} function print_usage { - echo "runtests.sh [--codeformat] [--autofix] [--black] [--isort] [--flake8] [--pylint] [--clangformat] [--pytype] [--mypy]" + echo "runtests.sh [--codeformat] [--autofix] [--black] [--isort] [--flake8] [--pylint] [--pytype] [--mypy]" echo " [--unittests] [--disttests] [--coverage] [--quick] [--min] [--net] [--dryrun] [-j number] [--list_tests]" echo " [--copyright] [--build] [--clean] [--precommit] [--help] [--version]" echo "" @@ -78,7 +76,6 @@ function print_usage { echo " --isort : perform \"isort\" import sort checks" echo " --flake8 : perform \"flake8\" code format checks" echo " --pylint : perform \"pylint\" code format checks" - echo " --clangformat : format csrc code using \"clang-format\"" echo " --precommit : perform source code format check and fix using \"pre-commit\"" echo "" echo "Python type check options:" @@ -93,7 +90,6 @@ function print_usage { echo " -q, --quick : skip long running unit tests and integration tests" echo " -m, --min : only run minimal unit tests which do not require optional packages" echo " --net : perform integration testing" - echo " -b, --build : compile and install the source code folder an editable release." echo " --list_tests : list unit tests and exit" echo "" echo "Misc. options:" @@ -132,32 +128,6 @@ function install_deps { ${cmdPrefix}${PY_EXE} -m pip install -r requirements-dev.txt } -function compile_cpp { - echo "Compiling and installing MONAI cpp extensions..." - # depends on setup.py behaviour for building - # currently setup.py uses environment variables: BUILD_MONAI and FORCE_CUDA - ${cmdPrefix}${PY_EXE} setup.py develop --user --uninstall - if [[ "$OSTYPE" == "darwin"* ]]; - then # clang for mac os - CC=clang CXX=clang++ ${cmdPrefix}${PY_EXE} setup.py develop --user - else - ${cmdPrefix}${PY_EXE} setup.py develop --user - fi -} - -function clang_format { - echo "Running clang-format..." - ${cmdPrefix}${PY_EXE} -m tests.clang_format_utils - clang_format_tool='.clang-format-bin/clang-format' - # Verify . - if ! type -p "$clang_format_tool" >/dev/null; then - echo "'clang-format' not found, skipping the formatting." - exit 1 - fi - find generative/csrc -type f | while read i; do $clang_format_tool -style=file -i $i; done - find generative/_extensions -type f -name "*.cpp" -o -name "*.h" -o -name "*.cuh" -o -name "*.cu" |\ - while read i; do $clang_format_tool -style=file -i $i; done -} function is_pip_installed() { return $(${PY_EXE} -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" $1) @@ -275,9 +245,6 @@ do doBlackFormat=true doCopyRight=true ;; - --clangformat) - doClangFormat=true - ;; --isort) doIsortFormat=true ;; @@ -303,9 +270,6 @@ do --copyright) doCopyRight=true ;; - -b|--build) - doBuild=true - ;; -c|--clean) doCleanup=true ;; @@ -350,14 +314,6 @@ else check_import fi -if [ $doBuild = true ] -then - echo "${separator}${blue}compile and install${noColor}" - # try to compile MONAI cpp - compile_cpp - - echo "${green}done! (to uninstall and clean up, please use \"./runtests.sh --clean\")${noColor}" -fi if [ $doCleanup = true ] then @@ -369,14 +325,6 @@ then exit fi -if [ $doClangFormat = true ] -then - echo "${separator}${blue}clang-formatting${noColor}" - - clang_format - - echo "${green}done!${noColor}" -fi # unconditionally report on the state of monai print_version From 61afbe684ee5aae498c680f4941243bf8d82d763 Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Sat, 28 Jan 2023 21:56:35 +0000 Subject: [PATCH 2/5] Remove CLang and build options from runtests.sh Signed-off-by: Walter Hugo Lopez Pinaya --- runtests.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/runtests.sh b/runtests.sh index 77d3e11a..7c273405 100755 --- a/runtests.sh +++ b/runtests.sh @@ -58,7 +58,7 @@ PY_EXE=${MONAI_PY_EXE:-$(which python)} function print_usage { echo "runtests.sh [--codeformat] [--autofix] [--black] [--isort] [--flake8] [--pylint] [--pytype] [--mypy]" echo " [--unittests] [--disttests] [--coverage] [--quick] [--min] [--net] [--dryrun] [-j number] [--list_tests]" - echo " [--copyright] [--build] [--clean] [--precommit] [--help] [--version]" + echo " [--copyright] [--clean] [--precommit] [--help] [--version]" echo "" echo "MONAI unit testing utilities." echo "" @@ -155,7 +155,6 @@ function clean_py { find ${TO_CLEAN} -depth -maxdepth 1 -type d -name ".eggs" -exec rm -r "{}" + find ${TO_CLEAN} -depth -maxdepth 1 -type d -name "generative.egg-info" -exec rm -r "{}" + - find ${TO_CLEAN} -depth -maxdepth 1 -type d -name "build" -exec rm -r "{}" + find ${TO_CLEAN} -depth -maxdepth 1 -type d -name "dist" -exec rm -r "{}" + find ${TO_CLEAN} -depth -maxdepth 1 -type d -name ".mypy_cache" -exec rm -r "{}" + find ${TO_CLEAN} -depth -maxdepth 1 -type d -name ".pytype" -exec rm -r "{}" + From 90a4f02832bd2c2742e98a94e7373aa84ef89da5 Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Sat, 28 Jan 2023 22:49:36 +0000 Subject: [PATCH 3/5] Run ./runtests.sh to format code, fix flake8 errors Signed-off-by: Walter Hugo Lopez Pinaya --- CONTRIBUTING.md | 2 +- generative/engines/trainer.py | 40 ++++++++--------- generative/inferers/inferer.py | 12 ++--- generative/losses/adversarial_loss.py | 2 +- generative/losses/perceptual.py | 42 +++-------------- generative/losses/spectral_loss.py | 7 +-- generative/metrics/fid.py | 8 ++-- generative/metrics/mmd.py | 3 +- generative/metrics/ms_ssim.py | 8 +--- generative/networks/nets/autoencoderkl.py | 12 +---- .../networks/nets/diffusion_model_unet.py | 25 +++-------- generative/networks/nets/vqvae.py | 3 +- generative/networks/schedulers/ddim.py | 7 +-- generative/networks/schedulers/ddpm.py | 7 +-- generative/networks/schedulers/pndm.py | 19 ++------ pyproject.toml | 2 +- runtests.sh | 4 +- setup.cfg | 4 +- setup.py | 4 +- tests/test_autoencoderkl.py | 2 +- tests/test_compute_ms_ssim_metric.py | 19 ++------ tests/test_diffusion_inferer.py | 28 +++--------- tests/test_diffusion_model_unet.py | 44 ++++++++---------- .../test_integration_workflows_adversarial.py | 2 +- tests/test_latent_diffusion_inferer.py | 20 +++------ tests/test_patch_gan.py | 12 ++--- tests/test_perceptual_loss.py | 18 ++------ tests/test_scheduler_ddim.py | 8 +--- tests/test_scheduler_ddpm.py | 12 ++--- tests/test_scheduler_pndm.py | 6 +-- tests/test_spectral_loss.py | 19 +++----- tests/test_vector_quantizer.py | 28 ++---------- tests/test_vqvae.py | 2 +- .../2d_autoencoderkl_tutorial.py | 5 +-- .../2d_ddpm/2d_ddpm_compare_schedulers.py | 20 ++------- .../generative/2d_ddpm/2d_ddpm_inpainting.py | 16 ++----- .../generative/2d_ddpm/2d_ddpm_tutorial.py | 16 ++----- .../2d_ddpm/2d_ddpm_tutorial_ignite.py | 12 ++--- .../2d_ddpm/2d_ddpm_tutorial_v_prediction.py | 19 ++------ .../generative/2d_ldm/2d_ldm_tutorial.py | 20 ++------- ...2d_stable_diffusion_v2_super_resolution.py | 45 +++---------------- .../generative/2d_vqgan/2d_vqgan_tutorial.py | 5 +-- .../generative/2d_vqvae/2d_vqvae_tutorial.py | 6 +-- .../3d_autoencoderkl_tutorial.py | 12 +---- .../generative/3d_ddpm/3d_ddpm_tutorial.py | 28 +++--------- .../generative/3d_ldm/3d_ldm_tutorial.py | 19 ++------ .../generative/3d_vqvae/3d_vqvae_tutorial.py | 17 ++----- ..._ddpm_classifier_free_guidance_tutorial.py | 16 ++----- .../distributed_training/ddpm_training_ddp.py | 4 +- 49 files changed, 168 insertions(+), 523 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index edf45d4c..6d0e656f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -89,7 +89,7 @@ Before submitting a pull request, we recommend that all linting and unit tests should pass, by running the following command locally: ```bash -./runtests.sh -u --net +./runtests.sh -f -u --net ``` or (for new features that would not break existing functionality): diff --git a/generative/engines/trainer.py b/generative/engines/trainer.py index 27374d9d..345e3c0c 100644 --- a/generative/engines/trainer.py +++ b/generative/engines/trainer.py @@ -11,7 +11,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Callable, Dict, Iterable, List, Optional, Sequence, Tuple, Union +from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence import torch from monai.config import IgniteInfo @@ -88,9 +88,9 @@ class AdversarialTrainer(Trainer): def __init__( self, - device: Union[torch.device, str], + device: torch.device | str, max_epochs: int, - train_data_loader: Union[Iterable, DataLoader], + train_data_loader: Iterable | DataLoader, g_network: torch.nn.Module, g_optimizer: Optimizer, g_loss_function: Callable, @@ -98,24 +98,24 @@ def __init__( d_network: torch.nn.Module, d_optimizer: Optimizer, d_loss_function: Callable, - epoch_length: Optional[int] = None, + epoch_length: int | None = None, non_blocking: bool = False, - prepare_batch: Union[Callable[[Engine, Any], Any], None] = default_prepare_batch, - iteration_update: Optional[Callable] = None, - g_inferer: Optional[Inferer] = None, - d_inferer: Optional[Inferer] = None, - postprocessing: Optional[Transform] = None, - key_train_metric: Optional[Dict[str, Metric]] = None, - additional_metrics: Optional[Dict[str, Metric]] = None, + prepare_batch: Callable[[Engine, Any], Any] | None = default_prepare_batch, + iteration_update: Callable | None = None, + g_inferer: Inferer | None = None, + d_inferer: Inferer | None = None, + postprocessing: Transform | None = None, + key_train_metric: dict[str, Metric] | None = None, + additional_metrics: dict[str, Metric] | None = None, metric_cmp_fn: Callable = default_metric_cmp_fn, - train_handlers: Optional[Sequence] = None, + train_handlers: Sequence | None = None, amp: bool = False, - event_names: Union[List[Union[str, EventEnum]], None] = None, - event_to_attr: Union[dict, None] = None, + event_names: list[str | EventEnum] | None = None, + event_to_attr: dict | None = None, decollate: bool = True, optim_set_to_none: bool = False, - to_kwargs: Union[dict, None] = None, - amp_kwargs: Union[dict, None] = None, + to_kwargs: dict | None = None, + amp_kwargs: dict | None = None, ): super().__init__( device=device, @@ -183,8 +183,8 @@ def _complete_state_dict_user_keys(self) -> None: self._state_dict_user_keys.append("recon_loss_function") def _iteration( - self, engine: AdversarialTrainer, batchdata: Dict[str, torch.Tensor] - ) -> Dict[str, Union[torch.Tensor, int, float, bool]]: + self, engine: AdversarialTrainer, batchdata: dict[str, torch.Tensor] + ) -> dict[str, torch.Tensor | int | float | bool]: """ Callback function for the Adversarial Training processing logic of 1 iteration in Ignite Engine. Return below items in a dictionary: @@ -219,8 +219,8 @@ def _iteration( if len(batch) == 2: inputs, targets = batch - args: Tuple = () - kwargs: Dict = {} + args: tuple = () + kwargs: dict = {} else: inputs, targets, args, kwargs = batch diff --git a/generative/inferers/inferer.py b/generative/inferers/inferer.py index 7f667ec3..6927f5ca 100644 --- a/generative/inferers/inferer.py +++ b/generative/inferers/inferer.py @@ -141,7 +141,7 @@ def get_likelihood( progress_bar = iter(scheduler.timesteps) intermediates = [] noise = torch.randn_like(inputs).to(inputs.device) - total_kl = torch.zeros((inputs.shape[0])).to(inputs.device) + total_kl = torch.zeros(inputs.shape[0]).to(inputs.device) for t in progress_bar: timesteps = torch.full(inputs.shape[:1], t, device=inputs.device).long() noisy_image = self.scheduler.add_noise(original_samples=inputs, noise=noise, timesteps=timesteps) @@ -228,8 +228,8 @@ def _get_decoder_log_likelihood( inputs: torch.Tensor, means: torch.Tensor, log_scales: torch.Tensor, - original_input_range: Optional[Tuple] = [0, 255], - scaled_input_range: Optional[Tuple] = [0, 1], + original_input_range: Optional[Tuple] = (0, 255), + scaled_input_range: Optional[Tuple] = (0, 1), ) -> torch.Tensor: """ Compute the log-likelihood of a Gaussian distribution discretizing to a @@ -304,11 +304,7 @@ def __call__( latent = autoencoder_model.encode_stage_2_inputs(inputs) * self.scale_factor prediction = super().__call__( - inputs=latent, - diffusion_model=diffusion_model, - noise=noise, - timesteps=timesteps, - condition=condition, + inputs=latent, diffusion_model=diffusion_model, noise=noise, timesteps=timesteps, condition=condition ) return prediction diff --git a/generative/losses/adversarial_loss.py b/generative/losses/adversarial_loss.py index 1addea8f..6c8bb07c 100644 --- a/generative/losses/adversarial_loss.py +++ b/generative/losses/adversarial_loss.py @@ -128,7 +128,7 @@ def forward( if type(input) is not list: input = [input] target_ = [] - for disc_ind, disc_out in enumerate(input): + for _, disc_out in enumerate(input): if self.criterion != AdversarialCriterions.HINGE.value: target_.append(self.get_target_tensor(disc_out, target_is_real)) else: diff --git a/generative/losses/perceptual.py b/generative/losses/perceptual.py index 932ae613..68b94d75 100644 --- a/generative/losses/perceptual.py +++ b/generative/losses/perceptual.py @@ -38,11 +38,7 @@ class PerceptualLoss(nn.Module): """ def __init__( - self, - spatial_dims: int, - network_type: str = "alex", - is_fake_3d: bool = True, - fake_3d_ratio: float = 0.5, + self, spatial_dims: int, network_type: str = "alex", is_fake_3d: bool = True, fake_3d_ratio: float = 0.5 ): super().__init__() @@ -58,11 +54,7 @@ def __init__( elif "radimagenet_" in network_type: self.perceptual_function = RadImageNetPerceptualSimilarity(net=network_type, verbose=False) else: - self.perceptual_function = LPIPS( - pretrained=True, - net=network_type, - verbose=False, - ) + self.perceptual_function = LPIPS(pretrained=True, net=network_type, verbose=False) self.is_fake_3d = is_fake_3d self.fake_3d_ratio = fake_3d_ratio @@ -90,26 +82,12 @@ def batchify_axis(x: torch.Tensor, fake_3d_perm: Tuple) -> torch.Tensor: preserved_axes.remove(spatial_axis) channel_axis = 1 - input_slices = batchify_axis( - x=input, - fake_3d_perm=( - spatial_axis, - channel_axis, - ) - + tuple(preserved_axes), - ) + input_slices = batchify_axis(x=input, fake_3d_perm=(spatial_axis, channel_axis) + tuple(preserved_axes)) indices = torch.randperm(input_slices.shape[0])[: int(input_slices.shape[0] * self.fake_3d_ratio)].to( input_slices.device ) input_slices = torch.index_select(input_slices, dim=0, index=indices) - target_slices = batchify_axis( - x=target, - fake_3d_perm=( - spatial_axis, - channel_axis, - ) - + tuple(preserved_axes), - ) + target_slices = batchify_axis(x=target, fake_3d_perm=(spatial_axis, channel_axis) + tuple(preserved_axes)) target_slices = torch.index_select(target_slices, dim=0, index=indices) axis_loss = torch.mean(self.perceptual_function(input_slices, target_slices)) @@ -150,11 +128,7 @@ class MedicalNetPerceptualSimilarity(nn.Module): verbose: if false, mute messages from torch Hub load function. """ - def __init__( - self, - net: str = "medicalnet_resnet10_23datasets", - verbose: bool = False, - ) -> None: + def __init__(self, net: str = "medicalnet_resnet10_23datasets", verbose: bool = False) -> None: super().__init__() torch.hub._validate_not_a_forked_repo = lambda a, b, c: True self.model = torch.hub.load("Warvito/MedicalNet-models", model=net, verbose=verbose) @@ -216,11 +190,7 @@ class RadImageNetPerceptualSimilarity(nn.Module): verbose: if false, mute messages from torch Hub load function. """ - def __init__( - self, - net: str = "radimagenet_resnet50", - verbose: bool = False, - ) -> None: + def __init__(self, net: str = "radimagenet_resnet50", verbose: bool = False) -> None: super().__init__() self.model = torch.hub.load("Warvito/radimagenet-models", model=net, verbose=verbose) self.eval() diff --git a/generative/losses/spectral_loss.py b/generative/losses/spectral_loss.py index 660fd55d..649a8c86 100644 --- a/generative/losses/spectral_loss.py +++ b/generative/losses/spectral_loss.py @@ -80,12 +80,7 @@ def _get_fft_amplitude(self, images: torch.Tensor) -> torch.Tensor: Returns: fourier transformation amplitude """ - img_fft = fftn( - images, - s=self.fft_signal_size, - dim=self.fft_dim, - norm=self.fft_norm, - ) + img_fft = fftn(images, s=self.fft_signal_size, dim=self.fft_dim, norm=self.fft_norm) amplitude = torch.sqrt(torch.real(img_fft) ** 2 + torch.imag(img_fft) ** 2) diff --git a/generative/metrics/fid.py b/generative/metrics/fid.py index afae75a1..14ff6517 100644 --- a/generative/metrics/fid.py +++ b/generative/metrics/fid.py @@ -60,7 +60,7 @@ def get_fid_score(y_pred: torch.Tensor, y: torch.Tensor) -> torch.Tensor: y_pred = y_pred.float() if y.ndimension() > 2: - raise ValueError(f"Inputs should have (number images, number of features) shape.") + raise ValueError("Inputs should have (number images, number of features) shape.") mu_y_pred = torch.mean(y_pred, dim=0) sigma_y_pred = _cov(y_pred, rowvar=False) @@ -114,9 +114,9 @@ def _sqrtm_newton_schulz(matrix: torch.Tensor, num_iters: int = 100) -> tuple[to error = torch.empty(1, device=matrix.device, dtype=matrix.dtype) for _ in range(num_iters): - T = 0.5 * (3.0 * i_matrix - z_matrix.mm(y_matrix)) - y_matrix = y_matrix.mm(T) - z_matrix = T.mm(z_matrix) + t = 0.5 * (3.0 * i_matrix - z_matrix.mm(y_matrix)) + y_matrix = y_matrix.mm(t) + z_matrix = t.mm(z_matrix) s_matrix = y_matrix * torch.sqrt(norm_of_matrix) diff --git a/generative/metrics/mmd.py b/generative/metrics/mmd.py index 3c652df8..6713ea12 100644 --- a/generative/metrics/mmd.py +++ b/generative/metrics/mmd.py @@ -69,7 +69,8 @@ def _compute_metric(self, y: torch.Tensor, y_pred: torch.Tensor) -> torch.Tensor if y_pred.shape != y.shape: raise ValueError( - f"y_pred and y shapes dont match after being processed by their transforms, received y_pred: {y_pred.shape} and y: {y.shape}" + "y_pred and y shapes dont match after being processed " + f"by their transforms, received y_pred: {y_pred.shape} and y: {y.shape}" ) for d in range(len(y.shape) - 1, 1, -1): diff --git a/generative/metrics/ms_ssim.py b/generative/metrics/ms_ssim.py index 7232037c..2a5047c7 100644 --- a/generative/metrics/ms_ssim.py +++ b/generative/metrics/ms_ssim.py @@ -65,13 +65,7 @@ def __init__( self.weights = weights self.reduction = reduction - self.SSIM = SSIMMetric( - self.data_range, - self.win_size, - self.k1, - self.k2, - self.spatial_dims, - ) + self.SSIM = SSIMMetric(self.data_range, self.win_size, self.k1, self.k2, self.spatial_dims) def _compute_metric(self, x: torch.Tensor, y: torch.Tensor) -> torch.Tensor: """ diff --git a/generative/networks/nets/autoencoderkl.py b/generative/networks/nets/autoencoderkl.py index 733fcdb4..d081cad5 100644 --- a/generative/networks/nets/autoencoderkl.py +++ b/generative/networks/nets/autoencoderkl.py @@ -44,11 +44,7 @@ class Upsample(nn.Module): in_channels: number of input channels to the layer. """ - def __init__( - self, - spatial_dims: int, - in_channels: int, - ) -> None: + def __init__(self, spatial_dims: int, in_channels: int) -> None: super().__init__() self.conv = Convolution( spatial_dims=spatial_dims, @@ -86,11 +82,7 @@ class Downsample(nn.Module): in_channels: number of input channels. """ - def __init__( - self, - spatial_dims: int, - in_channels: int, - ) -> None: + def __init__(self, spatial_dims: int, in_channels: int) -> None: super().__init__() self.pad = (0, 1) * spatial_dims diff --git a/generative/networks/nets/diffusion_model_unet.py b/generative/networks/nets/diffusion_model_unet.py index 57ea7b3f..8d13b76f 100644 --- a/generative/networks/nets/diffusion_model_unet.py +++ b/generative/networks/nets/diffusion_model_unet.py @@ -482,12 +482,7 @@ class Downsample(nn.Module): """ def __init__( - self, - spatial_dims: int, - num_channels: int, - use_conv: bool, - out_channels: Optional[int] = None, - padding: int = 1, + self, spatial_dims: int, num_channels: int, use_conv: bool, out_channels: Optional[int] = None, padding: int = 1 ) -> None: super().__init__() self.num_channels = num_channels @@ -527,12 +522,7 @@ class Upsample(nn.Module): """ def __init__( - self, - spatial_dims: int, - num_channels: int, - use_conv: bool, - out_channels: Optional[int] = None, - padding: int = 1, + self, spatial_dims: int, num_channels: int, use_conv: bool, out_channels: Optional[int] = None, padding: int = 1 ) -> None: super().__init__() self.num_channels = num_channels @@ -624,10 +614,7 @@ def __init__( elif down: self.downsample = Downsample(spatial_dims, in_channels, use_conv=False) - self.time_emb_proj = nn.Linear( - temb_channels, - self.out_channels, - ) + self.time_emb_proj = nn.Linear(temb_channels, self.out_channels) self.norm2 = nn.GroupNorm(num_groups=norm_num_groups, num_channels=self.out_channels, eps=norm_eps, affine=True) self.conv2 = zero_module( @@ -1197,7 +1184,7 @@ def forward( context: Optional[torch.Tensor] = None, ) -> torch.Tensor: del context - for i, resnet in enumerate(self.resnets): + for resnet in self.resnets: # pop res hidden states res_hidden_states = res_hidden_states_list[-1] res_hidden_states_list = res_hidden_states_list[:-1] @@ -1680,9 +1667,7 @@ def __init__( # time time_embed_dim = num_channels[0] * 4 self.time_embed = nn.Sequential( - nn.Linear(num_channels[0], time_embed_dim), - nn.SiLU(), - nn.Linear(time_embed_dim, time_embed_dim), + nn.Linear(num_channels[0], time_embed_dim), nn.SiLU(), nn.Linear(time_embed_dim, time_embed_dim) ) # class embedding diff --git a/generative/networks/nets/vqvae.py b/generative/networks/nets/vqvae.py index c6ef807c..361d92ec 100644 --- a/generative/networks/nets/vqvae.py +++ b/generative/networks/nets/vqvae.py @@ -25,7 +25,8 @@ class VQVAEResidualUnit(nn.Module): """ Implementation of the ResidualLayer used in the VQVAE network as originally used in Morphology-preserving Autoregressive 3D Generative Modelling of the Brain by Tudosiu et al. (https://arxiv.org/pdf/2209.03177.pdf) and - the original implementation that can be found at https://github.com/AmigoLab/SynthAnatomy/blob/main/src/networks/vqvae/baseline.py#L150. + the original implementation that can be found at + https://github.com/AmigoLab/SynthAnatomy/blob/main/src/networks/vqvae/baseline.py#L150. Args: spatial_dims: number of spatial spatial_dims of the input data. diff --git a/generative/networks/schedulers/ddim.py b/generative/networks/schedulers/ddim.py index 916d2f30..c6c4c2c6 100644 --- a/generative/networks/schedulers/ddim.py +++ b/generative/networks/schedulers/ddim.py @@ -223,12 +223,7 @@ def step( return pred_prev_sample, pred_original_sample - def add_noise( - self, - original_samples: torch.Tensor, - noise: torch.Tensor, - timesteps: torch.Tensor, - ) -> torch.Tensor: + def add_noise(self, original_samples: torch.Tensor, noise: torch.Tensor, timesteps: torch.Tensor) -> torch.Tensor: """ Add noise to the original samples. diff --git a/generative/networks/schedulers/ddpm.py b/generative/networks/schedulers/ddpm.py index 10de445c..7db5d7cb 100644 --- a/generative/networks/schedulers/ddpm.py +++ b/generative/networks/schedulers/ddpm.py @@ -243,12 +243,7 @@ def step( return pred_prev_sample, pred_original_sample - def add_noise( - self, - original_samples: torch.Tensor, - noise: torch.Tensor, - timesteps: torch.Tensor, - ) -> torch.Tensor: + def add_noise(self, original_samples: torch.Tensor, noise: torch.Tensor, timesteps: torch.Tensor) -> torch.Tensor: """ Add noise to the original samples. diff --git a/generative/networks/schedulers/pndm.py b/generative/networks/schedulers/pndm.py index 2bac3979..6e05da21 100644 --- a/generative/networks/schedulers/pndm.py +++ b/generative/networks/schedulers/pndm.py @@ -169,10 +169,7 @@ def set_timesteps(self, num_inference_steps: int, device: Optional[Union[str, to self.counter = 0 def step( - self, - model_output: torch.FloatTensor, - timestep: int, - sample: torch.FloatTensor, + self, model_output: torch.FloatTensor, timestep: int, sample: torch.FloatTensor ) -> Tuple[torch.Tensor, Any]: """ Predict the sample at the previous timestep by reversing the SDE. Core function to propagate the diffusion @@ -193,12 +190,7 @@ def step( else: return self.step_plms(model_output=model_output, timestep=timestep, sample=sample), None - def step_prk( - self, - model_output: torch.FloatTensor, - timestep: int, - sample: torch.FloatTensor, - ) -> torch.Tensor: + def step_prk(self, model_output: torch.FloatTensor, timestep: int, sample: torch.FloatTensor) -> torch.Tensor: """ Step function propagating the sample with the Runge-Kutta method. RK takes 4 forward passes to approximate the solution to the differential equation. @@ -331,12 +323,7 @@ def _get_prev_sample(self, sample: torch.Tensor, timestep: int, prev_timestep: i return prev_sample - def add_noise( - self, - original_samples: torch.Tensor, - noise: torch.Tensor, - timesteps: torch.Tensor, - ) -> torch.Tensor: + def add_noise(self, original_samples: torch.Tensor, noise: torch.Tensor, timesteps: torch.Tensor) -> torch.Tensor: """ Add noise to the original samples. diff --git a/pyproject.toml b/pyproject.toml index ac6bd03e..a7ce5bf6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ all = true [tool.pytype] # Space-separated list of files or directories to exclude. -exclude = ["versioneer.py", "_version.py"] +exclude = ["versioneer.py", "_version.py", "tutorials/"] # Space-separated list of files or directories to process. inputs = ["generative"] # Keep going past errors to analyze as many files as possible. diff --git a/runtests.sh b/runtests.sh index 7c273405..33072f81 100755 --- a/runtests.sh +++ b/runtests.sh @@ -227,8 +227,8 @@ do doIsortFormat=true doFlake8Format=true doPylintFormat=true - doPytypeFormat=true - doMypyFormat=true + doPytypeFormat=false + doMypyFormat=false doCopyRight=true ;; --disttests) diff --git a/setup.cfg b/setup.cfg index 8f0470d9..d97e1c81 100644 --- a/setup.cfg +++ b/setup.cfg @@ -20,12 +20,14 @@ ignore = B028 B907 per_file_ignores = __init__.py: F401, __main__.py: F401 -exclude = *.pyi,.git,.eggs,generative/_version.py,versioneer.py,venv,.venv,_version.py +exclude = *.pyi,.git,.eggs,generative/_version.py,versioneer.py,venv,.venv,_version.py,tutorials/ [isort] known_first_party = generative profile = black line_length = 120 +skip = .git, .eggs, venv, .venv, versioneer.py, _version.py, conf.py, monai/__init__.py +skip_glob = *.pyi [mypy] diff --git a/setup.py b/setup.py index 03fd1b59..37dca295 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,5 @@ packages=find_packages(exclude=[]), version="0.1.0", description="Installer to help to use the prototypes from MONAI generative models in other projects.", - install_requires=[ - "monai-weekly==1.2.dev2304", - ], + install_requires=["monai-weekly==1.2.dev2304"], ) diff --git a/tests/test_autoencoderkl.py b/tests/test_autoencoderkl.py index 7a8662ef..11b1ec68 100644 --- a/tests/test_autoencoderkl.py +++ b/tests/test_autoencoderkl.py @@ -14,9 +14,9 @@ import torch from monai.networks import eval_mode from parameterized import parameterized -from tests.utils import test_script_save from generative.networks.nets import AutoencoderKL +from tests.utils import test_script_save device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") diff --git a/tests/test_compute_ms_ssim_metric.py b/tests/test_compute_ms_ssim_metric.py index 42a5279f..342605e8 100644 --- a/tests/test_compute_ms_ssim_metric.py +++ b/tests/test_compute_ms_ssim_metric.py @@ -20,24 +20,13 @@ TEST_CASES = [ [ - { - "data_range": torch.tensor(1.0), - }, - { - "x": torch.ones([3, 3, 144, 144]) / 2, - "y": torch.ones([3, 3, 144, 144]) / 2, - }, + {"data_range": torch.tensor(1.0)}, + {"x": torch.ones([3, 3, 144, 144]) / 2, "y": torch.ones([3, 3, 144, 144]) / 2}, 1.0, ], [ - { - "data_range": torch.tensor(1.0), - "spatial_dims": 3, - }, - { - "x": torch.ones([3, 3, 144, 144, 144]) / 2, - "y": torch.ones([3, 3, 144, 144, 144]) / 2, - }, + {"data_range": torch.tensor(1.0), "spatial_dims": 3}, + {"x": torch.ones([3, 3, 144, 144, 144]) / 2, "y": torch.ones([3, 3, 144, 144, 144]) / 2}, 1.0, ], ] diff --git a/tests/test_diffusion_inferer.py b/tests/test_diffusion_inferer.py index b6b6bbf2..ff98a11e 100644 --- a/tests/test_diffusion_inferer.py +++ b/tests/test_diffusion_inferer.py @@ -58,9 +58,7 @@ def test_call(self, model_params, input_shape): model.eval() input = torch.randn(input_shape).to(device) noise = torch.randn(input_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = DiffusionInferer(scheduler=scheduler) scheduler.set_timesteps(num_inference_steps=10) timesteps = torch.randint(0, scheduler.num_train_timesteps, (input_shape[0],), device=input.device).long() @@ -74,9 +72,7 @@ def test_sample_intermediates(self, model_params, input_shape): model.to(device) model.eval() noise = torch.randn(input_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = DiffusionInferer(scheduler=scheduler) scheduler.set_timesteps(num_inference_steps=10) sample, intermediates = inferer.sample( @@ -91,9 +87,7 @@ def test_ddpm_sampler(self, model_params, input_shape): model.to(device) model.eval() noise = torch.randn(input_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDPMScheduler(num_train_timesteps=1000) inferer = DiffusionInferer(scheduler=scheduler) scheduler.set_timesteps(num_inference_steps=10) sample, intermediates = inferer.sample( @@ -108,9 +102,7 @@ def test_ddim_sampler(self, model_params, input_shape): model.to(device) model.eval() noise = torch.randn(input_shape).to(device) - scheduler = DDIMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDIMScheduler(num_train_timesteps=1000) inferer = DiffusionInferer(scheduler=scheduler) scheduler.set_timesteps(num_inference_steps=10) sample, intermediates = inferer.sample( @@ -127,9 +119,7 @@ def test_sampler_conditioned(self, model_params, input_shape): model.to(device) model.eval() noise = torch.randn(input_shape).to(device) - scheduler = DDIMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDIMScheduler(num_train_timesteps=1000) inferer = DiffusionInferer(scheduler=scheduler) scheduler.set_timesteps(num_inference_steps=10) conditioning = torch.randn([input_shape[0], 1, 3]).to(device) @@ -150,9 +140,7 @@ def test_get_likelihood(self, model_params, input_shape): model.to(device) model.eval() input = torch.randn(input_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = DiffusionInferer(scheduler=scheduler) scheduler.set_timesteps(num_inference_steps=10) likelihood, intermediates = inferer.get_likelihood( @@ -164,9 +152,7 @@ def test_get_likelihood(self, model_params, input_shape): def test_normal_cdf(self): from scipy.stats import norm - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = DiffusionInferer(scheduler=scheduler) x = torch.linspace(-10, 10, 20) diff --git a/tests/test_diffusion_model_unet.py b/tests/test_diffusion_model_unet.py index a5f387d0..7e116ea6 100644 --- a/tests/test_diffusion_model_unet.py +++ b/tests/test_diffusion_model_unet.py @@ -14,9 +14,9 @@ import torch from monai.networks import eval_mode from parameterized import parameterized -from tests.utils import test_script_save from generative.networks.nets import DiffusionModelUNet +from tests.utils import test_script_save UNCOND_CASES_2D = [ [ @@ -28,7 +28,7 @@ "num_channels": (8, 8, 8), "attention_levels": (False, False, False), "norm_num_groups": 8, - }, + } ], [ { @@ -40,7 +40,7 @@ "attention_levels": (False, False, False), "norm_num_groups": 8, "resblock_updown": True, - }, + } ], [ { @@ -52,7 +52,7 @@ "attention_levels": (False, False, True), "num_head_channels": 8, "norm_num_groups": 8, - }, + } ], [ { @@ -65,7 +65,7 @@ "num_head_channels": 8, "norm_num_groups": 8, "resblock_updown": True, - }, + } ], [ { @@ -77,7 +77,7 @@ "attention_levels": (False, False, True), "num_head_channels": 4, "norm_num_groups": 8, - }, + } ], [ { @@ -89,7 +89,7 @@ "attention_levels": (False, True, True), "num_head_channels": (0, 2, 4), "norm_num_groups": 8, - }, + } ], ] @@ -103,7 +103,7 @@ "num_channels": (8, 8, 8), "attention_levels": (False, False, False), "norm_num_groups": 8, - }, + } ], [ { @@ -115,7 +115,7 @@ "attention_levels": (False, False, False), "norm_num_groups": 8, "resblock_updown": True, - }, + } ], [ { @@ -127,7 +127,7 @@ "attention_levels": (False, False, True), "num_head_channels": 8, "norm_num_groups": 8, - }, + } ], [ { @@ -140,7 +140,7 @@ "num_head_channels": 8, "norm_num_groups": 8, "resblock_updown": True, - }, + } ], [ { @@ -152,7 +152,7 @@ "attention_levels": (False, False, True), "num_head_channels": 4, "norm_num_groups": 8, - }, + } ], [ { @@ -164,7 +164,7 @@ "attention_levels": (False, False, True), "num_head_channels": (0, 0, 4), "norm_num_groups": 8, - }, + } ], ] @@ -182,7 +182,7 @@ "with_conditioning": True, "transformer_num_layers": 1, "cross_attention_dim": 3, - }, + } ], [ { @@ -198,7 +198,7 @@ "transformer_num_layers": 1, "cross_attention_dim": 3, "resblock_updown": True, - }, + } ], [ { @@ -214,7 +214,7 @@ "transformer_num_layers": 1, "cross_attention_dim": 3, "upcast_attention": True, - }, + } ], ] @@ -257,7 +257,7 @@ def test_model_channels_not_multiple_of_norm_num_group(self): def test_attention_levels_with_different_length_num_head_channels(self): with self.assertRaises(ValueError): - net = DiffusionModelUNet( + DiffusionModelUNet( spatial_dims=2, in_channels=1, out_channels=1, @@ -358,10 +358,7 @@ def test_conditioned_models_no_class_labels(self): num_head_channels=8, num_class_embeds=2, ) - net.forward( - x=torch.rand((1, 1, 16, 32)), - timesteps=torch.randint(0, 1000, (1,)).long(), - ) + net.forward(x=torch.rand((1, 1, 16, 32)), timesteps=torch.randint(0, 1000, (1,)).long()) def test_script_unconditioned_2d_models(self): net = DiffusionModelUNet( @@ -469,10 +466,7 @@ def test_script_conditioned_3d_models(self): cross_attention_dim=3, ) test_script_save( - net, - torch.rand((1, 1, 16, 16, 16)), - torch.randint(0, 1000, (1,)).long(), - torch.rand((1, 1, 3)), + net, torch.rand((1, 1, 16, 16, 16)), torch.randint(0, 1000, (1,)).long(), torch.rand((1, 1, 3)) ) diff --git a/tests/test_integration_workflows_adversarial.py b/tests/test_integration_workflows_adversarial.py index ffd4d034..dc176106 100644 --- a/tests/test_integration_workflows_adversarial.py +++ b/tests/test_integration_workflows_adversarial.py @@ -24,10 +24,10 @@ from monai.networks.nets import AutoEncoder, Discriminator from monai.transforms import AsChannelFirstd, Compose, LoadImaged, RandFlipd, ScaleIntensityd from monai.utils import CommonKeys, set_determinism -from tests.utils import DistTestCase, TimedCall, skip_if_quick from generative.engines import AdversarialTrainer from generative.utils import AdversarialKeys as Keys +from tests.utils import DistTestCase, TimedCall, skip_if_quick def run_training_test(root_dir, device="cuda:0"): diff --git a/tests/test_latent_diffusion_inferer.py b/tests/test_latent_diffusion_inferer.py index 57d251c9..e258f2e9 100644 --- a/tests/test_latent_diffusion_inferer.py +++ b/tests/test_latent_diffusion_inferer.py @@ -93,9 +93,7 @@ def test_prediction_shape(self, model_type, autoencoder_params, stage_2_params, autoencoder_model.train() input = torch.randn(input_shape).to(device) noise = torch.randn(latent_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = LatentDiffusionInferer(scheduler=scheduler, scale_factor=1.0) scheduler.set_timesteps(num_inference_steps=10) timesteps = torch.randint(0, scheduler.num_train_timesteps, (input_shape[0],), device=input.device).long() @@ -117,9 +115,7 @@ def test_sample_shape(self, model_type, autoencoder_params, stage_2_params, inpu autoencoder_model.eval() autoencoder_model.train() noise = torch.randn(latent_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = LatentDiffusionInferer(scheduler=scheduler, scale_factor=1.0) scheduler.set_timesteps(num_inference_steps=10) sample = inferer.sample( @@ -140,9 +136,7 @@ def test_sample_intermediates(self, model_type, autoencoder_params, stage_2_para autoencoder_model.eval() autoencoder_model.train() noise = torch.randn(latent_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = LatentDiffusionInferer(scheduler=scheduler, scale_factor=1.0) scheduler.set_timesteps(num_inference_steps=10) sample, intermediates = inferer.sample( @@ -169,9 +163,7 @@ def test_get_likelihoods(self, model_type, autoencoder_params, stage_2_params, i autoencoder_model.eval() autoencoder_model.train() input = torch.randn(input_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = LatentDiffusionInferer(scheduler=scheduler, scale_factor=1.0) scheduler.set_timesteps(num_inference_steps=10) sample, intermediates = inferer.get_likelihood( @@ -197,9 +189,7 @@ def test_resample_likelihoods(self, model_type, autoencoder_params, stage_2_para autoencoder_model.eval() autoencoder_model.train() input = torch.randn(input_shape).to(device) - scheduler = DDPMScheduler( - num_train_timesteps=10, - ) + scheduler = DDPMScheduler(num_train_timesteps=10) inferer = LatentDiffusionInferer(scheduler=scheduler, scale_factor=1.0) scheduler.set_timesteps(num_inference_steps=10) sample, intermediates = inferer.get_likelihood( diff --git a/tests/test_patch_gan.py b/tests/test_patch_gan.py index c9e29b0e..1c0270ed 100644 --- a/tests/test_patch_gan.py +++ b/tests/test_patch_gan.py @@ -14,9 +14,9 @@ import torch from monai.networks import eval_mode from parameterized import parameterized -from tests.utils import test_script_save from generative.networks.nets.patchgan_discriminator import MultiScalePatchDiscriminator +from tests.utils import test_script_save TEST_2D = [ { @@ -70,7 +70,7 @@ "bias": False, "dropout": 0.1, "minimum_size_im": 256, - }, + } ] CASES = [TEST_2D, TEST_3D] @@ -78,13 +78,7 @@ class TestPatchGAN(unittest.TestCase): @parameterized.expand(CASES) - def test_shape( - self, - input_param, - input_data, - expected_shape, - features_lengths=None, - ): + def test_shape(self, input_param, input_data, expected_shape, features_lengths=None): net = MultiScalePatchDiscriminator(**input_param) with eval_mode(net): result, features = net.forward(input_data) diff --git a/tests/test_perceptual_loss.py b/tests/test_perceptual_loss.py index ff20758e..8abb2b0c 100644 --- a/tests/test_perceptual_loss.py +++ b/tests/test_perceptual_loss.py @@ -18,26 +18,14 @@ from generative.losses.perceptual import PerceptualLoss TEST_CASES = [ - [ - {"spatial_dims": 2, "network_type": "squeeze"}, - (2, 1, 64, 64), - (2, 1, 64, 64), - ], + [{"spatial_dims": 2, "network_type": "squeeze"}, (2, 1, 64, 64), (2, 1, 64, 64)], [ {"spatial_dims": 3, "network_type": "squeeze", "is_fake_3d": True, "fake_3d_ratio": 0.1}, (2, 1, 64, 64, 64), (2, 1, 64, 64, 64), ], - [ - {"spatial_dims": 2, "network_type": "radimagenet_resnet50"}, - (2, 1, 64, 64), - (2, 1, 64, 64), - ], - [ - {"spatial_dims": 2, "network_type": "radimagenet_resnet50"}, - (2, 3, 64, 64), - (2, 3, 64, 64), - ], + [{"spatial_dims": 2, "network_type": "radimagenet_resnet50"}, (2, 1, 64, 64), (2, 1, 64, 64)], + [{"spatial_dims": 2, "network_type": "radimagenet_resnet50"}, (2, 3, 64, 64), (2, 3, 64, 64)], [ {"spatial_dims": 3, "network_type": "radimagenet_resnet50", "is_fake_3d": True, "fake_3d_ratio": 0.1}, (2, 1, 64, 64, 64), diff --git a/tests/test_scheduler_ddim.py b/tests/test_scheduler_ddim.py index 206ae363..c6b112ba 100644 --- a/tests/test_scheduler_ddim.py +++ b/tests/test_scheduler_ddim.py @@ -50,17 +50,13 @@ def test_step_shape(self, input_param, input_shape, expected_shape): self.assertEqual(output_step[1].shape, expected_shape) def test_set_timesteps(self): - scheduler = DDIMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDIMScheduler(num_train_timesteps=1000) scheduler.set_timesteps(num_inference_steps=100) self.assertEqual(scheduler.num_inference_steps, 100) self.assertEqual(len(scheduler.timesteps), 100) def test_set_timesteps_with_num_inference_steps_bigger_than_num_train_timesteps(self): - scheduler = DDIMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDIMScheduler(num_train_timesteps=1000) with self.assertRaises(ValueError): scheduler.set_timesteps(num_inference_steps=2000) diff --git a/tests/test_scheduler_ddpm.py b/tests/test_scheduler_ddpm.py index cb635e31..21f76509 100644 --- a/tests/test_scheduler_ddpm.py +++ b/tests/test_scheduler_ddpm.py @@ -55,9 +55,7 @@ def test_step_shape(self, input_param, input_shape, expected_shape): def test_step_learned(self): for variance_type in ["learned", "learned_range"]: - scheduler = DDPMScheduler( - variance_type=variance_type, - ) + scheduler = DDPMScheduler(variance_type=variance_type) model_output = torch.randn(2, 6, 16, 16) sample = torch.randn(2, 3, 16, 16) output_step = scheduler.step(model_output=model_output, timestep=500, sample=sample) @@ -65,17 +63,13 @@ def test_step_learned(self): self.assertEqual(output_step[1].shape, sample.shape) def test_set_timesteps(self): - scheduler = DDPMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDPMScheduler(num_train_timesteps=1000) scheduler.set_timesteps(num_inference_steps=100) self.assertEqual(scheduler.num_inference_steps, 100) self.assertEqual(len(scheduler.timesteps), 100) def test_set_timesteps_with_num_inference_steps_bigger_than_num_train_timesteps(self): - scheduler = DDPMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDPMScheduler(num_train_timesteps=1000) with self.assertRaises(ValueError): scheduler.set_timesteps(num_inference_steps=2000) diff --git a/tests/test_scheduler_pndm.py b/tests/test_scheduler_pndm.py index 543f692e..ff667b86 100644 --- a/tests/test_scheduler_pndm.py +++ b/tests/test_scheduler_pndm.py @@ -43,7 +43,7 @@ def test_error_if_timesteps_not_set(self, input_param, input_shape, expected_sha with self.assertRaises(ValueError): model_output = torch.randn(input_shape) sample = torch.randn(input_shape) - output_step = scheduler.step(model_output=model_output, timestep=500, sample=sample) + scheduler.step(model_output=model_output, timestep=500, sample=sample) @parameterized.expand(TEST_CASES) def test_step_shape(self, input_param, input_shape, expected_shape): @@ -68,9 +68,7 @@ def test_set_timesteps_prk(self): self.assertEqual(len(scheduler.timesteps), 109) def test_set_timesteps_with_num_inference_steps_bigger_than_num_train_timesteps(self): - scheduler = PNDMScheduler( - num_train_timesteps=1000, - ) + scheduler = PNDMScheduler(num_train_timesteps=1000) with self.assertRaises(ValueError): scheduler.set_timesteps(num_inference_steps=2000) diff --git a/tests/test_spectral_loss.py b/tests/test_spectral_loss.py index e492e666..6662f4c3 100644 --- a/tests/test_spectral_loss.py +++ b/tests/test_spectral_loss.py @@ -14,15 +14,13 @@ import numpy as np import torch from parameterized import parameterized -from tests.utils import test_script_save from generative.losses import JukeboxLoss +from tests.utils import test_script_save TEST_CASES = [ [ - { - "spatial_dims": 2, - }, + {"spatial_dims": 2}, { "input": torch.tensor([[[[1.0, 1.0, 0.0], [0.0, 0.0, 1.0]], [[1.0, 0.0, 1.0], [0.0, 1.0, 0.0]]]]), "target": torch.tensor([[[[1.0, 0.0, 0.0], [0.0, 0.0, 1.0]], [[1.0, 0.0, 1.0], [0.0, 1.0, 0.0]]]]), @@ -30,10 +28,7 @@ 0.070648, ], [ - { - "spatial_dims": 2, - "reduction": "sum", - }, + {"spatial_dims": 2, "reduction": "sum"}, { "input": torch.tensor([[[[1.0, 1.0, 0.0], [0.0, 0.0, 1.0]], [[1.0, 0.0, 1.0], [0.0, 1.0, 0.0]]]]), "target": torch.tensor([[[[1.0, 0.0, 0.0], [0.0, 0.0, 1.0]], [[1.0, 0.0, 1.0], [0.0, 1.0, 0.0]]]]), @@ -41,9 +36,7 @@ 0.8478, ], [ - { - "spatial_dims": 3, - }, + {"spatial_dims": 3}, { "input": torch.tensor( [ @@ -73,11 +66,11 @@ def test_results(self, input_param, input_data, expected_val): results = JukeboxLoss(**input_param).forward(**input_data) np.testing.assert_allclose(results.detach().cpu().numpy(), expected_val, rtol=1e-4) - def test_2D_shape(self): + def test_2d_shape(self): results = JukeboxLoss(spatial_dims=2, reduction="none").forward(**TEST_CASES[0][1]) self.assertEqual(results.shape, (1, 2, 2, 3)) - def test_3D_shape(self): + def test_3d_shape(self): results = JukeboxLoss(spatial_dims=3, reduction="none").forward(**TEST_CASES[2][1]) self.assertEqual(results.shape, (1, 2, 2, 2, 3)) diff --git a/tests/test_vector_quantizer.py b/tests/test_vector_quantizer.py index 2933e9de..c6d32b6f 100644 --- a/tests/test_vector_quantizer.py +++ b/tests/test_vector_quantizer.py @@ -18,11 +18,7 @@ class TestEMA(unittest.TestCase): def test_ema_shape(self): - layer = EMAQuantizer( - spatial_dims=2, - num_embeddings=16, - embedding_dim=8, - ) + layer = EMAQuantizer(spatial_dims=2, num_embeddings=16, embedding_dim=8) input_shape = (1, 8, 8, 8) x = torch.randn(input_shape) layer = layer.train() @@ -36,11 +32,7 @@ def test_ema_shape(self): self.assertEqual(outputs[2].shape, (1, 8, 8)) def test_ema_quantize(self): - layer = EMAQuantizer( - spatial_dims=2, - num_embeddings=16, - embedding_dim=8, - ) + layer = EMAQuantizer(spatial_dims=2, num_embeddings=16, embedding_dim=8) input_shape = (1, 8, 8, 8) x = torch.randn(input_shape) outputs = layer.quantize(x) @@ -70,26 +62,14 @@ def test_ema(self): class TestVectorQuantizer(unittest.TestCase): def test_vector_quantizer_shape(self): - layer = VectorQuantizer( - EMAQuantizer( - spatial_dims=2, - num_embeddings=16, - embedding_dim=8, - ) - ) + layer = VectorQuantizer(EMAQuantizer(spatial_dims=2, num_embeddings=16, embedding_dim=8)) input_shape = (1, 8, 8, 8) x = torch.randn(input_shape) outputs = layer(x) self.assertEqual(outputs[1].shape, input_shape) def test_vector_quantizer_quantize(self): - layer = VectorQuantizer( - EMAQuantizer( - spatial_dims=2, - num_embeddings=16, - embedding_dim=8, - ) - ) + layer = VectorQuantizer(EMAQuantizer(spatial_dims=2, num_embeddings=16, embedding_dim=8)) input_shape = (1, 8, 8, 8) x = torch.randn(input_shape) outputs = layer.quantize(x) diff --git a/tests/test_vqvae.py b/tests/test_vqvae.py index db7f4ef5..044fd73c 100644 --- a/tests/test_vqvae.py +++ b/tests/test_vqvae.py @@ -14,9 +14,9 @@ import torch from monai.networks import eval_mode from parameterized import parameterized -from tests.utils import test_script_save from generative.networks.nets.vqvae import VQVAE +from tests.utils import test_script_save TEST_CASES = [ [ diff --git a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py index ab6642b7..9081de10 100644 --- a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py +++ b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.py @@ -144,10 +144,7 @@ ) discriminator.to(device) -perceptual_loss = PerceptualLoss( - spatial_dims=2, - network_type="alex", -) +perceptual_loss = PerceptualLoss(spatial_dims=2, network_type="alex") perceptual_loss.to(device) optimizer_g = torch.optim.Adam(params=model.parameters(), lr=1e-4) diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py b/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py index cdef02df..ca739698 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py @@ -184,12 +184,8 @@ # We use a DDPM scheduler with 1000 steps for training. For sampling, we will compare the DDPM, DDIM, and PNDM. # %% -ddpm_scheduler = DDPMScheduler( - num_train_timesteps=1000, -) -ddim_scheduler = DDIMScheduler( - num_train_timesteps=1000, -) +ddpm_scheduler = DDPMScheduler(num_train_timesteps=1000) +ddim_scheduler = DDIMScheduler(num_train_timesteps=1000) pndm_scheduler = PNDMScheduler(num_train_timesteps=1000, skip_prk_steps=True) # the range of sampling steps we want to use when testing the DDIM and PNDM schedulers @@ -243,11 +239,7 @@ optimizer.step() epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: @@ -267,11 +259,7 @@ val_loss = F.l1_loss(noise_pred.float(), noise.float()) val_epoch_loss += val_loss.item() - progress_bar.set_postfix( - { - "val_loss": val_epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"val_loss": val_epoch_loss / (step + 1)}) val_epoch_loss_list.append(val_epoch_loss / (step + 1)) # Sampling image during training diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py b/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py index a1fdfae2..5176a02e 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py @@ -176,9 +176,7 @@ ) model.to(device) -scheduler = DDPMScheduler( - num_train_timesteps=1000, -) +scheduler = DDPMScheduler(num_train_timesteps=1000) optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5) @@ -231,11 +229,7 @@ epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: @@ -253,11 +247,7 @@ val_loss = F.mse_loss(noise_pred.float(), noise.float()) val_epoch_loss += val_loss.item() - progress_bar.set_postfix( - { - "val_loss": val_epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"val_loss": val_epoch_loss / (step + 1)}) val_epoch_loss_list.append(val_epoch_loss / (step + 1)) # Sampling image during training diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py index 788d3718..91ac5874 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py @@ -175,9 +175,7 @@ ) model.to(device) -scheduler = DDPMScheduler( - num_train_timesteps=1000, -) +scheduler = DDPMScheduler(num_train_timesteps=1000) optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5) @@ -230,11 +228,7 @@ epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: @@ -252,11 +246,7 @@ val_loss = F.mse_loss(noise_pred.float(), noise.float()) val_epoch_loss += val_loss.item() - progress_bar.set_postfix( - { - "val_loss": val_epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"val_loss": val_epoch_loss / (step + 1)}) val_epoch_loss_list.append(val_epoch_loss / (step + 1)) # Sampling image during training diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py index 1db6ad83..9e170412 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py @@ -178,9 +178,7 @@ model.to(device) num_train_timesteps = 1000 -scheduler = DDPMScheduler( - num_train_timesteps=num_train_timesteps, -) +scheduler = DDPMScheduler(num_train_timesteps=num_train_timesteps) optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5) @@ -274,12 +272,8 @@ def __call__( train_handlers=train_handlers, ) ProgressBar( - persist=True, - bar_format="[{n_fmt}/{total_fmt}] {percentage:3.0f}%|{postfix} [{elapsed}<{remaining}]", -).attach( - trainer, - output_transform=from_engine(["loss"]), -) + persist=True, bar_format="[{n_fmt}/{total_fmt}] {percentage:3.0f}%|{postfix} [{elapsed}<{remaining}]" +).attach(trainer, output_transform=from_engine(["loss"])) trainer.run() diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py index 743eb76c..23156df7 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py @@ -175,12 +175,7 @@ ) model.to(device) -scheduler = DDPMScheduler( - prediction_type="v_prediction", - num_train_timesteps=1000, - beta_start=0.00085, - beta_end=0.0120, -) +scheduler = DDPMScheduler(prediction_type="v_prediction", num_train_timesteps=1000, beta_start=0.00085, beta_end=0.0120) optimizer = torch.optim.Adam(params=model.parameters(), lr=1.0e-4) @@ -227,11 +222,7 @@ epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: @@ -250,11 +241,7 @@ val_loss = F.mse_loss(noise_pred.float(), target.float()) val_epoch_loss += val_loss.item() - progress_bar.set_postfix( - { - "val_loss": val_epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"val_loss": val_epoch_loss / (step + 1)}) val_epoch_loss_list.append(val_epoch_loss / (step + 1)) # Sampling image during training diff --git a/tutorials/generative/2d_ldm/2d_ldm_tutorial.py b/tutorials/generative/2d_ldm/2d_ldm_tutorial.py index 520ab50d..ef6caf9c 100644 --- a/tutorials/generative/2d_ldm/2d_ldm_tutorial.py +++ b/tutorials/generative/2d_ldm/2d_ldm_tutorial.py @@ -120,20 +120,10 @@ # + unet = DiffusionModelUNet( - spatial_dims=2, - in_channels=3, - out_channels=3, - num_res_blocks=1, - num_channels=(128, 256, 256), - num_head_channels=256, + spatial_dims=2, in_channels=3, out_channels=3, num_res_blocks=1, num_channels=(128, 256, 256), num_head_channels=256 ) -scheduler = DDPMScheduler( - num_train_timesteps=1000, - beta_schedule="linear", - beta_start=0.0015, - beta_end=0.0195, -) +scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule="linear", beta_start=0.0015, beta_end=0.0195) inferer = DiffusionInferer(scheduler) @@ -321,11 +311,7 @@ epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: diff --git a/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.py b/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.py index 8d6329cc..58428b81 100644 --- a/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.py +++ b/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.py @@ -328,23 +328,13 @@ ) unet = unet.to(device) -scheduler = DDPMScheduler( - num_train_timesteps=1000, - beta_schedule="linear", - beta_start=0.0015, - beta_end=0.0195, -) +scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule="linear", beta_start=0.0015, beta_end=0.0195) # %% [markdown] # As mentioned, we will use the conditioned augmentation (introduced in [2] section 3 and used on Stable Diffusion Upscalers and Imagen Video [3] Section 2.5) as it has been shown critical for cascaded diffusion models, as well for super-resolution tasks. For this, we apply Gaussian noise augmentation to the low-resolution images. We will use a scheduler `low_res_scheduler` to add this noise, with the `t` step defining the signal-to-noise ratio and use the `t` value to condition the diffusion model (inputted using `class_labels` argument). # %% -low_res_scheduler = DDPMScheduler( - num_train_timesteps=1000, - beta_schedule="linear", - beta_start=0.0015, - beta_end=0.0195, -) +low_res_scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule="linear", beta_start=0.0015, beta_end=0.0195) max_noise_level = 350 @@ -397,11 +387,7 @@ epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: @@ -495,9 +481,7 @@ noise_level = 10 noise_level = torch.Tensor((noise_level,)).long().to(device) noisy_low_res_image = scheduler.add_noise( - original_samples=sampling_image, - noise=low_res_noise, - timesteps=torch.Tensor((noise_level,)).long().to(device), + original_samples=sampling_image, noise=low_res_noise, timesteps=torch.Tensor((noise_level,)).long().to(device) ) scheduler.set_timesteps(num_inference_steps=1000) for t in tqdm(scheduler.timesteps, ncols=110): @@ -519,26 +503,11 @@ axs[0, 1].set_title("Low-resolution Image") axs[0, 2].set_title("Outputted image") for i in range(0, num_samples): - axs[i, 0].imshow( - images[i, 0].cpu(), - vmin=0, - vmax=1, - cmap="gray", - ) + axs[i, 0].imshow(images[i, 0].cpu(), vmin=0, vmax=1, cmap="gray") axs[i, 0].axis("off") - axs[i, 1].imshow( - low_res_bicubic[i, 0].cpu(), - vmin=0, - vmax=1, - cmap="gray", - ) + axs[i, 1].imshow(low_res_bicubic[i, 0].cpu(), vmin=0, vmax=1, cmap="gray") axs[i, 1].axis("off") - axs[i, 2].imshow( - decoded[i, 0].cpu(), - vmin=0, - vmax=1, - cmap="gray", - ) + axs[i, 2].imshow(decoded[i, 0].cpu(), vmin=0, vmax=1, cmap="gray") axs[i, 2].axis("off") plt.tight_layout() diff --git a/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py b/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py index 4e3fa9fb..659bb48b 100644 --- a/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py +++ b/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py @@ -190,10 +190,7 @@ ) discriminator.to(device) -perceptual_loss = PerceptualLoss( - spatial_dims=2, - network_type="alex", -) +perceptual_loss = PerceptualLoss(spatial_dims=2, network_type="alex") perceptual_loss.to(device) optimizer_g = torch.optim.Adam(params=model.parameters(), lr=1e-4) diff --git a/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.py b/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.py index b1e313fe..ae9caa40 100644 --- a/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.py +++ b/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.py @@ -42,7 +42,6 @@ import matplotlib.pyplot as plt import numpy as np import torch -import torch.nn.functional as F from monai import transforms from monai.apps import MedNISTDataset from monai.config import print_config @@ -184,10 +183,7 @@ epoch_loss += recons_loss.item() progress_bar.set_postfix( - { - "recons_loss": epoch_loss / (step + 1), - "quantization_loss": quantization_loss.item() / (step + 1), - } + {"recons_loss": epoch_loss / (step + 1), "quantization_loss": quantization_loss.item() / (step + 1)} ) epoch_recon_loss_list.append(epoch_loss / (step + 1)) epoch_quant_loss_list.append(quantization_loss.item() / (step + 1)) diff --git a/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py b/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py index 019f56d0..8fbc20cc 100644 --- a/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py +++ b/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py @@ -70,11 +70,7 @@ transforms.AddChanneld(keys=["image"]), transforms.EnsureTyped(keys=["image"]), transforms.Orientationd(keys=["image"], axcodes="RAS"), - transforms.Spacingd( - keys=["image"], - pixdim=(2.4, 2.4, 2.2), - mode=("bilinear"), - ), + transforms.Spacingd(keys=["image"], pixdim=(2.4, 2.4, 2.2), mode=("bilinear")), transforms.CenterSpatialCropd(keys=["image"], roi_size=(96, 96, 64)), transforms.ScaleIntensityRangePercentilesd(keys="image", lower=0, upper=99.5, b_min=0, b_max=1), ] @@ -121,11 +117,7 @@ transforms.AddChanneld(keys=["image"]), transforms.EnsureTyped(keys=["image"]), transforms.Orientationd(keys=["image"], axcodes="RAS"), - transforms.Spacingd( - keys=["image"], - pixdim=(2.4, 2.4, 2.2), - mode=("bilinear"), - ), + transforms.Spacingd(keys=["image"], pixdim=(2.4, 2.4, 2.2), mode=("bilinear")), transforms.CenterSpatialCropd(keys=["image"], roi_size=(96, 96, 64)), transforms.ScaleIntensityRangePercentilesd(keys="image", lower=0, upper=99.5, b_min=0, b_max=1), ] diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py index 92616953..fea5a532 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py @@ -116,21 +116,13 @@ # %% train_ds = DecathlonDataset( - root_dir=root_dir, - task="Task01_BrainTumour", - transform=train_transform, - section="training", - download=True, + root_dir=root_dir, task="Task01_BrainTumour", transform=train_transform, section="training", download=True ) train_loader = DataLoader(train_ds, batch_size=16, shuffle=True, num_workers=8) val_ds = DecathlonDataset( - root_dir=root_dir, - task="Task01_BrainTumour", - transform=val_transform, - section="validation", - download=True, + root_dir=root_dir, task="Task01_BrainTumour", transform=val_transform, section="validation", download=True ) val_loader = DataLoader(val_ds, batch_size=16, shuffle=False, num_workers=8) @@ -166,9 +158,7 @@ ) model.to(device) -scheduler = DDPMScheduler( - num_train_timesteps=1000, -) +scheduler = DDPMScheduler(num_train_timesteps=1000) inferer = DiffusionInferer(scheduler) @@ -210,11 +200,7 @@ epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: @@ -229,11 +215,7 @@ val_loss = F.mse_loss(noise_pred.float(), noise.float()) val_epoch_loss += val_loss.item() - progress_bar.set_postfix( - { - "val_loss": val_epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"val_loss": val_epoch_loss / (step + 1)}) val_epoch_loss_list.append(val_epoch_loss / (step + 1)) # Sampling image during training diff --git a/tutorials/generative/3d_ldm/3d_ldm_tutorial.py b/tutorials/generative/3d_ldm/3d_ldm_tutorial.py index 34b2e9f0..5167e631 100644 --- a/tutorials/generative/3d_ldm/3d_ldm_tutorial.py +++ b/tutorials/generative/3d_ldm/3d_ldm_tutorial.py @@ -69,11 +69,7 @@ transforms.AddChanneld(keys=["image"]), transforms.EnsureTyped(keys=["image"]), transforms.Orientationd(keys=["image"], axcodes="RAS"), - transforms.Spacingd( - keys=["image"], - pixdim=(2.4, 2.4, 2.2), - mode=("bilinear"), - ), + transforms.Spacingd(keys=["image"], pixdim=(2.4, 2.4, 2.2), mode=("bilinear")), transforms.CenterSpatialCropd(keys=["image"], roi_size=(96, 96, 64)), transforms.ScaleIntensityRangePercentilesd(keys="image", lower=0, upper=99.5, b_min=0, b_max=1), ] @@ -157,12 +153,7 @@ discriminator.to(device) -scheduler = DDPMScheduler( - num_train_timesteps=1000, - beta_schedule="linear", - beta_start=0.0015, - beta_end=0.0195, -) +scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule="linear", beta_start=0.0015, beta_end=0.0195) inferer = LatentDiffusionInferer(scheduler) # - @@ -340,11 +331,7 @@ def KL_loss(z_mu, z_sigma): epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) # - diff --git a/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.py b/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.py index d999263b..1c057a3b 100644 --- a/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.py +++ b/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.py @@ -90,21 +90,13 @@ # %% train_ds = DecathlonDataset( - root_dir=root_dir, - task="Task01_BrainTumour", - transform=train_transform, - section="training", - download=True, + root_dir=root_dir, task="Task01_BrainTumour", transform=train_transform, section="training", download=True ) train_loader = DataLoader(train_ds, batch_size=16, shuffle=True, num_workers=8) val_ds = DecathlonDataset( - root_dir=root_dir, - task="Task01_BrainTumour", - transform=val_transform, - section="validation", - download=True, + root_dir=root_dir, task="Task01_BrainTumour", transform=val_transform, section="validation", download=True ) val_loader = DataLoader(val_ds, batch_size=16, shuffle=False, num_workers=8) @@ -182,10 +174,7 @@ epoch_loss += recons_loss.item() progress_bar.set_postfix( - { - "recons_loss": epoch_loss / (step + 1), - "quantization_loss": quantization_loss.item() / (step + 1), - } + {"recons_loss": epoch_loss / (step + 1), "quantization_loss": quantization_loss.item() / (step + 1)} ) epoch_recon_loss_list.append(epoch_loss / (step + 1)) epoch_quant_loss_list.append(quantization_loss.item() / (step + 1)) diff --git a/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py b/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py index d59d634c..1f64a286 100644 --- a/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py +++ b/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py @@ -204,9 +204,7 @@ ) model.to(device) -scheduler = DDPMScheduler( - num_train_timesteps=1000, -) +scheduler = DDPMScheduler(num_train_timesteps=1000) optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5) @@ -248,11 +246,7 @@ epoch_loss += loss.item() - progress_bar.set_postfix( - { - "loss": epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"loss": epoch_loss / (step + 1)}) epoch_loss_list.append(epoch_loss / (step + 1)) if (epoch + 1) % val_interval == 0: @@ -268,11 +262,7 @@ val_loss = F.mse_loss(noise_pred.float(), noise.float()) val_epoch_loss += val_loss.item() - progress_bar.set_postfix( - { - "val_loss": val_epoch_loss / (step + 1), - } - ) + progress_bar.set_postfix({"val_loss": val_epoch_loss / (step + 1)}) val_epoch_loss_list.append(val_epoch_loss / (step + 1)) total_time = time.time() - total_start diff --git a/tutorials/generative/distributed_training/ddpm_training_ddp.py b/tutorials/generative/distributed_training/ddpm_training_ddp.py index 0e76979b..f111d52a 100644 --- a/tutorials/generative/distributed_training/ddpm_training_ddp.py +++ b/tutorials/generative/distributed_training/ddpm_training_ddp.py @@ -191,9 +191,7 @@ def main_worker(args): num_head_channels=256, ) model = model.to(device) - scheduler = DDPMScheduler( - num_train_timesteps=1000, - ) + scheduler = DDPMScheduler(num_train_timesteps=1000) optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5) From 2f8d7ce4456ec052faedea05e846de017b537ebf Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Mon, 30 Jan 2023 15:42:37 +0000 Subject: [PATCH 4/5] Add changes to the ipynb files Signed-off-by: Walter Hugo Lopez Pinaya --- .../2d_autoencoderkl_tutorial.ipynb | 9 ++-- .../2d_ddpm/2d_ddpm_compare_schedulers.ipynb | 36 ++++++-------- .../2d_ddpm/2d_ddpm_compare_schedulers.py | 2 +- .../2d_ddpm/2d_ddpm_inpainting.ipynb | 20 ++------ .../generative/2d_ddpm/2d_ddpm_inpainting.py | 2 +- .../generative/2d_ddpm/2d_ddpm_tutorial.ipynb | 31 ++---------- .../generative/2d_ddpm/2d_ddpm_tutorial.py | 2 +- .../2d_ddpm/2d_ddpm_tutorial_ignite.ipynb | 16 ++----- .../2d_ddpm/2d_ddpm_tutorial_ignite.py | 4 +- .../2d_ddpm_tutorial_v_prediction.ipynb | 23 ++------- .../2d_ddpm/2d_ddpm_tutorial_v_prediction.py | 4 +- ...stable_diffusion_v2_super_resolution.ipynb | 47 ++++--------------- .../2d_vqgan/2d_vqgan_tutorial.ipynb | 17 ++----- .../generative/2d_vqgan/2d_vqgan_tutorial.py | 4 +- .../2d_vqvae/2d_vqvae_tutorial.ipynb | 2 +- .../3d_autoencoderkl_tutorial.ipynb | 14 ++---- .../3d_autoencoderkl_tutorial.py | 15 ++++++ .../generative/3d_ddpm/3d_ddpm_tutorial.ipynb | 32 +++---------- .../generative/3d_ddpm/3d_ddpm_tutorial.py | 4 +- .../3d_vqvae/3d_vqvae_tutorial.ipynb | 29 +++--------- ...pm_classifier_free_guidance_tutorial.ipynb | 20 ++------ ..._ddpm_classifier_free_guidance_tutorial.py | 4 +- 22 files changed, 100 insertions(+), 237 deletions(-) diff --git a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb index 2ecb7c56..5a0d0ed0 100644 --- a/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb +++ b/tutorials/generative/2d_autoencoderkl/2d_autoencoderkl_tutorial.ipynb @@ -784,10 +784,7 @@ } ], "source": [ - "perceptual_loss = PerceptualLoss(\n", - " spatial_dims=2,\n", - " network_type=\"alex\",\n", - ")\n", + "perceptual_loss = PerceptualLoss(spatial_dims=2, network_type=\"alex\")\n", "perceptual_loss.to(device)" ] }, @@ -1213,7 +1210,7 @@ "notebook_metadata_filter": "-all" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1227,7 +1224,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.ipynb b/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.ipynb index f0ec09a7..62de8796 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.ipynb +++ b/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.ipynb @@ -408,12 +408,8 @@ "metadata": {}, "outputs": [], "source": [ - "ddpm_scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - ")\n", - "ddim_scheduler = DDIMScheduler(\n", - " num_train_timesteps=1000,\n", - ")\n", + "ddpm_scheduler = DDPMScheduler(num_train_timesteps=1000)\n", + "ddim_scheduler = DDIMScheduler(num_train_timesteps=1000)\n", "pndm_scheduler = PNDMScheduler(num_train_timesteps=1000, skip_prk_steps=True)\n", "\n", "# the range of sampling steps we want to use when testing the DDIM and PNDM schedulers\n", @@ -822,7 +818,7 @@ "use_pretrained = False\n", "\n", "if use_pretrained:\n", - " model = torch.hub.load(\"marksgraham/pretrained_generative_models\", model='ddpm_2d', verbose=True).to(device)\n", + " model = torch.hub.load(\"marksgraham/pretrained_generative_models\", model=\"ddpm_2d\", verbose=True).to(device)\n", "else:\n", " n_epochs = 100\n", " val_interval = 10\n", @@ -854,11 +850,7 @@ " optimizer.step()\n", " epoch_loss += loss.item()\n", "\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"loss\": epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n", " epoch_loss_list.append(epoch_loss / (step + 1))\n", "\n", " if (epoch + 1) % val_interval == 0:\n", @@ -868,7 +860,9 @@ " progress_bar.set_description(f\"Epoch {epoch} - Validation set\")\n", " for step, batch in progress_bar:\n", " images = batch[\"image\"].to(device)\n", - " timesteps = torch.randint(0, ddpm_scheduler.num_train_timesteps, (images.shape[0],), device=device).long()\n", + " timesteps = torch.randint(\n", + " 0, ddpm_scheduler.num_train_timesteps, (images.shape[0],), device=device\n", + " ).long()\n", " noise = torch.randn_like(images).to(device)\n", " with torch.no_grad():\n", " noisy_image = ddpm_scheduler.add_noise(original_samples=images, noise=noise, timesteps=timesteps)\n", @@ -876,11 +870,7 @@ " val_loss = F.l1_loss(noise_pred.float(), noise.float())\n", "\n", " val_epoch_loss += val_loss.item()\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"val_loss\": val_epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"val_loss\": val_epoch_loss / (step + 1)})\n", " val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n", "\n", " # Sampling image during training\n", @@ -901,7 +891,9 @@ " plt.imshow(image[0, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n", " plt.ylabel(\"DDIM\")\n", " if idx == 0:\n", - " plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False)\n", + " plt.tick_params(\n", + " top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False\n", + " )\n", " else:\n", " plt.axis(\"off\")\n", " plt.title(f\"{reduced_sampling_steps} steps\")\n", @@ -913,7 +905,9 @@ " plt.imshow(image[0, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n", " plt.ylabel(\"PNDM\")\n", " if idx == 0:\n", - " plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False)\n", + " plt.tick_params(\n", + " top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False\n", + " )\n", " else:\n", " plt.axis(\"off\")\n", " plt.title(f\"{reduced_sampling_steps} steps\")\n", @@ -1102,7 +1096,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.13" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py b/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py index ca739698..a6dfe00b 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_compare_schedulers.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.ipynb b/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.ipynb index f4c7856c..21d5e83f 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.ipynb +++ b/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.ipynb @@ -377,9 +377,7 @@ ")\n", "model.to(device)\n", "\n", - "scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - ")\n", + "scheduler = DDPMScheduler(num_train_timesteps=1000)\n", "\n", "optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5)\n", "\n", @@ -638,7 +636,7 @@ "use_pretrained = False\n", "\n", "if use_pretrained:\n", - " model = torch.hub.load(\"marksgraham/pretrained_generative_models\", model='ddpm_2d', verbose=True).to(device)\n", + " model = torch.hub.load(\"marksgraham/pretrained_generative_models\", model=\"ddpm_2d\", verbose=True).to(device)\n", "else:\n", " n_epochs = 50\n", " val_interval = 5\n", @@ -676,11 +674,7 @@ "\n", " epoch_loss += loss.item()\n", "\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"loss\": epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n", " epoch_loss_list.append(epoch_loss / (step + 1))\n", "\n", " if (epoch + 1) % val_interval == 0:\n", @@ -698,11 +692,7 @@ " val_loss = F.mse_loss(noise_pred.float(), noise.float())\n", "\n", " val_epoch_loss += val_loss.item()\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"val_loss\": val_epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"val_loss\": val_epoch_loss / (step + 1)})\n", " val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n", "\n", " # Sampling image during training\n", @@ -924,7 +914,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.13" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py b/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py index 5176a02e..ea6a1f8f 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_inpainting.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.ipynb b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.ipynb index 1830af19..673170a8 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.ipynb +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.ipynb @@ -42,7 +42,6 @@ "execution_count": 2, "id": "dd62a552", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -138,7 +137,6 @@ "execution_count": 3, "id": "8fc58c80", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -171,7 +169,6 @@ "execution_count": 4, "id": "ad5a1948", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -197,7 +194,6 @@ "execution_count": 5, "id": "65e1c200", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -236,7 +232,6 @@ "execution_count": 6, "id": "e2f9bebd", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -276,7 +271,6 @@ "execution_count": 7, "id": "938318c2", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -326,7 +320,6 @@ "execution_count": 8, "id": "b698f4f8", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -379,7 +372,6 @@ "execution_count": 9, "id": "2c52e4f4", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -400,9 +392,7 @@ ")\n", "model.to(device)\n", "\n", - "scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - ")\n", + "scheduler = DDPMScheduler(num_train_timesteps=1000)\n", "\n", "optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5)\n", "\n", @@ -425,7 +415,6 @@ "execution_count": 10, "id": "0f697a13", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false }, @@ -774,7 +763,7 @@ "use_pretrained = False\n", "\n", "if use_pretrained:\n", - " model = torch.hub.load(\"marksgraham/pretrained_generative_models\", model='ddpm_2d', verbose=True).to(device)\n", + " model = torch.hub.load(\"marksgraham/pretrained_generative_models\", model=\"ddpm_2d\", verbose=True).to(device)\n", "else:\n", " n_epochs = 75\n", " val_interval = 5\n", @@ -812,11 +801,7 @@ "\n", " epoch_loss += loss.item()\n", "\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"loss\": epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n", " epoch_loss_list.append(epoch_loss / (step + 1))\n", "\n", " if (epoch + 1) % val_interval == 0:\n", @@ -834,11 +819,7 @@ " val_loss = F.mse_loss(noise_pred.float(), noise.float())\n", "\n", " val_epoch_loss += val_loss.item()\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"val_loss\": val_epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"val_loss\": val_epoch_loss / (step + 1)})\n", " val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n", "\n", " # Sampling image during training\n", @@ -871,7 +852,6 @@ "execution_count": 11, "id": "2cdcda81", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -921,7 +901,6 @@ "execution_count": 12, "id": "1427e5d4", "metadata": { - "collapsed": false, "jupyter": { "outputs_hidden": false } @@ -1005,7 +984,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.13" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py index 91ac5874..0384d33e 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: # display_name: Python 3 (ipykernel) # language: python diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.ipynb b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.ipynb index a9f90771..f831108e 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.ipynb +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.ipynb @@ -395,9 +395,7 @@ "model.to(device)\n", "\n", "num_train_timesteps = 1000\n", - "scheduler = DDPMScheduler(\n", - " num_train_timesteps=num_train_timesteps,\n", - ")\n", + "scheduler = DDPMScheduler(num_train_timesteps=num_train_timesteps)\n", "\n", "optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5)\n", "\n", @@ -2189,12 +2187,8 @@ " train_handlers=train_handlers,\n", ")\n", "ProgressBar(\n", - " persist=True,\n", - " bar_format=\"[{n_fmt}/{total_fmt}] {percentage:3.0f}%|{postfix} [{elapsed}<{remaining}]\",\n", - ").attach(\n", - " trainer,\n", - " output_transform=from_engine([\"loss\"]),\n", - ")\n", + " persist=True, bar_format=\"[{n_fmt}/{total_fmt}] {percentage:3.0f}%|{postfix} [{elapsed}<{remaining}]\"\n", + ").attach(trainer, output_transform=from_engine([\"loss\"]))\n", "\n", "\n", "trainer.run()" @@ -2283,7 +2277,7 @@ "formats": "ipynb,py:percent" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -2297,7 +2291,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py index 9e170412..bc67a074 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_ignite.py @@ -6,9 +6,9 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: -# display_name: Python 3 +# display_name: Python 3 (ipykernel) # language: python # name: python3 # --- diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.ipynb b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.ipynb index 613a877e..7df8fd35 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.ipynb +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.ipynb @@ -392,12 +392,7 @@ ")\n", "model.to(device)\n", "\n", - "scheduler = DDPMScheduler(\n", - " prediction_type=\"v_prediction\",\n", - " num_train_timesteps=1000,\n", - " beta_start = 0.00085,\n", - " beta_end = 0.0120,\n", - ")\n", + "scheduler = DDPMScheduler(prediction_type=\"v_prediction\", num_train_timesteps=1000, beta_start=0.00085, beta_end=0.0120)\n", "\n", "optimizer = torch.optim.Adam(params=model.parameters(), lr=1.0e-4)\n", "\n", @@ -800,11 +795,7 @@ "\n", " epoch_loss += loss.item()\n", "\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"loss\": epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n", " epoch_loss_list.append(epoch_loss / (step + 1))\n", "\n", " if (epoch + 1) % val_interval == 0:\n", @@ -823,11 +814,7 @@ " val_loss = F.mse_loss(noise_pred.float(), target.float())\n", "\n", " val_epoch_loss += val_loss.item()\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"val_loss\": val_epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"val_loss\": val_epoch_loss / (step + 1)})\n", " val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n", "\n", " # Sampling image during training\n", @@ -977,7 +964,7 @@ "formats": "py:percent,ipynb" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -991,7 +978,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py index 23156df7..fcc4b30e 100644 --- a/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py +++ b/tutorials/generative/2d_ddpm/2d_ddpm_tutorial_v_prediction.py @@ -6,9 +6,9 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: -# display_name: Python 3 +# display_name: Python 3 (ipykernel) # language: python # name: python3 # --- diff --git a/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.ipynb b/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.ipynb index e561d7c6..25d59473 100644 --- a/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.ipynb +++ b/tutorials/generative/2d_super_resolution/2d_stable_diffusion_v2_super_resolution.ipynb @@ -886,12 +886,7 @@ ")\n", "unet = unet.to(device)\n", "\n", - "scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - " beta_schedule=\"linear\",\n", - " beta_start=0.0015,\n", - " beta_end=0.0195,\n", - ")" + "scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule=\"linear\", beta_start=0.0015, beta_end=0.0195)" ] }, { @@ -909,12 +904,7 @@ "metadata": {}, "outputs": [], "source": [ - "low_res_scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - " beta_schedule=\"linear\",\n", - " beta_start=0.0015,\n", - " beta_end=0.0195,\n", - ")\n", + "low_res_scheduler = DDPMScheduler(num_train_timesteps=1000, beta_schedule=\"linear\", beta_start=0.0015, beta_end=0.0195)\n", "\n", "max_noise_level = 350" ] @@ -1497,11 +1487,7 @@ "\n", " epoch_loss += loss.item()\n", "\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"loss\": epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n", " epoch_loss_list.append(epoch_loss / (step + 1))\n", "\n", " if (epoch + 1) % val_interval == 0:\n", @@ -1621,9 +1607,7 @@ "noise_level = 10\n", "noise_level = torch.Tensor((noise_level,)).long().to(device)\n", "noisy_low_res_image = scheduler.add_noise(\n", - " original_samples=sampling_image,\n", - " noise=low_res_noise,\n", - " timesteps=torch.Tensor((noise_level,)).long().to(device),\n", + " original_samples=sampling_image, noise=low_res_noise, timesteps=torch.Tensor((noise_level,)).long().to(device)\n", ")\n", "scheduler.set_timesteps(num_inference_steps=1000)\n", "for t in tqdm(scheduler.timesteps, ncols=110):\n", @@ -1663,26 +1647,11 @@ "axs[0, 1].set_title(\"Low-resolution Image\")\n", "axs[0, 2].set_title(\"Outputted image\")\n", "for i in range(0, num_samples):\n", - " axs[i, 0].imshow(\n", - " images[i, 0].cpu(),\n", - " vmin=0,\n", - " vmax=1,\n", - " cmap=\"gray\",\n", - " )\n", + " axs[i, 0].imshow(images[i, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n", " axs[i, 0].axis(\"off\")\n", - " axs[i, 1].imshow(\n", - " low_res_bicubic[i, 0].cpu(),\n", - " vmin=0,\n", - " vmax=1,\n", - " cmap=\"gray\",\n", - " )\n", + " axs[i, 1].imshow(low_res_bicubic[i, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n", " axs[i, 1].axis(\"off\")\n", - " axs[i, 2].imshow(\n", - " decoded[i, 0].cpu(),\n", - " vmin=0,\n", - " vmax=1,\n", - " cmap=\"gray\",\n", - " )\n", + " axs[i, 2].imshow(decoded[i, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n", " axs[i, 2].axis(\"off\")\n", "plt.tight_layout()" ] @@ -1727,7 +1696,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.ipynb b/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.ipynb index bc7f2ca7..c2e54256 100644 --- a/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.ipynb +++ b/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.ipynb @@ -374,10 +374,7 @@ ")\n", "discriminator.to(device)\n", "\n", - "perceptual_loss = PerceptualLoss(\n", - " spatial_dims=2,\n", - " network_type=\"alex\",\n", - ")\n", + "perceptual_loss = PerceptualLoss(spatial_dims=2, network_type=\"alex\")\n", "perceptual_loss.to(device)\n", "\n", "optimizer_g = torch.optim.Adam(params=model.parameters(), lr=1e-4)\n", @@ -492,13 +489,7 @@ "Epoch 69: 100%|██████████| 32/32 [00:58<00:00, 1.83s/it, recons_loss=0.0217, gen_loss=0.325, disc_loss=0.238]\n", "Epoch 70: 100%|██████████| 32/32 [00:58<00:00, 1.82s/it, recons_loss=0.0219, gen_loss=0.289, disc_loss=0.249]\n", "Epoch 71: 100%|██████████| 32/32 [00:58<00:00, 1.83s/it, recons_loss=0.0216, gen_loss=0.323, disc_loss=0.242]\n", - "Epoch 72: 100%|██████████| 32/32 [00:58<00:00, 1.82s/it, recons_loss=0.0217, gen_loss=0.301, disc_loss=0.237]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ + "Epoch 72: 100%|██████████| 32/32 [00:58<00:00, 1.82s/it, recons_loss=0.0217, gen_loss=0.301, disc_loss=0.237]\n", "Epoch 73: 100%|███████████| 32/32 [00:58<00:00, 1.82s/it, recons_loss=0.0221, gen_loss=0.293, disc_loss=0.24]\n", "Epoch 74: 100%|██████████| 32/32 [00:58<00:00, 1.82s/it, recons_loss=0.0218, gen_loss=0.313, disc_loss=0.247]\n", "Epoch 75: 100%|██████████| 32/32 [00:58<00:00, 1.82s/it, recons_loss=0.0221, gen_loss=0.308, disc_loss=0.245]\n", @@ -794,7 +785,7 @@ "formats": "ipynb,py:percent" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -808,7 +799,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py b/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py index 659bb48b..a2ebdbf7 100644 --- a/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py +++ b/tutorials/generative/2d_vqgan/2d_vqgan_tutorial.py @@ -6,9 +6,9 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: -# display_name: Python 3 +# display_name: Python 3 (ipykernel) # language: python # name: python3 # --- diff --git a/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.ipynb b/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.ipynb index d7690ff9..6e5f76c4 100644 --- a/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.ipynb +++ b/tutorials/generative/2d_vqvae/2d_vqvae_tutorial.ipynb @@ -929,7 +929,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.10.6" }, "vscode": { "interpreter": { diff --git a/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.ipynb b/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.ipynb index 0ac4dcbf..8e164b82 100644 --- a/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.ipynb +++ b/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.ipynb @@ -239,11 +239,7 @@ " transforms.AddChanneld(keys=[\"image\"]),\n", " transforms.EnsureTyped(keys=[\"image\"]),\n", " transforms.Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", - " transforms.Spacingd(\n", - " keys=[\"image\"],\n", - " pixdim=(2.4, 2.4, 2.2),\n", - " mode=(\"bilinear\"),\n", - " ),\n", + " transforms.Spacingd(keys=[\"image\"], pixdim=(2.4, 2.4, 2.2), mode=(\"bilinear\")),\n", " transforms.CenterSpatialCropd(keys=[\"image\"], roi_size=(96, 96, 64)),\n", " transforms.ScaleIntensityRangePercentilesd(keys=\"image\", lower=0, upper=99.5, b_min=0, b_max=1),\n", " ]\n", @@ -367,11 +363,7 @@ " transforms.AddChanneld(keys=[\"image\"]),\n", " transforms.EnsureTyped(keys=[\"image\"]),\n", " transforms.Orientationd(keys=[\"image\"], axcodes=\"RAS\"),\n", - " transforms.Spacingd(\n", - " keys=[\"image\"],\n", - " pixdim=(2.4, 2.4, 2.2),\n", - " mode=(\"bilinear\"),\n", - " ),\n", + " transforms.Spacingd(keys=[\"image\"], pixdim=(2.4, 2.4, 2.2), mode=(\"bilinear\")),\n", " transforms.CenterSpatialCropd(keys=[\"image\"], roi_size=(96, 96, 64)),\n", " transforms.ScaleIntensityRangePercentilesd(keys=\"image\", lower=0, upper=99.5, b_min=0, b_max=1),\n", " ]\n", @@ -979,7 +971,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py b/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py index 8fbc20cc..97979189 100644 --- a/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py +++ b/tutorials/generative/3d_autoencoderkl/3d_autoencoderkl_tutorial.py @@ -1,3 +1,18 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py +# 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 +# --- + # # 3D AutoencoderKL # This demo is a toy example of how to use MONAI's AutoencoderKL. In particular, it uses the Autoencoder with a Kullback-Leibler regularisation as implemented by Rombach et. al [1]. diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb index e1fb133a..7ea3b769 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.ipynb @@ -246,21 +246,13 @@ ], "source": [ "train_ds = DecathlonDataset(\n", - " root_dir=root_dir,\n", - " task=\"Task01_BrainTumour\",\n", - " transform=train_transform,\n", - " section=\"training\",\n", - " download=True,\n", + " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=train_transform, section=\"training\", download=True\n", ")\n", "\n", "train_loader = DataLoader(train_ds, batch_size=16, shuffle=True, num_workers=8)\n", "\n", "val_ds = DecathlonDataset(\n", - " root_dir=root_dir,\n", - " task=\"Task01_BrainTumour\",\n", - " transform=val_transform,\n", - " section=\"validation\",\n", - " download=True,\n", + " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=val_transform, section=\"validation\", download=True\n", ")\n", "\n", "val_loader = DataLoader(val_ds, batch_size=16, shuffle=False, num_workers=8)" @@ -332,9 +324,7 @@ ")\n", "model.to(device)\n", "\n", - "scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - ")\n", + "scheduler = DDPMScheduler(num_train_timesteps=1000)\n", "\n", "inferer = DiffusionInferer(scheduler)\n", "\n", @@ -665,11 +655,7 @@ "\n", " epoch_loss += loss.item()\n", "\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"loss\": epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n", " epoch_loss_list.append(epoch_loss / (step + 1))\n", "\n", " if (epoch + 1) % val_interval == 0:\n", @@ -684,11 +670,7 @@ " val_loss = F.mse_loss(noise_pred.float(), noise.float())\n", "\n", " val_epoch_loss += val_loss.item()\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"val_loss\": val_epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"val_loss\": val_epoch_loss / (step + 1)})\n", " val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n", "\n", " # Sampling image during training\n", @@ -819,7 +801,7 @@ "formats": "py:percent,ipynb" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -833,7 +815,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py index fea5a532..7c3d3ce3 100644 --- a/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py +++ b/tutorials/generative/3d_ddpm/3d_ddpm_tutorial.py @@ -6,9 +6,9 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: -# display_name: Python 3 +# display_name: Python 3 (ipykernel) # language: python # name: python3 # --- diff --git a/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.ipynb b/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.ipynb index e70f08a0..a898f0cc 100644 --- a/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.ipynb +++ b/tutorials/generative/3d_vqvae/3d_vqvae_tutorial.ipynb @@ -250,21 +250,13 @@ ], "source": [ "train_ds = DecathlonDataset(\n", - " root_dir=root_dir,\n", - " task=\"Task01_BrainTumour\",\n", - " transform=train_transform,\n", - " section=\"training\",\n", - " download=True,\n", + " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=train_transform, section=\"training\", download=True\n", ")\n", "\n", "train_loader = DataLoader(train_ds, batch_size=16, shuffle=True, num_workers=8)\n", "\n", "val_ds = DecathlonDataset(\n", - " root_dir=root_dir,\n", - " task=\"Task01_BrainTumour\",\n", - " transform=val_transform,\n", - " section=\"validation\",\n", - " download=True,\n", + " root_dir=root_dir, task=\"Task01_BrainTumour\", transform=val_transform, section=\"validation\", download=True\n", ")\n", "\n", "val_loader = DataLoader(val_ds, batch_size=16, shuffle=False, num_workers=8)" @@ -593,13 +585,7 @@ "Epoch 69: 100%|███████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00888, quantization_loss=5.46e-6]\n", "Epoch 70: 100%|███████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00874, quantization_loss=6.97e-6]\n", "Epoch 71: 100%|████████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00852, quantization_loss=4.5e-6]\n", - "Epoch 72: 100%|███████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00837, quantization_loss=3.29e-6]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ + "Epoch 72: 100%|███████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00837, quantization_loss=3.29e-6]\n", "Epoch 73: 100%|███████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00836, quantization_loss=3.99e-6]\n", "Epoch 74: 100%|███████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00851, quantization_loss=4.51e-6]\n", "Epoch 75: 100%|███████████████| 25/25 [00:37<00:00, 1.51s/it, recons_loss=0.00852, quantization_loss=2.96e-6]\n", @@ -669,10 +655,7 @@ " epoch_loss += recons_loss.item()\n", "\n", " progress_bar.set_postfix(\n", - " {\n", - " \"recons_loss\": epoch_loss / (step + 1),\n", - " \"quantization_loss\": quantization_loss.item() / (step + 1),\n", - " }\n", + " {\"recons_loss\": epoch_loss / (step + 1), \"quantization_loss\": quantization_loss.item() / (step + 1)}\n", " )\n", " epoch_recon_loss_list.append(epoch_loss / (step + 1))\n", " epoch_quant_loss_list.append(quantization_loss.item() / (step + 1))\n", @@ -872,7 +855,7 @@ "notebook_metadata_filter": "-all" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -886,7 +869,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.ipynb b/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.ipynb index f8e67fbd..8d6778ea 100644 --- a/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.ipynb +++ b/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.ipynb @@ -435,9 +435,7 @@ ")\n", "model.to(device)\n", "\n", - "scheduler = DDPMScheduler(\n", - " num_train_timesteps=1000,\n", - ")\n", + "scheduler = DDPMScheduler(num_train_timesteps=1000)\n", "\n", "optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5)\n", "\n", @@ -586,11 +584,7 @@ "\n", " epoch_loss += loss.item()\n", "\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"loss\": epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"loss\": epoch_loss / (step + 1)})\n", " epoch_loss_list.append(epoch_loss / (step + 1))\n", "\n", " if (epoch + 1) % val_interval == 0:\n", @@ -606,11 +600,7 @@ " val_loss = F.mse_loss(noise_pred.float(), noise.float())\n", "\n", " val_epoch_loss += val_loss.item()\n", - " progress_bar.set_postfix(\n", - " {\n", - " \"val_loss\": val_epoch_loss / (step + 1),\n", - " }\n", - " )\n", + " progress_bar.set_postfix({\"val_loss\": val_epoch_loss / (step + 1)})\n", " val_epoch_loss_list.append(val_epoch_loss / (step + 1))\n", "\n", "total_time = time.time() - total_start\n", @@ -756,7 +746,7 @@ "formats": "py:percent,ipynb" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -770,7 +760,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.6" } }, "nbformat": 4, diff --git a/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py b/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py index 1f64a286..e8dcd049 100644 --- a/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py +++ b/tutorials/generative/classifier_free_guidance/2d_ddpm_classifier_free_guidance_tutorial.py @@ -6,9 +6,9 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.14.1 +# jupytext_version: 1.14.4 # kernelspec: -# display_name: Python 3 +# display_name: Python 3 (ipykernel) # language: python # name: python3 # --- From c6a2debf94031e2ce93e8a79abe00c701eb33da3 Mon Sep 17 00:00:00 2001 From: Walter Hugo Lopez Pinaya Date: Mon, 30 Jan 2023 15:45:17 +0000 Subject: [PATCH 5/5] Comment black and isort from pre-commit Signed-off-by: Walter Hugo Lopez Pinaya --- .pre-commit-config.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9af061d4..9f5cec2c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -63,12 +63,12 @@ repos: - id: pycln args: [--config=pyproject.toml] - - repo: https://github.com/psf/black - rev: 22.3.0 - hooks: - - id: black - - - repo: https://github.com/PyCQA/isort - rev: 5.9.3 - hooks: - - id: isort +# - repo: https://github.com/psf/black +# rev: 22.3.0 +# hooks: +# - id: black +# +# - repo: https://github.com/PyCQA/isort +# rev: 5.9.3 +# hooks: +# - id: isort