From 3a483ca94114cf06fce74b95b71a579d252344d4 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Tue, 24 Nov 2020 19:42:23 +0100 Subject: [PATCH 01/55] Add DCGAN module --- docs/source/conf.py | 241 +++++++++++---------- pl_bolts/models/gans/dcgan/__init__.py | 0 pl_bolts/models/gans/dcgan/components.py | 62 ++++++ pl_bolts/models/gans/dcgan/dcgan_module.py | 121 +++++++++++ 4 files changed, 305 insertions(+), 119 deletions(-) create mode 100644 pl_bolts/models/gans/dcgan/__init__.py create mode 100644 pl_bolts/models/gans/dcgan/components.py create mode 100644 pl_bolts/models/gans/dcgan/dcgan_module.py diff --git a/docs/source/conf.py b/docs/source/conf.py index d42134a1fa..5fa3391370 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -25,19 +25,19 @@ from sphinx.ext import apidoc PATH_HERE = os.path.abspath(os.path.dirname(__file__)) -PATH_ROOT = os.path.join(PATH_HERE, '..', '..') +PATH_ROOT = os.path.join(PATH_HERE, "..", "..") sys.path.insert(0, os.path.abspath(PATH_ROOT)) builtins.__LIGHTNING_BOLT_SETUP__ = True -SPHINX_MOCK_REQUIREMENTS = int(os.environ.get('SPHINX_MOCK_REQUIREMENTS', True)) +SPHINX_MOCK_REQUIREMENTS = int(os.environ.get("SPHINX_MOCK_REQUIREMENTS", True)) import pl_bolts # noqa: E402 # -- Project information ----------------------------------------------------- # this name shall match the project name in Github as it is used for linking to code -project = 'PyTorch-Lightning-Bolts' +project = "PyTorch-Lightning-Bolts" copyright = pl_bolts.__copyright__ author = pl_bolts.__author__ @@ -48,38 +48,38 @@ # Options for the linkcode extension # ---------------------------------- -github_user = 'PyTorchLightning' +github_user = "PyTorchLightning" github_repo = project # -- Project documents ------------------------------------------------------- # export the READme -with open(os.path.join(PATH_ROOT, 'README.md'), 'r') as fp: +with open(os.path.join(PATH_ROOT, "README.md"), "r") as fp: readme = fp.read() # TODO: temp fix removing SVG badges and GIF, because PDF cannot show them -readme = re.sub(r'(\[!\[.*\))', '', readme) -readme = re.sub(r'(!\[.*.gif\))', '', readme) -for dir_name in (os.path.basename(p) for p in glob.glob(os.path.join(PATH_ROOT, '*')) if os.path.isdir(p)): - readme = readme.replace('](%s/' % dir_name, '](%s/%s/' % (PATH_ROOT, dir_name)) -with open('readme.md', 'w') as fp: +readme = re.sub(r"(\[!\[.*\))", "", readme) +readme = re.sub(r"(!\[.*.gif\))", "", readme) +for dir_name in (os.path.basename(p) for p in glob.glob(os.path.join(PATH_ROOT, "*")) if os.path.isdir(p)): + readme = readme.replace("](%s/" % dir_name, "](%s/%s/" % (PATH_ROOT, dir_name)) +with open("readme.md", "w") as fp: fp.write(readme) # copy all documents from GH templates like contribution guide -for md in glob.glob(os.path.join(PATH_ROOT, '.github', '*.md')): +for md in glob.glob(os.path.join(PATH_ROOT, ".github", "*.md")): shutil.copy(md, os.path.join(PATH_HERE, os.path.basename(md))) # export the changelog -with open(os.path.join(PATH_ROOT, 'CHANGELOG.md'), 'r') as fp: +with open(os.path.join(PATH_ROOT, "CHANGELOG.md"), "r") as fp: chlog_lines = fp.readlines() # enrich short subsub-titles to be unique -chlog_ver = '' +chlog_ver = "" for i, ln in enumerate(chlog_lines): - if ln.startswith('## '): - chlog_ver = ln[2:].split('-')[0].strip() - elif ln.startswith('### '): - ln = ln.replace('###', f'### {chlog_ver} -') + if ln.startswith("## "): + chlog_ver = ln[2:].split("-")[0].strip() + elif ln.startswith("### "): + ln = ln.replace("###", f"### {chlog_ver} -") chlog_lines[i] = ln -with open(os.path.join(PATH_HERE, 'CHANGELOG.md'), 'w') as fp: +with open(os.path.join(PATH_HERE, "CHANGELOG.md"), "w") as fp: fp.writelines(chlog_lines) @@ -87,55 +87,55 @@ # If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = '2.4' +needs_sphinx = "2.4" # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', + "sphinx.ext.autodoc", # 'sphinxcontrib.mockautodoc', # raises error: directive 'automodule' is already registered ... # 'sphinxcontrib.fulltoc', # breaks pytorch-theme with unexpected kw argument 'titles_only' - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.linkcode', - 'sphinx.ext.autosummary', - 'sphinx.ext.napoleon', - 'sphinx.ext.imgmath', - 'recommonmark', - 'sphinx.ext.autosectionlabel', + "sphinx.ext.doctest", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx.ext.coverage", + "sphinx.ext.linkcode", + "sphinx.ext.autosummary", + "sphinx.ext.napoleon", + "sphinx.ext.imgmath", + "recommonmark", + "sphinx.ext.autosectionlabel", # 'm2r', # 'nbsphinx', # it seems some sphinx issue - 'sphinx_autodoc_typehints', - 'sphinx_copybutton', - 'sphinx_paramlinks', - 'sphinx_togglebutton', + "sphinx_autodoc_typehints", + "sphinx_copybutton", + "sphinx_paramlinks", + "sphinx_togglebutton", ] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # https://berkeley-stat159-f17.github.io/stat159-f17/lectures/14-sphinx..html#conf.py-(cont.) # https://stackoverflow.com/questions/38526888/embed-ipython-notebook-in-sphinx-document # I execute the notebooks manually in advance. If notebooks test the code, # they should be run at build time. -nbsphinx_execute = 'never' +nbsphinx_execute = "never" nbsphinx_allow_errors = True -nbsphinx_requirejs_path = '' +nbsphinx_requirejs_path = "" # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: source_suffix = { - '.rst': 'restructuredtext', - '.txt': 'markdown', - '.md': 'markdown', - '.ipynb': 'nbsphinx', + ".rst": "restructuredtext", + ".txt": "markdown", + ".md": "markdown", + ".ipynb": "nbsphinx", } # The master toctree document. -master_doc = 'index' +master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -148,11 +148,11 @@ # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [ - 'api/pl_bolts.rst', - 'api/modules.rst', - 'api/pl_bolts.submit.rst', - 'api/pl_bolts.utils.*', - 'PULL_REQUEST_TEMPLATE.md', + "api/pl_bolts.rst", + "api/modules.rst", + "api/pl_bolts.submit.rst", + "api/pl_bolts.utils.*", + "PULL_REQUEST_TEMPLATE.md", ] # The name of the Pygments (syntax highlighting) style to use. @@ -164,7 +164,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'pt_lightning_sphinx_theme' +html_theme = "pt_lightning_sphinx_theme" html_theme_path = [pt_lightning_sphinx_theme.get_html_theme_path()] # Theme options are theme-specific and customize the look and feel of a theme @@ -172,21 +172,21 @@ # documentation. html_theme_options = { - 'pytorch_project': pl_bolts.__homepage__, - 'canonical_url': pl_bolts.__homepage__, - 'collapse_navigation': False, - 'display_version': True, - 'logo_only': False, + "pytorch_project": pl_bolts.__homepage__, + "canonical_url": pl_bolts.__homepage__, + "collapse_navigation": False, + "display_version": True, + "logo_only": False, } -html_logo = '_images/logos/lightning_logo-name.svg' +html_logo = "_images/logos/lightning_logo-name.svg" -html_favicon = '_images/logos/lightning_icon.svg' +html_favicon = "_images/logos/lightning_icon.svg" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_images', '_templates', '_static'] +html_static_path = ["_images", "_templates", "_static"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -202,38 +202,33 @@ # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = project + '-doc' +htmlhelp_basename = project + "-doc" # -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # 'preamble': '', - # Latex figure (float) alignment - 'figure_align': 'htbp', + "figure_align": "htbp", } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, project + '.tex', project + ' Documentation', author, 'manual'), + (master_doc, project + ".tex", project + " Documentation", author, "manual"), ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, project, project + ' Documentation', [author], 1) -] +man_pages = [(master_doc, project, project + " Documentation", [author], 1)] # -- Options for Texinfo output ---------------------------------------------- @@ -241,9 +236,15 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, project, project + ' Documentation', author, project, - 'The lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate.', - 'Miscellaneous'), + ( + master_doc, + project, + project + " Documentation", + author, + project, + "The lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate.", + "Miscellaneous", + ), ] # -- Options for Epub output ------------------------------------------------- @@ -261,7 +262,7 @@ # epub_uid = '' # A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] +epub_exclude_files = ["search.html"] # -- Extension configuration ------------------------------------------------- @@ -269,11 +270,11 @@ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { - 'pytorch_lightning': ('https://pytorch-lightning.readthedocs.io/en/stable/', None), - 'python': ('https://docs.python.org/3', None), - 'torch': ('https://pytorch.org/docs/stable/', None), - 'numpy': ('https://docs.scipy.org/doc/numpy/', None), - 'PIL': ('https://pillow.readthedocs.io/en/stable/', None), + "pytorch_lightning": ("https://pytorch-lightning.readthedocs.io/en/stable/", None), + "python": ("https://docs.python.org/3", None), + "torch": ("https://pytorch.org/docs/stable/", None), + "numpy": ("https://docs.scipy.org/doc/numpy/", None), + "PIL": ("https://pillow.readthedocs.io/en/stable/", None), } # -- Options for todo extension ---------------------------------------------- @@ -293,7 +294,7 @@ pl_bolts.__name__, ] -apidoc_output_folder = os.path.join(PATH_HERE, 'api') +apidoc_output_folder = os.path.join(PATH_HERE, "api") def run_apidoc(_): @@ -304,29 +305,32 @@ def run_apidoc(_): shutil.rmtree(apidoc_output_folder) for pkg in PACKAGES: - argv = ['-e', - '-o', apidoc_output_folder, - os.path.join(PATH_ROOT, pkg), - '**/test_*', - '--force', - '--private', - '--module-first'] + argv = [ + "-e", + "-o", + apidoc_output_folder, + os.path.join(PATH_ROOT, pkg), + "**/test_*", + "--force", + "--private", + "--module-first", + ] - apidoc.main(argv) + apidoc.gen(argv) def setup(app): # this is for hiding doctest decoration, # see: http://z4r.github.io/python/2011/12/02/hides-the-prompts-and-output/ - app.add_javascript('copybutton.js') - app.connect('builder-inited', run_apidoc) + app.add_javascript("copybutton.js") + app.connect("builder-inited", run_apidoc) # copy all notebooks to local folder -path_nbs = os.path.join(PATH_HERE, 'notebooks') +path_nbs = os.path.join(PATH_HERE, "notebooks") if not os.path.isdir(path_nbs): os.mkdir(path_nbs) -for path_ipynb in glob.glob(os.path.join(PATH_ROOT, 'notebooks', '*.ipynb')): +for path_ipynb in glob.glob(os.path.join(PATH_ROOT, "notebooks", "*.ipynb")): path_ipynb2 = os.path.join(path_nbs, os.path.basename(path_ipynb)) shutil.copy(path_ipynb, path_ipynb2) @@ -335,10 +339,10 @@ def setup(app): # https://stackoverflow.com/questions/15889621/sphinx-how-to-exclude-imports-in-automodule def package_list_from_file(file): mocked_packages = [] - with open(file, 'r') as fp: + with open(file, "r") as fp: for ln in fp.readlines(): - found = [ln.index(ch) for ch in list(',=<>#') if ch in ln] - pkg = ln[:min(found)] if found else ln + found = [ln.index(ch) for ch in list(",=<>#") if ch in ln] + pkg = ln[: min(found)] if found else ln if pkg.rstrip(): mocked_packages.append(pkg.rstrip()) return mocked_packages @@ -346,17 +350,17 @@ def package_list_from_file(file): # define mapping from PyPI names to python imports PACKAGE_MAPPING = { - 'pytorch-lightning': 'pytorch_lightning', - 'scikit-learn': 'sklearn', - 'Pillow': 'PIL', - 'opencv-python': 'cv2', + "pytorch-lightning": "pytorch_lightning", + "scikit-learn": "sklearn", + "Pillow": "PIL", + "opencv-python": "cv2", } MOCK_PACKAGES = [] if SPHINX_MOCK_REQUIREMENTS: # mock also base packages when we are on RTD since we don't install them there - MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, 'requirements.txt')) - MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, 'requirements', 'models.txt')) - MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, 'requirements', 'loggers.txt')) + MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, "requirements.txt")) + MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, "requirements", "models.txt")) + MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, "requirements", "loggers.txt")) # replace PyPI packages by importing ones MOCK_PACKAGES = [PACKAGE_MAPPING.get(pkg, pkg) for pkg in MOCK_PACKAGES] @@ -372,50 +376,49 @@ def linkcode_resolve(domain, info): def find_source(): # try to find the file and line number, based on code from numpy: # https://github.com/numpy/numpy/blob/master/doc/source/conf.py#L286 - obj = sys.modules[info['module']] - for part in info['fullname'].split('.'): + obj = sys.modules[info["module"]] + for part in info["fullname"].split("."): obj = getattr(obj, part) fname = inspect.getsourcefile(obj) # https://github.com/rtfd/readthedocs.org/issues/5735 - if any([s in fname for s in ('readthedocs', 'rtfd', 'checkouts')]): + if any([s in fname for s in ("readthedocs", "rtfd", "checkouts")]): # /home/docs/checkouts/readthedocs.org/user_builds/pytorch_lightning/checkouts/ # devel/pytorch_lightning/utilities/cls_experiment.py#L26-L176 - path_top = os.path.abspath(os.path.join('..', '..', '..')) + path_top = os.path.abspath(os.path.join("..", "..", "..")) fname = os.path.relpath(fname, start=path_top) else: # Local build, imitate master - fname = 'master/' + os.path.relpath(fname, start=os.path.abspath('..')) + fname = "master/" + os.path.relpath(fname, start=os.path.abspath("..")) source, lineno = inspect.getsourcelines(obj) return fname, lineno, lineno + len(source) - 1 - if domain != 'py' or not info['module']: + if domain != "py" or not info["module"]: return None try: - filename = '%s#L%d-L%d' % find_source() + filename = "%s#L%d-L%d" % find_source() except Exception: - filename = info['module'].replace('.', '/') + '.py' + filename = info["module"].replace(".", "/") + ".py" # import subprocess # tag = subprocess.Popen(['git', 'rev-parse', 'HEAD'], stdout=subprocess.PIPE, # universal_newlines=True).communicate()[0][:-1] - branch = filename.split('/')[0] + branch = filename.split("/")[0] # do mapping from latest tags to master - branch = {'latest': 'master', 'stable': 'master'}.get(branch, branch) - filename = '/'.join([branch] + filename.split('/')[1:]) - return "https://github.com/%s/%s/blob/%s" \ - % (github_user, github_repo, filename) + branch = {"latest": "master", "stable": "master"}.get(branch, branch) + filename = "/".join([branch] + filename.split("/")[1:]) + return "https://github.com/%s/%s/blob/%s" % (github_user, github_repo, filename) -autodoc_member_order = 'groupwise' -autoclass_content = 'both' +autodoc_member_order = "groupwise" +autoclass_content = "both" # the options are fixed and will be soon in release, # see https://github.com/sphinx-doc/sphinx/issues/5459 autodoc_default_options = { - 'members': True, - 'methods': True, - 'special-members': '__call__', - 'exclude-members': '_abc_impl', - 'show-inheritance': True, - 'noindex': True, + "members": True, + "methods": True, + "special-members": "__call__", + "exclude-members": "_abc_impl", + "show-inheritance": True, + "noindex": True, } # Sphinx will add “permalinks” for each heading and description environment as paragraph signs that @@ -432,7 +435,7 @@ def find_source(): autosectionlabel_prefix_document = True # only run doctests marked with a ".. doctest::" directive -doctest_test_doctest_blocks = '' +doctest_test_doctest_blocks = "" doctest_global_setup = """ import importlib diff --git a/pl_bolts/models/gans/dcgan/__init__.py b/pl_bolts/models/gans/dcgan/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py new file mode 100644 index 0000000000..ad117bff00 --- /dev/null +++ b/pl_bolts/models/gans/dcgan/components.py @@ -0,0 +1,62 @@ +# Based on https://github.com/pytorch/examples/blob/master/dcgan/main.py +from torch import nn + + +class DCGANGenerator(nn.Module): + def __init__(self, latent_dim, feature_maps, image_channels): + super().__init__() + self.gen = nn.Sequential( + self._make_gen_block(latent_dim, feature_maps * 8, kernel_size=4, stride=1, padding=0), + self._make_gen_block(feature_maps * 8, feature_maps * 4), + self._make_gen_block(feature_maps * 4, feature_maps * 2), + self._make_gen_block(feature_maps * 2, feature_maps, 4), + self._make_gen_block(feature_maps, image_channels, last_block=True), + ) + + @staticmethod + def _make_gen_block(in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, last_block=False): + if not last_block: + return nn.Sequential( + nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), + nn.BatchNorm2d(out_channels), + nn.ReLU(True), + ) + else: + return nn.Sequential( + nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), + nn.Tanh(), + ) + + def forward(self, noise): + return self.gen(noise) + + +class DCGANDiscriminator(nn.Module): + def __init__(self, feature_maps, image_channels): + super().__init__() + self.disc = nn.Sequential( + self._make_disc_block(image_channels, feature_maps, batch_norm=False), + self._make_disc_block(feature_maps, feature_maps * 2), + self._make_disc_block(feature_maps * 2, feature_maps * 4), + self._make_disc_block(feature_maps * 4, feature_maps * 8), + self._make_disc_block(feature_maps * 8, 1, kernel_size=4, stride=1, padding=0, last_block=True), + ) + + @staticmethod + def _make_disc_block( + in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, batch_norm=True, last_block=False + ): + if not last_block: + return nn.Sequential( + nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), + nn.BatchNorm2d(out_channels) if batch_norm else nn.Identity(), + nn.LeakyReLU(0.2, inplace=True), + ) + else: + return nn.Sequential( + nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), + nn.Sigmoid(), + ) + + def forward(self, noise): + return self.disc(noise) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py new file mode 100644 index 0000000000..6599fff2c5 --- /dev/null +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -0,0 +1,121 @@ +from argparse import ArgumentParser + +import pytorch_lightning as pl +import torch +from torch import nn + +from pl_bolts.models.gans.dcgan.components import DCGANDiscriminator, DCGANGenerator + + +class GANModule(pl.LightningModule): + def __init__(self, hparams): + super().__init__() + self.save_hyperparameters(hparams) + + self.generator = self._get_generator() + self.discriminator = self._get_discriminator() + + self.criterion = nn.BCEWithLogitsLoss() + + def _get_generator(self): + generator = DCGANGenerator(self.hparams.latent_dim, self.hparams.feature_maps_gen, self.hparams.image_channels) + generator.apply(self._weights_init) + return generator + + def _get_discriminator(self): + discriminator = DCGANDiscriminator(self.hparams.feature_maps_disc, self.hparams.image_channels) + discriminator.apply(self._weights_init) + return discriminator + + @staticmethod + def weights_init(m): + classname = m.__class__.__name__ + if classname.find("Conv") != -1: + torch.nn.init.normal_(m.weight, 0.0, 0.02) + elif classname.find("BatchNorm") != -1: + torch.nn.init.normal_(m.weight, 1.0, 0.02) + torch.nn.init.zeros_(m.bias) + + def configure_optimizers(self): + lr = self.hparams.learning_rate + betas = (self.hparams.beta1, self.hparams.beta2) + opt_disc = torch.optim.Adam(self.discriminator.parameters(), lr=lr, betas=betas) + opt_gen = torch.optim.Adam(self.generator.parameters(), lr=lr, betas=betas) + return [opt_disc, opt_gen], [] + + def forward(self, noise): + return self.generator(noise) + + def training_step(self, batch, batch_idx, optimizer_idx): + real, _ = batch + + # Train discriminator + result = None + if optimizer_idx == 0: + result = self._disc_step(real) + + # Train generator + if optimizer_idx == 1: + result = self._gen_step(real) + + return result + + def _disc_step(self, real): + disc_loss = self._get_disc_loss(real) + self.log("loss/disc", disc_loss, on_epoch=True, prog_bar=True) + return disc_loss + + def _gen_step(self, real): + gen_loss = self._generator_loss(real) + self.log("loss/gen", gen_loss, on_epoch=True, prog_bar=True) + return gen_loss + + def _get_disc_loss(self, real): + # Train with real + real_pred = self.discriminator(real) + real_gt = torch.ones_like(real_pred) + real_loss = self.criterion(real_pred, real_gt) + + # Train with fake + batch_size = self._get_batch_size(real) + noise = self._get_noise(batch_size, self.hparams.latent_dim) + fake = self(noise) + fake_pred = self.discriminator(fake) + fake_gt = torch.zeros_like(fake_pred) + fake_loss = self.criterion(fake_pred, fake_gt) + + disc_loss = real_loss + fake_loss + + return disc_loss + + def _generator_loss(self, real): + # Train with fake + batch_size = self._get_batch_size(real) + noise = self._get_noise(batch_size, self.hparams.latent_dim) + fake = self(noise) + fake_pred = self.discriminator(fake) + fake_gt = torch.ones_like(fake_pred) + gen_loss = self.criterion(fake_pred, fake_gt) + + return gen_loss + + @staticmethod + def _get_batch_size(real): + batch_size = len(real) + return batch_size + + def _get_noise(self, n_samples, latent_dim): + noise = torch.randn(n_samples, latent_dim, 1, 1, device=self.device) + return noise + + @staticmethod + def add_model_specific_args(parent_parser): + parser = ArgumentParser(parents=[parent_parser], add_help=False) + parser.add_argument("--beta1", default=0.5, type=float) + parser.add_argument("--beta2", default=0.999, type=float) + parser.add_argument("--feature_maps_gen", default=64, type=int) + parser.add_argument("--feature_maps_disc", default=64, type=int) + parser.add_argument("--image_channels", default=3, type=int) + parser.add_argument("--latent_dim", default=100, type=int) + parser.add_argument("--learning_rate", default=0.0002, type=float) + return parser From 2bb60eb74a39765a3304a0bde3e2d0c2eac57dc8 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Tue, 24 Nov 2020 19:51:42 +0100 Subject: [PATCH 02/55] Undo black on conf.py --- docs/source/conf.py | 241 ++++++++++++++++++++++---------------------- 1 file changed, 119 insertions(+), 122 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 5fa3391370..d42134a1fa 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -25,19 +25,19 @@ from sphinx.ext import apidoc PATH_HERE = os.path.abspath(os.path.dirname(__file__)) -PATH_ROOT = os.path.join(PATH_HERE, "..", "..") +PATH_ROOT = os.path.join(PATH_HERE, '..', '..') sys.path.insert(0, os.path.abspath(PATH_ROOT)) builtins.__LIGHTNING_BOLT_SETUP__ = True -SPHINX_MOCK_REQUIREMENTS = int(os.environ.get("SPHINX_MOCK_REQUIREMENTS", True)) +SPHINX_MOCK_REQUIREMENTS = int(os.environ.get('SPHINX_MOCK_REQUIREMENTS', True)) import pl_bolts # noqa: E402 # -- Project information ----------------------------------------------------- # this name shall match the project name in Github as it is used for linking to code -project = "PyTorch-Lightning-Bolts" +project = 'PyTorch-Lightning-Bolts' copyright = pl_bolts.__copyright__ author = pl_bolts.__author__ @@ -48,38 +48,38 @@ # Options for the linkcode extension # ---------------------------------- -github_user = "PyTorchLightning" +github_user = 'PyTorchLightning' github_repo = project # -- Project documents ------------------------------------------------------- # export the READme -with open(os.path.join(PATH_ROOT, "README.md"), "r") as fp: +with open(os.path.join(PATH_ROOT, 'README.md'), 'r') as fp: readme = fp.read() # TODO: temp fix removing SVG badges and GIF, because PDF cannot show them -readme = re.sub(r"(\[!\[.*\))", "", readme) -readme = re.sub(r"(!\[.*.gif\))", "", readme) -for dir_name in (os.path.basename(p) for p in glob.glob(os.path.join(PATH_ROOT, "*")) if os.path.isdir(p)): - readme = readme.replace("](%s/" % dir_name, "](%s/%s/" % (PATH_ROOT, dir_name)) -with open("readme.md", "w") as fp: +readme = re.sub(r'(\[!\[.*\))', '', readme) +readme = re.sub(r'(!\[.*.gif\))', '', readme) +for dir_name in (os.path.basename(p) for p in glob.glob(os.path.join(PATH_ROOT, '*')) if os.path.isdir(p)): + readme = readme.replace('](%s/' % dir_name, '](%s/%s/' % (PATH_ROOT, dir_name)) +with open('readme.md', 'w') as fp: fp.write(readme) # copy all documents from GH templates like contribution guide -for md in glob.glob(os.path.join(PATH_ROOT, ".github", "*.md")): +for md in glob.glob(os.path.join(PATH_ROOT, '.github', '*.md')): shutil.copy(md, os.path.join(PATH_HERE, os.path.basename(md))) # export the changelog -with open(os.path.join(PATH_ROOT, "CHANGELOG.md"), "r") as fp: +with open(os.path.join(PATH_ROOT, 'CHANGELOG.md'), 'r') as fp: chlog_lines = fp.readlines() # enrich short subsub-titles to be unique -chlog_ver = "" +chlog_ver = '' for i, ln in enumerate(chlog_lines): - if ln.startswith("## "): - chlog_ver = ln[2:].split("-")[0].strip() - elif ln.startswith("### "): - ln = ln.replace("###", f"### {chlog_ver} -") + if ln.startswith('## '): + chlog_ver = ln[2:].split('-')[0].strip() + elif ln.startswith('### '): + ln = ln.replace('###', f'### {chlog_ver} -') chlog_lines[i] = ln -with open(os.path.join(PATH_HERE, "CHANGELOG.md"), "w") as fp: +with open(os.path.join(PATH_HERE, 'CHANGELOG.md'), 'w') as fp: fp.writelines(chlog_lines) @@ -87,55 +87,55 @@ # If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "2.4" +needs_sphinx = '2.4' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - "sphinx.ext.autodoc", + 'sphinx.ext.autodoc', # 'sphinxcontrib.mockautodoc', # raises error: directive 'automodule' is already registered ... # 'sphinxcontrib.fulltoc', # breaks pytorch-theme with unexpected kw argument 'titles_only' - "sphinx.ext.doctest", - "sphinx.ext.intersphinx", - "sphinx.ext.todo", - "sphinx.ext.coverage", - "sphinx.ext.linkcode", - "sphinx.ext.autosummary", - "sphinx.ext.napoleon", - "sphinx.ext.imgmath", - "recommonmark", - "sphinx.ext.autosectionlabel", + 'sphinx.ext.doctest', + 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.linkcode', + 'sphinx.ext.autosummary', + 'sphinx.ext.napoleon', + 'sphinx.ext.imgmath', + 'recommonmark', + 'sphinx.ext.autosectionlabel', # 'm2r', # 'nbsphinx', # it seems some sphinx issue - "sphinx_autodoc_typehints", - "sphinx_copybutton", - "sphinx_paramlinks", - "sphinx_togglebutton", + 'sphinx_autodoc_typehints', + 'sphinx_copybutton', + 'sphinx_paramlinks', + 'sphinx_togglebutton', ] # Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] +templates_path = ['_templates'] # https://berkeley-stat159-f17.github.io/stat159-f17/lectures/14-sphinx..html#conf.py-(cont.) # https://stackoverflow.com/questions/38526888/embed-ipython-notebook-in-sphinx-document # I execute the notebooks manually in advance. If notebooks test the code, # they should be run at build time. -nbsphinx_execute = "never" +nbsphinx_execute = 'never' nbsphinx_allow_errors = True -nbsphinx_requirejs_path = "" +nbsphinx_requirejs_path = '' # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: source_suffix = { - ".rst": "restructuredtext", - ".txt": "markdown", - ".md": "markdown", - ".ipynb": "nbsphinx", + '.rst': 'restructuredtext', + '.txt': 'markdown', + '.md': 'markdown', + '.ipynb': 'nbsphinx', } # The master toctree document. -master_doc = "index" +master_doc = 'index' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -148,11 +148,11 @@ # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [ - "api/pl_bolts.rst", - "api/modules.rst", - "api/pl_bolts.submit.rst", - "api/pl_bolts.utils.*", - "PULL_REQUEST_TEMPLATE.md", + 'api/pl_bolts.rst', + 'api/modules.rst', + 'api/pl_bolts.submit.rst', + 'api/pl_bolts.utils.*', + 'PULL_REQUEST_TEMPLATE.md', ] # The name of the Pygments (syntax highlighting) style to use. @@ -164,7 +164,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = "pt_lightning_sphinx_theme" +html_theme = 'pt_lightning_sphinx_theme' html_theme_path = [pt_lightning_sphinx_theme.get_html_theme_path()] # Theme options are theme-specific and customize the look and feel of a theme @@ -172,21 +172,21 @@ # documentation. html_theme_options = { - "pytorch_project": pl_bolts.__homepage__, - "canonical_url": pl_bolts.__homepage__, - "collapse_navigation": False, - "display_version": True, - "logo_only": False, + 'pytorch_project': pl_bolts.__homepage__, + 'canonical_url': pl_bolts.__homepage__, + 'collapse_navigation': False, + 'display_version': True, + 'logo_only': False, } -html_logo = "_images/logos/lightning_logo-name.svg" +html_logo = '_images/logos/lightning_logo-name.svg' -html_favicon = "_images/logos/lightning_icon.svg" +html_favicon = '_images/logos/lightning_icon.svg' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_images", "_templates", "_static"] +html_static_path = ['_images', '_templates', '_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -202,33 +202,38 @@ # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = project + "-doc" +htmlhelp_basename = project + '-doc' # -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. # 'preamble': '', + # Latex figure (float) alignment - "figure_align": "htbp", + 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, project + ".tex", project + " Documentation", author, "manual"), + (master_doc, project + '.tex', project + ' Documentation', author, 'manual'), ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [(master_doc, project, project + " Documentation", [author], 1)] +man_pages = [ + (master_doc, project, project + ' Documentation', [author], 1) +] # -- Options for Texinfo output ---------------------------------------------- @@ -236,15 +241,9 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ( - master_doc, - project, - project + " Documentation", - author, - project, - "The lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate.", - "Miscellaneous", - ), + (master_doc, project, project + ' Documentation', author, project, + 'The lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate.', + 'Miscellaneous'), ] # -- Options for Epub output ------------------------------------------------- @@ -262,7 +261,7 @@ # epub_uid = '' # A list of files that should not be packed into the epub file. -epub_exclude_files = ["search.html"] +epub_exclude_files = ['search.html'] # -- Extension configuration ------------------------------------------------- @@ -270,11 +269,11 @@ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { - "pytorch_lightning": ("https://pytorch-lightning.readthedocs.io/en/stable/", None), - "python": ("https://docs.python.org/3", None), - "torch": ("https://pytorch.org/docs/stable/", None), - "numpy": ("https://docs.scipy.org/doc/numpy/", None), - "PIL": ("https://pillow.readthedocs.io/en/stable/", None), + 'pytorch_lightning': ('https://pytorch-lightning.readthedocs.io/en/stable/', None), + 'python': ('https://docs.python.org/3', None), + 'torch': ('https://pytorch.org/docs/stable/', None), + 'numpy': ('https://docs.scipy.org/doc/numpy/', None), + 'PIL': ('https://pillow.readthedocs.io/en/stable/', None), } # -- Options for todo extension ---------------------------------------------- @@ -294,7 +293,7 @@ pl_bolts.__name__, ] -apidoc_output_folder = os.path.join(PATH_HERE, "api") +apidoc_output_folder = os.path.join(PATH_HERE, 'api') def run_apidoc(_): @@ -305,32 +304,29 @@ def run_apidoc(_): shutil.rmtree(apidoc_output_folder) for pkg in PACKAGES: - argv = [ - "-e", - "-o", - apidoc_output_folder, - os.path.join(PATH_ROOT, pkg), - "**/test_*", - "--force", - "--private", - "--module-first", - ] + argv = ['-e', + '-o', apidoc_output_folder, + os.path.join(PATH_ROOT, pkg), + '**/test_*', + '--force', + '--private', + '--module-first'] - apidoc.gen(argv) + apidoc.main(argv) def setup(app): # this is for hiding doctest decoration, # see: http://z4r.github.io/python/2011/12/02/hides-the-prompts-and-output/ - app.add_javascript("copybutton.js") - app.connect("builder-inited", run_apidoc) + app.add_javascript('copybutton.js') + app.connect('builder-inited', run_apidoc) # copy all notebooks to local folder -path_nbs = os.path.join(PATH_HERE, "notebooks") +path_nbs = os.path.join(PATH_HERE, 'notebooks') if not os.path.isdir(path_nbs): os.mkdir(path_nbs) -for path_ipynb in glob.glob(os.path.join(PATH_ROOT, "notebooks", "*.ipynb")): +for path_ipynb in glob.glob(os.path.join(PATH_ROOT, 'notebooks', '*.ipynb')): path_ipynb2 = os.path.join(path_nbs, os.path.basename(path_ipynb)) shutil.copy(path_ipynb, path_ipynb2) @@ -339,10 +335,10 @@ def setup(app): # https://stackoverflow.com/questions/15889621/sphinx-how-to-exclude-imports-in-automodule def package_list_from_file(file): mocked_packages = [] - with open(file, "r") as fp: + with open(file, 'r') as fp: for ln in fp.readlines(): - found = [ln.index(ch) for ch in list(",=<>#") if ch in ln] - pkg = ln[: min(found)] if found else ln + found = [ln.index(ch) for ch in list(',=<>#') if ch in ln] + pkg = ln[:min(found)] if found else ln if pkg.rstrip(): mocked_packages.append(pkg.rstrip()) return mocked_packages @@ -350,17 +346,17 @@ def package_list_from_file(file): # define mapping from PyPI names to python imports PACKAGE_MAPPING = { - "pytorch-lightning": "pytorch_lightning", - "scikit-learn": "sklearn", - "Pillow": "PIL", - "opencv-python": "cv2", + 'pytorch-lightning': 'pytorch_lightning', + 'scikit-learn': 'sklearn', + 'Pillow': 'PIL', + 'opencv-python': 'cv2', } MOCK_PACKAGES = [] if SPHINX_MOCK_REQUIREMENTS: # mock also base packages when we are on RTD since we don't install them there - MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, "requirements.txt")) - MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, "requirements", "models.txt")) - MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, "requirements", "loggers.txt")) + MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, 'requirements.txt')) + MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, 'requirements', 'models.txt')) + MOCK_PACKAGES += package_list_from_file(os.path.join(PATH_ROOT, 'requirements', 'loggers.txt')) # replace PyPI packages by importing ones MOCK_PACKAGES = [PACKAGE_MAPPING.get(pkg, pkg) for pkg in MOCK_PACKAGES] @@ -376,49 +372,50 @@ def linkcode_resolve(domain, info): def find_source(): # try to find the file and line number, based on code from numpy: # https://github.com/numpy/numpy/blob/master/doc/source/conf.py#L286 - obj = sys.modules[info["module"]] - for part in info["fullname"].split("."): + obj = sys.modules[info['module']] + for part in info['fullname'].split('.'): obj = getattr(obj, part) fname = inspect.getsourcefile(obj) # https://github.com/rtfd/readthedocs.org/issues/5735 - if any([s in fname for s in ("readthedocs", "rtfd", "checkouts")]): + if any([s in fname for s in ('readthedocs', 'rtfd', 'checkouts')]): # /home/docs/checkouts/readthedocs.org/user_builds/pytorch_lightning/checkouts/ # devel/pytorch_lightning/utilities/cls_experiment.py#L26-L176 - path_top = os.path.abspath(os.path.join("..", "..", "..")) + path_top = os.path.abspath(os.path.join('..', '..', '..')) fname = os.path.relpath(fname, start=path_top) else: # Local build, imitate master - fname = "master/" + os.path.relpath(fname, start=os.path.abspath("..")) + fname = 'master/' + os.path.relpath(fname, start=os.path.abspath('..')) source, lineno = inspect.getsourcelines(obj) return fname, lineno, lineno + len(source) - 1 - if domain != "py" or not info["module"]: + if domain != 'py' or not info['module']: return None try: - filename = "%s#L%d-L%d" % find_source() + filename = '%s#L%d-L%d' % find_source() except Exception: - filename = info["module"].replace(".", "/") + ".py" + filename = info['module'].replace('.', '/') + '.py' # import subprocess # tag = subprocess.Popen(['git', 'rev-parse', 'HEAD'], stdout=subprocess.PIPE, # universal_newlines=True).communicate()[0][:-1] - branch = filename.split("/")[0] + branch = filename.split('/')[0] # do mapping from latest tags to master - branch = {"latest": "master", "stable": "master"}.get(branch, branch) - filename = "/".join([branch] + filename.split("/")[1:]) - return "https://github.com/%s/%s/blob/%s" % (github_user, github_repo, filename) + branch = {'latest': 'master', 'stable': 'master'}.get(branch, branch) + filename = '/'.join([branch] + filename.split('/')[1:]) + return "https://github.com/%s/%s/blob/%s" \ + % (github_user, github_repo, filename) -autodoc_member_order = "groupwise" -autoclass_content = "both" +autodoc_member_order = 'groupwise' +autoclass_content = 'both' # the options are fixed and will be soon in release, # see https://github.com/sphinx-doc/sphinx/issues/5459 autodoc_default_options = { - "members": True, - "methods": True, - "special-members": "__call__", - "exclude-members": "_abc_impl", - "show-inheritance": True, - "noindex": True, + 'members': True, + 'methods': True, + 'special-members': '__call__', + 'exclude-members': '_abc_impl', + 'show-inheritance': True, + 'noindex': True, } # Sphinx will add “permalinks” for each heading and description environment as paragraph signs that @@ -435,7 +432,7 @@ def find_source(): autosectionlabel_prefix_document = True # only run doctests marked with a ".. doctest::" directive -doctest_test_doctest_blocks = "" +doctest_test_doctest_blocks = '' doctest_global_setup = """ import importlib From dac758bff31b4d265b75332f47cf75f8b3fcbfa4 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Wed, 25 Nov 2020 17:28:32 +0100 Subject: [PATCH 03/55] Add tests for DCGAN --- pl_bolts/models/gans/dcgan/dcgan_module.py | 57 ++++++++++++++++++++-- tests/models/test_gans.py | 17 +++++++ tests/models/test_scripts.py | 10 ++++ 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 6599fff2c5..ddecae0835 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -3,14 +3,25 @@ import pytorch_lightning as pl import torch from torch import nn +from torchvision import transforms as transform_lib from pl_bolts.models.gans.dcgan.components import DCGANDiscriminator, DCGANGenerator -class GANModule(pl.LightningModule): - def __init__(self, hparams): +class DCGAN(pl.LightningModule): + def __init__( + self, + beta1: float = 0.5, + beta2: float = 0.999, + feature_maps_gen: int = 64, + feature_maps_disc: int = 64, + image_channels: int = 1, + latent_dim: int = 100, + learning_rate: float = 0.0002, + **kwargs + ): super().__init__() - self.save_hyperparameters(hparams) + self.save_hyperparameters() self.generator = self._get_generator() self.discriminator = self._get_discriminator() @@ -28,7 +39,7 @@ def _get_discriminator(self): return discriminator @staticmethod - def weights_init(m): + def _weights_init(m): classname = m.__class__.__name__ if classname.find("Conv") != -1: torch.nn.init.normal_(m.weight, 0.0, 0.02) @@ -115,7 +126,43 @@ def add_model_specific_args(parent_parser): parser.add_argument("--beta2", default=0.999, type=float) parser.add_argument("--feature_maps_gen", default=64, type=int) parser.add_argument("--feature_maps_disc", default=64, type=int) - parser.add_argument("--image_channels", default=3, type=int) + parser.add_argument("--image_channels", default=1, type=int) parser.add_argument("--latent_dim", default=100, type=int) parser.add_argument("--learning_rate", default=0.0002, type=float) return parser + + +def cli_main(args=None): + from pl_bolts.datamodules import CIFAR10DataModule, MNISTDataModule + + pl.seed_everything(1234) + + parser = ArgumentParser() + parser.add_argument("--dataset", default="mnist", type=str, help="mnist, cifar10") + parser.add_argument("--image_size", default=64, type=int) + script_args, _ = parser.parse_known_args(args) + + if script_args.dataset == "mnist": + dm_cls = MNISTDataModule + elif script_args.dataset == "cifar10": + dm_cls = CIFAR10DataModule + + parser = dm_cls.add_argparse_args(parser) + parser = pl.Trainer.add_argparse_args(parser) + parser = DCGAN.add_model_specific_args(parser) + args = parser.parse_args(args) + + transforms = transform_lib.Compose([transform_lib.Resize(args.image_size), transform_lib.ToTensor()]) + dm = dm_cls.from_argparse_args(args) + dm.train_transforms = transforms + dm.val_transforms = transforms + dm.test_transforms = transforms + + model = DCGAN(**vars(args)) + trainer = pl.Trainer.from_argparse_args(args) + trainer.fit(model, dm) + return dm, model, trainer + + +if __name__ == "__main__": + dm, model, trainer = cli_main() diff --git a/tests/models/test_gans.py b/tests/models/test_gans.py index fac6207e59..7a5f5e5ac6 100644 --- a/tests/models/test_gans.py +++ b/tests/models/test_gans.py @@ -1,9 +1,11 @@ import pytest import pytorch_lightning as pl from pytorch_lightning import seed_everything +from torchvision import transforms as transform_lib from pl_bolts.datamodules import CIFAR10DataModule, MNISTDataModule from pl_bolts.models.gans import GAN +from pl_bolts.models.gans.dcgan.dcgan_module import DCGAN @pytest.mark.parametrize( @@ -17,3 +19,18 @@ def test_gan(tmpdir, datadir, dm_cls): trainer = pl.Trainer(fast_dev_run=True, default_root_dir=tmpdir) trainer.fit(model, dm) trainer.test(datamodule=dm) + + +@pytest.mark.parametrize( + "dm_cls", [pytest.param(MNISTDataModule, id="mnist"), pytest.param(CIFAR10DataModule, id="cifar10")] +) +def test_dcgan(tmpdir, datadir, dm_cls): + seed_everything() + + transforms = transform_lib.Compose([transform_lib.Resize(64), transform_lib.ToTensor()]) + dm = dm_cls(data_dir=datadir, train_transforms=transforms, val_transforms=transforms, test_transforms=transforms) + + model = DCGAN(image_channels=dm.dims[0]) + trainer = pl.Trainer(fast_dev_run=True, default_root_dir=tmpdir) + trainer.fit(model, dm) + trainer.test(datamodule=dm) diff --git a/tests/models/test_scripts.py b/tests/models/test_scripts.py index 56f396cbea..a1c85292aa 100644 --- a/tests/models/test_scripts.py +++ b/tests/models/test_scripts.py @@ -19,6 +19,16 @@ def test_cli_run_basic_gan(cli_args): cli_main() +@pytest.mark.parametrize('cli_args', [ + f'--dataset mnist --data_dir {DATASETS_PATH} --fast_dev_run --image_channels 1', + f'--dataset cifar10 --data_dir {DATASETS_PATH} --fast_dev_run --image_channels 3', +]) +def test_cli_run_dcgan_gan(cli_args): + from pl_bolts.models.gans.dcgan.dcgan_module import cli_main + + with mock.patch("argparse._sys.argv", ["any.py"] + cli_args.strip().split()): + cli_main() + # TODO: this test is hanging (runs for more then 10min) so we need to use GPU or optimize it... @pytest.mark.skipif(not torch.cuda.is_available(), reason="test requires GPU machine") @pytest.mark.parametrize('cli_args', [ From 15828166ffd2d995bd01222b64294ad97cad68fa Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Wed, 25 Nov 2020 17:40:23 +0100 Subject: [PATCH 04/55] Fix flake8 and codefactor --- pl_bolts/models/gans/dcgan/components.py | 12 ++++++++---- pl_bolts/models/gans/dcgan/dcgan_module.py | 10 +++++++++- tests/models/test_scripts.py | 1 + 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py index ad117bff00..f04e27934f 100644 --- a/pl_bolts/models/gans/dcgan/components.py +++ b/pl_bolts/models/gans/dcgan/components.py @@ -16,17 +16,19 @@ def __init__(self, latent_dim, feature_maps, image_channels): @staticmethod def _make_gen_block(in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, last_block=False): if not last_block: - return nn.Sequential( + gen_block = nn.Sequential( nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.BatchNorm2d(out_channels), nn.ReLU(True), ) else: - return nn.Sequential( + gen_block = nn.Sequential( nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.Tanh(), ) + return gen_block + def forward(self, noise): return self.gen(noise) @@ -47,16 +49,18 @@ def _make_disc_block( in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, batch_norm=True, last_block=False ): if not last_block: - return nn.Sequential( + disc_block = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.BatchNorm2d(out_channels) if batch_norm else nn.Identity(), nn.LeakyReLU(0.2, inplace=True), ) else: - return nn.Sequential( + disc_block = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.Sigmoid(), ) + return disc_block + def forward(self, noise): return self.disc(noise) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index ddecae0835..80a5dd4ba4 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -3,8 +3,16 @@ import pytorch_lightning as pl import torch from torch import nn -from torchvision import transforms as transform_lib +from pl_bolts.utils.warnings import warn_missing_pkg + +try: + from torchvision import transforms as transform_lib +except ModuleNotFoundError: + warn_missing_pkg('torchvision') # pragma: no-cover + _TORCHVISION_AVAILABLE = False +else: + _TORCHVISION_AVAILABLE = True from pl_bolts.models.gans.dcgan.components import DCGANDiscriminator, DCGANGenerator diff --git a/tests/models/test_scripts.py b/tests/models/test_scripts.py index a1c85292aa..ee6217a1e4 100644 --- a/tests/models/test_scripts.py +++ b/tests/models/test_scripts.py @@ -29,6 +29,7 @@ def test_cli_run_dcgan_gan(cli_args): with mock.patch("argparse._sys.argv", ["any.py"] + cli_args.strip().split()): cli_main() + # TODO: this test is hanging (runs for more then 10min) so we need to use GPU or optimize it... @pytest.mark.skipif(not torch.cuda.is_available(), reason="test requires GPU machine") @pytest.mark.parametrize('cli_args', [ From 0df4de5df805a5441f3f41f85966600e7e2be3c3 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Fri, 27 Nov 2020 09:17:40 +0100 Subject: [PATCH 05/55] Add types and small refactoring --- pl_bolts/models/gans/dcgan/components.py | 32 ++++++++++++++++------ pl_bolts/models/gans/dcgan/dcgan_module.py | 30 ++++++++++---------- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py index f04e27934f..b48e192316 100644 --- a/pl_bolts/models/gans/dcgan/components.py +++ b/pl_bolts/models/gans/dcgan/components.py @@ -1,9 +1,10 @@ # Based on https://github.com/pytorch/examples/blob/master/dcgan/main.py +import torch from torch import nn class DCGANGenerator(nn.Module): - def __init__(self, latent_dim, feature_maps, image_channels): + def __init__(self, latent_dim: int, feature_maps: int, image_channels: int): super().__init__() self.gen = nn.Sequential( self._make_gen_block(latent_dim, feature_maps * 8, kernel_size=4, stride=1, padding=0), @@ -14,7 +15,15 @@ def __init__(self, latent_dim, feature_maps, image_channels): ) @staticmethod - def _make_gen_block(in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, last_block=False): + def _make_gen_block( + in_channels: int, + out_channels: int, + kernel_size: int = 4, + stride: int = 2, + padding: int = 1, + bias: bool = False, + last_block: bool = False, + ) -> nn.Sequential: if not last_block: gen_block = nn.Sequential( nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), @@ -29,12 +38,12 @@ def _make_gen_block(in_channels, out_channels, kernel_size=4, stride=2, padding= return gen_block - def forward(self, noise): + def forward(self, noise: torch.Tensor) -> torch.Tensor: return self.gen(noise) class DCGANDiscriminator(nn.Module): - def __init__(self, feature_maps, image_channels): + def __init__(self, feature_maps: int, image_channels: int): super().__init__() self.disc = nn.Sequential( self._make_disc_block(image_channels, feature_maps, batch_norm=False), @@ -46,8 +55,15 @@ def __init__(self, feature_maps, image_channels): @staticmethod def _make_disc_block( - in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, batch_norm=True, last_block=False - ): + in_channels: int, + out_channels: int, + kernel_size: int = 4, + stride: int = 2, + padding: int = 1, + bias: bool = False, + batch_norm: bool = True, + last_block: bool = False, + ) -> nn.Sequential: if not last_block: disc_block = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), @@ -62,5 +78,5 @@ def _make_disc_block( return disc_block - def forward(self, noise): - return self.disc(noise) + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.disc(x) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 80a5dd4ba4..9ac298a5e6 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -79,27 +79,24 @@ def training_step(self, batch, batch_idx, optimizer_idx): return result - def _disc_step(self, real): + def _disc_step(self, real: torch.Tensor) -> torch.Tensor: disc_loss = self._get_disc_loss(real) self.log("loss/disc", disc_loss, on_epoch=True, prog_bar=True) return disc_loss - def _gen_step(self, real): - gen_loss = self._generator_loss(real) + def _gen_step(self, real: torch.Tensor) -> torch.Tensor: + gen_loss = self._get_gen_loss(real) self.log("loss/gen", gen_loss, on_epoch=True, prog_bar=True) return gen_loss - def _get_disc_loss(self, real): + def _get_disc_loss(self, real: torch.Tensor) -> torch.Tensor: # Train with real real_pred = self.discriminator(real) real_gt = torch.ones_like(real_pred) real_loss = self.criterion(real_pred, real_gt) # Train with fake - batch_size = self._get_batch_size(real) - noise = self._get_noise(batch_size, self.hparams.latent_dim) - fake = self(noise) - fake_pred = self.discriminator(fake) + fake_pred = self._get_fake_pred(real) fake_gt = torch.zeros_like(fake_pred) fake_loss = self.criterion(fake_pred, fake_gt) @@ -107,19 +104,24 @@ def _get_disc_loss(self, real): return disc_loss - def _generator_loss(self, real): + def _get_gen_loss(self, real: torch.Tensor) -> torch.Tensor: # Train with fake + fake_pred = self._get_fake_pred(real) + fake_gt = torch.ones_like(fake_pred) + gen_loss = self.criterion(fake_pred, fake_gt) + + return gen_loss + + def _get_fake_pred(self, real: torch.Tensor) -> torch.Tensor: batch_size = self._get_batch_size(real) noise = self._get_noise(batch_size, self.hparams.latent_dim) fake = self(noise) fake_pred = self.discriminator(fake) - fake_gt = torch.ones_like(fake_pred) - gen_loss = self.criterion(fake_pred, fake_gt) - return gen_loss + return fake_pred @staticmethod - def _get_batch_size(real): + def _get_batch_size(real: torch.Tensor) -> int: batch_size = len(real) return batch_size @@ -128,7 +130,7 @@ def _get_noise(self, n_samples, latent_dim): return noise @staticmethod - def add_model_specific_args(parent_parser): + def add_model_specific_args(parent_parser: ArgumentParser) -> ArgumentParser: parser = ArgumentParser(parents=[parent_parser], add_help=False) parser.add_argument("--beta1", default=0.5, type=float) parser.add_argument("--beta2", default=0.999, type=float) From 6b1e11afa905d7a6cba7b8873720caf484b8b150 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Fri, 27 Nov 2020 09:18:24 +0100 Subject: [PATCH 06/55] Make image sampler callback work --- pl_bolts/models/gans/dcgan/dcgan_module.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 9ac298a5e6..5cb7b26145 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -4,6 +4,7 @@ import torch from torch import nn +from pl_bolts.callbacks import LatentDimInterpolator, TensorboardGenerativeModelImageSampler from pl_bolts.utils.warnings import warn_missing_pkg try: @@ -62,7 +63,8 @@ def configure_optimizers(self): opt_gen = torch.optim.Adam(self.generator.parameters(), lr=lr, betas=betas) return [opt_disc, opt_gen], [] - def forward(self, noise): + def forward(self, noise: torch.Tensor) -> torch.Tensor: + noise = noise.view(*noise.shape, 1, 1) return self.generator(noise) def training_step(self, batch, batch_idx, optimizer_idx): @@ -125,8 +127,8 @@ def _get_batch_size(real: torch.Tensor) -> int: batch_size = len(real) return batch_size - def _get_noise(self, n_samples, latent_dim): - noise = torch.randn(n_samples, latent_dim, 1, 1, device=self.device) + def _get_noise(self, n_samples: int, latent_dim: int) -> torch.Tensor: + noise = torch.randn(n_samples, latent_dim, device=self.device) return noise @staticmethod @@ -169,7 +171,8 @@ def cli_main(args=None): dm.test_transforms = transforms model = DCGAN(**vars(args)) - trainer = pl.Trainer.from_argparse_args(args) + callbacks = [TensorboardGenerativeModelImageSampler(), LatentDimInterpolator(interpolate_epoch_interval=5)] + trainer = pl.Trainer.from_argparse_args(args, callbacks=callbacks) trainer.fit(model, dm) return dm, model, trainer From ec90342f6bc616f61f72d8fe0d982e93de62f652 Mon Sep 17 00:00:00 2001 From: Teddy Koker Date: Thu, 26 Nov 2020 13:21:54 -0500 Subject: [PATCH 07/55] Upgrade DQN to use .log (#404) * Upgrade DQN to use .log * remove unused * pep8 * fixed other dqn --- pl_bolts/models/rl/double_dqn_model.py | 14 ++------------ pl_bolts/models/rl/dqn_model.py | 18 ++++-------------- pl_bolts/models/rl/per_dqn_model.py | 14 ++------------ 3 files changed, 8 insertions(+), 38 deletions(-) diff --git a/pl_bolts/models/rl/double_dqn_model.py b/pl_bolts/models/rl/double_dqn_model.py index 284c328f2d..150ea14dd9 100644 --- a/pl_bolts/models/rl/double_dqn_model.py +++ b/pl_bolts/models/rl/double_dqn_model.py @@ -65,27 +65,17 @@ def training_step(self, batch: Tuple[torch.Tensor, torch.Tensor], _) -> OrderedD if self.global_step % self.sync_rate == 0: self.target_net.load_state_dict(self.net.state_dict()) - log = { + self.log_dict({ "total_reward": self.total_rewards[-1], "avg_reward": self.avg_rewards, "train_loss": loss, # "episodes": self.total_episode_steps, - } - status = { - "steps": self.global_step, - "avg_reward": self.avg_rewards, - "total_reward": self.total_rewards[-1], - "episodes": self.done_episodes, - # "episode_steps": self.episode_steps, - "epsilon": self.agent.epsilon, - } + }) return OrderedDict( { "loss": loss, "avg_reward": self.avg_rewards, - "log": log, - "progress_bar": status, } ) diff --git a/pl_bolts/models/rl/dqn_model.py b/pl_bolts/models/rl/dqn_model.py index bbaffff922..6f2460216e 100644 --- a/pl_bolts/models/rl/dqn_model.py +++ b/pl_bolts/models/rl/dqn_model.py @@ -288,28 +288,18 @@ def training_step(self, batch: Tuple[torch.Tensor, torch.Tensor], _) -> OrderedD if self.global_step % self.sync_rate == 0: self.target_net.load_state_dict(self.net.state_dict()) - log = { + self.log_dict({ "total_reward": self.total_rewards[-1], "avg_reward": self.avg_rewards, "train_loss": loss, "episodes": self.done_episodes, "episode_steps": self.total_episode_steps[-1] - } - status = { - "steps": self.global_step, - "avg_reward": self.avg_rewards, - "total_reward": self.total_rewards[-1], - "episodes": self.done_episodes, - "episode_steps": self.total_episode_steps[-1], - "epsilon": self.agent.epsilon, - } + }) return OrderedDict( { "loss": loss, "avg_reward": self.avg_rewards, - "log": log, - "progress_bar": status, } ) @@ -323,8 +313,8 @@ def test_epoch_end(self, outputs) -> Dict[str, torch.Tensor]: """Log the avg of the test results""" rewards = [x["test_reward"] for x in outputs] avg_reward = sum(rewards) / len(rewards) - tensorboard_logs = {"avg_test_reward": avg_reward} - return {"avg_test_reward": avg_reward, "log": tensorboard_logs} + self.log("avg_test_reward", avg_reward) + return {"avg_test_reward": avg_reward} def configure_optimizers(self) -> List[Optimizer]: """ Initialize Adam optimizer""" diff --git a/pl_bolts/models/rl/per_dqn_model.py b/pl_bolts/models/rl/per_dqn_model.py index 69fe61bbe9..ec8636265e 100644 --- a/pl_bolts/models/rl/per_dqn_model.py +++ b/pl_bolts/models/rl/per_dqn_model.py @@ -130,27 +130,17 @@ def training_step(self, batch, _) -> OrderedDict: if self.global_step % self.sync_rate == 0: self.target_net.load_state_dict(self.net.state_dict()) - log = { + self.log_dict({ "total_reward": self.total_rewards[-1], "avg_reward": self.avg_rewards, "train_loss": loss, # "episodes": self.total_episode_steps, - } - status = { - "steps": self.global_step, - "avg_reward": self.avg_rewards, - "total_reward": self.total_rewards[-1], - "episodes": self.done_episodes, - # "episode_steps": self.episode_steps, - "epsilon": self.agent.epsilon, - } + }) return OrderedDict( { "loss": loss, "avg_reward": self.avg_rewards, - "log": log, - "progress_bar": status, } ) From 6d3aaaaf7ec3e5ed2775a7af74e4379dd4c258c2 Mon Sep 17 00:00:00 2001 From: Sidhant Sundrani Date: Thu, 26 Nov 2020 23:53:22 +0530 Subject: [PATCH 08/55] fix loss test case for batch size variation (#402) --- tests/models/rl/unit/test_reinforce.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/models/rl/unit/test_reinforce.py b/tests/models/rl/unit/test_reinforce.py index 9eb5ca8796..72a3641d9c 100644 --- a/tests/models/rl/unit/test_reinforce.py +++ b/tests/models/rl/unit/test_reinforce.py @@ -37,9 +37,9 @@ def setUp(self) -> None: def test_loss(self): """Test the reinforce loss function""" - batch_states = torch.rand(32, 4) - batch_actions = torch.rand(32).long() - batch_qvals = torch.rand(32) + batch_states = torch.rand(16, 4) + batch_actions = torch.rand(16).long() + batch_qvals = torch.rand(16) loss = self.model.loss(batch_states, batch_actions, batch_qvals) From ac56e5aa112416b8d750a53ae80c22585616d9fe Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Fri, 27 Nov 2020 03:27:47 +0900 Subject: [PATCH 09/55] Decouple DataModules from Models - CPCV2 (#386) * Decouple dms from CPCV2 * Update tests --- .../models/self_supervised/cpc/cpc_module.py | 51 ++++++------------- tests/models/self_supervised/test_models.py | 4 +- 2 files changed, 18 insertions(+), 37 deletions(-) diff --git a/pl_bolts/models/self_supervised/cpc/cpc_module.py b/pl_bolts/models/self_supervised/cpc/cpc_module.py index 5c864f08df..23f8f50c34 100644 --- a/pl_bolts/models/self_supervised/cpc/cpc_module.py +++ b/pl_bolts/models/self_supervised/cpc/cpc_module.py @@ -33,51 +33,40 @@ class CPCV2(pl.LightningModule): def __init__( self, - datamodule: Optional[pl.LightningDataModule] = None, encoder_name: str = 'cpc_encoder', patch_size: int = 8, patch_overlap: int = 4, - online_ft: int = True, + online_ft: bool = True, task: str = 'cpc', num_workers: int = 4, - learning_rate: int = 1e-4, - data_dir: str = '', - batch_size: int = 32, + num_classes: int = 10, + learning_rate: float = 1e-4, pretrained: Optional[str] = None, **kwargs, ): """ Args: - datamodule: A Datamodule (optional). Otherwise set the dataloaders directly encoder_name: A string for any of the resnets in torchvision, or the original CPC encoder, or a custon nn.Module encoder patch_size: How big to make the image patches - patch_overlap: How much overlap should each patch have. - online_ft: Enable a 1024-unit MLP to fine-tune online + patch_overlap: How much overlap each patch should have + online_ft: If True, enables a 1024-unit MLP to fine-tune online task: Which self-supervised task to use ('cpc', 'amdim', etc...) - num_workers: num dataloader worksers - learning_rate: what learning rate to use - data_dir: where to store data - batch_size: batch size + num_workers: number of dataloader workers + num_classes: number of classes + learning_rate: learning rate pretrained: If true, will use the weights pretrained (using CPC) on Imagenet """ super().__init__() self.save_hyperparameters() - # HACK - datamodule not pickleable so we remove it from hparams. - # TODO - remove datamodule from init. data should be decoupled from models. - del self.hparams['datamodule'] - self.online_evaluator = self.hparams.online_ft if pretrained: self.hparams.dataset = pretrained self.online_evaluator = True - assert datamodule - self.datamodule = datamodule - self.encoder = self.init_encoder() # info nce loss @@ -85,13 +74,11 @@ def __init__( self.contrastive_task = CPCTask(num_input_channels=c, target_dim=64, embed_scale=0.1) self.z_dim = c * h * h - self.num_classes = self.datamodule.num_classes + self.num_classes = num_classes if pretrained: self.load_pretrained(self.hparams.encoder_name) - print(self.hparams) - def load_pretrained(self, encoder_name): available_weights = {'resnet18'} @@ -212,19 +199,9 @@ def add_model_specific_args(parent_parser): 'resnext50_32x4d', 'resnext101_32x8d', 'wide_resnet50_2', 'wide_resnet101_2' ] parser.add_argument('--encoder', default='cpc_encoder', type=str, choices=possible_resnets) - - # training params - parser.add_argument('--batch_size', type=int, default=128) - # cifar10: 1e-5, stl10: 3e-5, imagenet: 4e-4 parser.add_argument('--learning_rate', type=float, default=1e-5) - # data - parser.add_argument('--dataset', default='cifar10', type=str) - parser.add_argument('--data_dir', default='.', type=str) - parser.add_argument('--meta_dir', default='.', type=str, help='path to meta.bin for imagenet') - parser.add_argument('--num_workers', default=8, type=int) - return parser @@ -237,9 +214,13 @@ def cli_main(): parser = ArgumentParser() parser = pl.Trainer.add_argparse_args(parser) parser = CPCV2.add_model_specific_args(parser) + parser.add_argument('--dataset', default='cifar10', type=str) + parser.add_argument('--data_dir', default='.', type=str) + parser.add_argument('--meta_dir', default='.', type=str, help='path to meta.bin for imagenet') + parser.add_argument('--num_workers', default=8, type=int) + parser.add_argument('--batch_size', type=int, default=128) args = parser.parse_args() - args.online_ft = True datamodule = None @@ -276,9 +257,9 @@ def to_device(batch, device): datamodule.val_transforms = CPCEvalTransformsImageNet128() args.patch_size = 32 - model = CPCV2(**vars(args), datamodule=datamodule) + model = CPCV2(**vars(args)) trainer = pl.Trainer.from_argparse_args(args, callbacks=[online_evaluator]) - trainer.fit(model) + trainer.fit(model, datamodule) if __name__ == '__main__': diff --git a/tests/models/self_supervised/test_models.py b/tests/models/self_supervised/test_models.py index 149239e8f7..6ef6d3f1b1 100644 --- a/tests/models/self_supervised/test_models.py +++ b/tests/models/self_supervised/test_models.py @@ -22,9 +22,9 @@ def test_cpcv2(tmpdir, datadir): datamodule.train_transforms = CPCTrainTransformsCIFAR10() datamodule.val_transforms = CPCEvalTransformsCIFAR10() - model = CPCV2(encoder='resnet18', data_dir=datadir, batch_size=2, online_ft=True, datamodule=datamodule) + model = CPCV2(encoder='resnet18', online_ft=True, num_classes=datamodule.num_classes) trainer = pl.Trainer(fast_dev_run=True, max_epochs=1, default_root_dir=tmpdir) - trainer.fit(model) + trainer.fit(model, datamodule) loss = trainer.progress_bar_dict['val_nce'] assert float(loss) > 0 From 4fca0926605a9e536ed1d17237372bf4b1cb245e Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Fri, 27 Nov 2020 11:39:40 +0100 Subject: [PATCH 10/55] Add docstrings, fix import, and update changelog --- CHANGELOG.md | 2 ++ pl_bolts/models/gans/__init__.py | 1 + pl_bolts/models/gans/dcgan/components.py | 11 +++++++++++ pl_bolts/models/gans/dcgan/dcgan_module.py | 10 ++++++++++ tests/models/test_gans.py | 3 +-- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26a8c2779f..1dcba9baf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added data monitor callbacks `ModuleDataMonitor` and `TrainingDataMonitor` ([#285](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/285)) +- Added DCGAN ([#403](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/403)) + ### Changed - Decoupled datamodules from models ([#332](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/332), [#270](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/270)) diff --git a/pl_bolts/models/gans/__init__.py b/pl_bolts/models/gans/__init__.py index 4c97ad8ba1..e14bcc93d8 100644 --- a/pl_bolts/models/gans/__init__.py +++ b/pl_bolts/models/gans/__init__.py @@ -1 +1,2 @@ from pl_bolts.models.gans.basic.basic_gan_module import GAN +from pl_bolts.models.gans.dcgan.dcgan_module import DCGAN diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py index b48e192316..177402870a 100644 --- a/pl_bolts/models/gans/dcgan/components.py +++ b/pl_bolts/models/gans/dcgan/components.py @@ -5,6 +5,12 @@ class DCGANGenerator(nn.Module): def __init__(self, latent_dim: int, feature_maps: int, image_channels: int): + """ + Args: + latent_dim: Dimension of the latent space + feature_maps: Number of feature maps to use + image_channels: Number of channels of the images from the dataset + """ super().__init__() self.gen = nn.Sequential( self._make_gen_block(latent_dim, feature_maps * 8, kernel_size=4, stride=1, padding=0), @@ -44,6 +50,11 @@ def forward(self, noise: torch.Tensor) -> torch.Tensor: class DCGANDiscriminator(nn.Module): def __init__(self, feature_maps: int, image_channels: int): + """ + Args: + feature_maps: Number of feature maps to use + image_channels: Number of channels of the images from the dataset + """ super().__init__() self.disc = nn.Sequential( self._make_disc_block(image_channels, feature_maps, batch_norm=False), diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 5cb7b26145..b5ac1f37d9 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -29,6 +29,16 @@ def __init__( learning_rate: float = 0.0002, **kwargs ): + """ + Args: + beta1: Beta1 value for Adam optimizer + beta2: Beta2 value for Adam optimizer + feature_maps_gen: Number of feature maps to use for the generator + feature_maps_disc: Number of feature maps to use for the discriminator + image_channels: Number of channels of the images from the dataset + latent_dim: Dimension of the latent space + learning_rate: Learning rate + """ super().__init__() self.save_hyperparameters() diff --git a/tests/models/test_gans.py b/tests/models/test_gans.py index 7a5f5e5ac6..dc9b4c462e 100644 --- a/tests/models/test_gans.py +++ b/tests/models/test_gans.py @@ -4,8 +4,7 @@ from torchvision import transforms as transform_lib from pl_bolts.datamodules import CIFAR10DataModule, MNISTDataModule -from pl_bolts.models.gans import GAN -from pl_bolts.models.gans.dcgan.dcgan_module import DCGAN +from pl_bolts.models.gans import DCGAN, GAN @pytest.mark.parametrize( From 4bc4d638011be4a75c65e649bf31c05d536a0a6e Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Tue, 15 Dec 2020 17:10:01 +0100 Subject: [PATCH 11/55] Update transforms --- pl_bolts/models/gans/dcgan/dcgan_module.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index b5ac1f37d9..f0233b23d3 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -10,7 +10,7 @@ try: from torchvision import transforms as transform_lib except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover + warn_missing_pkg("torchvision") # pragma: no-cover _TORCHVISION_AVAILABLE = False else: _TORCHVISION_AVAILABLE = True @@ -166,15 +166,28 @@ def cli_main(args=None): if script_args.dataset == "mnist": dm_cls = MNISTDataModule + transforms = transform_lib.Compose( + [ + transform_lib.Resize(script_args.image_size), + transform_lib.ToTensor(), + transform_lib.Normalize((0.5,), (0.5,)), + ] + ) elif script_args.dataset == "cifar10": dm_cls = CIFAR10DataModule + transforms = transform_lib.Compose( + [ + transform_lib.Resize(script_args.image_size), + transform_lib.ToTensor(), + transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), + ] + ) parser = dm_cls.add_argparse_args(parser) parser = pl.Trainer.add_argparse_args(parser) parser = DCGAN.add_model_specific_args(parser) args = parser.parse_args(args) - transforms = transform_lib.Compose([transform_lib.Resize(args.image_size), transform_lib.ToTensor()]) dm = dm_cls.from_argparse_args(args) dm.train_transforms = transforms dm.val_transforms = transforms From 0a13628158cccd34342b6cf417ec58a357494730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Laria?= Date: Tue, 1 Dec 2020 17:21:34 +0100 Subject: [PATCH 12/55] bugfix: batch_size parameter for DataModules remaining (#344) * bugfix: batch_size for DataModules remaining * Update sklearn datamodule tests * Fix default_transforms. Keep internal for every data module * fix typo on binary_mnist_datamodule thanks @akihironitta Co-authored-by: Akihiro Nitta Co-authored-by: Akihiro Nitta --- docs/source/introduction_guide.rst | 4 +-- .../datamodules/binary_mnist_datamodule.py | 33 +++++++------------ pl_bolts/datamodules/cifar10_datamodule.py | 8 ++--- pl_bolts/datamodules/cityscapes_datamodule.py | 16 ++++----- .../datamodules/fashion_mnist_datamodule.py | 33 +++++++------------ pl_bolts/datamodules/kitti_datamodule.py | 16 +++++---- pl_bolts/datamodules/mnist_datamodule.py | 18 +++------- pl_bolts/datamodules/sklearn_datamodule.py | 22 +++++++------ .../datamodules/ssl_imagenet_datamodule.py | 14 ++++---- pl_bolts/datamodules/stl10_datamodule.py | 16 ++++----- .../models/regression/linear_regression.py | 9 ++--- .../models/regression/logistic_regression.py | 9 ++--- 12 files changed, 90 insertions(+), 108 deletions(-) diff --git a/docs/source/introduction_guide.rst b/docs/source/introduction_guide.rst index a16ba08818..e3e91bcb1f 100644 --- a/docs/source/introduction_guide.rst +++ b/docs/source/introduction_guide.rst @@ -425,7 +425,7 @@ Here's an example for logistic regression # use any numpy or sklearn dataset X, y = load_iris(return_X_y=True) - dm = SklearnDataModule(X, y) + dm = SklearnDataModule(X, y, batch_size=12) # build model model = LogisticRegression(input_dim=4, num_classes=3) @@ -434,7 +434,7 @@ Here's an example for logistic regression trainer = pl.Trainer(tpu_cores=8, precision=16) trainer.fit(model, dm.train_dataloader(), dm.val_dataloader()) - trainer.test(test_dataloaders=dm.test_dataloader(batch_size=12)) + trainer.test(test_dataloaders=dm.test_dataloader()) Any input will be flattened across all dimensions except the first one (batch). This means images, sound, etc... work out of the box. diff --git a/pl_bolts/datamodules/binary_mnist_datamodule.py b/pl_bolts/datamodules/binary_mnist_datamodule.py index e4dba120bf..db480c4f41 100644 --- a/pl_bolts/datamodules/binary_mnist_datamodule.py +++ b/pl_bolts/datamodules/binary_mnist_datamodule.py @@ -53,6 +53,7 @@ def __init__( num_workers: int = 16, normalize: bool = False, seed: int = 42, + batch_size: int = 32, *args, **kwargs, ): @@ -62,6 +63,7 @@ def __init__( val_split: how many of the training images to use for the validation split num_workers: how many workers to use for loading data normalize: If true applies image normalize + batch_size: size of batch """ super().__init__(*args, **kwargs) @@ -76,6 +78,7 @@ def __init__( self.num_workers = num_workers self.normalize = normalize self.seed = seed + self.batch_size = batch_size @property def num_classes(self): @@ -92,15 +95,11 @@ def prepare_data(self): BinaryMNIST(self.data_dir, train=True, download=True, transform=transform_lib.ToTensor()) BinaryMNIST(self.data_dir, train=False, download=True, transform=transform_lib.ToTensor()) - def train_dataloader(self, batch_size=32, transforms=None): + def train_dataloader(self): """ MNIST train set removes a subset to use for validation - - Args: - batch_size: size of batch - transforms: custom transforms """ - transforms = transforms or self.train_transforms or self._default_transforms() + transforms = self._default_transforms() if self.train_transforms is None else self.train_transforms dataset = BinaryMNIST(self.data_dir, train=True, download=False, transform=transforms) train_length = len(dataset) @@ -111,7 +110,7 @@ def train_dataloader(self, batch_size=32, transforms=None): ) loader = DataLoader( dataset_train, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=True, num_workers=self.num_workers, drop_last=True, @@ -119,15 +118,11 @@ def train_dataloader(self, batch_size=32, transforms=None): ) return loader - def val_dataloader(self, batch_size=32, transforms=None): + def val_dataloader(self): """ MNIST val set uses a subset of the training set for validation - - Args: - batch_size: size of batch - transforms: custom transforms """ - transforms = transforms or self.val_transforms or self._default_transforms() + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = BinaryMNIST(self.data_dir, train=True, download=False, transform=transforms) train_length = len(dataset) _, dataset_val = random_split( @@ -137,7 +132,7 @@ def val_dataloader(self, batch_size=32, transforms=None): ) loader = DataLoader( dataset_val, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, @@ -145,20 +140,16 @@ def val_dataloader(self, batch_size=32, transforms=None): ) return loader - def test_dataloader(self, batch_size=32, transforms=None): + def test_dataloader(self): """ MNIST test set uses the test split - - Args: - batch_size: size of batch - transforms: custom transforms """ - transforms = transforms or self.val_transforms or self._default_transforms() + transforms = self._default_transforms() if self.test_transforms is None else self.test_transforms dataset = BinaryMNIST(self.data_dir, train=False, download=False, transform=transforms) loader = DataLoader( dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, diff --git a/pl_bolts/datamodules/cifar10_datamodule.py b/pl_bolts/datamodules/cifar10_datamodule.py index 19535b2932..e316e5fe14 100644 --- a/pl_bolts/datamodules/cifar10_datamodule.py +++ b/pl_bolts/datamodules/cifar10_datamodule.py @@ -116,7 +116,7 @@ def train_dataloader(self): """ CIFAR train set removes a subset to use for validation """ - transforms = self.default_transforms() if self.train_transforms is None else self.train_transforms + transforms = self._default_transforms() if self.train_transforms is None else self.train_transforms dataset = self.DATASET(self.data_dir, train=True, download=False, transform=transforms, **self.extra_args) train_length = len(dataset) @@ -139,7 +139,7 @@ def val_dataloader(self): """ CIFAR10 val set uses a subset of the training set for validation """ - transforms = self.default_transforms() if self.val_transforms is None else self.val_transforms + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = self.DATASET(self.data_dir, train=True, download=False, transform=transforms, **self.extra_args) train_length = len(dataset) @@ -162,7 +162,7 @@ def test_dataloader(self): """ CIFAR10 test set uses the test split """ - transforms = self.default_transforms() if self.test_transforms is None else self.test_transforms + transforms = self._default_transforms() if self.test_transforms is None else self.test_transforms dataset = self.DATASET(self.data_dir, train=False, download=False, transform=transforms, **self.extra_args) loader = DataLoader( @@ -175,7 +175,7 @@ def test_dataloader(self): ) return loader - def default_transforms(self): + def _default_transforms(self): cf10_transforms = transform_lib.Compose([ transform_lib.ToTensor(), cifar10_normalization() diff --git a/pl_bolts/datamodules/cityscapes_datamodule.py b/pl_bolts/datamodules/cityscapes_datamodule.py index a0d623253e..4789268888 100644 --- a/pl_bolts/datamodules/cityscapes_datamodule.py +++ b/pl_bolts/datamodules/cityscapes_datamodule.py @@ -111,8 +111,8 @@ def train_dataloader(self): """ Cityscapes train set """ - transforms = self.train_transforms or self.default_transforms() - target_transforms = self.target_transforms or self.default_target_transforms() + transforms = self.train_transforms or self._default_transforms() + target_transforms = self.target_transforms or self._default_target_transforms() dataset = Cityscapes(self.data_dir, split='train', @@ -136,8 +136,8 @@ def val_dataloader(self): """ Cityscapes val set """ - transforms = self.val_transforms or self.default_transforms() - target_transforms = self.target_transforms or self.default_target_transforms() + transforms = self.val_transforms or self._default_transforms() + target_transforms = self.target_transforms or self._default_target_transforms() dataset = Cityscapes(self.data_dir, split='val', @@ -161,8 +161,8 @@ def test_dataloader(self): """ Cityscapes test set """ - transforms = self.test_transforms or self.default_transforms() - target_transforms = self.target_transforms or self.default_target_transforms() + transforms = self.test_transforms or self._default_transforms() + target_transforms = self.target_transforms or self._default_target_transforms() dataset = Cityscapes(self.data_dir, split='test', @@ -181,7 +181,7 @@ def test_dataloader(self): ) return loader - def default_transforms(self): + def _default_transforms(self): cityscapes_transforms = transform_lib.Compose([ transform_lib.ToTensor(), transform_lib.Normalize( @@ -191,7 +191,7 @@ def default_transforms(self): ]) return cityscapes_transforms - def default_target_transforms(self): + def _default_target_transforms(self): cityscapes_target_trasnforms = transform_lib.Compose([ transform_lib.ToTensor(), transform_lib.Lambda(lambda t: t.squeeze()) diff --git a/pl_bolts/datamodules/fashion_mnist_datamodule.py b/pl_bolts/datamodules/fashion_mnist_datamodule.py index 32ccb2ce81..c50cf59572 100644 --- a/pl_bolts/datamodules/fashion_mnist_datamodule.py +++ b/pl_bolts/datamodules/fashion_mnist_datamodule.py @@ -51,6 +51,7 @@ def __init__( val_split: int = 5000, num_workers: int = 16, seed: int = 42, + batch_size: int = 32, *args, **kwargs, ): @@ -59,6 +60,7 @@ def __init__( data_dir: where to save/load the data val_split: how many of the training images to use for the validation split num_workers: how many workers to use for loading data + batch_size: size of batch """ super().__init__(*args, **kwargs) @@ -72,6 +74,7 @@ def __init__( self.val_split = val_split self.num_workers = num_workers self.seed = seed + self.batch_size = batch_size @property def num_classes(self): @@ -88,15 +91,11 @@ def prepare_data(self): FashionMNIST(self.data_dir, train=True, download=True, transform=transform_lib.ToTensor()) FashionMNIST(self.data_dir, train=False, download=True, transform=transform_lib.ToTensor()) - def train_dataloader(self, batch_size=32, transforms=None): + def train_dataloader(self): """ FashionMNIST train set removes a subset to use for validation - - Args: - batch_size: size of batch - transforms: custom transforms """ - transforms = transforms or self.train_transforms or self._default_transforms() + transforms = self._default_transforms() if self.train_transforms is None else self.train_transforms dataset = FashionMNIST(self.data_dir, train=True, download=False, transform=transforms) train_length = len(dataset) @@ -107,7 +106,7 @@ def train_dataloader(self, batch_size=32, transforms=None): ) loader = DataLoader( dataset_train, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=True, num_workers=self.num_workers, drop_last=True, @@ -115,15 +114,11 @@ def train_dataloader(self, batch_size=32, transforms=None): ) return loader - def val_dataloader(self, batch_size=32, transforms=None): + def val_dataloader(self): """ FashionMNIST val set uses a subset of the training set for validation - - Args: - batch_size: size of batch - transforms: custom transforms """ - transforms = transforms or self.val_transforms or self._default_transforms() + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = FashionMNIST(self.data_dir, train=True, download=False, transform=transforms) train_length = len(dataset) @@ -134,7 +129,7 @@ def val_dataloader(self, batch_size=32, transforms=None): ) loader = DataLoader( dataset_val, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, @@ -142,20 +137,16 @@ def val_dataloader(self, batch_size=32, transforms=None): ) return loader - def test_dataloader(self, batch_size=32, transforms=None): + def test_dataloader(self): """ FashionMNIST test set uses the test split - - Args: - batch_size: size of batch - transforms: custom transforms """ - transforms = transforms or self.test_transforms or self._default_transforms() + transforms = self._default_transforms() if self.test_transforms is None else self.test_transforms dataset = FashionMNIST(self.data_dir, train=False, download=False, transform=transforms) loader = DataLoader( dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, diff --git a/pl_bolts/datamodules/kitti_datamodule.py b/pl_bolts/datamodules/kitti_datamodule.py index 54ba6a0bcf..c07acbd5eb 100644 --- a/pl_bolts/datamodules/kitti_datamodule.py +++ b/pl_bolts/datamodules/kitti_datamodule.py @@ -74,14 +74,8 @@ def __init__( self.num_workers = num_workers self.seed = seed - self.default_transforms = transforms.Compose([ - transforms.ToTensor(), - transforms.Normalize(mean=[0.35675976, 0.37380189, 0.3764753], - std=[0.32064945, 0.32098866, 0.32325324]) - ]) - # split into train, val, test - kitti_dataset = KittiDataset(self.data_dir, transform=self.default_transforms) + kitti_dataset = KittiDataset(self.data_dir, transform=self._default_transforms()) val_len = round(val_split * len(kitti_dataset)) test_len = round(test_split * len(kitti_dataset)) @@ -111,3 +105,11 @@ def test_dataloader(self): shuffle=False, num_workers=self.num_workers) return loader + + def _default_transforms(self): + kitti_transforms = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize(mean=[0.35675976, 0.37380189, 0.3764753], + std=[0.32064945, 0.32098866, 0.32325324]) + ]) + return kitti_transforms diff --git a/pl_bolts/datamodules/mnist_datamodule.py b/pl_bolts/datamodules/mnist_datamodule.py index 38d3d001bb..0764e20725 100644 --- a/pl_bolts/datamodules/mnist_datamodule.py +++ b/pl_bolts/datamodules/mnist_datamodule.py @@ -61,6 +61,7 @@ def __init__( val_split: how many of the training images to use for the validation split num_workers: how many workers to use for loading data normalize: If true applies image normalize + batch_size: size of batch """ super().__init__(*args, **kwargs) @@ -95,11 +96,8 @@ def prepare_data(self): def train_dataloader(self): """ MNIST train set removes a subset to use for validation - - Args: - transforms: custom transforms """ - transforms = self.default_transforms() if self.train_transforms is None else self.train_transforms + transforms = self._default_transforms() if self.train_transforms is None else self.train_transforms dataset = MNIST(self.data_dir, train=True, download=False, transform=transforms) train_length = len(dataset) @@ -119,11 +117,8 @@ def train_dataloader(self): def val_dataloader(self): """ MNIST val set uses a subset of the training set for validation - - Args: - transforms: custom transforms """ - transforms = self.default_transforms() if self.val_transforms is None else self.val_transforms + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = MNIST(self.data_dir, train=True, download=False, transform=transforms) train_length = len(dataset) _, dataset_val = random_split( @@ -142,11 +137,8 @@ def val_dataloader(self): def test_dataloader(self): """ MNIST test set uses the test split - - Args: - transforms: custom transforms """ - transforms = self.default_transforms() if self.test_transforms is None else self.test_transforms + transforms = self._default_transforms() if self.test_transforms is None else self.test_transforms dataset = MNIST(self.data_dir, train=False, download=False, transform=transforms) loader = DataLoader( @@ -155,7 +147,7 @@ def test_dataloader(self): ) return loader - def default_transforms(self): + def _default_transforms(self): if self.normalize: mnist_transforms = transform_lib.Compose( [transform_lib.ToTensor(), transform_lib.Normalize(mean=(0.5,), std=(0.5,))] diff --git a/pl_bolts/datamodules/sklearn_datamodule.py b/pl_bolts/datamodules/sklearn_datamodule.py index bd05d81c90..d64652ecd5 100644 --- a/pl_bolts/datamodules/sklearn_datamodule.py +++ b/pl_bolts/datamodules/sklearn_datamodule.py @@ -118,22 +118,22 @@ class SklearnDataModule(LightningDataModule): >>> from pl_bolts.datamodules import SklearnDataModule ... >>> X, y = load_boston(return_X_y=True) - >>> loaders = SklearnDataModule(X, y) + >>> loaders = SklearnDataModule(X, y, batch_size=32) ... >>> # train set - >>> train_loader = loaders.train_dataloader(batch_size=32) + >>> train_loader = loaders.train_dataloader() >>> len(train_loader.dataset) 355 >>> len(train_loader) 11 >>> # validation set - >>> val_loader = loaders.val_dataloader(batch_size=32) + >>> val_loader = loaders.val_dataloader() >>> len(val_loader.dataset) 100 >>> len(val_loader) 3 >>> # test set - >>> test_loader = loaders.test_dataloader(batch_size=32) + >>> test_loader = loaders.test_dataloader() >>> len(test_loader.dataset) 51 >>> len(test_loader) @@ -150,12 +150,14 @@ def __init__( num_workers=2, random_state=1234, shuffle=True, + batch_size: int = 16, *args, **kwargs, ): super().__init__(*args, **kwargs) self.num_workers = num_workers + self.batch_size = batch_size # shuffle x and y if shuffle and _SKLEARN_AVAILABLE: @@ -193,10 +195,10 @@ def _init_datasets(self, X, y, x_val, y_val, x_test, y_test): self.val_dataset = SklearnDataset(x_val, y_val) self.test_dataset = SklearnDataset(x_test, y_test) - def train_dataloader(self, batch_size: int = 16): + def train_dataloader(self): loader = DataLoader( self.train_dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=True, num_workers=self.num_workers, drop_last=True, @@ -204,10 +206,10 @@ def train_dataloader(self, batch_size: int = 16): ) return loader - def val_dataloader(self, batch_size: int = 16): + def val_dataloader(self): loader = DataLoader( self.val_dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, @@ -215,10 +217,10 @@ def val_dataloader(self, batch_size: int = 16): ) return loader - def test_dataloader(self, batch_size: int = 16): + def test_dataloader(self): loader = DataLoader( self.test_dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, diff --git a/pl_bolts/datamodules/ssl_imagenet_datamodule.py b/pl_bolts/datamodules/ssl_imagenet_datamodule.py index 06bcf77ce1..ee50f4b091 100644 --- a/pl_bolts/datamodules/ssl_imagenet_datamodule.py +++ b/pl_bolts/datamodules/ssl_imagenet_datamodule.py @@ -26,6 +26,7 @@ def __init__( data_dir, meta_dir=None, num_workers=16, + batch_size: int = 32, *args, **kwargs, ): @@ -39,6 +40,7 @@ def __init__( self.data_dir = data_dir self.num_workers = num_workers self.meta_dir = meta_dir + self.batch_size = batch_size @property def num_classes(self): @@ -74,7 +76,7 @@ def prepare_data(self): UnlabeledImagenet.generate_meta_bins(path) """) - def train_dataloader(self, batch_size, num_images_per_class=-1, add_normalize=False): + def train_dataloader(self, num_images_per_class=-1, add_normalize=False): transforms = self._default_transforms() if self.train_transforms is None else self.train_transforms dataset = UnlabeledImagenet(self.data_dir, @@ -84,7 +86,7 @@ def train_dataloader(self, batch_size, num_images_per_class=-1, add_normalize=Fa transform=transforms) loader = DataLoader( dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=True, num_workers=self.num_workers, drop_last=True, @@ -92,7 +94,7 @@ def train_dataloader(self, batch_size, num_images_per_class=-1, add_normalize=Fa ) return loader - def val_dataloader(self, batch_size, num_images_per_class=50, add_normalize=False): + def val_dataloader(self, num_images_per_class=50, add_normalize=False): transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = UnlabeledImagenet(self.data_dir, @@ -102,14 +104,14 @@ def val_dataloader(self, batch_size, num_images_per_class=50, add_normalize=Fals transform=transforms) loader = DataLoader( dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, pin_memory=True ) return loader - def test_dataloader(self, batch_size, num_images_per_class, add_normalize=False): + def test_dataloader(self, num_images_per_class, add_normalize=False): transforms = self._default_transforms() if self.test_transforms is None else self.test_transforms dataset = UnlabeledImagenet(self.data_dir, @@ -119,7 +121,7 @@ def test_dataloader(self, batch_size, num_images_per_class, add_normalize=False) transform=transforms) loader = DataLoader( dataset, - batch_size=batch_size, + batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, diff --git a/pl_bolts/datamodules/stl10_datamodule.py b/pl_bolts/datamodules/stl10_datamodule.py index b1ee3058a8..3842725d30 100644 --- a/pl_bolts/datamodules/stl10_datamodule.py +++ b/pl_bolts/datamodules/stl10_datamodule.py @@ -105,7 +105,7 @@ def train_dataloader(self): """ Loads the 'unlabeled' split minus a portion set aside for validation via `unlabeled_val_split`. """ - transforms = self.default_transforms() if self.train_transforms is None else self.train_transforms + transforms = self._default_transforms() if self.train_transforms is None else self.train_transforms dataset = STL10(self.data_dir, split='unlabeled', download=False, transform=transforms) train_length = len(dataset) @@ -132,7 +132,7 @@ def train_dataloader_mixed(self): batch_size: the batch size transforms: a sequence of transforms """ - transforms = self.default_transforms() if self.train_transforms is None else self.train_transforms + transforms = self._default_transforms() if self.train_transforms is None else self.train_transforms unlabeled_dataset = STL10(self.data_dir, split='unlabeled', @@ -170,7 +170,7 @@ def val_dataloader(self): batch_size: the batch size transforms: a sequence of transforms """ - transforms = self.default_transforms() if self.val_transforms is None else self.val_transforms + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = STL10(self.data_dir, split='unlabeled', download=False, transform=transforms) train_length = len(dataset) @@ -202,7 +202,7 @@ def val_dataloader_mixed(self): batch_size: the batch size transforms: a sequence of transforms """ - transforms = self.default_transforms() if self.val_transforms is None else self.val_transforms + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms unlabeled_dataset = STL10(self.data_dir, split='unlabeled', download=False, @@ -237,7 +237,7 @@ def test_dataloader(self): batch_size: the batch size transforms: the transforms """ - transforms = self.default_transforms() if self.test_transforms is None else self.test_transforms + transforms = self._default_transforms() if self.test_transforms is None else self.test_transforms dataset = STL10(self.data_dir, split='test', download=False, transform=transforms) loader = DataLoader( @@ -251,7 +251,7 @@ def test_dataloader(self): return loader def train_dataloader_labeled(self): - transforms = self.default_transforms() if self.val_transforms is None else self.val_transforms + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = STL10(self.data_dir, split='train', download=False, transform=transforms) train_length = len(dataset) @@ -268,7 +268,7 @@ def train_dataloader_labeled(self): return loader def val_dataloader_labeled(self): - transforms = self.default_transforms() if self.val_transforms is None else self.val_transforms + transforms = self._default_transforms() if self.val_transforms is None else self.val_transforms dataset = STL10(self.data_dir, split='train', download=False, @@ -288,7 +288,7 @@ def val_dataloader_labeled(self): ) return loader - def default_transforms(self): + def _default_transforms(self): data_transforms = transform_lib.Compose([ transform_lib.ToTensor(), stl10_normalization() diff --git a/pl_bolts/models/regression/linear_regression.py b/pl_bolts/models/regression/linear_regression.py index 33012d56ef..8e576d7793 100644 --- a/pl_bolts/models/regression/linear_regression.py +++ b/pl_bolts/models/regression/linear_regression.py @@ -131,9 +131,6 @@ def cli_main(): 'You want to use `sklearn` which is not installed yet, install it with `pip install sklearn`.' ) from err - X, y = load_boston(return_X_y=True) # these are numpy arrays - loaders = SklearnDataModule(X, y) - # args parser = ArgumentParser() parser = LinearRegression.add_model_specific_args(parser) @@ -144,9 +141,13 @@ def cli_main(): model = LinearRegression(input_dim=13, l1_strength=1, l2_strength=1) # model = LinearRegression(**vars(args)) + # data + X, y = load_boston(return_X_y=True) # these are numpy arrays + loaders = SklearnDataModule(X, y, batch_size=args.batch_size) + # train trainer = pl.Trainer.from_argparse_args(args) - trainer.fit(model, loaders.train_dataloader(args.batch_size), loaders.val_dataloader(args.batch_size)) + trainer.fit(model, loaders.train_dataloader(), loaders.val_dataloader()) if __name__ == '__main__': diff --git a/pl_bolts/models/regression/logistic_regression.py b/pl_bolts/models/regression/logistic_regression.py index e4ee2cd3bd..ea9f1dcc24 100644 --- a/pl_bolts/models/regression/logistic_regression.py +++ b/pl_bolts/models/regression/logistic_regression.py @@ -137,9 +137,6 @@ def cli_main(): 'You want to use `sklearn` which is not installed yet, install it with `pip install sklearn`.' ) from err - X, y = load_iris(return_X_y=True) - loaders = SklearnDataModule(X, y) - # args parser = ArgumentParser() parser = LogisticRegression.add_model_specific_args(parser) @@ -150,9 +147,13 @@ def cli_main(): # model = LogisticRegression(**vars(args)) model = LogisticRegression(input_dim=4, num_classes=3, l1_strength=0.01, learning_rate=0.01) + # data + X, y = load_iris(return_X_y=True) + loaders = SklearnDataModule(X, y, batch_size=args.batch_size) + # train trainer = pl.Trainer.from_argparse_args(args) - trainer.fit(model, loaders.train_dataloader(args.batch_size), loaders.val_dataloader(args.batch_size)) + trainer.fit(model, loaders.train_dataloader(), loaders.val_dataloader()) if __name__ == '__main__': From 07315aea8ffe116831f23122e9d2ac1e0d5b929e Mon Sep 17 00:00:00 2001 From: Bartol Karuza Date: Sat, 5 Dec 2020 00:30:27 +0000 Subject: [PATCH 13/55] Fix a typo/copy paste error (#415) --- docs/source/reinforce_learn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/reinforce_learn.rst b/docs/source/reinforce_learn.rst index 4737b60764..ccb6e06392 100644 --- a/docs/source/reinforce_learn.rst +++ b/docs/source/reinforce_learn.rst @@ -306,7 +306,7 @@ steadily increases till convergence. :width: 800 :alt: Noisy DQN Result -**DQN vs Dueling DQN: Pong** +**DQN vs Noisy DQN: Pong** In comparison to the base DQN, the Noisy DQN is more stable and is able to converge on an optimal policy much faster than the original. It seems that the replacement of the epsilon-greedy strategy with network noise provides a better From 931dad8f9fa98b6f3152e94a85a30f48c3fa800d Mon Sep 17 00:00:00 2001 From: Happy Sugar Life <777Jonathansum@gmail.com> Date: Fri, 4 Dec 2020 16:39:47 -0800 Subject: [PATCH 14/55] Just a Typo (#413) missing a ' at the end of dataset='stl10 --- docs/source/self_supervised_models.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/self_supervised_models.rst b/docs/source/self_supervised_models.rst index 9296a64b0d..bf956c73ba 100644 --- a/docs/source/self_supervised_models.rst +++ b/docs/source/self_supervised_models.rst @@ -431,7 +431,7 @@ To Train:: model = SwAV( gpus=1, num_samples=dm.num_unlabeled_samples, - dataset='stl10, + dataset='stl10', batch_size=batch_size ) From f8335f9e8da3fe23ac20e53445ba515cea928c1f Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Sat, 5 Dec 2020 09:47:00 +0900 Subject: [PATCH 15/55] Remove unused arguments (#418) --- pl_bolts/models/detection/faster_rcnn.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pl_bolts/models/detection/faster_rcnn.py b/pl_bolts/models/detection/faster_rcnn.py index b6b6674bf8..e7defbb0e4 100644 --- a/pl_bolts/models/detection/faster_rcnn.py +++ b/pl_bolts/models/detection/faster_rcnn.py @@ -122,9 +122,6 @@ def add_model_specific_args(parent_parser): parser.add_argument("--pretrained_backbone", type=bool, default=True) parser.add_argument("--trainable_backbone_layers", type=int, default=3) parser.add_argument("--replace_head", type=bool, default=True) - - parser.add_argument("--data_dir", type=str, default=".") - parser.add_argument("--batch_size", type=int, default=1) return parser From 5b299acbaba0a65ed900576bb484d0a0b2dd44ec Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Sat, 5 Dec 2020 09:52:55 +0900 Subject: [PATCH 16/55] tests: Use cached datasets in LitMNIST and the doctests (#414) * Use cached datasets * Use cached datasets in doctests --- pl_bolts/datasets/cifar10_dataset.py | 4 ++-- tests/callbacks/test_data_monitor.py | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pl_bolts/datasets/cifar10_dataset.py b/pl_bolts/datasets/cifar10_dataset.py index 1038c7aa87..fcc783a72a 100644 --- a/pl_bolts/datasets/cifar10_dataset.py +++ b/pl_bolts/datasets/cifar10_dataset.py @@ -41,7 +41,7 @@ class CIFAR10(LightDataset): >>> from torchvision import transforms >>> from pl_bolts.transforms.dataset_normalizations import cifar10_normalization >>> cf10_transforms = transforms.Compose([transforms.ToTensor(), cifar10_normalization()]) - >>> dataset = CIFAR10(download=True, transform=cf10_transforms) + >>> dataset = CIFAR10(download=True, transform=cf10_transforms, data_dir="datasets") >>> len(dataset) 50000 >>> torch.bincount(dataset.targets) @@ -167,7 +167,7 @@ class TrialCIFAR10(CIFAR10): without the torchvision dependency. Examples: - >>> dataset = TrialCIFAR10(download=True, num_samples=150, labels=(1, 5, 8)) + >>> dataset = TrialCIFAR10(download=True, num_samples=150, labels=(1, 5, 8), data_dir="datasets") >>> len(dataset) 450 >>> sorted(set([d.item() for d in dataset.targets])) diff --git a/tests/callbacks/test_data_monitor.py b/tests/callbacks/test_data_monitor.py index ac1ec6835b..701b6641d6 100644 --- a/tests/callbacks/test_data_monitor.py +++ b/tests/callbacks/test_data_monitor.py @@ -16,11 +16,11 @@ ) @mock.patch("pl_bolts.callbacks.data_monitor.DataMonitorBase.log_histogram") def test_base_log_interval_override( - log_histogram, tmpdir, log_every_n_steps, max_steps, expected_calls + log_histogram, tmpdir, log_every_n_steps, max_steps, expected_calls, datadir ): """ Test logging interval set by log_every_n_steps argument. """ monitor = TrainingDataMonitor(log_every_n_steps=log_every_n_steps) - model = LitMNIST(num_workers=0) + model = LitMNIST(data_dir=datadir, num_workers=0) trainer = Trainer( default_root_dir=tmpdir, log_every_n_steps=1, @@ -43,11 +43,11 @@ def test_base_log_interval_override( ) @mock.patch("pl_bolts.callbacks.data_monitor.DataMonitorBase.log_histogram") def test_base_log_interval_fallback( - log_histogram, tmpdir, log_every_n_steps, max_steps, expected_calls + log_histogram, tmpdir, log_every_n_steps, max_steps, expected_calls, datadir ): """ Test that if log_every_n_steps not set in the callback, fallback to what is defined in the Trainer. """ monitor = TrainingDataMonitor() - model = LitMNIST(num_workers=0) + model = LitMNIST(data_dir=datadir, num_workers=0) trainer = Trainer( default_root_dir=tmpdir, log_every_n_steps=log_every_n_steps, @@ -81,10 +81,10 @@ def test_base_unsupported_logger_warning(tmpdir): @mock.patch("pl_bolts.callbacks.data_monitor.TrainingDataMonitor.log_histogram") -def test_training_data_monitor(log_histogram, tmpdir): +def test_training_data_monitor(log_histogram, tmpdir, datadir): """ Test that the TrainingDataMonitor logs histograms of data points going into training_step. """ monitor = TrainingDataMonitor() - model = LitMNIST() + model = LitMNIST(data_dir=datadir) trainer = Trainer( default_root_dir=tmpdir, log_every_n_steps=1, callbacks=[monitor], ) From 427b596a1310ef55a294933c9c277fdab5f9032f Mon Sep 17 00:00:00 2001 From: Sidhant Sundrani Date: Mon, 7 Dec 2020 06:28:02 +0530 Subject: [PATCH 17/55] clear replay buffer after trajectory (#425) --- pl_bolts/models/rl/reinforce_model.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pl_bolts/models/rl/reinforce_model.py b/pl_bolts/models/rl/reinforce_model.py index e329c128e1..d93cc8d0ad 100644 --- a/pl_bolts/models/rl/reinforce_model.py +++ b/pl_bolts/models/rl/reinforce_model.py @@ -206,6 +206,10 @@ def train_batch( self.batch_episodes = 0 + self.batch_states.clear() + self.batch_actions.clear() + self.batch_qvals.clear() + # Simulates epochs if self.total_steps % self.batches_per_epoch == 0: break From 794aa207b3ab07cb57e3aab318a555e3c6434e7f Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Mon, 7 Dec 2020 11:23:42 +0100 Subject: [PATCH 18/55] stale: update label --- .github/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/stale.yml b/.github/stale.yml index f9650fe5c7..42cfae2880 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -9,7 +9,7 @@ exemptLabels: - pinned - security # Label to use when marking an issue as stale -staleLabel: wontfix +staleLabel: won't fix # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had From 8aba29ca50aa12421dc30e25baaf3e16bdc12073 Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Tue, 8 Dec 2020 06:03:26 +0900 Subject: [PATCH 19/55] bugfix: Add missing imports to pl_bolts/__init__.py (#430) * Add missing imports * Add missing imports * Apply isort --- pl_bolts/__init__.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pl_bolts/__init__.py b/pl_bolts/__init__.py index 82a4f14063..40e4c0e6f3 100644 --- a/pl_bolts/__init__.py +++ b/pl_bolts/__init__.py @@ -43,15 +43,16 @@ sys.stdout.write(f'Partial import of `{__name__}` during the build process.\n') # pragma: no-cover # We are not importing the rest of the lightning during the build process, as it may not be compiled yet else: - - # from pl_bolts.models.mnist_module import LitMNIST - from pl_bolts import callbacks, datamodules, datasets, metrics, models, transforms + from pl_bolts import callbacks, datamodules, datasets, losses, metrics, models, optimizers, transforms, utils __all__ = [ - # 'LitMNIST', - 'models', - 'metrics', 'callbacks', 'datamodules', 'datasets', + 'losses', + 'metrics', + 'models', + 'optimizers', + 'transforms', + 'utils' ] From 0f41495b9123e68fe896f78078c43ea60e880250 Mon Sep 17 00:00:00 2001 From: Teddy Koker Date: Tue, 8 Dec 2020 03:25:44 -0500 Subject: [PATCH 20/55] Fix CIFAR num_samples (#432) --- pl_bolts/datamodules/cifar10_datamodule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pl_bolts/datamodules/cifar10_datamodule.py b/pl_bolts/datamodules/cifar10_datamodule.py index e316e5fe14..d8822591dd 100644 --- a/pl_bolts/datamodules/cifar10_datamodule.py +++ b/pl_bolts/datamodules/cifar10_datamodule.py @@ -95,7 +95,7 @@ def __init__( self.batch_size = batch_size self.seed = seed self.data_dir = data_dir if data_dir is not None else os.getcwd() - self.num_samples = 60000 - val_split + self.num_samples = 50000 - val_split @property def num_classes(self): From 47956125a19b225a9220f9ccf2b7d7de31fcefba Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Tue, 8 Dec 2020 17:28:23 +0900 Subject: [PATCH 21/55] Add static type checker mypy to the tests and pre-commit hooks (#433) * Add mypy check to GitHub Actions * Run mypy on pl_bolts only * Add mypy check to pre-commit * Add an empty line at the end of files * Update mypy config * Update mypy config * Update mypy config * show Co-authored-by: Jirka Borovec --- .github/workflows/code-format.yml | 15 ++++++++ .pre-commit-config.yaml | 6 ++- setup.cfg | 62 +++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/.github/workflows/code-format.yml b/.github/workflows/code-format.yml index 7a34da2561..2eee8ea489 100644 --- a/.github/workflows/code-format.yml +++ b/.github/workflows/code-format.yml @@ -38,3 +38,18 @@ jobs: - name: isort run: | isort . --check --diff + + typing-check-mypy: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@master + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install mypy + run: | + pip install mypy + pip list + - name: mypy + run: | + mypy diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 62224b800d..15b0f8b175 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,4 +2,8 @@ repos: - repo: https://github.com/pycqa/isort rev: 5.5.2 hooks: - - id: isort \ No newline at end of file + - id: isort + + - repo: https://github.com/pre-commit/mirrors-mypy + hooks: + - id: mypy diff --git a/setup.cfg b/setup.cfg index 178e0e91f5..7e5b819628 100644 --- a/setup.cfg +++ b/setup.cfg @@ -61,3 +61,65 @@ license_file = LICENSE description-file = README.md # long_description = file:README.md # long_description_content_type = text/markdown + +[mypy] +# Typing tests is low priority, but enabling type checking on the +# untyped test functions (using `--check-untyped-defs`) is still +# high-value because it helps test the typing. +files = pl_bolts, tests +disallow_untyped_defs = True +ignore_missing_imports = True + +[mypy-pl_bolts.*] +ignore_errors = True + +[mypy-pl_bolts.callbacks.*] +ignore_errors = True + +[mypy-pl_bolts.datamodules.*] +ignore_errors = True + +[mypy-pl_bolts.datasets.*] +ignore_errors = True + +[mypy-pl_bolts.losses.*] +ignore_errors = True + +[mypy-pl_bolts.metrics.*] +ignore_errors = True + +[mypy-pl_bolts.models.*] +ignore_errors = True + +[mypy-pl_bolts.models.autoencoders.*] +ignore_errors = True + +[mypy-pl_bolts.models.detection.*] +ignore_errors = True + +[mypy-pl_bolts.models.gans.*] +ignore_errors = True + +[mypy-pl_bolts.models.regression.*] +ignore_errors = True + +[mypy-pl_bolts.models.rl.*] +ignore_errors = True + +[mypy-pl_bolts.models.self_supervised.*] +ignore_errors = True + +[mypy-pl_bolts.models.vision.*] +ignore_errors = True + +[mypy-pl_bolts.optimizers.*] +ignore_errors = True + +[mypy-pl_bolts.transforms.*] +ignore_errors = True + +[mypy-pl_bolts.utils.*] +ignore_errors = True + +[mypy-tests.*] +ignore_errors = True From e3f5e380e1bec25ad95f9aa40287c8604e6d9ffd Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Tue, 8 Dec 2020 09:38:49 +0100 Subject: [PATCH 22/55] missing logo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c75150bcc3..33e2c43a5e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
-![Logo](https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning/master/docs/source/_images/logos/lightning_logo.svg) +![Logo](https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning-bolts/master/docs/source/_images/logos/lightning_logo.svg) # PyTorch Lightning Bolts From dbbcad6304bae86464e439c575a7a1a14d5ba659 Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Tue, 8 Dec 2020 18:06:28 +0900 Subject: [PATCH 23/55] Add type annotations to pl_bolts/__init__.py (#435) * Run mypy on pl_bolts only * Update mypy config * Add type hints to pl_bolts/__init__.py * mypy Co-authored-by: Jirka Borovec --- docs/source/conf.py | 2 +- pl_bolts/__init__.py | 4 ++-- setup.cfg | 3 --- setup.py | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index d42134a1fa..abe3e608c6 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -28,7 +28,7 @@ PATH_ROOT = os.path.join(PATH_HERE, '..', '..') sys.path.insert(0, os.path.abspath(PATH_ROOT)) -builtins.__LIGHTNING_BOLT_SETUP__ = True +builtins.__LIGHTNING_BOLT_SETUP__: bool = True SPHINX_MOCK_REQUIREMENTS = int(os.environ.get('SPHINX_MOCK_REQUIREMENTS', True)) diff --git a/pl_bolts/__init__.py b/pl_bolts/__init__.py index 40e4c0e6f3..b5656553d3 100644 --- a/pl_bolts/__init__.py +++ b/pl_bolts/__init__.py @@ -33,9 +33,9 @@ try: # This variable is injected in the __builtins__ by the build process. # It used to enable importing subpackages when the binaries are not built. - __LIGHTNING_BOLT_SETUP__ + _ = None if __LIGHTNING_BOLT_SETUP__ else None except NameError: - __LIGHTNING_BOLT_SETUP__ = False + __LIGHTNING_BOLT_SETUP__: bool = False if __LIGHTNING_BOLT_SETUP__: import sys # pragma: no-cover diff --git a/setup.cfg b/setup.cfg index 7e5b819628..1661aad951 100644 --- a/setup.cfg +++ b/setup.cfg @@ -70,9 +70,6 @@ files = pl_bolts, tests disallow_untyped_defs = True ignore_missing_imports = True -[mypy-pl_bolts.*] -ignore_errors = True - [mypy-pl_bolts.callbacks.*] ignore_errors = True diff --git a/setup.py b/setup.py index bf84b4102c..1c14816e7d 100755 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ # http://blog.ionelmc.ro/2014/05/25/python-packaging/ PATH_ROOT = os.path.dirname(__file__) -builtins.__LIGHTNING_BOLT_SETUP__ = True +builtins.__LIGHTNING_BOLT_SETUP__: bool = True import pl_bolts # noqa: E402 From e8040a918162f0a2c7c1a5b872dd5ea2e47e88ac Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Tue, 8 Dec 2020 10:37:07 +0100 Subject: [PATCH 24/55] skip hanging (#437) --- tests/models/test_scripts.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/models/test_scripts.py b/tests/models/test_scripts.py index ee6217a1e4..9e6292bb8c 100644 --- a/tests/models/test_scripts.py +++ b/tests/models/test_scripts.py @@ -98,6 +98,8 @@ def test_cli_run_log_regression(cli_args): cli_main() +# TODO: this test is hanging (runs for more then 10min) so we need to use GPU or optimize it... +@pytest.mark.skipif(not torch.cuda.is_available(), reason="test requires GPU machine") @pytest.mark.parametrize('cli_args', [f'--data_dir {DATASETS_PATH} --max_epochs 1 --max_steps 2']) def test_cli_run_vision_image_gpt(cli_args): """Test running CLI for an example with default params.""" From bb37992ab926396965413b774b5c911331baeb26 Mon Sep 17 00:00:00 2001 From: Teddy Koker Date: Tue, 8 Dec 2020 16:49:54 -0500 Subject: [PATCH 25/55] Option to normalize latent interpolation images (#438) * add option to normalize latent interpolation images * linspace * update Co-authored-by: ananyahjha93 --- pl_bolts/callbacks/variational.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pl_bolts/callbacks/variational.py b/pl_bolts/callbacks/variational.py index 1b945e9631..21c64aa937 100644 --- a/pl_bolts/callbacks/variational.py +++ b/pl_bolts/callbacks/variational.py @@ -1,4 +1,5 @@ import math +import numpy as np import torch from pytorch_lightning.callbacks import Callback @@ -26,20 +27,30 @@ class LatentDimInterpolator(Callback): """ def __init__( - self, interpolate_epoch_interval: int = 20, range_start: int = -5, range_end: int = 5, num_samples: int = 2 + self, + interpolate_epoch_interval: int = 20, + range_start: int = -5, + range_end: int = 5, + steps: int = 11, + num_samples: int = 2, + normalize: bool = True, ): """ Args: interpolate_epoch_interval: default 20 range_start: default -5 range_end: default 5 + steps: number of step between start and end num_samples: default 2 + normalize: default True (change image to (0, 1) range) """ super().__init__() self.interpolate_epoch_interval = interpolate_epoch_interval self.range_start = range_start self.range_end = range_end self.num_samples = num_samples + self.normalize = normalize + self.steps = steps def on_epoch_end(self, trainer, pl_module): if (trainer.current_epoch + 1) % self.interpolate_epoch_interval == 0: @@ -48,7 +59,7 @@ def on_epoch_end(self, trainer, pl_module): num_images = (self.range_end - self.range_start) ** 2 num_rows = int(math.sqrt(num_images)) - grid = torchvision.utils.make_grid(images, nrow=num_rows) + grid = torchvision.utils.make_grid(images, nrow=num_rows, normalize=self.normalize) str_title = f'{pl_module.__class__.__name__}_latent_space' trainer.logger.experiment.add_image(str_title, grid, global_step=trainer.global_step) @@ -56,8 +67,8 @@ def interpolate_latent_space(self, pl_module, latent_dim): images = [] with torch.no_grad(): pl_module.eval() - for z1 in range(self.range_start, self.range_end, 1): - for z2 in range(self.range_start, self.range_end, 1): + for z1 in np.linspace(self.range_start, self.range_end, self.steps): + for z2 in np.linspace(self.range_start, self.range_end, self.steps): # set all dims to zero z = torch.zeros(self.num_samples, latent_dim, device=pl_module.device) From f899c9fe61d495967b1c17c68530d673c740fe8b Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Fri, 11 Dec 2020 15:54:53 +0100 Subject: [PATCH 26/55] 0.2.6rc1 --- pl_bolts/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pl_bolts/__init__.py b/pl_bolts/__init__.py index b5656553d3..6709b3e176 100644 --- a/pl_bolts/__init__.py +++ b/pl_bolts/__init__.py @@ -2,7 +2,7 @@ import os -__version__ = '0.2.5rc1' +__version__ = '0.2.6rc1' __author__ = 'PyTorchLightning et al.' __author_email__ = 'name@pytorchlightning.ai' __license__ = 'Apache-2.0' From 17e7ae2cd5e2dcc4320e82fac0498c3647f4a434 Mon Sep 17 00:00:00 2001 From: Pradeep Ganesan Date: Mon, 14 Dec 2020 02:08:23 -0600 Subject: [PATCH 27/55] Warnings fix (#449) * Revert "Merge pull request #1 from ganprad/warnings_fix" This reverts commit 7c5aaf04148fb4e5b8128219479ba75c1364e9aa. * Fixes warning related np.integer in SklearnDataModule Fixes this warning: ```DeprecationWarning: Converting `np.integer` or `np.signedinteger` to a dtype is deprecated. The current result is `np.dtype(np.int_)` which is not strictly correct. Note that the result depends on the system. To ensure stable results use may want to use `np.int64` or `np.int32```` --- pl_bolts/datamodules/sklearn_datamodule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pl_bolts/datamodules/sklearn_datamodule.py b/pl_bolts/datamodules/sklearn_datamodule.py index d64652ecd5..1705c0311a 100644 --- a/pl_bolts/datamodules/sklearn_datamodule.py +++ b/pl_bolts/datamodules/sklearn_datamodule.py @@ -52,7 +52,7 @@ def __getitem__(self, idx): y = self.Y[idx] # Do not convert integer to float for classification data - if not y.dtype == np.integer: + if not ((y.dtype == np.int32) or (y.dtype == np.int64)): y = y.astype(np.float32) if self.X_transform: From 57e299171b687f2ba5df68f29dec474f8ab2b4f5 Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Mon, 14 Dec 2020 17:35:00 +0900 Subject: [PATCH 28/55] Refactor datamodules/datasets (#338) * Remove try: ... except: ... * Fix experience_source * Fix imagenet * Fix kitti * Fix sklearn * Fix vocdetection * Fix typo * Remove duplicate * Fix by flake8 * Add optional packages availability vars * binary_mnist * Use pl_bolts._SKLEARN_AVAILABLE * Apply isort * cifar10 * mnist * cityscapes * fashion mnist * ssl_imagenet * stl10 * cifar10 * dummy * fix city * fix stl10 * fix mnist * ssl_amdim * remove unused DataLoader and fix docs * use from ... import ... * fix pragma: no cover * Fix forward reference in annotations * binmnist * Same order as imports * Move vars from __init__ to utils/__init__ * Remove vars from __init__ * Update vars * Apply isort --- pl_bolts/datamodules/__init__.py | 132 +++++------------- .../datamodules/binary_mnist_datamodule.py | 17 +-- pl_bolts/datamodules/cifar10_datamodule.py | 15 +- pl_bolts/datamodules/cityscapes_datamodule.py | 14 +- pl_bolts/datamodules/experience_source.py | 13 +- .../datamodules/fashion_mnist_datamodule.py | 14 +- pl_bolts/datamodules/imagenet_datamodule.py | 23 +-- pl_bolts/datamodules/kitti_datamodule.py | 11 +- pl_bolts/datamodules/mnist_datamodule.py | 14 +- pl_bolts/datamodules/sklearn_datamodule.py | 14 +- .../datamodules/ssl_imagenet_datamodule.py | 15 +- pl_bolts/datamodules/stl10_datamodule.py | 14 +- .../datamodules/vocdetection_datamodule.py | 18 ++- pl_bolts/datasets/cifar10_dataset.py | 13 +- pl_bolts/datasets/concat_dataset.py | 4 +- pl_bolts/datasets/dummy_dataset.py | 37 +++-- pl_bolts/datasets/imagenet_dataset.py | 13 +- pl_bolts/datasets/kitti_dataset.py | 11 +- pl_bolts/datasets/mnist_dataset.py | 19 ++- pl_bolts/datasets/ssl_amdim_datasets.py | 8 +- pl_bolts/utils/__init__.py | 12 ++ pl_bolts/utils/semi_supervised.py | 7 +- 22 files changed, 176 insertions(+), 262 deletions(-) diff --git a/pl_bolts/datamodules/__init__.py b/pl_bolts/datamodules/__init__.py index c9864f7120..e608d71010 100644 --- a/pl_bolts/datamodules/__init__.py +++ b/pl_bolts/datamodules/__init__.py @@ -1,98 +1,36 @@ from pl_bolts.datamodules.async_dataloader import AsynchronousLoader - -__all__ = [] - -try: - from pl_bolts.datamodules.binary_mnist_datamodule import BinaryMNISTDataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['BinaryMNISTDataModule'] - -try: - from pl_bolts.datamodules.cifar10_datamodule import CIFAR10DataModule, TinyCIFAR10DataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['CIFAR10DataModule', 'TinyCIFAR10DataModule'] - -try: - from pl_bolts.datamodules.experience_source import ( - DiscountedExperienceSource, - ExperienceSource, - ExperienceSourceDataset, - ) -except ModuleNotFoundError: - pass -else: - __all__ += ['ExperienceSourceDataset', 'ExperienceSource', 'DiscountedExperienceSource'] - -try: - from pl_bolts.datamodules.fashion_mnist_datamodule import FashionMNISTDataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['FashionMNISTDataModule'] - -try: - from pl_bolts.datamodules.imagenet_datamodule import ImagenetDataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['ImagenetDataModule'] - -try: - from pl_bolts.datamodules.mnist_datamodule import MNISTDataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['MNISTDataModule'] - -try: - from pl_bolts.datamodules.sklearn_datamodule import SklearnDataModule, SklearnDataset, TensorDataset -except ModuleNotFoundError: - pass -else: - __all__ += ['SklearnDataset', 'SklearnDataModule', 'TensorDataset'] - -try: - from pl_bolts.datamodules.ssl_imagenet_datamodule import SSLImagenetDataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['SSLImagenetDataModule'] - -try: - from pl_bolts.datamodules.stl10_datamodule import STL10DataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['STL10DataModule'] - -try: - from pl_bolts.datamodules.vocdetection_datamodule import VOCDetectionDataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['VOCDetectionDataModule'] - -try: - from pl_bolts.datamodules.cityscapes_datamodule import CityscapesDataModule -except ModuleNotFoundError: # pragma: no-cover - pass -else: - __all__ += ['CityscapesDataModule'] - -try: - from pl_bolts.datasets.kitti_dataset import KittiDataset -except ModuleNotFoundError: - pass -else: - __all__ += ['KittiDataset'] - -try: - from pl_bolts.datamodules.kitti_datamodule import KittiDataModule -except ModuleNotFoundError: - pass -else: - __all__ += ['KittiDataModule'] +from pl_bolts.datamodules.binary_mnist_datamodule import BinaryMNISTDataModule +from pl_bolts.datamodules.cifar10_datamodule import CIFAR10DataModule, TinyCIFAR10DataModule +from pl_bolts.datamodules.cityscapes_datamodule import CityscapesDataModule +from pl_bolts.datamodules.experience_source import DiscountedExperienceSource, ExperienceSource, ExperienceSourceDataset +from pl_bolts.datamodules.fashion_mnist_datamodule import FashionMNISTDataModule +from pl_bolts.datamodules.imagenet_datamodule import ImagenetDataModule +from pl_bolts.datamodules.kitti_datamodule import KittiDataModule +from pl_bolts.datamodules.mnist_datamodule import MNISTDataModule +from pl_bolts.datamodules.sklearn_datamodule import SklearnDataModule, SklearnDataset, TensorDataset +from pl_bolts.datamodules.ssl_imagenet_datamodule import SSLImagenetDataModule +from pl_bolts.datamodules.stl10_datamodule import STL10DataModule +from pl_bolts.datamodules.vocdetection_datamodule import VOCDetectionDataModule +from pl_bolts.datasets.kitti_dataset import KittiDataset + +__all__ = [ + 'AsynchronousLoader', + 'BinaryMNISTDataModule', + 'CIFAR10DataModule', + 'TinyCIFAR10DataModule', + 'CityscapesDataModule', + 'DiscountedExperienceSource', + 'ExperienceSource', + 'ExperienceSourceDataset', + 'FashionMNISTDataModule', + 'ImagenetDataModule', + 'KittiDataModule', + 'MNISTDataModule', + 'SklearnDataModule', + 'SklearnDataset', + 'TensorDataset', + 'SSLImagenetDataModule', + 'STL10DataModule', + 'VOCDetectionDataModule', + 'KittiDataset', +] diff --git a/pl_bolts/datamodules/binary_mnist_datamodule.py b/pl_bolts/datamodules/binary_mnist_datamodule.py index db480c4f41..97460dfe5f 100644 --- a/pl_bolts/datamodules/binary_mnist_datamodule.py +++ b/pl_bolts/datamodules/binary_mnist_datamodule.py @@ -2,18 +2,15 @@ from pytorch_lightning import LightningDataModule from torch.utils.data import DataLoader, random_split +from pl_bolts.datasets.mnist_dataset import BinaryMNIST +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import MNIST - - from pl_bolts.datasets.mnist_dataset import BinaryMNIST -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class BinaryMNISTDataModule(LightningDataModule): @@ -67,8 +64,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use MNIST dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/cifar10_datamodule.py b/pl_bolts/datamodules/cifar10_datamodule.py index d8822591dd..8c4cd44053 100644 --- a/pl_bolts/datamodules/cifar10_datamodule.py +++ b/pl_bolts/datamodules/cifar10_datamodule.py @@ -7,17 +7,14 @@ from pl_bolts.datasets.cifar10_dataset import TrialCIFAR10 from pl_bolts.transforms.dataset_normalizations import cifar10_normalization +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import CIFAR10 - -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class CIFAR10DataModule(LightningDataModule): @@ -83,8 +80,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use CIFAR10 dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/cityscapes_datamodule.py b/pl_bolts/datamodules/cityscapes_datamodule.py index 4789268888..6445d52f7f 100644 --- a/pl_bolts/datamodules/cityscapes_datamodule.py +++ b/pl_bolts/datamodules/cityscapes_datamodule.py @@ -1,16 +1,14 @@ from pytorch_lightning import LightningDataModule from torch.utils.data import DataLoader +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import Cityscapes -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class CityscapesDataModule(LightningDataModule): @@ -82,8 +80,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use CityScapes dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/experience_source.py b/pl_bolts/datamodules/experience_source.py index d90184ea82..8d9170d8bc 100644 --- a/pl_bolts/datamodules/experience_source.py +++ b/pl_bolts/datamodules/experience_source.py @@ -10,17 +10,16 @@ import torch from torch.utils.data import IterableDataset +from pl_bolts.utils import _GYM_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -_GYM_AVAILABLE = importlib.util.find_spec("gym") is not None if _GYM_AVAILABLE: from gym import Env -else: - warn_missing_pkg("gym") # pragma: no-cover +else: # pragma: no cover + warn_missing_pkg("gym") + Env = object -# Datasets - Experience = namedtuple( "Experience", field_names=["state", "action", "reward", "done", "new_state"] ) @@ -181,7 +180,7 @@ def env_actions(self, device) -> List[List[int]]: return actions - def env_step(self, env_idx: int, env: "Env", action: List[int]) -> Experience: + def env_step(self, env_idx: int, env: Env, action: List[int]) -> Experience: """ Carries out a step through the given environment using the given action @@ -245,7 +244,7 @@ def pop_rewards_steps(self): class DiscountedExperienceSource(ExperienceSource): """Outputs experiences with a discounted reward over N steps""" - def __init__(self, env: "Env", agent, n_steps: int = 1, gamma: float = 0.99): + def __init__(self, env: Env, agent, n_steps: int = 1, gamma: float = 0.99): super().__init__(env, agent, (n_steps + 1)) self.gamma = gamma self.steps = n_steps diff --git a/pl_bolts/datamodules/fashion_mnist_datamodule.py b/pl_bolts/datamodules/fashion_mnist_datamodule.py index c50cf59572..4f6c1bd4cb 100644 --- a/pl_bolts/datamodules/fashion_mnist_datamodule.py +++ b/pl_bolts/datamodules/fashion_mnist_datamodule.py @@ -2,16 +2,14 @@ from pytorch_lightning import LightningDataModule from torch.utils.data import DataLoader, random_split +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import FashionMNIST -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class FashionMNISTDataModule(LightningDataModule): @@ -64,8 +62,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use fashion MNIST dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/imagenet_datamodule.py b/pl_bolts/datamodules/imagenet_datamodule.py index 3dcd43e279..7984f7c66e 100644 --- a/pl_bolts/datamodules/imagenet_datamodule.py +++ b/pl_bolts/datamodules/imagenet_datamodule.py @@ -4,24 +4,15 @@ from pytorch_lightning import LightningDataModule from torch.utils.data import DataLoader +from pl_bolts.datasets.imagenet_dataset import UnlabeledImagenet from pl_bolts.transforms.dataset_normalizations import imagenet_normalization +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True - -try: - from pl_bolts.datasets.imagenet_dataset import UnlabeledImagenet -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class ImagenetDataModule(LightningDataModule): @@ -78,8 +69,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use ImageNet dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/kitti_datamodule.py b/pl_bolts/datamodules/kitti_datamodule.py index c07acbd5eb..aa4895a9b0 100644 --- a/pl_bolts/datamodules/kitti_datamodule.py +++ b/pl_bolts/datamodules/kitti_datamodule.py @@ -1,4 +1,3 @@ -import importlib import os import torch @@ -7,13 +6,13 @@ from torch.utils.data.dataset import random_split from pl_bolts.datasets.kitti_dataset import KittiDataset +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -_TORCHVISION_AVAILABLE = importlib.util.find_spec("torchvision") is not None if _TORCHVISION_AVAILABLE: import torchvision.transforms as transforms -else: - warn_missing_pkg('torchvision') # pragma: no-cover +else: # pragma: no cover + warn_missing_pkg('torchvision') class KittiDataModule(LightningDataModule): @@ -63,8 +62,8 @@ def __init__( batch_size: the batch size seed: random seed to be used for train/val/test splits """ - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/mnist_datamodule.py b/pl_bolts/datamodules/mnist_datamodule.py index 0764e20725..f753561345 100644 --- a/pl_bolts/datamodules/mnist_datamodule.py +++ b/pl_bolts/datamodules/mnist_datamodule.py @@ -2,16 +2,14 @@ from pytorch_lightning import LightningDataModule from torch.utils.data import DataLoader, random_split +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import MNIST -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class MNISTDataModule(LightningDataModule): @@ -65,8 +63,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use MNIST dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/sklearn_datamodule.py b/pl_bolts/datamodules/sklearn_datamodule.py index 1705c0311a..44f16065d8 100644 --- a/pl_bolts/datamodules/sklearn_datamodule.py +++ b/pl_bolts/datamodules/sklearn_datamodule.py @@ -6,15 +6,13 @@ from pytorch_lightning import LightningDataModule from torch.utils.data import DataLoader, Dataset +from pl_bolts.utils import _SKLEARN_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _SKLEARN_AVAILABLE: from sklearn.utils import shuffle as sk_shuffle -except ModuleNotFoundError: - warn_missing_pkg("sklearn") # pragma: no-cover - _SKLEARN_AVAILABLE = False -else: - _SKLEARN_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg("sklearn") class SklearnDataset(Dataset): @@ -162,8 +160,8 @@ def __init__( # shuffle x and y if shuffle and _SKLEARN_AVAILABLE: X, y = sk_shuffle(X, y, random_state=random_state) - elif shuffle and not _SKLEARN_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + elif shuffle and not _SKLEARN_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use shuffle function from `scikit-learn` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/ssl_imagenet_datamodule.py b/pl_bolts/datamodules/ssl_imagenet_datamodule.py index ee50f4b091..0781677321 100644 --- a/pl_bolts/datamodules/ssl_imagenet_datamodule.py +++ b/pl_bolts/datamodules/ssl_imagenet_datamodule.py @@ -5,16 +5,13 @@ from pl_bolts.datasets.imagenet_dataset import UnlabeledImagenet from pl_bolts.transforms.dataset_normalizations import imagenet_normalization +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib - -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class SSLImagenetDataModule(LightningDataModule): # pragma: no cover @@ -32,8 +29,8 @@ def __init__( ): super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use ImageNet dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/stl10_datamodule.py b/pl_bolts/datamodules/stl10_datamodule.py index 3842725d30..98577f2f4a 100644 --- a/pl_bolts/datamodules/stl10_datamodule.py +++ b/pl_bolts/datamodules/stl10_datamodule.py @@ -7,16 +7,14 @@ from pl_bolts.datasets.concat_dataset import ConcatDataset from pl_bolts.transforms.dataset_normalizations import stl10_normalization +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import STL10 -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class STL10DataModule(LightningDataModule): # pragma: no cover @@ -75,8 +73,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use STL10 dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/vocdetection_datamodule.py b/pl_bolts/datamodules/vocdetection_datamodule.py index 9e75e71918..4235316cd2 100644 --- a/pl_bolts/datamodules/vocdetection_datamodule.py +++ b/pl_bolts/datamodules/vocdetection_datamodule.py @@ -2,16 +2,14 @@ from pytorch_lightning import LightningDataModule from torch.utils.data import DataLoader +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: import torchvision.transforms as T from torchvision.datasets import VOCDetection -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('torchvision') class Compose(object): @@ -116,13 +114,13 @@ def __init__( *args, **kwargs, ): - super().__init__(*args, **kwargs) - - if not _TORCHVISION_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use VOC dataset loaded from `torchvision` which is not installed yet.' ) + super().__init__(*args, **kwargs) + self.year = year self.data_dir = data_dir self.num_workers = num_workers diff --git a/pl_bolts/datasets/cifar10_dataset.py b/pl_bolts/datasets/cifar10_dataset.py index fcc783a72a..662c4046d0 100644 --- a/pl_bolts/datasets/cifar10_dataset.py +++ b/pl_bolts/datasets/cifar10_dataset.py @@ -6,17 +6,14 @@ import torch from torch import Tensor +from pl_bolts.datasets.base_dataset import LightDataset +from pl_bolts.utils import _PIL_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _PIL_AVAILABLE: from PIL import Image -except ModuleNotFoundError: - warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover - _PIL_AVAILABLE = False -else: - _PIL_AVAILABLE = True - -from pl_bolts.datasets.base_dataset import LightDataset +else: # pragma: no cover + warn_missing_pkg('PIL', pypi_name='Pillow') class CIFAR10(LightDataset): diff --git a/pl_bolts/datasets/concat_dataset.py b/pl_bolts/datasets/concat_dataset.py index 48b6782c58..ae09a37c7f 100644 --- a/pl_bolts/datasets/concat_dataset.py +++ b/pl_bolts/datasets/concat_dataset.py @@ -1,7 +1,7 @@ -import torch +from torch.utils.data import Dataset -class ConcatDataset(torch.utils.data.Dataset): +class ConcatDataset(Dataset): def __init__(self, *datasets): self.datasets = datasets diff --git a/pl_bolts/datasets/dummy_dataset.py b/pl_bolts/datasets/dummy_dataset.py index 59884ceaaf..910748abbf 100644 --- a/pl_bolts/datasets/dummy_dataset.py +++ b/pl_bolts/datasets/dummy_dataset.py @@ -1,15 +1,14 @@ import torch -from torch.utils.data import DataLoader, Dataset +from torch.utils.data import Dataset class DummyDataset(Dataset): """ Generate a dummy dataset - Example:: - - from pl_bolts.datasets import DummyDataset - + Example: + >>> from pl_bolts.datasets import DummyDataset + >>> from torch.utils.data import DataLoader >>> # mnist dims >>> ds = DummyDataset((1, 28, 28), (1, )) >>> dl = DataLoader(ds, batch_size=7) @@ -46,10 +45,9 @@ class DummyDetectionDataset(Dataset): """ Generate a dummy dataset for detection - Example:: - - from pl_bolts.datasets import DummyDetectionDataset - + Example: + >>> from pl_bolts.datasets import DummyDetectionDataset + >>> from torch.utils.data import DataLoader >>> ds = DummyDetectionDataset() >>> dl = DataLoader(ds, batch_size=7) """ @@ -87,10 +85,9 @@ class RandomDictDataset(Dataset): """ Generate a dummy dataset with a dict structure - Example:: - - from pl_bolts.datasets import RandomDictDataset - + Example: + >>> from pl_bolts.datasets import RandomDictDataset + >>> from torch.utils.data import DataLoader >>> ds = RandomDictDataset(10) >>> dl = DataLoader(ds, batch_size=7) """ @@ -116,10 +113,9 @@ class RandomDictStringDataset(Dataset): """ Generate a dummy dataset with strings - Example:: - - from pl_bolts.datasets import RandomDictStringDataset - + Example: + >>> from pl_bolts.datasets import RandomDictStringDataset + >>> from torch.utils.data import DataLoader >>> ds = RandomDictStringDataset(10) >>> dl = DataLoader(ds, batch_size=7) """ @@ -143,10 +139,9 @@ class RandomDataset(Dataset): """ Generate a dummy dataset - Example:: - - from pl_bolts.datasets import RandomDataset - + Example: + >>> from pl_bolts.datasets import RandomDataset + >>> from torch.utils.data import DataLoader >>> ds = RandomDataset(10) >>> dl = DataLoader(ds, batch_size=7) """ diff --git a/pl_bolts/datasets/imagenet_dataset.py b/pl_bolts/datasets/imagenet_dataset.py index 5ed72189d2..e85f1d4b83 100644 --- a/pl_bolts/datasets/imagenet_dataset.py +++ b/pl_bolts/datasets/imagenet_dataset.py @@ -1,5 +1,6 @@ import gzip import hashlib +import importlib import os import shutil import tarfile @@ -11,13 +12,14 @@ import torch from torch._six import PY3 +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision.datasets import ImageNet from torchvision.datasets.imagenet import load_meta_file -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover +else: # pragma: no cover + warn_missing_pkg('torchvision') ImageNet = object @@ -49,6 +51,11 @@ def __init__( download: kwargs: """ + if not _TORCHVISION_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( + 'You want to use `torchvision` which is not installed yet, install it with `pip install torchvision`.' + ) + root = self.root = os.path.expanduser(root) # [train], [val] --> [train, val], [test] diff --git a/pl_bolts/datasets/kitti_dataset.py b/pl_bolts/datasets/kitti_dataset.py index a63c00739b..80a230e7d2 100644 --- a/pl_bolts/datasets/kitti_dataset.py +++ b/pl_bolts/datasets/kitti_dataset.py @@ -1,16 +1,15 @@ -import importlib import os import numpy as np from torch.utils.data import Dataset +from pl_bolts.utils import _PIL_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -_PIL_AVAILABLE = importlib.util.find_spec("PIL") is not None if _PIL_AVAILABLE: from PIL import Image -else: - warn_missing_pkg('PIL') # pragma: no-cover +else: # pragma: no cover + warn_missing_pkg('PIL') DEFAULT_VOID_LABELS = (0, 1, 2, 3, 4, 5, 6, 9, 10, 14, 15, 16, 18, 29, 30, -1) @@ -50,8 +49,8 @@ def __init__( void_labels: useless classes to be excluded from training valid_labels: useful classes to include """ - if not _PIL_AVAILABLE: - raise ModuleNotFoundError( # pragma: no-cover + if not _PIL_AVAILABLE: # pragma: no cover + raise ModuleNotFoundError( 'You want to use `PIL` which is not installed yet.' ) diff --git a/pl_bolts/datasets/mnist_dataset.py b/pl_bolts/datasets/mnist_dataset.py index cdea04566b..e48722aa7f 100644 --- a/pl_bolts/datasets/mnist_dataset.py +++ b/pl_bolts/datasets/mnist_dataset.py @@ -1,20 +1,17 @@ +from pl_bolts.utils import _PIL_AVAILABLE, _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import MNIST -except ModuleNotFoundError as err: - raise ModuleNotFoundError( # pragma: no-cover - 'You want to use `torchvision` which is not installed yet, install it with `pip install torchvision`.' - ) from err +else: # pragma: no cover + warn_missing_pkg('torchvision') + MNIST = object -try: +if _PIL_AVAILABLE: from PIL import Image -except ModuleNotFoundError: - warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover - _PIL_AVAILABLE = False -else: - _PIL_AVAILABLE = True +else: # pragma: no cover + warn_missing_pkg('PIL', pypi_name='Pillow') class BinaryMNIST(MNIST): diff --git a/pl_bolts/datasets/ssl_amdim_datasets.py b/pl_bolts/datasets/ssl_amdim_datasets.py index e7cc43a78d..0fe935be07 100644 --- a/pl_bolts/datasets/ssl_amdim_datasets.py +++ b/pl_bolts/datasets/ssl_amdim_datasets.py @@ -3,12 +3,14 @@ import numpy as np +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision.datasets import CIFAR10 -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover +else: # pragma: no cover + warn_missing_pkg('torchvision') + CIFAR10 = object class SSLDatasetMixin(ABC): diff --git a/pl_bolts/utils/__init__.py b/pl_bolts/utils/__init__.py index e69de29bb2..d05bac0028 100644 --- a/pl_bolts/utils/__init__.py +++ b/pl_bolts/utils/__init__.py @@ -0,0 +1,12 @@ +from importlib.util import find_spec + +import torch +from pytorch_lightning.utilities import _module_available + +_NATIVE_AMP_AVAILABLE = _module_available("torch.cuda.amp") and hasattr(torch.cuda.amp, "autocast") + +_TORCHVISION_AVAILABLE = find_spec("torchvision") is not None +_GYM_AVAILABLE = find_spec("gym") is not None +_SKLEARN_AVAILABLE = find_spec("sklearn") is not None +_PIL_AVAILABLE = find_spec("PIL") is not None +_OPENCV_AVAILABLE = find_spec("cv2") is not None diff --git a/pl_bolts/utils/semi_supervised.py b/pl_bolts/utils/semi_supervised.py index 1dd7ab43c1..8363fa44b5 100644 --- a/pl_bolts/utils/semi_supervised.py +++ b/pl_bolts/utils/semi_supervised.py @@ -1,16 +1,15 @@ -import importlib import math import numpy as np import torch +from pl_bolts.utils import _SKLEARN_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -_SKLEARN_AVAILABLE = importlib.util.find_spec("sklearn") is not None if _SKLEARN_AVAILABLE: from sklearn.utils import shuffle as sk_shuffle -else: - warn_missing_pkg('sklearn', pypi_name='scikit-learn') # pragma: no-cover +else: # pragma: no-cover + warn_missing_pkg('sklearn', pypi_name='scikit-learn') class Identity(torch.nn.Module): From 78c4d00ad54e3d37fbacb86ac043593b1e8d22b2 Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Wed, 16 Dec 2020 14:57:15 +0100 Subject: [PATCH 29/55] update min requirements - PL 1.1.1 (#448) * update min requirements * rc0 * imports * isort * flake8 * 1.1.1 * flake8 * docs --- docs/source/conf.py | 11 +++-------- pl_bolts/callbacks/variational.py | 2 +- pl_bolts/datamodules/binary_mnist_datamodule.py | 7 +++---- pl_bolts/datamodules/cifar10_datamodule.py | 4 ++-- pl_bolts/datamodules/cityscapes_datamodule.py | 8 ++++---- pl_bolts/datamodules/experience_source.py | 1 - pl_bolts/datamodules/fashion_mnist_datamodule.py | 8 ++++---- pl_bolts/datamodules/imagenet_datamodule.py | 8 ++++---- pl_bolts/datamodules/mnist_datamodule.py | 8 ++++---- pl_bolts/datamodules/sklearn_datamodule.py | 8 ++++---- pl_bolts/datamodules/ssl_imagenet_datamodule.py | 8 ++++---- pl_bolts/datamodules/stl10_datamodule.py | 8 ++++---- pl_bolts/datamodules/vocdetection_datamodule.py | 8 ++++---- pl_bolts/datasets/cifar10_dataset.py | 4 ++-- pl_bolts/datasets/mnist_dataset.py | 9 ++++----- pl_bolts/models/rl/common/gym_wrappers.py | 8 +++----- pl_bolts/models/rl/dqn_model.py | 8 +++----- pl_bolts/models/rl/reinforce_model.py | 8 +++----- .../models/rl/vanilla_policy_gradient_model.py | 8 +++----- .../models/self_supervised/amdim/transforms.py | 8 +++----- .../models/self_supervised/cpc/transforms.py | 8 +++----- .../models/self_supervised/moco/transforms.py | 15 +++++---------- .../models/self_supervised/simclr/transforms.py | 8 +++----- .../models/self_supervised/swav/transforms.py | 16 +++++++--------- .../transforms/self_supervised/ssl_transforms.py | 8 +++----- pl_bolts/utils/__init__.py | 12 +++++------- requirements.txt | 2 +- 27 files changed, 89 insertions(+), 122 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index abe3e608c6..af7696c8f9 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -339,8 +339,8 @@ def package_list_from_file(file): for ln in fp.readlines(): found = [ln.index(ch) for ch in list(',=<>#') if ch in ln] pkg = ln[:min(found)] if found else ln - if pkg.rstrip(): - mocked_packages.append(pkg.rstrip()) + if pkg.strip(): + mocked_packages.append(pkg.strip()) return mocked_packages @@ -360,8 +360,7 @@ def package_list_from_file(file): # replace PyPI packages by importing ones MOCK_PACKAGES = [PACKAGE_MAPPING.get(pkg, pkg) for pkg in MOCK_PACKAGES] -MOCK_MANUAL_PACKAGES = [] -autodoc_mock_imports = MOCK_PACKAGES + MOCK_MANUAL_PACKAGES +autodoc_mock_imports = MOCK_PACKAGES # for mod_name in MOCK_REQUIRE_PACKAGES: # sys.modules[mod_name] = mock.Mock() @@ -441,10 +440,6 @@ def find_source(): import pytorch_lightning as pl from pytorch_lightning import Trainer, LightningModule -from pytorch_lightning.utilities import NATIVE_AMP_AVALAIBLE -APEX_AVAILABLE = importlib.util.find_spec("apex") is not None -XLA_AVAILABLE = importlib.util.find_spec("torch_xla") is not None -TORCHVISION_AVAILABLE = importlib.util.find_spec("torchvision") is not None """ coverage_skip_undoc_in_source = True diff --git a/pl_bolts/callbacks/variational.py b/pl_bolts/callbacks/variational.py index 21c64aa937..61aea5d86e 100644 --- a/pl_bolts/callbacks/variational.py +++ b/pl_bolts/callbacks/variational.py @@ -1,6 +1,6 @@ import math -import numpy as np +import numpy as np import torch from pytorch_lightning.callbacks import Callback diff --git a/pl_bolts/datamodules/binary_mnist_datamodule.py b/pl_bolts/datamodules/binary_mnist_datamodule.py index 97460dfe5f..26e105765d 100644 --- a/pl_bolts/datamodules/binary_mnist_datamodule.py +++ b/pl_bolts/datamodules/binary_mnist_datamodule.py @@ -8,8 +8,7 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib - from torchvision.datasets import MNIST -else: # pragma: no cover +else: # pragma: no-cover warn_missing_pkg('torchvision') @@ -64,8 +63,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use MNIST dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/cifar10_datamodule.py b/pl_bolts/datamodules/cifar10_datamodule.py index 8c4cd44053..40e9d03d83 100644 --- a/pl_bolts/datamodules/cifar10_datamodule.py +++ b/pl_bolts/datamodules/cifar10_datamodule.py @@ -13,8 +13,8 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import CIFAR10 -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class CIFAR10DataModule(LightningDataModule): diff --git a/pl_bolts/datamodules/cityscapes_datamodule.py b/pl_bolts/datamodules/cityscapes_datamodule.py index 6445d52f7f..bf16395cb4 100644 --- a/pl_bolts/datamodules/cityscapes_datamodule.py +++ b/pl_bolts/datamodules/cityscapes_datamodule.py @@ -7,8 +7,8 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import Cityscapes -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class CityscapesDataModule(LightningDataModule): @@ -80,8 +80,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use CityScapes dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/experience_source.py b/pl_bolts/datamodules/experience_source.py index 8d9170d8bc..5fe1332dfd 100644 --- a/pl_bolts/datamodules/experience_source.py +++ b/pl_bolts/datamodules/experience_source.py @@ -2,7 +2,6 @@ Datamodules for RL models that rely on experiences generated during training Based on implementations found here: https://github.com/Shmuma/ptan/blob/master/ptan/experience.py """ -import importlib from abc import ABC from collections import deque, namedtuple from typing import Callable, Iterable, List, Tuple diff --git a/pl_bolts/datamodules/fashion_mnist_datamodule.py b/pl_bolts/datamodules/fashion_mnist_datamodule.py index 4f6c1bd4cb..a5ac07f278 100644 --- a/pl_bolts/datamodules/fashion_mnist_datamodule.py +++ b/pl_bolts/datamodules/fashion_mnist_datamodule.py @@ -8,8 +8,8 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import FashionMNIST -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class FashionMNISTDataModule(LightningDataModule): @@ -62,8 +62,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use fashion MNIST dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/imagenet_datamodule.py b/pl_bolts/datamodules/imagenet_datamodule.py index 7984f7c66e..0a33b68c8b 100644 --- a/pl_bolts/datamodules/imagenet_datamodule.py +++ b/pl_bolts/datamodules/imagenet_datamodule.py @@ -11,8 +11,8 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class ImagenetDataModule(LightningDataModule): @@ -69,8 +69,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use ImageNet dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/mnist_datamodule.py b/pl_bolts/datamodules/mnist_datamodule.py index f753561345..e03b69eea6 100644 --- a/pl_bolts/datamodules/mnist_datamodule.py +++ b/pl_bolts/datamodules/mnist_datamodule.py @@ -8,8 +8,8 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import MNIST -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class MNISTDataModule(LightningDataModule): @@ -63,8 +63,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use MNIST dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/sklearn_datamodule.py b/pl_bolts/datamodules/sklearn_datamodule.py index 44f16065d8..1e90cd65ae 100644 --- a/pl_bolts/datamodules/sklearn_datamodule.py +++ b/pl_bolts/datamodules/sklearn_datamodule.py @@ -11,8 +11,8 @@ if _SKLEARN_AVAILABLE: from sklearn.utils import shuffle as sk_shuffle -else: # pragma: no cover - warn_missing_pkg("sklearn") +else: + warn_missing_pkg("sklearn") # pragma: no-cover class SklearnDataset(Dataset): @@ -160,8 +160,8 @@ def __init__( # shuffle x and y if shuffle and _SKLEARN_AVAILABLE: X, y = sk_shuffle(X, y, random_state=random_state) - elif shuffle and not _SKLEARN_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + elif shuffle and not _SKLEARN_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use shuffle function from `scikit-learn` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/ssl_imagenet_datamodule.py b/pl_bolts/datamodules/ssl_imagenet_datamodule.py index 0781677321..f647faab6d 100644 --- a/pl_bolts/datamodules/ssl_imagenet_datamodule.py +++ b/pl_bolts/datamodules/ssl_imagenet_datamodule.py @@ -10,8 +10,8 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class SSLImagenetDataModule(LightningDataModule): # pragma: no cover @@ -29,8 +29,8 @@ def __init__( ): super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use ImageNet dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/stl10_datamodule.py b/pl_bolts/datamodules/stl10_datamodule.py index 98577f2f4a..cc005e6820 100644 --- a/pl_bolts/datamodules/stl10_datamodule.py +++ b/pl_bolts/datamodules/stl10_datamodule.py @@ -13,8 +13,8 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib from torchvision.datasets import STL10 -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class STL10DataModule(LightningDataModule): # pragma: no cover @@ -73,8 +73,8 @@ def __init__( """ super().__init__(*args, **kwargs) - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use STL10 dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datamodules/vocdetection_datamodule.py b/pl_bolts/datamodules/vocdetection_datamodule.py index 4235316cd2..c66e0e81db 100644 --- a/pl_bolts/datamodules/vocdetection_datamodule.py +++ b/pl_bolts/datamodules/vocdetection_datamodule.py @@ -8,8 +8,8 @@ if _TORCHVISION_AVAILABLE: import torchvision.transforms as T from torchvision.datasets import VOCDetection -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover class Compose(object): @@ -114,8 +114,8 @@ def __init__( *args, **kwargs, ): - if not _TORCHVISION_AVAILABLE: # pragma: no cover - raise ModuleNotFoundError( + if not _TORCHVISION_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover 'You want to use VOC dataset loaded from `torchvision` which is not installed yet.' ) diff --git a/pl_bolts/datasets/cifar10_dataset.py b/pl_bolts/datasets/cifar10_dataset.py index 662c4046d0..3e2add6aa7 100644 --- a/pl_bolts/datasets/cifar10_dataset.py +++ b/pl_bolts/datasets/cifar10_dataset.py @@ -12,8 +12,8 @@ if _PIL_AVAILABLE: from PIL import Image -else: # pragma: no cover - warn_missing_pkg('PIL', pypi_name='Pillow') +else: + warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover class CIFAR10(LightDataset): diff --git a/pl_bolts/datasets/mnist_dataset.py b/pl_bolts/datasets/mnist_dataset.py index e48722aa7f..41a0d1ff37 100644 --- a/pl_bolts/datasets/mnist_dataset.py +++ b/pl_bolts/datasets/mnist_dataset.py @@ -2,16 +2,15 @@ from pl_bolts.utils.warnings import warn_missing_pkg if _TORCHVISION_AVAILABLE: - from torchvision import transforms as transform_lib from torchvision.datasets import MNIST -else: # pragma: no cover - warn_missing_pkg('torchvision') +else: + warn_missing_pkg('torchvision') # pragma: no-cover MNIST = object if _PIL_AVAILABLE: from PIL import Image -else: # pragma: no cover - warn_missing_pkg('PIL', pypi_name='Pillow') +else: + warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover class BinaryMNIST(MNIST): diff --git a/pl_bolts/models/rl/common/gym_wrappers.py b/pl_bolts/models/rl/common/gym_wrappers.py index 1aefbc3231..37f8ee5b50 100644 --- a/pl_bolts/models/rl/common/gym_wrappers.py +++ b/pl_bolts/models/rl/common/gym_wrappers.py @@ -9,15 +9,13 @@ import numpy as np import torch +from pl_bolts.utils import _OPENCV_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _OPENCV_AVAILABLE: import cv2 -except ModuleNotFoundError: - warn_missing_pkg('cv2', pypi_name='opencv-python') # pragma: no-cover - _OPENCV_AVAILABLE = False else: - _OPENCV_AVAILABLE = True + warn_missing_pkg('cv2', pypi_name='opencv-python') # pragma: no-cover class ToTensor(gym.Wrapper): diff --git a/pl_bolts/models/rl/dqn_model.py b/pl_bolts/models/rl/dqn_model.py index 6f2460216e..0635ead24c 100644 --- a/pl_bolts/models/rl/dqn_model.py +++ b/pl_bolts/models/rl/dqn_model.py @@ -20,15 +20,13 @@ from pl_bolts.models.rl.common.agents import ValueAgent from pl_bolts.models.rl.common.memory import MultiStepBuffer from pl_bolts.models.rl.common.networks import CNN +from pl_bolts.utils import _GYM_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _GYM_AVAILABLE: from pl_bolts.models.rl.common.gym_wrappers import gym, make_environment -except ModuleNotFoundError: - warn_missing_pkg('gym') # pragma: no-cover - _GYM_AVAILABLE = False else: - _GYM_AVAILABLE = True + warn_missing_pkg('gym') # pragma: no-cover class DQN(pl.LightningModule): diff --git a/pl_bolts/models/rl/reinforce_model.py b/pl_bolts/models/rl/reinforce_model.py index d93cc8d0ad..645d7b18b3 100644 --- a/pl_bolts/models/rl/reinforce_model.py +++ b/pl_bolts/models/rl/reinforce_model.py @@ -16,15 +16,13 @@ from pl_bolts.datamodules.experience_source import Experience from pl_bolts.models.rl.common.agents import PolicyAgent from pl_bolts.models.rl.common.networks import MLP +from pl_bolts.utils import _GYM_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _GYM_AVAILABLE: import gym -except ModuleNotFoundError: - warn_missing_pkg('gym') # pragma: no-cover - _GYM_AVAILABLE = False else: - _GYM_AVAILABLE = True + warn_missing_pkg('gym') # pragma: no-cover class Reinforce(pl.LightningModule): diff --git a/pl_bolts/models/rl/vanilla_policy_gradient_model.py b/pl_bolts/models/rl/vanilla_policy_gradient_model.py index 445aea9406..0dcfb5a37b 100644 --- a/pl_bolts/models/rl/vanilla_policy_gradient_model.py +++ b/pl_bolts/models/rl/vanilla_policy_gradient_model.py @@ -15,15 +15,13 @@ from pl_bolts.datamodules import ExperienceSourceDataset from pl_bolts.models.rl.common.agents import PolicyAgent from pl_bolts.models.rl.common.networks import MLP +from pl_bolts.utils import _GYM_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _GYM_AVAILABLE: import gym -except ModuleNotFoundError: - warn_missing_pkg('gym') # pragma: no-cover - _GYM_AVAILABLE = False else: - _GYM_AVAILABLE = True + warn_missing_pkg('gym') # pragma: no-cover class VanillaPolicyGradient(pl.LightningModule): diff --git a/pl_bolts/models/self_supervised/amdim/transforms.py b/pl_bolts/models/self_supervised/amdim/transforms.py index f9705d6ae9..464a654ea4 100644 --- a/pl_bolts/models/self_supervised/amdim/transforms.py +++ b/pl_bolts/models/self_supervised/amdim/transforms.py @@ -1,13 +1,11 @@ from pl_bolts.transforms.self_supervised import RandomTranslateWithReflect +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False else: - _TORCHVISION_AVAILABLE = True + warn_missing_pkg('torchvision') # pragma: no-cover class AMDIMTrainTransformsCIFAR10: diff --git a/pl_bolts/models/self_supervised/cpc/transforms.py b/pl_bolts/models/self_supervised/cpc/transforms.py index 6c2479e757..511cc88618 100644 --- a/pl_bolts/models/self_supervised/cpc/transforms.py +++ b/pl_bolts/models/self_supervised/cpc/transforms.py @@ -1,13 +1,11 @@ from pl_bolts.transforms.self_supervised import Patchify, RandomTranslateWithReflect +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False else: - _TORCHVISION_AVAILABLE = True + warn_missing_pkg('torchvision') # pragma: no-cover class CPCTrainTransformsCIFAR10: diff --git a/pl_bolts/models/self_supervised/moco/transforms.py b/pl_bolts/models/self_supervised/moco/transforms.py index d7a401071f..352e576d11 100644 --- a/pl_bolts/models/self_supervised/moco/transforms.py +++ b/pl_bolts/models/self_supervised/moco/transforms.py @@ -5,23 +5,18 @@ imagenet_normalization, stl10_normalization, ) +from pl_bolts.utils import _PIL_AVAILABLE, _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False else: - _TORCHVISION_AVAILABLE = True + warn_missing_pkg('torchvision') # pragma: no-cover -try: +if _PIL_AVAILABLE: from PIL import ImageFilter -except ModuleNotFoundError: - warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover - _PIL_AVAILABLE = False else: - _PIL_AVAILABLE = True + warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover class Moco2TrainCIFAR10Transforms: diff --git a/pl_bolts/models/self_supervised/simclr/transforms.py b/pl_bolts/models/self_supervised/simclr/transforms.py index f74d96c06a..faf9202120 100644 --- a/pl_bolts/models/self_supervised/simclr/transforms.py +++ b/pl_bolts/models/self_supervised/simclr/transforms.py @@ -1,14 +1,12 @@ import numpy as np +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: import torchvision.transforms as transforms -except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False else: - _TORCHVISION_AVAILABLE = True + warn_missing_pkg('torchvision') # pragma: no-cover try: import cv2 diff --git a/pl_bolts/models/self_supervised/swav/transforms.py b/pl_bolts/models/self_supervised/swav/transforms.py index f5e98a82c4..9b853f7bac 100644 --- a/pl_bolts/models/self_supervised/swav/transforms.py +++ b/pl_bolts/models/self_supervised/swav/transforms.py @@ -1,22 +1,20 @@ +from typing import List + import numpy as np +from pl_bolts.utils import _OPENCV_AVAILABLE, _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: import torchvision.transforms as transforms -except ImportError: - warn_missing_pkg('torchvision') # pragma: no-cover - _TORCHVISION_AVAILABLE = False else: - _TORCHVISION_AVAILABLE = True + warn_missing_pkg('torchvision') # pragma: no-cover -try: +if _OPENCV_AVAILABLE: import cv2 -except ImportError: +else: warn_missing_pkg('cv2', pypi_name='opencv-python') # pragma: no-cover -from typing import List - class SwAVTrainDataTransform(object): def __init__( diff --git a/pl_bolts/transforms/self_supervised/ssl_transforms.py b/pl_bolts/transforms/self_supervised/ssl_transforms.py index 40eff54633..7f94920c95 100644 --- a/pl_bolts/transforms/self_supervised/ssl_transforms.py +++ b/pl_bolts/transforms/self_supervised/ssl_transforms.py @@ -1,15 +1,13 @@ import numpy as np import torch.nn.functional as F +from pl_bolts.utils import _PIL_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _PIL_AVAILABLE: from PIL import Image -except ModuleNotFoundError: - warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover - _PIL_AVAILABLE = False else: - _PIL_AVAILABLE = True + warn_missing_pkg('PIL', pypi_name='Pillow') # pragma: no-cover class RandomTranslateWithReflect: diff --git a/pl_bolts/utils/__init__.py b/pl_bolts/utils/__init__.py index d05bac0028..7bfaeb94d3 100644 --- a/pl_bolts/utils/__init__.py +++ b/pl_bolts/utils/__init__.py @@ -1,12 +1,10 @@ -from importlib.util import find_spec - import torch from pytorch_lightning.utilities import _module_available _NATIVE_AMP_AVAILABLE = _module_available("torch.cuda.amp") and hasattr(torch.cuda.amp, "autocast") -_TORCHVISION_AVAILABLE = find_spec("torchvision") is not None -_GYM_AVAILABLE = find_spec("gym") is not None -_SKLEARN_AVAILABLE = find_spec("sklearn") is not None -_PIL_AVAILABLE = find_spec("PIL") is not None -_OPENCV_AVAILABLE = find_spec("cv2") is not None +_TORCHVISION_AVAILABLE = _module_available("torchvision") +_GYM_AVAILABLE = _module_available("gym") +_SKLEARN_AVAILABLE = _module_available("sklearn") +_PIL_AVAILABLE = _module_available("PIL") +_OPENCV_AVAILABLE = _module_available("cv2") diff --git a/requirements.txt b/requirements.txt index 08dc68b813..dbb435e71b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ torch>=1.6 -pytorch-lightning>=1.0 \ No newline at end of file +pytorch-lightning>=1.1.1 \ No newline at end of file From 77ed92e3f1c66df740c1dcd6259fd1341bf54753 Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Wed, 16 Dec 2020 23:30:47 +0900 Subject: [PATCH 30/55] Add missing optional packages to `requirements/*.txt` (#450) * Import matplotlib at the top * Add missing optional packages * Update wandb * Add mypy to requirements --- pl_bolts/callbacks/vision/confused_logit.py | 15 ++++++++++++++- requirements/loggers.txt | 5 ++++- requirements/test.txt | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/pl_bolts/callbacks/vision/confused_logit.py b/pl_bolts/callbacks/vision/confused_logit.py index df54d48e02..235dc95f1f 100644 --- a/pl_bolts/callbacks/vision/confused_logit.py +++ b/pl_bolts/callbacks/vision/confused_logit.py @@ -1,7 +1,17 @@ +import importlib + import torch from pytorch_lightning import Callback from torch import nn +from pl_bolts.utils.warnings import warn_missing_pkg + +_MATPLOTLIB_AVAILABLE = importlib.util.find_spec("matplotlib") is not None +if _MATPLOTLIB_AVAILABLE: + from matplotlib import pyplot as plt +else: + warn_missing_pkg("matplotlib") # pragma: no-cover + class ConfusedLogitCallback(Callback): # pragma: no-cover """ @@ -93,7 +103,10 @@ def training_step(...): pl_module.train() def _plot(self, confusing_x, confusing_y, trainer, model, mask_idxs): - from matplotlib import pyplot as plt + if not _MATPLOTLIB_AVAILABLE: + raise ModuleNotFoundError( # pragma: no-cover + 'You want to use `matplotlib` which is not installed yet, install it with `pip install matplotlib`.' + ) confusing_x = confusing_x[:self.top_k] confusing_y = confusing_y[:self.top_k] diff --git a/requirements/loggers.txt b/requirements/loggers.txt index e594af1651..faa232f2f6 100644 --- a/requirements/loggers.txt +++ b/requirements/loggers.txt @@ -1,2 +1,5 @@ # test_tube>=0.7.5 -# trains>=0.14.1 \ No newline at end of file +# trains>=0.14.1 +matplotlib +wandb +scipy diff --git a/requirements/test.txt b/requirements/test.txt index 6c40d41e00..44e3cf1965 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -9,5 +9,6 @@ check-manifest twine==1.13.0 isort>=5.6.4 pre-commit>=1.0 +mypy atari-py==0.2.6 # needed for RL From d81a70f2fbb8a5066111fa5cbb1ec424b9619abd Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Wed, 16 Dec 2020 16:22:41 +0100 Subject: [PATCH 31/55] update Isort (#457) --- .github/workflows/code-format.yml | 3 +-- pyproject.toml | 7 ++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/code-format.yml b/.github/workflows/code-format.yml index 2eee8ea489..a382e63d4b 100644 --- a/.github/workflows/code-format.yml +++ b/.github/workflows/code-format.yml @@ -36,8 +36,7 @@ jobs: pip install isort==5.6.4 pip --version - name: isort - run: | - isort . --check --diff + run: isort --settings-path=./pyproject.toml --check-only . typing-check-mypy: runs-on: ubuntu-20.04 diff --git a/pyproject.toml b/pyproject.toml index 5a258b8a66..e0f64b0b12 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,9 @@ [tool.isort] profile = "black" -src_paths = ["pl_bolts", "tests"] +known_first_party = [ + "pl_bolts", + "tests", + "docs", + "notebooks", +] line_length = 120 From a52cd5c2a5a4bb0ebcbc486ed95239490e936c9c Mon Sep 17 00:00:00 2001 From: Brian Ko Date: Thu, 17 Dec 2020 01:41:28 +0900 Subject: [PATCH 32/55] Adding flags to datamodules (#388) * Adding flags to datamodules * Finishing up changes * Fixing syntax error * More syntax errors * More * Adding drop_last flag to sklearn test * Adding drop_last flag to sklearn test * Updating doc for reflect drop_last=False * Adding flags to datamodules * Finishing up changes * Fixing syntax error * More syntax errors * More * Adding drop_last flag to sklearn test * Adding drop_last flag to sklearn test * Updating doc for reflect drop_last=False * Cleaning up parameters and docstring * Fixing syntax error * Fixing documentation * Hardcoding shuffle=False for val and test --- .../datamodules/binary_mnist_datamodule.py | 29 +++++++---- pl_bolts/datamodules/cifar10_datamodule.py | 25 ++++++--- pl_bolts/datamodules/cityscapes_datamodule.py | 25 ++++++--- .../datamodules/fashion_mnist_datamodule.py | 29 +++++++---- pl_bolts/datamodules/imagenet_datamodule.py | 23 +++++--- pl_bolts/datamodules/kitti_datamodule.py | 52 ++++++++++++++----- pl_bolts/datamodules/mnist_datamodule.py | 33 ++++++++---- pl_bolts/datamodules/sklearn_datamodule.py | 25 +++++---- .../datamodules/ssl_imagenet_datamodule.py | 19 ++++--- pl_bolts/datamodules/stl10_datamodule.py | 43 +++++++++------ .../datamodules/vocdetection_datamodule.py | 14 +++-- tests/datamodules/test_sklearn_dataloaders.py | 10 ++-- 12 files changed, 230 insertions(+), 97 deletions(-) diff --git a/pl_bolts/datamodules/binary_mnist_datamodule.py b/pl_bolts/datamodules/binary_mnist_datamodule.py index 26e105765d..191ea45a17 100644 --- a/pl_bolts/datamodules/binary_mnist_datamodule.py +++ b/pl_bolts/datamodules/binary_mnist_datamodule.py @@ -48,8 +48,11 @@ def __init__( val_split: int = 5000, num_workers: int = 16, normalize: bool = False, - seed: int = 42, batch_size: int = 32, + seed: int = 42, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -60,6 +63,11 @@ def __init__( num_workers: how many workers to use for loading data normalize: If true applies image normalize batch_size: size of batch + seed: random seed to be used for train/val/test splits + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ super().__init__(*args, **kwargs) @@ -73,8 +81,11 @@ def __init__( self.val_split = val_split self.num_workers = num_workers self.normalize = normalize - self.seed = seed self.batch_size = batch_size + self.seed = seed + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last @property def num_classes(self): @@ -107,10 +118,10 @@ def train_dataloader(self): loader = DataLoader( dataset_train, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -131,8 +142,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -148,8 +159,8 @@ def test_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/cifar10_datamodule.py b/pl_bolts/datamodules/cifar10_datamodule.py index 40e9d03d83..29c075654f 100644 --- a/pl_bolts/datamodules/cifar10_datamodule.py +++ b/pl_bolts/datamodules/cifar10_datamodule.py @@ -68,6 +68,9 @@ def __init__( num_workers: int = 16, batch_size: int = 32, seed: int = 42, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -77,6 +80,11 @@ def __init__( val_split: how many of the training images to use for the validation split num_workers: how many workers to use for loading data batch_size: number of examples per training/eval step + seed: random seed to be used for train/val/test splits + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ super().__init__(*args, **kwargs) @@ -91,6 +99,9 @@ def __init__( self.num_workers = num_workers self.batch_size = batch_size self.seed = seed + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last self.data_dir = data_dir if data_dir is not None else os.getcwd() self.num_samples = 50000 - val_split @@ -125,10 +136,10 @@ def train_dataloader(self): loader = DataLoader( dataset_train, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -150,8 +161,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - pin_memory=True, - drop_last=True + pin_memory=self.pin_memory, + drop_last=self.drop_last ) return loader @@ -167,8 +178,8 @@ def test_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/cityscapes_datamodule.py b/pl_bolts/datamodules/cityscapes_datamodule.py index bf16395cb4..b851617225 100644 --- a/pl_bolts/datamodules/cityscapes_datamodule.py +++ b/pl_bolts/datamodules/cityscapes_datamodule.py @@ -66,6 +66,9 @@ def __init__( num_workers: int = 16, batch_size: int = 32, seed: int = 42, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -77,6 +80,11 @@ def __init__( target_type: targets to use, either 'instance' or 'semantic' num_workers: how many workers to use for loading data batch_size: number of examples per training/eval step + seed: random seed to be used for train/val/test splits + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ super().__init__(*args, **kwargs) @@ -95,6 +103,9 @@ def __init__( self.num_workers = num_workers self.batch_size = batch_size self.seed = seed + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last self.target_transforms = None @property @@ -123,10 +134,10 @@ def train_dataloader(self): loader = DataLoader( dataset, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -150,8 +161,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - pin_memory=True, - drop_last=True + pin_memory=self.pin_memory, + drop_last=self.drop_last ) return loader @@ -174,8 +185,8 @@ def test_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/fashion_mnist_datamodule.py b/pl_bolts/datamodules/fashion_mnist_datamodule.py index a5ac07f278..fd60786ef2 100644 --- a/pl_bolts/datamodules/fashion_mnist_datamodule.py +++ b/pl_bolts/datamodules/fashion_mnist_datamodule.py @@ -48,8 +48,11 @@ def __init__( data_dir: str, val_split: int = 5000, num_workers: int = 16, - seed: int = 42, batch_size: int = 32, + seed: int = 42, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -59,6 +62,11 @@ def __init__( val_split: how many of the training images to use for the validation split num_workers: how many workers to use for loading data batch_size: size of batch + seed: random seed to be used for train/val/test splits + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ super().__init__(*args, **kwargs) @@ -71,8 +79,11 @@ def __init__( self.data_dir = data_dir self.val_split = val_split self.num_workers = num_workers - self.seed = seed self.batch_size = batch_size + self.seed = seed + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last @property def num_classes(self): @@ -105,10 +116,10 @@ def train_dataloader(self): loader = DataLoader( dataset_train, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -130,8 +141,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -147,8 +158,8 @@ def test_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/imagenet_datamodule.py b/pl_bolts/datamodules/imagenet_datamodule.py index 0a33b68c8b..38546e29ee 100644 --- a/pl_bolts/datamodules/imagenet_datamodule.py +++ b/pl_bolts/datamodules/imagenet_datamodule.py @@ -55,6 +55,9 @@ def __init__( image_size: int = 224, num_workers: int = 16, batch_size: int = 32, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -66,6 +69,10 @@ def __init__( image_size: final image size num_workers: how many data workers batch_size: batch_size + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ super().__init__(*args, **kwargs) @@ -81,6 +88,9 @@ def __init__( self.meta_dir = meta_dir self.num_imgs_per_val_class = num_imgs_per_val_class self.batch_size = batch_size + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last self.num_samples = 1281167 - self.num_imgs_per_val_class * self.num_classes @property @@ -143,10 +153,10 @@ def train_dataloader(self): loader = DataLoader( dataset, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -170,7 +180,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -190,8 +201,8 @@ def test_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/kitti_datamodule.py b/pl_bolts/datamodules/kitti_datamodule.py index aa4895a9b0..433e7fffed 100644 --- a/pl_bolts/datamodules/kitti_datamodule.py +++ b/pl_bolts/datamodules/kitti_datamodule.py @@ -27,6 +27,9 @@ def __init__( num_workers: int = 16, batch_size: int = 32, seed: int = 42, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -61,6 +64,10 @@ def __init__( num_workers: how many workers to use for loading data batch_size: the batch size seed: random seed to be used for train/val/test splits + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ if not _TORCHVISION_AVAILABLE: # pragma: no cover raise ModuleNotFoundError( @@ -72,6 +79,15 @@ def __init__( self.batch_size = batch_size self.num_workers = num_workers self.seed = seed + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last + + self.default_transforms = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize(mean=[0.35675976, 0.37380189, 0.3764753], + std=[0.32064945, 0.32098866, 0.32325324]) + ]) # split into train, val, test kitti_dataset = KittiDataset(self.data_dir, transform=self._default_transforms()) @@ -85,24 +101,36 @@ def __init__( generator=torch.Generator().manual_seed(self.seed)) def train_dataloader(self): - loader = DataLoader(self.trainset, - batch_size=self.batch_size, - shuffle=True, - num_workers=self.num_workers) + loader = DataLoader( + self.trainset, + batch_size=self.batch_size, + shuffle=self.shuffle, + num_workers=self.num_workers, + drop_last=self.drop_last, + pin_memory=self.pin_memory, + ) return loader def val_dataloader(self): - loader = DataLoader(self.valset, - batch_size=self.batch_size, - shuffle=False, - num_workers=self.num_workers) + loader = DataLoader( + self.valset, + batch_size=self.batch_size, + shuffle=False, + num_workers=self.num_workers, + drop_last=self.drop_last, + pin_memory=self.pin_memory + ) return loader def test_dataloader(self): - loader = DataLoader(self.testset, - batch_size=self.batch_size, - shuffle=False, - num_workers=self.num_workers) + loader = DataLoader( + self.testset, + batch_size=self.batch_size, + shuffle=False, + num_workers=self.num_workers, + drop_last=self.drop_last, + pin_memory=self.pin_memory, + ) return loader def _default_transforms(self): diff --git a/pl_bolts/datamodules/mnist_datamodule.py b/pl_bolts/datamodules/mnist_datamodule.py index e03b69eea6..1a7399e45e 100644 --- a/pl_bolts/datamodules/mnist_datamodule.py +++ b/pl_bolts/datamodules/mnist_datamodule.py @@ -48,8 +48,11 @@ def __init__( val_split: int = 5000, num_workers: int = 16, normalize: bool = False, - seed: int = 42, batch_size: int = 32, + seed: int = 42, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -60,6 +63,11 @@ def __init__( num_workers: how many workers to use for loading data normalize: If true applies image normalize batch_size: size of batch + seed: random seed to be used for train/val/test splits + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ super().__init__(*args, **kwargs) @@ -73,8 +81,11 @@ def __init__( self.val_split = val_split self.num_workers = num_workers self.normalize = normalize - self.seed = seed self.batch_size = batch_size + self.seed = seed + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last @property def num_classes(self): @@ -105,10 +116,10 @@ def train_dataloader(self): loader = DataLoader( dataset_train, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True, + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -127,8 +138,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True, + drop_last=self.drop_last, + pin_memory=self.pin_memory, ) return loader @@ -140,8 +151,12 @@ def test_dataloader(self): dataset = MNIST(self.data_dir, train=False, download=False, transform=transforms) loader = DataLoader( - dataset, batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, drop_last=True, - pin_memory=True + dataset, + batch_size=self.batch_size, + shuffle=False, + num_workers=self.num_workers, + drop_last=self.drop_last, + pin_memory=self.pin_memory, ) return loader diff --git a/pl_bolts/datamodules/sklearn_datamodule.py b/pl_bolts/datamodules/sklearn_datamodule.py index 1e90cd65ae..ed262b10c8 100644 --- a/pl_bolts/datamodules/sklearn_datamodule.py +++ b/pl_bolts/datamodules/sklearn_datamodule.py @@ -123,19 +123,19 @@ class SklearnDataModule(LightningDataModule): >>> len(train_loader.dataset) 355 >>> len(train_loader) - 11 + 12 >>> # validation set >>> val_loader = loaders.val_dataloader() >>> len(val_loader.dataset) 100 >>> len(val_loader) - 3 + 4 >>> # test set >>> test_loader = loaders.test_dataloader() >>> len(test_loader.dataset) 51 >>> len(test_loader) - 1 + 2 """ name = 'sklearn' @@ -149,6 +149,8 @@ def __init__( random_state=1234, shuffle=True, batch_size: int = 16, + pin_memory=False, + drop_last=False, *args, **kwargs, ): @@ -156,6 +158,9 @@ def __init__( super().__init__(*args, **kwargs) self.num_workers = num_workers self.batch_size = batch_size + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last # shuffle x and y if shuffle and _SKLEARN_AVAILABLE: @@ -197,10 +202,10 @@ def train_dataloader(self): loader = DataLoader( self.train_dataset, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -210,8 +215,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -221,8 +226,8 @@ def test_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/ssl_imagenet_datamodule.py b/pl_bolts/datamodules/ssl_imagenet_datamodule.py index f647faab6d..03e459fd5e 100644 --- a/pl_bolts/datamodules/ssl_imagenet_datamodule.py +++ b/pl_bolts/datamodules/ssl_imagenet_datamodule.py @@ -24,6 +24,9 @@ def __init__( meta_dir=None, num_workers=16, batch_size: int = 32, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -38,6 +41,9 @@ def __init__( self.num_workers = num_workers self.meta_dir = meta_dir self.batch_size = batch_size + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last @property def num_classes(self): @@ -84,10 +90,10 @@ def train_dataloader(self, num_images_per_class=-1, add_normalize=False): loader = DataLoader( dataset, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -104,7 +110,8 @@ def val_dataloader(self, num_images_per_class=50, add_normalize=False): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -121,8 +128,8 @@ def test_dataloader(self, num_images_per_class, add_normalize=False): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/stl10_datamodule.py b/pl_bolts/datamodules/stl10_datamodule.py index cc005e6820..c666db9b9b 100644 --- a/pl_bolts/datamodules/stl10_datamodule.py +++ b/pl_bolts/datamodules/stl10_datamodule.py @@ -60,6 +60,9 @@ def __init__( num_workers: int = 16, batch_size: int = 32, seed: int = 42, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -70,6 +73,11 @@ def __init__( train_val_split: how many images from the labeled training split to use for validation num_workers: how many workers to use for loading data batch_size: the batch size + seed: random seed to be used for train/val/test splits + shuffle: If true shuffles the data every epoch + pin_memory: If true, the data loader will copy Tensors into CUDA pinned memory before + returning them + drop_last: If true drops the last incomplete batch """ super().__init__(*args, **kwargs) @@ -85,6 +93,9 @@ def __init__( self.num_workers = num_workers self.batch_size = batch_size self.seed = seed + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last self.num_unlabeled_samples = 100000 - unlabeled_val_split @property @@ -113,10 +124,10 @@ def train_dataloader(self): loader = DataLoader( dataset_train, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -151,10 +162,10 @@ def train_dataloader_mixed(self): loader = DataLoader( dataset, batch_size=self.batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -180,7 +191,8 @@ def val_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - pin_memory=True + drpo_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -222,8 +234,8 @@ def val_dataloader_mixed(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -243,8 +255,8 @@ def test_dataloader(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -259,9 +271,10 @@ def train_dataloader_labeled(self): loader = DataLoader( dataset_train, batch_size=self.batch_size, - shuffle=False, + shuffle=self.shuffle, num_workers=self.num_workers, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader @@ -281,8 +294,8 @@ def val_dataloader_labeled(self): batch_size=self.batch_size, shuffle=False, num_workers=self.num_workers, - drop_last=True, - pin_memory=True + drop_last=self.drop_last, + pin_memory=self.pin_memory ) return loader diff --git a/pl_bolts/datamodules/vocdetection_datamodule.py b/pl_bolts/datamodules/vocdetection_datamodule.py index c66e0e81db..34dd86811e 100644 --- a/pl_bolts/datamodules/vocdetection_datamodule.py +++ b/pl_bolts/datamodules/vocdetection_datamodule.py @@ -111,6 +111,9 @@ def __init__( year: str = "2012", num_workers: int = 16, normalize: bool = False, + shuffle: bool = False, + pin_memory: bool = False, + drop_last: bool = False, *args, **kwargs, ): @@ -125,6 +128,9 @@ def __init__( self.data_dir = data_dir self.num_workers = num_workers self.normalize = normalize + self.shuffle = shuffle + self.pin_memory = pin_memory + self.drop_last = drop_last @property def num_classes(self): @@ -161,9 +167,10 @@ def train_dataloader(self, batch_size=1, transforms=None): loader = DataLoader( dataset, batch_size=batch_size, - shuffle=True, + shuffle=self.shuffle, num_workers=self.num_workers, - pin_memory=True, + drop_last=self.drop_last, + pin_memory=self.pin_memory, collate_fn=_collate_fn, ) return loader @@ -189,7 +196,8 @@ def val_dataloader(self, batch_size=1, transforms=None): batch_size=batch_size, shuffle=False, num_workers=self.num_workers, - pin_memory=True, + drop_last=self.drop_last, + pin_memory=self.pin_memory, collate_fn=_collate_fn, ) return loader diff --git a/tests/datamodules/test_sklearn_dataloaders.py b/tests/datamodules/test_sklearn_dataloaders.py index 7e35e20c66..68931719e6 100644 --- a/tests/datamodules/test_sklearn_dataloaders.py +++ b/tests/datamodules/test_sklearn_dataloaders.py @@ -27,7 +27,7 @@ def test_dataloader(): # ----------------------------- # train # ----------------------------- - loaders = SklearnDataModule(X=X, y=y, val_split=0.2, test_split=0.2, random_state=1234) + loaders = SklearnDataModule(X=X, y=y, val_split=0.2, test_split=0.2, random_state=1234, drop_last=True) train_loader = loaders.train_dataloader() val_loader = loaders.val_dataloader() test_loader = loaders.test_dataloader() @@ -39,7 +39,7 @@ def test_dataloader(): # ----------------------------- # train + val # ----------------------------- - loaders = SklearnDataModule(X=X, y=y, x_val=x_val, y_val=y_val, test_split=0.2, random_state=1234) + loaders = SklearnDataModule(X=X, y=y, x_val=x_val, y_val=y_val, test_split=0.2, random_state=1234, drop_last=True) train_loader = loaders.train_dataloader() val_loader = loaders.val_dataloader() test_loader = loaders.test_dataloader() @@ -50,7 +50,9 @@ def test_dataloader(): # ----------------------------- # train + test # ----------------------------- - loaders = SklearnDataModule(X=X, y=y, x_test=x_test, y_test=y_test, val_split=0.2, random_state=1234) + loaders = SklearnDataModule( + X=X, y=y, x_test=x_test, y_test=y_test, val_split=0.2, random_state=1234, drop_last=True + ) train_loader = loaders.train_dataloader() val_loader = loaders.val_dataloader() test_loader = loaders.test_dataloader() @@ -61,7 +63,7 @@ def test_dataloader(): # ----------------------------- # train + val + test # ----------------------------- - loaders = SklearnDataModule(X, y, x_val, y_val, x_test, y_test, random_state=1234) + loaders = SklearnDataModule(X, y, x_val, y_val, x_test, y_test, random_state=1234, drop_last=True) train_loader = loaders.train_dataloader() val_loader = loaders.val_dataloader() test_loader = loaders.test_dataloader() From 9b38f562ed116d6575bdb9af1cf328ab9f4c09c0 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Tue, 24 Nov 2020 19:42:23 +0100 Subject: [PATCH 33/55] Add DCGAN module --- pl_bolts/models/gans/dcgan/components.py | 55 ++------- pl_bolts/models/gans/dcgan/dcgan_module.py | 127 ++++----------------- 2 files changed, 34 insertions(+), 148 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py index 177402870a..ad117bff00 100644 --- a/pl_bolts/models/gans/dcgan/components.py +++ b/pl_bolts/models/gans/dcgan/components.py @@ -1,16 +1,9 @@ # Based on https://github.com/pytorch/examples/blob/master/dcgan/main.py -import torch from torch import nn class DCGANGenerator(nn.Module): - def __init__(self, latent_dim: int, feature_maps: int, image_channels: int): - """ - Args: - latent_dim: Dimension of the latent space - feature_maps: Number of feature maps to use - image_channels: Number of channels of the images from the dataset - """ + def __init__(self, latent_dim, feature_maps, image_channels): super().__init__() self.gen = nn.Sequential( self._make_gen_block(latent_dim, feature_maps * 8, kernel_size=4, stride=1, padding=0), @@ -21,40 +14,25 @@ def __init__(self, latent_dim: int, feature_maps: int, image_channels: int): ) @staticmethod - def _make_gen_block( - in_channels: int, - out_channels: int, - kernel_size: int = 4, - stride: int = 2, - padding: int = 1, - bias: bool = False, - last_block: bool = False, - ) -> nn.Sequential: + def _make_gen_block(in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, last_block=False): if not last_block: - gen_block = nn.Sequential( + return nn.Sequential( nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.BatchNorm2d(out_channels), nn.ReLU(True), ) else: - gen_block = nn.Sequential( + return nn.Sequential( nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.Tanh(), ) - return gen_block - - def forward(self, noise: torch.Tensor) -> torch.Tensor: + def forward(self, noise): return self.gen(noise) class DCGANDiscriminator(nn.Module): - def __init__(self, feature_maps: int, image_channels: int): - """ - Args: - feature_maps: Number of feature maps to use - image_channels: Number of channels of the images from the dataset - """ + def __init__(self, feature_maps, image_channels): super().__init__() self.disc = nn.Sequential( self._make_disc_block(image_channels, feature_maps, batch_norm=False), @@ -66,28 +44,19 @@ def __init__(self, feature_maps: int, image_channels: int): @staticmethod def _make_disc_block( - in_channels: int, - out_channels: int, - kernel_size: int = 4, - stride: int = 2, - padding: int = 1, - bias: bool = False, - batch_norm: bool = True, - last_block: bool = False, - ) -> nn.Sequential: + in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, batch_norm=True, last_block=False + ): if not last_block: - disc_block = nn.Sequential( + return nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.BatchNorm2d(out_channels) if batch_norm else nn.Identity(), nn.LeakyReLU(0.2, inplace=True), ) else: - disc_block = nn.Sequential( + return nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.Sigmoid(), ) - return disc_block - - def forward(self, x: torch.Tensor) -> torch.Tensor: - return self.disc(x) + def forward(self, noise): + return self.disc(noise) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index f0233b23d3..6599fff2c5 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -4,43 +4,13 @@ import torch from torch import nn -from pl_bolts.callbacks import LatentDimInterpolator, TensorboardGenerativeModelImageSampler -from pl_bolts.utils.warnings import warn_missing_pkg - -try: - from torchvision import transforms as transform_lib -except ModuleNotFoundError: - warn_missing_pkg("torchvision") # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True from pl_bolts.models.gans.dcgan.components import DCGANDiscriminator, DCGANGenerator -class DCGAN(pl.LightningModule): - def __init__( - self, - beta1: float = 0.5, - beta2: float = 0.999, - feature_maps_gen: int = 64, - feature_maps_disc: int = 64, - image_channels: int = 1, - latent_dim: int = 100, - learning_rate: float = 0.0002, - **kwargs - ): - """ - Args: - beta1: Beta1 value for Adam optimizer - beta2: Beta2 value for Adam optimizer - feature_maps_gen: Number of feature maps to use for the generator - feature_maps_disc: Number of feature maps to use for the discriminator - image_channels: Number of channels of the images from the dataset - latent_dim: Dimension of the latent space - learning_rate: Learning rate - """ +class GANModule(pl.LightningModule): + def __init__(self, hparams): super().__init__() - self.save_hyperparameters() + self.save_hyperparameters(hparams) self.generator = self._get_generator() self.discriminator = self._get_discriminator() @@ -58,7 +28,7 @@ def _get_discriminator(self): return discriminator @staticmethod - def _weights_init(m): + def weights_init(m): classname = m.__class__.__name__ if classname.find("Conv") != -1: torch.nn.init.normal_(m.weight, 0.0, 0.02) @@ -73,8 +43,7 @@ def configure_optimizers(self): opt_gen = torch.optim.Adam(self.generator.parameters(), lr=lr, betas=betas) return [opt_disc, opt_gen], [] - def forward(self, noise: torch.Tensor) -> torch.Tensor: - noise = noise.view(*noise.shape, 1, 1) + def forward(self, noise): return self.generator(noise) def training_step(self, batch, batch_idx, optimizer_idx): @@ -91,24 +60,27 @@ def training_step(self, batch, batch_idx, optimizer_idx): return result - def _disc_step(self, real: torch.Tensor) -> torch.Tensor: + def _disc_step(self, real): disc_loss = self._get_disc_loss(real) self.log("loss/disc", disc_loss, on_epoch=True, prog_bar=True) return disc_loss - def _gen_step(self, real: torch.Tensor) -> torch.Tensor: - gen_loss = self._get_gen_loss(real) + def _gen_step(self, real): + gen_loss = self._generator_loss(real) self.log("loss/gen", gen_loss, on_epoch=True, prog_bar=True) return gen_loss - def _get_disc_loss(self, real: torch.Tensor) -> torch.Tensor: + def _get_disc_loss(self, real): # Train with real real_pred = self.discriminator(real) real_gt = torch.ones_like(real_pred) real_loss = self.criterion(real_pred, real_gt) # Train with fake - fake_pred = self._get_fake_pred(real) + batch_size = self._get_batch_size(real) + noise = self._get_noise(batch_size, self.hparams.latent_dim) + fake = self(noise) + fake_pred = self.discriminator(fake) fake_gt = torch.zeros_like(fake_pred) fake_loss = self.criterion(fake_pred, fake_gt) @@ -116,89 +88,34 @@ def _get_disc_loss(self, real: torch.Tensor) -> torch.Tensor: return disc_loss - def _get_gen_loss(self, real: torch.Tensor) -> torch.Tensor: + def _generator_loss(self, real): # Train with fake - fake_pred = self._get_fake_pred(real) - fake_gt = torch.ones_like(fake_pred) - gen_loss = self.criterion(fake_pred, fake_gt) - - return gen_loss - - def _get_fake_pred(self, real: torch.Tensor) -> torch.Tensor: batch_size = self._get_batch_size(real) noise = self._get_noise(batch_size, self.hparams.latent_dim) fake = self(noise) fake_pred = self.discriminator(fake) + fake_gt = torch.ones_like(fake_pred) + gen_loss = self.criterion(fake_pred, fake_gt) - return fake_pred + return gen_loss @staticmethod - def _get_batch_size(real: torch.Tensor) -> int: + def _get_batch_size(real): batch_size = len(real) return batch_size - def _get_noise(self, n_samples: int, latent_dim: int) -> torch.Tensor: - noise = torch.randn(n_samples, latent_dim, device=self.device) + def _get_noise(self, n_samples, latent_dim): + noise = torch.randn(n_samples, latent_dim, 1, 1, device=self.device) return noise @staticmethod - def add_model_specific_args(parent_parser: ArgumentParser) -> ArgumentParser: + def add_model_specific_args(parent_parser): parser = ArgumentParser(parents=[parent_parser], add_help=False) parser.add_argument("--beta1", default=0.5, type=float) parser.add_argument("--beta2", default=0.999, type=float) parser.add_argument("--feature_maps_gen", default=64, type=int) parser.add_argument("--feature_maps_disc", default=64, type=int) - parser.add_argument("--image_channels", default=1, type=int) + parser.add_argument("--image_channels", default=3, type=int) parser.add_argument("--latent_dim", default=100, type=int) parser.add_argument("--learning_rate", default=0.0002, type=float) return parser - - -def cli_main(args=None): - from pl_bolts.datamodules import CIFAR10DataModule, MNISTDataModule - - pl.seed_everything(1234) - - parser = ArgumentParser() - parser.add_argument("--dataset", default="mnist", type=str, help="mnist, cifar10") - parser.add_argument("--image_size", default=64, type=int) - script_args, _ = parser.parse_known_args(args) - - if script_args.dataset == "mnist": - dm_cls = MNISTDataModule - transforms = transform_lib.Compose( - [ - transform_lib.Resize(script_args.image_size), - transform_lib.ToTensor(), - transform_lib.Normalize((0.5,), (0.5,)), - ] - ) - elif script_args.dataset == "cifar10": - dm_cls = CIFAR10DataModule - transforms = transform_lib.Compose( - [ - transform_lib.Resize(script_args.image_size), - transform_lib.ToTensor(), - transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), - ] - ) - - parser = dm_cls.add_argparse_args(parser) - parser = pl.Trainer.add_argparse_args(parser) - parser = DCGAN.add_model_specific_args(parser) - args = parser.parse_args(args) - - dm = dm_cls.from_argparse_args(args) - dm.train_transforms = transforms - dm.val_transforms = transforms - dm.test_transforms = transforms - - model = DCGAN(**vars(args)) - callbacks = [TensorboardGenerativeModelImageSampler(), LatentDimInterpolator(interpolate_epoch_interval=5)] - trainer = pl.Trainer.from_argparse_args(args, callbacks=callbacks) - trainer.fit(model, dm) - return dm, model, trainer - - -if __name__ == "__main__": - dm, model, trainer = cli_main() From e41d9d48995fbb36cdff6aba3de8fc5f90fad19f Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Wed, 16 Dec 2020 11:27:18 +0100 Subject: [PATCH 34/55] Small fixes --- pl_bolts/models/gans/dcgan/components.py | 57 +++++++-- pl_bolts/models/gans/dcgan/dcgan_module.py | 141 ++++++++++++++++----- 2 files changed, 153 insertions(+), 45 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py index ad117bff00..83ae336631 100644 --- a/pl_bolts/models/gans/dcgan/components.py +++ b/pl_bolts/models/gans/dcgan/components.py @@ -1,38 +1,60 @@ # Based on https://github.com/pytorch/examples/blob/master/dcgan/main.py +import torch from torch import nn class DCGANGenerator(nn.Module): - def __init__(self, latent_dim, feature_maps, image_channels): + def __init__(self, latent_dim: int, feature_maps: int, image_channels: int): + """ + Args: + latent_dim: Dimension of the latent space + feature_maps: Number of feature maps to use + image_channels: Number of channels of the images from the dataset + """ super().__init__() self.gen = nn.Sequential( self._make_gen_block(latent_dim, feature_maps * 8, kernel_size=4, stride=1, padding=0), self._make_gen_block(feature_maps * 8, feature_maps * 4), self._make_gen_block(feature_maps * 4, feature_maps * 2), - self._make_gen_block(feature_maps * 2, feature_maps, 4), + self._make_gen_block(feature_maps * 2, feature_maps), self._make_gen_block(feature_maps, image_channels, last_block=True), ) @staticmethod - def _make_gen_block(in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, last_block=False): + def _make_gen_block( + in_channels: int, + out_channels: int, + kernel_size: int = 4, + stride: int = 2, + padding: int = 1, + bias: bool = False, + last_block: bool = False, + ) -> nn.Sequential: if not last_block: - return nn.Sequential( + gen_block = nn.Sequential( nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.BatchNorm2d(out_channels), nn.ReLU(True), ) else: - return nn.Sequential( + gen_block = nn.Sequential( nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.Tanh(), ) - def forward(self, noise): + return gen_block + + def forward(self, noise: torch.Tensor) -> torch.Tensor: return self.gen(noise) class DCGANDiscriminator(nn.Module): - def __init__(self, feature_maps, image_channels): + def __init__(self, feature_maps: int, image_channels: int): + """ + Args: + feature_maps: Number of feature maps to use + image_channels: Number of channels of the images from the dataset + """ super().__init__() self.disc = nn.Sequential( self._make_disc_block(image_channels, feature_maps, batch_norm=False), @@ -44,19 +66,28 @@ def __init__(self, feature_maps, image_channels): @staticmethod def _make_disc_block( - in_channels, out_channels, kernel_size=4, stride=2, padding=1, bias=False, batch_norm=True, last_block=False - ): + in_channels: int, + out_channels: int, + kernel_size: int = 4, + stride: int = 2, + padding: int = 1, + bias: bool = False, + batch_norm: bool = True, + last_block: bool = False, + ) -> nn.Sequential: if not last_block: - return nn.Sequential( + disc_block = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.BatchNorm2d(out_channels) if batch_norm else nn.Identity(), nn.LeakyReLU(0.2, inplace=True), ) else: - return nn.Sequential( + disc_block = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=bias), nn.Sigmoid(), ) - def forward(self, noise): - return self.disc(noise) + return disc_block + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.disc(x).view(-1, 1).squeeze(1) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 6599fff2c5..7681503848 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -4,18 +4,48 @@ import torch from torch import nn +from pl_bolts.callbacks import LatentDimInterpolator, TensorboardGenerativeModelImageSampler from pl_bolts.models.gans.dcgan.components import DCGANDiscriminator, DCGANGenerator - - -class GANModule(pl.LightningModule): - def __init__(self, hparams): +from pl_bolts.utils.warnings import warn_missing_pkg + +try: + from torchvision import transforms as transform_lib +except ModuleNotFoundError: + warn_missing_pkg("torchvision") # pragma: no-cover + _TORCHVISION_AVAILABLE = False +else: + _TORCHVISION_AVAILABLE = True + + +class DCGAN(pl.LightningModule): + def __init__( + self, + beta1: float = 0.5, + beta2: float = 0.999, + feature_maps_gen: int = 64, + feature_maps_disc: int = 64, + image_channels: int = 1, + latent_dim: int = 100, + learning_rate: float = 0.0002, + **kwargs + ): + """ + Args: + beta1: Beta1 value for Adam optimizer + beta2: Beta2 value for Adam optimizer + feature_maps_gen: Number of feature maps to use for the generator + feature_maps_disc: Number of feature maps to use for the discriminator + image_channels: Number of channels of the images from the dataset + latent_dim: Dimension of the latent space + learning_rate: Learning rate + """ super().__init__() - self.save_hyperparameters(hparams) + self.save_hyperparameters() self.generator = self._get_generator() self.discriminator = self._get_discriminator() - self.criterion = nn.BCEWithLogitsLoss() + self.criterion = nn.BCELoss() def _get_generator(self): generator = DCGANGenerator(self.hparams.latent_dim, self.hparams.feature_maps_gen, self.hparams.image_channels) @@ -28,7 +58,7 @@ def _get_discriminator(self): return discriminator @staticmethod - def weights_init(m): + def _weights_init(m): classname = m.__class__.__name__ if classname.find("Conv") != -1: torch.nn.init.normal_(m.weight, 0.0, 0.02) @@ -38,12 +68,13 @@ def weights_init(m): def configure_optimizers(self): lr = self.hparams.learning_rate - betas = (self.hparams.beta1, self.hparams.beta2) + betas = (self.hparams.beta1, 0.999) opt_disc = torch.optim.Adam(self.discriminator.parameters(), lr=lr, betas=betas) opt_gen = torch.optim.Adam(self.generator.parameters(), lr=lr, betas=betas) return [opt_disc, opt_gen], [] - def forward(self, noise): + def forward(self, noise: torch.Tensor) -> torch.Tensor: + noise = noise.view(*noise.shape, 1, 1) return self.generator(noise) def training_step(self, batch, batch_idx, optimizer_idx): @@ -60,27 +91,24 @@ def training_step(self, batch, batch_idx, optimizer_idx): return result - def _disc_step(self, real): + def _disc_step(self, real: torch.Tensor) -> torch.Tensor: disc_loss = self._get_disc_loss(real) - self.log("loss/disc", disc_loss, on_epoch=True, prog_bar=True) + self.log("loss/disc", disc_loss, on_step=True, on_epoch=True, prog_bar=True) return disc_loss - def _gen_step(self, real): - gen_loss = self._generator_loss(real) - self.log("loss/gen", gen_loss, on_epoch=True, prog_bar=True) + def _gen_step(self, real: torch.Tensor) -> torch.Tensor: + gen_loss = self._get_gen_loss(real) + self.log("loss/gen", gen_loss, on_step=True, on_epoch=True, prog_bar=True) return gen_loss - def _get_disc_loss(self, real): + def _get_disc_loss(self, real: torch.Tensor) -> torch.Tensor: # Train with real real_pred = self.discriminator(real) real_gt = torch.ones_like(real_pred) real_loss = self.criterion(real_pred, real_gt) # Train with fake - batch_size = self._get_batch_size(real) - noise = self._get_noise(batch_size, self.hparams.latent_dim) - fake = self(noise) - fake_pred = self.discriminator(fake) + fake_pred = self._get_fake_pred(real) fake_gt = torch.zeros_like(fake_pred) fake_loss = self.criterion(fake_pred, fake_gt) @@ -88,34 +116,83 @@ def _get_disc_loss(self, real): return disc_loss - def _generator_loss(self, real): + def _get_gen_loss(self, real: torch.Tensor) -> torch.Tensor: # Train with fake - batch_size = self._get_batch_size(real) - noise = self._get_noise(batch_size, self.hparams.latent_dim) - fake = self(noise) - fake_pred = self.discriminator(fake) + fake_pred = self._get_fake_pred(real) fake_gt = torch.ones_like(fake_pred) gen_loss = self.criterion(fake_pred, fake_gt) return gen_loss - @staticmethod - def _get_batch_size(real): + def _get_fake_pred(self, real: torch.Tensor) -> torch.Tensor: batch_size = len(real) - return batch_size + noise = self._get_noise(batch_size, self.hparams.latent_dim) + fake = self(noise) + fake_pred = self.discriminator(fake) - def _get_noise(self, n_samples, latent_dim): - noise = torch.randn(n_samples, latent_dim, 1, 1, device=self.device) + return fake_pred + + def _get_noise(self, n_samples: int, latent_dim: int) -> torch.Tensor: + noise = torch.randn(n_samples, latent_dim, device=self.device) return noise @staticmethod - def add_model_specific_args(parent_parser): + def add_model_specific_args(parent_parser: ArgumentParser) -> ArgumentParser: parser = ArgumentParser(parents=[parent_parser], add_help=False) parser.add_argument("--beta1", default=0.5, type=float) - parser.add_argument("--beta2", default=0.999, type=float) parser.add_argument("--feature_maps_gen", default=64, type=int) parser.add_argument("--feature_maps_disc", default=64, type=int) - parser.add_argument("--image_channels", default=3, type=int) + parser.add_argument("--image_channels", default=1, type=int) parser.add_argument("--latent_dim", default=100, type=int) parser.add_argument("--learning_rate", default=0.0002, type=float) return parser + + +def cli_main(args=None): + from pl_bolts.datamodules import CIFAR10DataModule, MNISTDataModule + + pl.seed_everything(1234) + + parser = ArgumentParser() + parser.add_argument("--dataset", default="mnist", type=str, help="mnist, cifar10") + parser.add_argument("--image_size", default=64, type=int) + script_args, _ = parser.parse_known_args(args) + + if script_args.dataset == "mnist": + dm_cls = MNISTDataModule + transforms = transform_lib.Compose( + [ + transform_lib.Resize(script_args.image_size), + transform_lib.ToTensor(), + transform_lib.Normalize((0.5,), (0.5,)), + ] + ) + elif script_args.dataset == "cifar10": + dm_cls = CIFAR10DataModule + transforms = transform_lib.Compose( + [ + transform_lib.Resize(script_args.image_size), + transform_lib.ToTensor(), + transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), + ] + ) + + parser = dm_cls.add_argparse_args(parser) + parser = pl.Trainer.add_argparse_args(parser) + parser = DCGAN.add_model_specific_args(parser) + args = parser.parse_args(args) + + dm = dm_cls.from_argparse_args(args) + dm.train_transforms = transforms + dm.val_transforms = transforms + dm.test_transforms = transforms + + model = DCGAN(**vars(args)) + callbacks = [TensorboardGenerativeModelImageSampler(), LatentDimInterpolator(interpolate_epoch_interval=5)] + trainer = pl.Trainer.from_argparse_args(args, callbacks=callbacks) + trainer.fit(model, dm) + return dm, model, trainer + + +if __name__ == "__main__": + dm, model, trainer = cli_main() From 0f322fe8c31369c1379e86cbcff73468caddb4e9 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Wed, 16 Dec 2020 18:07:36 +0100 Subject: [PATCH 35/55] Remove DataModules --- pl_bolts/models/gans/dcgan/dcgan_module.py | 53 ++++++++++++---------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 7681503848..4e6400995c 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -2,7 +2,9 @@ import pytorch_lightning as pl import torch +from pytorch_lightning.callbacks import ModelCheckpoint from torch import nn +from torch.utils.data import DataLoader from pl_bolts.callbacks import LatentDimInterpolator, TensorboardGenerativeModelImageSampler from pl_bolts.models.gans.dcgan.components import DCGANDiscriminator, DCGANGenerator @@ -10,6 +12,7 @@ try: from torchvision import transforms as transform_lib + from torchvision.datasets import CIFAR10, LSUN, MNIST except ModuleNotFoundError: warn_missing_pkg("torchvision") # pragma: no-cover _TORCHVISION_AVAILABLE = False @@ -21,7 +24,6 @@ class DCGAN(pl.LightningModule): def __init__( self, beta1: float = 0.5, - beta2: float = 0.999, feature_maps_gen: int = 64, feature_maps_disc: int = 64, image_channels: int = 1, @@ -32,7 +34,6 @@ def __init__( """ Args: beta1: Beta1 value for Adam optimizer - beta2: Beta2 value for Adam optimizer feature_maps_gen: Number of feature maps to use for the generator feature_maps_disc: Number of feature maps to use for the discriminator image_channels: Number of channels of the images from the dataset @@ -93,12 +94,12 @@ def training_step(self, batch, batch_idx, optimizer_idx): def _disc_step(self, real: torch.Tensor) -> torch.Tensor: disc_loss = self._get_disc_loss(real) - self.log("loss/disc", disc_loss, on_step=True, on_epoch=True, prog_bar=True) + self.log("loss/disc", disc_loss, on_epoch=True) return disc_loss def _gen_step(self, real: torch.Tensor) -> torch.Tensor: gen_loss = self._get_gen_loss(real) - self.log("loss/gen", gen_loss, on_step=True, on_epoch=True, prog_bar=True) + self.log("loss/gen", gen_loss, on_epoch=True) return gen_loss def _get_disc_loss(self, real: torch.Tensor) -> torch.Tensor: @@ -133,8 +134,7 @@ def _get_fake_pred(self, real: torch.Tensor) -> torch.Tensor: return fake_pred def _get_noise(self, n_samples: int, latent_dim: int) -> torch.Tensor: - noise = torch.randn(n_samples, latent_dim, device=self.device) - return noise + return torch.randn(n_samples, latent_dim, device=self.device) @staticmethod def add_model_specific_args(parent_parser: ArgumentParser) -> ArgumentParser: @@ -149,50 +149,53 @@ def add_model_specific_args(parent_parser: ArgumentParser) -> ArgumentParser: def cli_main(args=None): - from pl_bolts.datamodules import CIFAR10DataModule, MNISTDataModule - pl.seed_everything(1234) parser = ArgumentParser() - parser.add_argument("--dataset", default="mnist", type=str, help="mnist, cifar10") + parser.add_argument("--dataset", default="mnist", type=str, choices=["cifar10", "mnist"]) parser.add_argument("--image_size", default=64, type=int) + parser.add_argument("--data_dir", default="./", type=str) + parser.add_argument("--batch_size", default=64, type=int) + parser.add_argument("--num_workers", default=6, type=int) + script_args, _ = parser.parse_known_args(args) - if script_args.dataset == "mnist": - dm_cls = MNISTDataModule + if script_args.dataset == "cifar10": transforms = transform_lib.Compose( [ transform_lib.Resize(script_args.image_size), transform_lib.ToTensor(), - transform_lib.Normalize((0.5,), (0.5,)), + transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ] ) - elif script_args.dataset == "cifar10": - dm_cls = CIFAR10DataModule + dataset = CIFAR10(root=script_args.data_dir, download=True, transform=transforms) + elif script_args.dataset == "mnist": transforms = transform_lib.Compose( [ transform_lib.Resize(script_args.image_size), transform_lib.ToTensor(), - transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), + transform_lib.Normalize((0.5,), (0.5,)), ] ) + dataset = MNIST(root=script_args.data_dir, download=True, transform=transforms) + + dataloader = DataLoader( + dataset, batch_size=script_args.batch_size, shuffle=True, num_workers=script_args.num_workers + ) - parser = dm_cls.add_argparse_args(parser) parser = pl.Trainer.add_argparse_args(parser) parser = DCGAN.add_model_specific_args(parser) args = parser.parse_args(args) - dm = dm_cls.from_argparse_args(args) - dm.train_transforms = transforms - dm.val_transforms = transforms - dm.test_transforms = transforms - model = DCGAN(**vars(args)) - callbacks = [TensorboardGenerativeModelImageSampler(), LatentDimInterpolator(interpolate_epoch_interval=5)] + callbacks = [ + ModelCheckpoint(save_top_k=3, monitor="loss/gen_epoch"), + TensorboardGenerativeModelImageSampler(num_samples=100), + LatentDimInterpolator(interpolate_epoch_interval=1), + ] trainer = pl.Trainer.from_argparse_args(args, callbacks=callbacks) - trainer.fit(model, dm) - return dm, model, trainer + trainer.fit(model, dataloader) if __name__ == "__main__": - dm, model, trainer = cli_main() + cli_main() From 3b5271049b90500d0ed3751b9572f6a1c3a51403 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Wed, 16 Dec 2020 18:25:23 +0100 Subject: [PATCH 36/55] Update docs --- docs/source/_images/gans/dcgan_dloss.png | Bin 0 -> 27596 bytes docs/source/_images/gans/dcgan_gloss.png | Bin 0 -> 25021 bytes docs/source/_images/gans/dcgan_outputs.png | Bin 0 -> 401695 bytes docs/source/gans.rst | 28 ++++++++++++++++++++- 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 docs/source/_images/gans/dcgan_dloss.png create mode 100644 docs/source/_images/gans/dcgan_gloss.png create mode 100644 docs/source/_images/gans/dcgan_outputs.png diff --git a/docs/source/_images/gans/dcgan_dloss.png b/docs/source/_images/gans/dcgan_dloss.png new file mode 100644 index 0000000000000000000000000000000000000000..826735ea5d627a4bd6a11477d1d0fa1d2fff8184 GIT binary patch literal 27596 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

#FwMkqBD3cb?Bxn1YrEjyNp>1AbvqDlE3 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 Q=^|6PsG*dnX!hWL0RCzwY5)KL literal 0 HcmV?d00001 diff --git a/docs/source/_images/gans/dcgan_gloss.png b/docs/source/_images/gans/dcgan_gloss.png new file mode 100644 index 0000000000000000000000000000000000000000..d616d700bd98dcd970129824d4cd347f69f6fe39 GIT binary patch literal 25021 zcmeFZbyQVd7cWdmBOtBP3JQpHrywHTpma!=beDo4sVJQXMM^-V8zrT?yAE~e&Tk#` zdGt~5{q8r$9rvH_zT+9=-FWt1d#$Iw>?BA!`~ zyK)?r?E81G@n4}!UAc#kcfVZb;e8Dx@ZZgw)P6g5Rg?>{)cowRPxjhc+Nw%BW*<=| z49`~^zlrTF8q`@i7eS}?!xQzGIY-h)fL{eV+*SeqhfXad3Za2tY+k`6y7(bnA>;eK zexl;=imFg8vyQiT}n|fL+}p*ml$`z9VrS|z-YeyqG^bP z4B+bKCxr|SpNk#S4R(`j@57>l8w#JIbUle09AJ z8;okk#=42cg#>l5gl1Cu@ZF*2aUk zwze4drDbI5hw=@(vs4-T@^mR}YEHT6#E`j0)j&@gW2ndkn)tvER*NKdmJLcO=3ia;cK#mS(!@Emu4f}F5NtiT?@7KM!oCrNT z+3xhj^g7xx<1p*F^g=(ycD7OO9ve0?H8pjq?d%IP_W*^e-2u%E^*jnxT#As**(QGW znynVbz|c@f-p-oyGm8;A8XBY=%@U^tQciQipx|KbJs>U;9oKmxFdgIeIBM{F=rzt~ z`lK$fqQR$UC$7+9BLC%g;X>e_OncsAOt`HuL03Yrb2~8xT__ZJo}W3`7_h?2*Enjy zQkGY>%fN;o?XRz&Z06opF)}h*>`lkTuB*M3?C~sJJ{bw2rL{HRtd|bF670Zq_dAIW zPcl&>QdGE-yiZR@Mv#({`efQolOAJaVxoz8da!AjF5|h~&fPJQ3v?%hLh#xPeJVD# zp2Bdk42>dl|F>@mp(|-=X)*lHxymez11eftAQn`(>$svgF86&Ywi;DXQ$s~)?(A#=N~BMU8pmxDR#_>4U<@%ID`mx@6k4t1 zl9ZH`%h#xM$xrJHh8t8;X1+pXR1^&dN1rQWE?Z}kpjht*S#7`Nl1VRML#Cs}OqiIM zT6@=lc7UaqJFX<;@%m-C@2}l0*#m;#Og=wBd!awom#NIjG+AHix~&J+f4s^by${rI zVIwEcu>_esRZT-< zxw0tw)vGC|8nFNz{q9t89{UAspJlW(Fb-U$!TYVlCE$QGnUSx+>lUX`Z25SeYt65P zTG(o&@Lo8DpjMoi3d4j!wp@nW&Z44`jiTe++#JvR4H}xSR28AYjF$!0alVVCD`2U`zd6Btreo*C(pL zya6<+TF=U5FyMsj^?m*NHQ_jeFzfBxx7YfW52G|4MI9HrsH1hLnwS*iOX#3&vB*H? z_6sryB6fD4w@;Fi5I&;+08LKftalROU^6QZ7ve9*B%_&Whw(;=swxUm2zzPGo@Nnb zX;(Ov?GzT7^?n%PYYM#%0PK^;p&f#Vxp`JWbw~(y9=jqOuV0O%H;OuLFUUf}i)SUP zT1pAB?mb6!J@t!~f-un2+lDFfd7Zd~!k14bC`;6&!25ya(dQ?Ukxh;s#=_?(>{dL zTyxU`_h?(c%p_z$=)iag;A~~Dc%(O7{&h@@sard>N_Thn-BIYmLh9oJV<1JKY0lLY z1O&)+pXAf0*63@L)8%-Rx3X`GhS{pVxh3zUd0w$zZ4tq8;gs+nRmKG@kJ{7#4RqP< zSGS#OzLFj?R^>i;ctiJb1~7{Rg2#KXQ4)au_SMm^Ur$%gt17CfVD(2bsw>oZd4ic= zWjChc<{mtp*j*XC0x%jN?CeO9MaLkyXg_cP%AIOXPQ~`i0k2-+z2PAuB7%S!fr$c0 z=E5-Y@TlB2s{@0@EdwubAKU<=sJD=TR|~A=(C3o+`OSzQwUJc0T8|5VzgsFD%$QYvZFgIkWsR z5r7pL(xy0g`p?~99l>Q@rm3{}`L4vwo;vbrp8mb^J zE)G=15;%~qG?(`uKVky{P#<{Z29kD*^gTB>I8&(cIz`gP1OtTv6}+om?x&iqM$O8q zs45usnnopz)(tQe;zcDL%!^^ok@Nf*V$x`1EV7#yyWd^8b}c9(B0?m3OX*_aO4k)K z%wMmrTEdxBFbOk`13mNQ3sfk&7wTsYs9eYH5kql%JU4#{{q5VeVC`3~T=9kLF0gV^ zo~KkmouGR$65$l$zzxEAABV*NHZbo-Kofw+Xbh)ZA6pBc^s3FytJcW5txBshKR-WI zW`7F+IGh2%IT$I2DPBjC;L08k$z845lzY#+K0aoL^PDQT-LFZ4?!ZMGkK_VrR5-6c z0I#|5pAZOyRKSJhu2!jnQRrx~6>z+zuG=5xJL|rzjaPJ6xjS=M4&ecMM9OZAy*5^6 zIAXle77OhC<;#}`K>NCitu*1QPULrP1i+%GqoZS#lT_+`E(E81z`a7_!T^SGTg~Fd zVi3?xfi;NSzklf(hp7+ugbOmTlRDsfwZm3mMJ>(EwZMtP87Z7L!uJgPDYGJ}MwrE@ zo~zgViW<(S;H$!>6e8PSpDfwA3fB&z%-0IEw6ywQ`lP&eH-SxpJ<7Kls4X2(&*TeVh^tg@%8xDVf^?%?K6%*TB&dy8Kt?`QCb7c5VXn=QD0K8-u z3J;!C>X}PU!YBlTz~;Bbb9e3>0k*71`a+Th6AP=m&`cR%EgG~l*|}OrOKbHcKj$_c z;J2lo$HmgPin8XT70%3H2hk`!d{R?spetaTB?^q&;m+y8kGT!zYU`7}SSkWEn9sXZ zSy>qoAvQJ^E+jsOMLoW?N$>N^V2i-2qmO_z7SymSPX)YAch!LquH1MK)2I&{Ex`r6 zv7l4PzIp*K3yA-Ti3z{1u=kk&cr$RPE1T>&GLIi$g>M3IJJUUB(j9}_+uMoH?2h-W z5SZ^TgmOK&Y|mIHV`P_x)f9I!3!`_{@)fI$NV zOW?I{%L9?$@$x`UFyJ-4#TXbEJPwO^pFe*_7;={Y+j;-KpY(cT zzG2e_paNwHHWQVua5k{HI?Nsot2z`Qt75^W5O_LV?YJ^v+L!TKS%_S87x;$?%h3$Q z8yq$hWAl#k3H;7DFZA_**SfoYy3;EUbmBU<^`$A-)gAy$3VAw$g=W2thjHA44D9R# zU?lNJk78P_T2D?q;M(%;K`2{)cY%p~^sMzn1v@qrY<$$BC@&}nOAYPXpjePr7uQiIPW7H4l zie{Bt(NYu<0vVqJ`V0M1axGXpbo1oUz62Ld#X4-%`iwXWM8~S`Yhb&PGITQB_Sb;= zzlx1r+AZR`}?reXjH%s`T^~%aLQ>F0^u|#Mx@~=0NPT^6?q5)6O%Y# zK-rZ!j;BYCCN{zRNy6S?U_yo<0ReU&9z1w?RgYTr_V(s`pL;>AvRMrqVTsh<=rGHAez&VQ(?n5Y0aamTROJgkV%^N0h;_r2sB zkE{!BQLlR-o_Vh9;Tm$TVbxnc3M>z86_0ok=X%`@Mubjq`VOtI2#k zH@4$AEygWs_acf(GZj1w#}NR(W>5F0>jD(h z<;daAA4F%3Ay?VqZjr;huUVWb>aI2>NFV|F>iV%gQ6Vxq+HhyF8$>{3_d)0g&k=0G zF%Pi&yTXlOni_zG04|P7eCN>=*-CGot}v9q6A0Di{B$39Nf2KLF;^cT*+V-Vahi3@ z9Wu9L$oU*tE_*l!a3@Qcnb8ZK9T);VAZF6g1DbdMvOL|H%C|@)H%k-{YljO=5(gcC zVLvK;3bD7&21J>^p_`fw&Z+@2u!3;!j!q?Tr8^+BHyzAPTzV;ClLyZ+ZS0NO@Y7nJ zog4yg^{N1xwI!f(LF*U*X+$`Fw*cl1GCD8K#yWwIgJp(w}J&qEX{^{|)1U#q!`0TLMgR(N1=X_OI6;K<1Zz&doxo{3W;WB%9XJrt#=430_ zJ|3tqz!fr{r?rN#2@eV%?W|(U;hDBRkP|!EuQ_jkhy}=u_N!z74iXN?ud5}I4V3QI zty$m}>)=riaC{K(?=kEqVP@qogJ|qQybisyAsff>1(5y?5dB8SRaU8mQwlc%wzCNr zRk}WilwW2-!{B87J=cathRRILnC-U+THm`3%rZ#=SHaWw^z|WWrxq*Q2aE5*vpn5w z`mTptP=uQG;g%CEjL!l+Twxhg}qkFTw0Bq1ni}|#@qV@Dtr#2{LAp1g{ zsk?1-1c?QiKB7ifFe9}bqHq!m6f@?&TC#QX#)CkI7^3j)|K9qW1VsE4K&bUjv)-Fk z|3oHlkCB1lYe%B{Mt2wMVplbqu}t!MN!)D}yY9z)4jm655m*J^?n5mZ@TgU!tF`W|zYBql!0q5E?ap6O)Z6P(|3fjWQk7>>J!rF!ok zwc8$4T`E$5a~}ERdx4>XVWHQn^YRs} zMoLlMJ&;q2n4vyb>|%l}$~`8Pl>yIy&PF+8AMgS=&Gp+C_wY#V8ToS= z=o%0yx$4k8So!R9T@!-&U6u0>W8(1xSDL@Mz9_P&5kGehpb@CV6*_ad133S5$IH9 zxg7HGqh+$i`#%(!YSC}`%X5xGD}tAEbE6*yEf`crOPZ!?PK6wfbzEI}X)1P`d`|-` zRHT)Z@GZIGn}~^s{0|OXU>cT|cMJ>+kaPlqh)GDAERo_nh5;>!l{GcwiUrcVrIH*L z69`1%=vwtbl!*NFhR~U*OyqhvIXe-Mv-&#?C1qvX?S*!R_;zD42M3ObH*bn8K=9J& zi;M;z)oG#asxiS3h}^TSis$B@7!!=d$Qmo(Q^4pivnRRIQ%KHNxb7>bUnQGk6nxhu z+x37qdwSWmCK#ESB}%Nh&WQ@7UIrrm$0ApyD(jUkG*kbLa7xQ~+5yaO+2n zp2&Fn7G%t-(bPUZ3N9=RXl`w7>V9{t3*w2pI=Y{&yZk5ih!iTMy&t>xs7dG3FuqoC zjkhon`-e`6fIY#k8CVCYz@l;jk8O+1u0qCKYJtOILMYG~<2NrmhE=E@WIVh4r*ZvX zg!?}#fq7q$&zc6AEmf}g_7^cRr0>(x%m(rC@$pDVNH+LlLWjwiK*nv<(#*`PjjoV2 zzU>1NW+WO&tmzdD3lwK$+y=!Pi$McJ!z%;?1RH!Rg{7rDz)~DKh$$&MEk&;ve6wUo zQE*Lp|NatS)z+GdidSq7F~p&x27D&c(z8s$nctxUj4ICa;twDsWC;FKbwnVa(f`Cu zaH}b;ie#=g2O$Fh(VvTqtq_&lF(F{6glq9G^h9B@C z|JpaAe+$hBIuSyGu;p6Xk?UoDsoTF#GEyNj5^)=?8ZYbR^ur3T$D_h@|Apy`S>Q7u zJQOfnPHQ=~PAc}6`ON{rg?UQ_;gds*az;y&^Vi7P8kBMx+TYw7TqJ1<+UKo((vekm z9x04U&){fexpj8vR99A#2{*2apPx}e8b%Yli)C*% zhQtQ7M&}*n&@qAHfm%2_u7Z3O`C`yX*ndF|45hI(&roRHU(_hdY0^Qnv&@SCQf_s< z>Aau{k63-?h8!30f|`2zv#xoMTE^N03s(OTy>D*w`fn?^RHZ;mclLavV_om?Gbbm0 z);5$mRkbzO<%DN^zRK0UrhY?z_CzVVSQMr55zBD5^|6HLbCmyz^H~aU7D$8bEU}~K z=Qris*6o9Fm`U>LKgME>RXfkr(-&G^S&JSiB+lv^HHK)gvUL$168$-b<4Sd%iD5dT zNT~nv!MZn%kWe?w-K0}X1fc1OQv84@3YE8Vnobs@39@#?WY>SW%%3D6=@D=vA7m4u z0n0liSpn(<3PO-xEQkij%`V!*%fG*#FbgCFu#faEIl+#G599JgcQ>XD3(d%Vv(;@5 z-ra}!1J8`s{75}By2a^Em(k%LGWf6OUkFwJ36h!F@Fs)#AV(dT`lCmIAW|rS9d1KM zu=*#{&p$Cot>R@JBKv;s5s6-4|4sjZ%f_X653!1Wc=J{~RCr4~qgtyHpVFHH6@;8R zu;{mMFU7Yn$0q zOdxdl37}$$3Z8rhGy}P(1M`mA7i0kN3JGK5sKH|)*R4yLnVHt3Ag%=XhDSi~ys(f1 zrXebdG&3`^vEjtl^1;C#Q+27$`IXbUTLY0y1D_&ZOz^MYEkBqWs8aXYouYG|c(rAQ|p$m6X;Fss^I1rjn;k~gavueBze}gOaiictm8^QM zmc%I6>w}d%X(@Bh%wIsr%v<*M@3N&;N!nP5($yFdb6DHK!J!aH{g@ODg5|031f} zVo+J;M_(Dj;?jJ!UF3P}CH}D2i6Y)`&r#Q9$qy5ugPdz$38sBLX2#?Ge}f^B5CxR$ z%xM7EMxd#7=>7FisYV^IEbB@9_cjnSy^dDOK%koTD~mQC{H&4JuKs5Ljya@!FB*)}N>Zem5dPaz0PbxmVG$vGq%esBHmz!N{mEbM z=)vkAzitc};i=jS+P?Cacep{2eA?ODl^l=lV1&>czircn>(i@gS69qX3;CG%hfppe z#QyW4;@Uf^>YbU)9TI=86{2t&e#@-ZuY=joe2HZju2lbFi*Rp3n1xyYk!4@0fl~di zD;0%g)fU`2X5+wt#0hs*%gDa^jmcfO<1GAR?ilyX4%Bt%-+%73_sM(>rs1TUQuuSn>les9wPE22jrC=Wm5;r`0rtu2$moc(1Y})8b0M)uc5}t>4 zKY(&Z|94&Ke?@eoT`AISbl>pkuZnWb?)dZL46gQ#(-@(@?Q#nimn^q5(E2mpT=BnY zqwBq8s{(}_3TX1I29t#0UosximfCtzSr#NG&X&x-VNi;~V?WV(TKS$;d9&{Q zt|jpFjCc|hLHUL*dVl4ah}p~Y&RN92$z5n;R1L`erJ#9-GRohK+#}@&XKY`!^3I9+ z&9i@B_KhZIFqbe(b?02E->~LVngS6aq274;dRGAyfdlulSo)`l7=9C03SqgtO;#^K z(qLcY7qhSuzITAxkZyi+(W-R$X2YqJ;qkr{J!X6#kk!z_@VqRP-(>Yn4kWIFH@?)$ zv&_8NEcG~Ku(P+fT~Wg{?$ij()jpzTXU`rn^w@_v!9#ZBW853;>{uX=0-D~`D*G!5 zfe+R&q0*aZHLfuY@=#)KQ+}! zZ!zGV;F|Z|s;t(9q3BaBwMw_R8ciBa;J#tpTC7joeaR{w;TtsF0Q> zSYKdLW<41^yvr^`#?~@>2JO(k4^k}FlhX2?BEXNi>|`t$=4U+7r3Zi&!C;#S>tC-F;$BLFzu7wLE5*Gkq{7U)towElk@M?A8wPJ zDiQd%bbcf?gZru$xwQX+CSIRtKW!!RNKxp0unf|jFM$j;DCIZ!jwJjztODTKnl5hs zR992djs&6g{zH3E3Z45#P{MTM#&gkmd23xRtp0_^e;ajoPLhs7;9*@ua5Rg}TJ&P~ zso+?}e#*!xm(@s6lHf$sm*)~2HZ9sWX~*ls7RS+X*Pp+WkncM<0X>MHhAk;HRa6K; z5~s)_KR-Y4<;%=|`vniqmYb@BvwMuZ@>*J2IVRaTjh1%s5VMW0Ad@P?KZ~t3I_Jx+ zx+eFrg|V{W#UaS8i=0V?+b*g`$#T%~zOscwHE6ATVq{ci1uD|3kS*@alJ+WnKc_KV2)w^1KU|<%x?#`J3Y=k zaN6bqAr(>d-KrQ}25xQ=-MkUKYs{(&3W58R$E0E}LhAjoxSp5@i$8ck=OyffU*&$e zz8>Su)h$Fc?bWJ-p1}b;ytwp~eY;Ba7p2|QEXI=X$tbJ+Ebntw(6@-d_r|EtNt|#Q zvu_Fk0|KD4^%2bK)SorI;n;QTG|p-^V>wo8+gqqD)k5y)xQY_b^kv7*%S#AOIg_1H zAwU~7D#x#`*X*-8t&KegkxNbALx@sawc~)SNelZOB;VpaLL*%Te%ph5U%v8ANQN<#gFgSb1 ze^{W4ll`Ato$ltu%J6C|h@BHrP+g>N`jPw(Yj={E&!&v`ifa~rrFM@xq7J+GW3N#f zldwz!A_?dfZP+^3d3OVB=kV1p^M2H^*CekRs4USro9QP8PkCfT-M))tyzjXw!CjT! zDgWXZKVZN+YNJ`T4!K6TFgb&aa6#)d=GyLUQ;svod-5gxLi?gVM@A#_SD)zGyp5;G zv?XLv!oXBzDwsmvrqq%9FfX?B6aHpYi=pzqlZHNr$T_=mo}1O>R7ID*kKO3hcG6S= zwP+3K`5B15e=uyVi<(M;{HELuj}F%`oy=-oW7n7PV)hIOcdl*CgxiRk9G80&|KjA{ zw^*Wd`U>wON(*gKNhX@pDTU?dCvZ*A`->7G>_Ga9Yt{NJSZbzg;V4y- zHE+7+4YNlVl0mG#ro#@IsZV0&Cd@*}H+bT&lO>#jrji#fgl+2WK^JRawvlkt_@ zoOny!=IW1Mx2zA#YMt!`!sE+hNlSgaUchTFsy?Nj!zXBmFv~pLpLR&lT*vQH=~e7% zH{W7qY@>IMN_AQdH3ZY4yisKQtjd$SX@aq#;WdT`1oQUw53%PN>k}L1&OhglClw6C zMet;wu(#p$P#ct2eWMG)YyGp8quT$HBjPy$Nn{*LB;zXOqWiKd z*52iOOtfA7s7x0D0#X}*9q(0cOU?<^e<=#F-`hwe?_{I_`OUHGyZuj(=UT*3d~1HNZo7Hywx5RX>zV}w`bWZJJAj!D$K7~CyrB1>~%qGqh7xN)-Pk7!S{sfEW`5a;Z2cmGU4jdFSUvaIUBLuP^tKAcLpiw@?Z(?f|7FZFwJRC9 zf)hN0JM$asYqI@o1SBN4XyPM(xPUJ)Ootm3Pjcb{w}Q^=9%mA@uLc)dwQlUkzDfOj zm<o@4>Gh2*7Y)?)e3KIFSk)_^r+o@V#pFu_K3P)Z6^ zbMLPke9kllInT#_B`41U#U|rxIL^kPw)VfUcFZ#S%Ln@OEVQZSuj9r^4mdHJ-RAls z$VsxK7n}Ml@I-6dvYOo;xj|gjI`?0&*=83<*~`R^@|G(J(a#l`RymsY>^S=+ss_Mh)=hgmetbqI`c@$PA5pN%5?- zky|Ij;LD%pd?+Hxx}pBjvy4Q(N|8}wc(7@^i+`PoPnVnM0=F!jJE%T zd*X*RHo7h@#_L(M=H@pyW~Gj2>M*+w%fDANRq>S6%#&=4?9`_oN3|ON3wOoWl)&Mi z6U2}4b7kCs+E4W%rm%E+L!F-goG0NZ>o!TJe6}{%&%i)cY|rpm*~R`yl}YhUIZ}79 z?^|yVVcpB!|Gw~*lA3WcYt_u1+To=SvOni(eVZ9MHvyTelOs=Bql}5{6508c=GIM{ zX-*O73OvaT*Z4MJlQ!Ll{82Fz1OK9&D%CB5z)(~n@5wqlmPB9R*Dl9B)R9@L1e?AOmFwfm)`Ufg1 z3x~Jtd}b?r{htfsvQ4sFK7cxe5LYLE{UlF@=V^5U`wu+X zDFV;QZ!_Uo{wfF2gERZ>=wVo^#*Z>(H}B}KA)0Rt(Viq%c0|UKpl|XZ0`B^ya;?07 z7Zr&|G083*QEBjg;787(uvJY9J>k5)dMr47B4a)o35qjXLK5gSD9Z|5G71XHqmniL zomF0hcCorH`j6ZT9gjnr!h5qP%P{F=6GDrv$`5lMU`A4TJu*LvXg!%F@%*g%3|>$o z061UUY2kZS5C9kbxQ}+LuRAxAc21|M{kZwd6oRa;Uuis8HV8rvo(SC4tquYVaI8G? z*>C}IsztO{bDM*<)O$Wq8im)%lrkzs7$GfkCGs1GHO!R}%&0UIPOM$3^zd@0F_w~4 zu!$^aFclg$;o&qT|cmgG>k@w+I`{zwUX2Evoq1wP6)>$YEb)!v`tU zon;qZ-cCG<2{c7T{@W@#DUk|@dz)B9)hB1;1-xBEKSpQ!Ofj7NHNL+IsFwDt!`=H+ z1CzeFY8W(mng|$tkZXc&m|WHe6EJr$3d>Giw+{LGwyX3fmu@K#(!CU&M;XCTwJu%? z{`6F>MnwJnCE(a!xnT`)j0;H`wqZ_9mDF}q`V^qSutw<`koO~eZkdUAS%>0YCmbfE zX3(6GJg!s#>jJ9n)ox#4WVDSBIuQVUWnh9)gHES&T0+1zJ$Rm|goZm#KfA2`^_Yfx zpVz-dx)AU<9zvrtB>_h&klZH6j5M%pS`F@VJIc=)qjNw7EGX|=u>s*HeTGkth@YSq z$InWeyf1Z-H^Mweed1p_>9=}e6E2`}Wm94tIA({X%liP1=(_G!9X8p4ntN)bfkU@g zaOeZ-hJXamzkHo6_w~iDBIihPN(zEtc}>7<%{c}rrZ9IaWo+5Q!kPK2sZ91!f`YRq z$?SPzNhXAij*K7Mi~wVx@cOWasiz7p$iSxKF18Jx^OkqkRhr zr_3I7391smJ*R7J^ z{;~~qgLx*7KpS6@9{?1jY&VxyVPIvZOrl*R(^;q=QT!SnRXi6WRh-YMZP6;TBZrMTO1Qbb*yhBHbT(yF zX%N4ic-Rrl+`c4Obq$KYs*rKgR)n>nBimFHYeCXB8X1iUGISwmd$eJ>=SJRat2>BP z)@Yx+kw00)R&hURzjSOll3W9IWos5GrXOD|sfqHi^e%^0@a`>1?B$>tlpv>r?jmoU z3WO7PBH#i@B0npYP#P+n#8>WefAXYe$&~IdGpR-<8#0YvyoL`H4pgn-eG!7L5iikj zd!BC2(6+@N)4Dl$uMrKP1lgOJqm$)b)O+PLcld{dm8<*JkT1Oyh$n#;&@jUKSA=bDvI(J97D zS10WSOT$40eX4Cj+r{9R;BmUQ*j|3}tL+uFxwArwPG=AQ%65CjPsaE`QK9$0ef@Gf zu^(+dsh-Lw$3u$yZHFsKL$J{O?iSYDkGP3&qvS=_I_6#Wwja!qg+18Y^lTQm9vpJe z`>-a;M}q#_Lut>c{gs1_NzG>7QX*O`0cJU^oqqHul;h6>_SaoKakS4T96CYY1aVf& z9o=HoWNgZH+jtvpn>q=xrj*LBDfepQ;BE6?j0;>X6%`c&!@~!28yXvF=;-LC95YO9 z^Cez!?~3P%4cFg&DB#X8<#WtuXLB2PBu)&lO=0@@p|itGf~2HNZE+P7bqd!np0eiUn|&Utvoi8>g5_KfjX zIL+qC)%sD(51sQ5#t@%;jD5j|i;MSGE==U;Xt?y~cv_>zS}E?kJ*$Gannnx$x5Kw%H2fe$)c#JsAHn_jlIw!VJ-da3x-YxU+xVc63%XUUhx?x&poh8c4+ zZ^K%$znTc*IG72ELAHF~2v?jPbWoa-glUNMIkt8dg|nAOKS_3GoW`wqPj>o6=&Es> z-SOAC6*}bB2Pvj%x_TPnwU~pr(y-a8laP#+1zLEYM;Au_!6rM4V~aq^I_UZ(LPoA6c&gMWA9d}PBNBafC9ACIJ%7GWavAaL zKyt~^gFg3q=9T}2ynwcob$on$aGtsqi(tDt5h2663%wuaQ*EZR?(te;C^%cq?0S&r z`L(@8xL(5fXkUO+WN-!bfOQnq4<=1ph^Cf#r)CtV=5(f-o%Gf<^qTPXw(sbTB2gVi zcy~O$TxneomPLf{fTg zAX_Des3V|G0XxT?$e?M3X(p+hm$Nl z5^gwo7w5+RwBZm0)u?ZYk=@lQ_M~#iQ0AT-d3gjcx{V_kzX<}$dBLis?%wUO-G6Zy z;CTABmI$me%e=V*0g!M8W%offUV0-d$ciI!j4T7#mJ0&NP*xflmQl7qIW!tQzD_m= z3IVSOZFJw4&NwDrGt)(5Mu+c18y(TlKEE-kCO~2Q$R3jKbs93-Z`A? zgdU;|Iel~r-oAp_f6n8GkWuNfQR(c6 z-=)5Xd|_)G=RD^W%KQz7&C<72jM6}Olv|}F9f0^a97#Dt+@Z=Ep#a{(@q=f(*?@qI?cC(3yjR63ga?` z%ulp7k7Sk^)-v0I{#X!aR9Fwbo{sl68|}Tb_e0XuDiY2}1bp#E=4T?^!5YYJ=Ps-l z9d|!=byJG(EXYy&K6haE;|z*3cP#lDJNsapS%(xV=C1j}klew`dR(B>J+Jx36pHl$?M0wehsUV(H-c?O}k& zAe$p7u0@GDu6=U-+`p;6x2eocfUF&>+r3t<>hrzl@rN?dEalclpFWCSNTjSOLRNzFOA*z?6fVx8>4fcx%!dHDg z=8@UJw(B~Qb8dwtXdnF13VTsx0@F&n!9QNP^Q}k!jIl$a9$obw#RklBP}9SLPNl38 z_xJAP6B=@NwRmx=vr=zR;l3ieyBOvPt7>6$Ty#&V{Ma)7v!V4O(=azf0+7KdsmlGV zHYJ9Ve$l_h2|ET~pEz?#5Vq~13ewj9?S4L?BS)*@4E{1)d#(u@To{;8o$~Bpks5s1 z&2B31#6V}*fBK>uYI7O{Q3-n8orI#NGMfXuU&5rZ+Wf|Ay3-5*co z^;{|Gy@S!@d<-om22qw&5VtfGw1Fw9ALj@&gPzA9O}sx8S~u+-sG5NmuRCq4u!KN1 zyi1|r@C0H&N$H+cJ0<%2iDHL`|7q6(yKA-w z&$y8GGmvWdr}OuRpq!U(Ga)YQdQ;;l-^fmomgGbv$>JY`5!kB{W@04z8di7+ar`c= zw-1|i^Nn8))qJUG%A-ak$^t3XH{~(H0gpXbrCSdWf1lLt*I}R8^t$o3H5@uWpMWAL z9v+0Dt%TV?>yUV|MNvfV!=#+p?;2v%v$>y~+l$o4R&-ZoX&+=Kw2jOs`D)}HekxO! z8aS}P@8^pwe6N*w+O(Gs>79gZI zrfvsVX0YATBf*Y4*NCCopPy}64qx5NSBx}TKJN5Q6?KH7_)D>UZ_F3rhm35U%3&WL zu$Qc#p6(NIV3~!_%)~J}D*{4Pb~`$(g1hZ=zS)a%dsR`h;`o;fk}^#J!^zA1MY`>W z4EO#OXqQ|DI1TtZDQSAI>PLewCYGnJ4QO191_`M>m}P;>SQTW?<6KO#c*_n%V=Rz2 zyuFpqux+`1{GX-{^J^iP^sFGK^cEOkZc0`7mZs*nyeU}V^N}JQJY2U9FJ(Bs(YD#l ziB(v60~%!hu^Jsrct>6nuJDQ9#)eR-BVz+|6X?oL8%XjC*0GFwWkK>bxhHRUZSoSx z2&jI*@wCy+&WrkK5T;Bj%IR%lppw)Lx|8{w7GDB_?#0gq6tjp<<$Im}{*xt^`Scyl z;({8aH|25S=5F#-^iR*}ermi1ma1F_yMWuOefk-d7_}Z+Nk%NZ{NQC z)4-Yo3Wc}i5=24N+}z%t)4d0N1CdqUXV9hrz6Rhr_Q3pmlLkmRD|Ca-FLS0*(6J^m zTu-txO4P9&a1c!LoNZJX1UcThD@@fPMeI+PX8fa<%TZGQY1;t02F|#>jVjmO0*3;~ zKpfKmI>kMOa6!j++Ca3)p;5tOr4Dj6Cx+JHGhSqw6&*7vzg!R#(1bZF z6d%SpX_>oq%9V5D>2e=$awkw%=^QLouUyZQ*Y@SU@aBUEW!J=agMYenjQ%Cy*ra!j}WSGEt2Y8Jh-c$f0p;w8ggiA|Tc^q!zOeao)@61%3*iiti z0SAEm4;LOcn!qbyCgurD^O!8@$&cTIbWqqKbX^Si*B{3QkYJ$uD<~*v<8+_D>wFwy zy6I#BFN{-OCVxH|p13m#w{na?kWBejW$erQd3-%RL$Mf?rCuhs7qu-LMt`Jw@o!&w zN}57HDj52bOoo*7>TEh0K09a6dO@gro7yXA`OS_4mSck^-dL}kUng*p?X|;*0k1fm zY-6+6d#8)5Yg8=Zyo%h;*xFaUD-wI0Ztxu5ul~Kw{)bP#q>|Cn;v+7mgWf)u3%aCg z$S170Mp^Zw{2ssm@L(ie3h&bID2>FRg7C_v=MJ}U?$#(ob{OOnDb>sOq?jl$-%sw3 z@>*d1@e(a?j;-8_C^^?XVj;SYufRwU=_2}=^u{41I-1ui0$srWb)3&cGpw~Zf;;y7 zy?8Cn%^4!RLs{i-@(E$b^r7$+O)^8#34coe$Ko+TH(LK}ThHuD+uXd73-NXlfKWj4 zkGW5k?Gb)j{dYGg-GvVCZrdCdXg$gYZ7>#er7eAN7+%S7)CxZl_o4#yjn)+GZ*`&( zaY_YurEp{7%AQUJAPFv53OWn>5y${rf1ABj21p%CcP-maz`X64Sy;y$LVD<5izvOC z+XgY_KU(u+-V9*guwZ!UJ#TrRzO6(!Up-Sj%Vkrd^aRSf%ZY~YhddJ%1SJdP6Q}Ur zft^8f%j~YZLUfzNgB&d%$N%?tlIb1U1 z68?$l-)U5I%G)rL$9qPmWD$j?fu6C~&_G-vKY76qOm)-Oy)PO4?V-ppBhjbb>K7r zigR(WH^kJK^7te4P5I2g8SLmu?_v4j&@T)eeDr7veDTRz^T7jD_Y6OpR1)ZkzTT$7 z@y#S1Dw=rlAwZ^oE};pWDGG5QByy<=jEbt<6F{`*mxA2$3;6&;=?_`&jiDVYBZ z>;M08E9fViUl3}_id^Xy{0z^)P*-mAA9zgQgVtXc#{|&ozB*Qh1_x&xn7dx%&Y@TK zYoJK~6t4a`3PzAsS?RH}!hZ=){=nI|S0Hn=GWdoSoPxUV01H@MP3Pp3GhY_lS>wbL z6DA8C8k%*9*+cjD7x&73^Vjjf0WNsUiz4_&id$7_DJi`F1n`9{!3V#cz)J+i^4ng4 z(#$T5oz#85Jo@c?>ww;BOlCiYVQ(W7DW_dTjWj#3;onbEfeagg6FfRr#&||n+$Dt z7BOo2|5Qp}QV8GKaq=Sm1c|HbAw@}WFu$+$_=NbR(DQtUC3CH64n z?R<;DPOr>>Kcs~OkHr-E`22SpzX^A!RKSu1kKw1(Kri6RmX77BZRM$&321^k)*=Al z`)?KY$KgX}crA{UXM^D5p|O2v@np3i>N#v5GP)1g;uVmT!&w#9dS?g@&|`tGT3j^A z{;!<_LN|vnFf!KFV-&Dhk6}lf5oXbVHZzZt?ihwiN`7O8ft=&q2TkSf`**>I26c=I zhAjib!XAK6jXA-^{aQzCFa){($lXNfclPK+0|Mt#fw^OH7xBZtpg*#J0ezMe+y`kp}-XZnu zuvJS(*l86P-bn=x)>TJ6gy4t#7fs-~Tky>w_=y+LR2Lo*p;XeIpCDsxeYaYt=t~+m z1MNHx{5&BM;{Xk)yn!!*!L`M~bQ1Y^?{pd70Qvh#R&+i{oS+3YNJnoEfsa(7)ZUfT zCwKp1Ed7+X19W!9uzCu?2PC#}Zk)Q83_ca1{6DZU2Kql$`iF1$O-sJJmEW}gf9I{R z^U;d!ybm25I8)vPDz|UrQLS2+_NAHk`x^K%w3$leI6lahvr4=>+e573oMWMFZk48{ zct>MLG#Cq2@bd$t`vVC0NFGqMTUQN;?d%EcCRg_DJC4QHs$`R)0$WMU)ZF?h_$2NG zZ=&3>P*E9#SruMNw?f2PtH4EY)l13NDimbo$Yj!t`n35j$ovGjXqc#fKR@xz*SAF; zTVr;(L)ROpjbt=)He@Q6=$Btiu2=&$Amx-a# z?5_APdU`g`z=Resfw-8>Ei9-dBbrpTwPCvg;IJV0U-Xe0Se7d*4^QCPnOAsrbu~rA zO~|`<$W>KUaT@YT0=_pT!RK@yH(OxrWMyafTH5S+zcDW0oh!QJ#>v4U5^=Mzq$Hp+ zN^f^yV1Rf_1F7oT_3NCYn##%qHzh?aEG*y;em*B^e8T1r?%IKi1#`$d1{DoWOk1jU z*gFP%425D@38}-BLp0(hHa50j`CA|NqaAwixVN`=hBQWLR21>U2*2v;YK3V0r*v;H zB5r;$$cNu%VP)liQ*sdoyX;7hI5;qXDjCt$+e-jO%dM&+2kWS);O|SjlrU_G)3VK` zKwm3DONYw93X}zGqYSpn7VH0!e*@nnyFy}TvSFG`*3A)1@dZT$8II;La4(=7SKBqwgFr4cF(OCsan6Z~4|V6AT6Le}JnT4(4N zu!N*l#>QsE^Gd`UV`?_h z@Toe%Fz~FJ4 zd*5rz*#R?>2u~7qiNOKyPRXGij3mKbg`&ckR|y=_ zYAHP}V|18c?&fvJnj7Dm&hJ^lf+;_iL{;99Nr_OdxCN3@b?UlndY&5wc1OvtxxdO2O=oDXH+fOxM!Q4zeEJSai)uQTsNclXPo7>Bp#dlj=WaSL1= z9G5(2WKLWl_48xxTbTE&l0qgXHfy>b_mx#yu20-(?)1hTew^)xrE=(M@yUBq@v*NI zqka5sY?VtQA4PWAypj6(8P8s<%b&BX{XdPJ`8%809>7z*xOXtLL1`?ly|r{Ytyqh( z*C?u%xvi+>X?vwaC5SD^%us7Aw-l*Fm5Nw`(uma3QPLv1NUcFpvBwfyQ`LJif5AP! zz0dnT=X~FDzRNl1Ip5ETLXPVJrYUFX)^4MLq7+aBfQx%9YDR}1?QZ`F2C;Y22D@ly z=?hzEUohDTSIPN!kjoDXFYos(&`uq1+IU~kx zGTM-a+ib_xDeu*o+NTT|Y3Z`+H;bDIwg-{iHsi#y;}NLfYyv?;|E@M5FaHQ>67#0) zy&(|Xv~&i#+T)EOr}RD2t?22!HV%-_lGJkAo~H3F!U#LMd>={yN_^EXK`xe2lShJ| zP*xT+M9jgJvJKrv7!!JcrLf zlATDBj&I+6Y4*hv>PcLOP}es1q%9~8B}!){N^Keu&BkXyUQ2+0%MH`_vD_BZn8iq46IVU~_oW#oKq< z$uCrbO69j*qVX8nzDz$2c9;Q3?(fM&dw4~5MYystuzt>m3{bz9&*9P@h7yaKoV?`x z;Z7TFsJ+UjvXJ5J?V|~*1_d!FuHjJ~i+T(~4y0GsEB#*=JbXuzc{-Z2K~>-!gt~64 z?c2{1)ZyXi=H?-|oaNfnT6FGmq%0gcB6%(tVY3X`j z3-`1?Bg@%-;K4=U_*HkRLs0#NyqTTXTJ)BQKiu=JhE_~mfvfQd0$sQ@^&oMs*AR@} z6COUWyieeQDl?DWQbA7{MaJ`|+E3EY-I^$N4Rdxa!b4ea^{D?&=kwJD`ur^URbDj_ zsE%Pifr6=t4d|*EIc}MFZ)v7mw;|>#K_p`I;=2d~M9Io#!Y}xhubKWj%Uq#Q7zoF< zB7S|yD{tLD1+;>NARtR_`1;aW#rV+EX69Rqo51V6E@qc?{K$`_&czxI1UNpwwSDRMm{mFJ5 zM(mt`r9=4-xmmE|o_PJyjRr7%fPBFtBO~R3LFSR^z4J!7>AbpK{Z4<@7mPJS<-4#3 z2UZfN>u>5iVX?A+V%pV#bCSED&E714Cojm>TEuK9d0ykS;&N<%!Zify`+SxUy7x}l zY0WaFHDdd#RT&Ca;KG0a(H#L{C^T|poLheorwYQ|#{9$h_oJg(9UY0BVXNNMJ$eAL zHz6`Q+N|Dtf_vB=d;&}-W)2wScjMy(63L%iPkEK!qwmpxEFD5*09rNxp-#7Q8G6fH z%S~gC>JV}><^;vRfFTYOnfUsDKNu=X-5!jA#_uM;R<~Yk`F!QE)r04mN!WP)Hb9kG zhnoTCA(|FY3+^J|C&O=6H=x#ZUX&s}2@Jox7@H_xN)#}0R|sxVel$@mM*NC-7QfMz zY+7Y(m;_18VrhO8a@L&IiHpgQ9LzL{-2k^ abEB2jiOzcQ*&5yFt1^knZkAy1P+Ox;v#oQbM{L5&ri)@Avo2HGJTj z;q1NdwSKkMj#5#QMMEY=hJu1Zlb4fHgMxxd|LZ2vXeJVnxV(VDwm&EB3~f>xpsqY_P?!p5VCvz-ck z<>nMkvEL^_0xz&?!uNe1KSsU~oZ9)qYqZx4GyYeO=|``C*vGx6|KC5af4)8_+u7L_ z&#(>Y*y-!(5y#08hP#mJ+r_azV8V*yO1qHK`JbO9>=6FAg#TA_Up{9elw-Udap;yc zJv`?ez?gP*Hk<}2^(1+@{j6HQbSYK`t2}3T;d4S6P3g2J+KjTciTcw`;Dfd2CX<|3 z^Y`yEs<`2W%{-`*9~F7BYnP72F}GO0eEH(JHGLAyM$OuB9$>q)VxN9LdT;N{nTqgEmvUJRnr7s=ydebbTA|wtDtsQ3KC_2SKTuTQHuio? z^wuG6SEatk)tbch+_SyqZ`tfeEDXB8l8zpJrSr(HriYkH$1+7_zx5gN5m_7(TTl1{?L2-tHW zdpIaR=*VoX3q76QLY#IAk3Eb38$3c&lcl}a2}e@0yQ|#dI@?Xjo~uNF92OH3BU6k8 z3!RQN?1BlqV*g#Mde9Y%Sd_-5)qgEkv{pKeg3^vAtHI%x<&mMew$@7U3qNj~c7=>_V-)noZ6nPLySfI`EB1!v9p z*YjI)smsK~Efb0bN2W|Mw2$0jIvX7uw4_kEQN7RmK^)gsgH9t+QBiFcbe+pm2t}qM zZ5kvACP)ejIq|Zf$}+JJ|DZkjT*zkcG#IzSl_gh+i8YJ;;8L14MZSEFfPlbueVe6( zG;L=2trQ*uXBworxmnk)dVz6E{uCwT4LO`9WhNR z#NeKkrUAHvhLxCW`sjg_QFD$=)DmbsetgABg|}9*qkFF6n1L^sMq;$NN><-i#>W+u ztDMgn(HaP^2J@{^J)~4iHnN+)H#g(8!wBm(zQ=ufZlw%St9ew~P}aG~qmLHK8^95B z)(QVXBNS0@w-NRd?F?<6tt|)H{x``)H}i%Vmn#&iR`q-zvj$vJ;MTu5nK#%tQ0z*W z7j(Xrzet~;&#$1As`gl8aWF%ZS!2m=Y*<)WLQ4?nm49u=Rna}*i>z_!nml8-b4sX+ z<&1rx;Vh-xFs@&!WJrUO`xmX^tGps^uhzFs!6tiSGwDy~2oKw0w~Zb%aQ}p3vbOV< zT+d~{Q|=M*ST#r@gDo*dsXR!%1~&h)du;ug7qy=am4Yvo8c}jxa7K!u-!LaXKR-7Y zx}=d%z?0i^O}*${y6_o~(j-$@BGYZebHP0mYPO5)%C@{vO>gAD9G#C^*sEQxp|sSs z_O1xknnTX|NiAk~7`nC5=WiV_Pi{mq^i{fipO$2nGh0-mHM>mQpwXGIOi4X>+i&wq zZa)|L631ZG*Y6O|SNGn}6Uej(V&>~WSGPcA1u{s-(b+uS(MN+mDxg7HU2fHHN`yL1 zNx=~-p0WPvmr!)Dy&WuJ#2#sQ&=p%uf1yB|()-2cC9dygdz%uq|L*SY`ubCcVwg=L z>J?^Jn|$_svlcVMw3O|g+o3)b@?xcF^P(m))kD;vT?UFOiVW^{Nl>v!=q!FeLo^$W zap@Z-d1$<{p_TE5Cr#u)5x2j~41I?I67m9mE-pdky<;KnHPy%iomy{x%8^f{q^C&wicRSi!z=-y6jb0i~ z{$7>gXFtKc!i-G2VEjj@!qU>Pzcj3|>;)CRB2H2mx{XSyMHiuH&+QQ@&S&Mq zk&fswsn2imZ*PxA5jFz_qCw3g0pA@)YHw#(y>uM8$kiXs6WWZQbKoamSCaUf7a|?0 zaJa3xCe3<>A5P&ct{yu}${qq5yc4Xj}eqJX{p&mJd>&bx&=)V z+RTJb8zXg{f$1b&1&d`)QPE=4s6z2Sazv5z=tM*n!TG-%DS{oD$l)ghkzYvVnkK1h z-M8aO2JTw*!Wzb`k2Su!2L+9U<<;mYgktZQJiV{iiKSq|4~LBA7ts&G^_D(OP+?@p zvXNi~AY zsKNgJKJDnO9(-YY3-;h$6*Ce8#G{Y{a`>UNt`Bm*hZTjV{lTU1%l`Nw@@Te9ESp)k z?$*a#Bc3rHc|D1cO_f=-ZWEf+*LS(jUbZdtshI1#uT{{6YN^vf=J3%0CGR>D%A#G1 zC8D=QoW)yvqz#0_qjm^8WY5#}gAZ$|r8ncr+`KXs!(+sS*yO@t8yF`S6LIEA;!{{* zk_xeW&QED|8%yQBj%HAlX48FXMQKjC!SkhZz%^4PBM~f4ZVA=8pho9)%zBvnO9~;L zrP}^!I5s3>cDops*KwLb%UWt~10N~B$mP}cft%^oVx34)rVDpd|MHKEjkENn((n`? zk$H;gXCYa;UJcuyHM=-+j6qVejS|?@9mjAVKQvQa7IXZfMy1MvwGgw>`nTMej7 zgDB^@F2lBqGL4uwbTHe}B~c^#28Bbu4gqxP)tv414TaEP6(85;&LXZ~FtWbyh&+@YsxpG-OZ(H-7U(=Dsambg#L z<+u17cQdCwi#p(3O$ouU+0>D~*KVBe#c zsEau7qo9_O6si81a-$xVF|o+3@zq*tC#bS4+So_)A!cN@_R>fBZV-D;OL8Fc&_2hd zH~}L6*!iIfZBUw1dZqfN2?pXZY@0<-Zy1JOH0heC$s?m2L#^Ip>jRZo>~HyB({`6qVNzYhh}sjE1bSU*&dQ8Jpbyx~QFSR@9Nql#%R- z9Km6HXQ*7=if^Izlj9V;My9T_%yw&VU-a6AS$~q;#_gsV(8)HLQftf8?{Jka7q4$|5&RkWxnD^GL=RJJZk_(u-0sO_@8Q<2_pl8 z0ykscA~hohWYKvTL%8DBDhfz$cmacX6-T7=g=fa`3=e-@ih-CfR&q;zN3>G~ZD%^d z?1l1apWK!<1B8erJz2p2uBiY)|4NlG94J*_D&~0Y`-|1zwQd*C>z3_Db!&XJ&h!=E z;*A&tVsTGl_QLxkrE)grr#_%FN;8ufN zKqZ7+Y(?&bx@(rSQ1Y75jYeqg{g2I9q;1LK?MXedD9X}rVpmLDYl>=Rm{W{D-Jv&( z%x2DPTZl%JXXQ&-kW{SJfD82Y_C^kq(AL&wOcM|gV8lfR9IJ|J@oj}Z8XX;7Nm*Hy zWJK}Z4=9n#8umRe6-o$l!(!nP%}=qQ_{FhU-KwG$_-0OUOMK(PKKXXi^QR(?!P#%5!pT-{Om z;9n{JF*_9@KxwVAKKvmO3#(@Q<8;$i*h{@DS9erVBo&UL8Y|WV^PBDaC*+e{jHs+= zNq1;*OmG8u$&k@h3JB*~7~L7Jh$?Onp*=@ly<&-!QT0L%tY{=w?YwH<_NyLUX(I{~ zv|cIi87rjC)R)$ykj=@mQHM+TbpY*qQ&ZEAA5>|Hla_ObZjCxki+MRY4Zb8XE9>jE z8jJ^XbMCVguydEn0cyYXOrc%sEy%rfwM(jqnILWJdTtR9NE4EKL1MFP)U z#?FrELYDD{FGpFSRE_?CCaNE1PWs5{jrL&NfEqYjC#Um^i;HHvC3tvvj!eZ$jXut} zW5)=p+o#*(xVX67+}!o`^?(2Vef##!yL02$ud#TUMMd@!(-g}OV++SwC68osdo0?= zD_%(&;*@3s#KO+#zAj(6G*MC`Txj)}%hbrdNb$T{INk7&f|y3*2dyuxcOYR7Quqf< zu_etaU*AE#M8)Pk6m+4R)MQ|jwo2+HrHI+*s;yg#M%*jE_KbHTHvv;0p+FC>T zrW%!(pO3&=uWUeXhlxdY#ztrR?Dc!sahWpXn+=%e@qPI(9*4so%G}xt= zWDt(l8S{Y)<%WMT&BoZsC|SSOZDVNLm+_;X9cLzL0WTXH8wbbi$_hUpA0Gz?aM1et zt9yHUGcz-fkB?_(XBQW29hI^P?}YuH-0bX7C?tyH~NzfmzS3pmYiMov*{XDQ#R|>%GAw71~i)~61jBM za>8YKHS2z5o3f`K2>m0}68O^=metG1K?g#AB1gjj4d+E5?=}@u1#u3?wEr3bNKS& z@8jdstj9eB^=sG2iNKt5`YCEKFETrpf{oD9MWcElJhnc{aNwPmFT~s7GKeyP117)K z?ki0x+u|EdV)=q>sqqJu>tjVVNx~V*XvcGSf1=h@=zHm>n}(Wm8nWLC_zo3Brw-}u zD5tisVQ2&C*$b|5p&M zoF8ecP8OcuZj#ms%weAOHY*zui`*Z4dDXQfcg=&u)iJ)N^qS^Gg=Ia^p5NiStzBKO z?oLh5-`bpZd#m+_$tiNeJ3y{@ODYG5^gF%4w^e>6bb zY51%&IUW{__;rQ(sSk1-WLK|X6G8JB+RS(ZMn)}&}jd;H6 z`T6lqpwi}LgH3klU|RRh{igTUc1HO8tCKi*K@LF=nTmNTYqBI1NX^Wmz)b-J|j zGO1eNr$?yaI+WrXXs3OqsuK#AefOnWvmNuiZw^xvzOuUS`XTy?H&IWTsq+1;klgEU z&2M&*y2>qcg!dcRd`kmzGCk_l&hr=7J(ISB8*`5Mc$-DYc}0N|oS04w&PsST`eEek z7Rh;HsS{X)<+oI$eu;K&@7Z{RP%PM)-jLK(2W^`Lm$bv5ot>Q6J2}1oG9D5V!t1!U zytZaH*;!X-XJ>zZe_vnH;meJUjmyi+!$X@bwIB$8m6oO{LS4yFG106J zc_Z(h<1^+I;l6%(vO3pxN$p1qNR~T~EI4B)Co*DUViJ=6eK!GNetsfpRsH`ytD~c% zp#8VEx1XN8S-${IDODRKvmvhw(M^Hn68vO<)QwONlP(O0&{ zs6~yMr^khUDD6B#?Qj?)5svh^n)IFgL*y^GR{2$~uTbd<#>SgI=biV*#;;H79-EyV z9n84Ma$Q>0n&wit0Wvid>tRQ4mYJ*G5YjCEJ#St$n+|$$Z@bHlTZzX@d zJ3us734k+DDF&<_{{CH!jh9z@!SJidRdddd}0xIy95`_-r*+Wabhd z(s-f6*HDN661(gS#U+S59W2)BfBg9I^z>A2sHajI7n(lw<(C^>BdwZe7U%5WD2mk5^^883?r_Z~psxXKgUC5u4wL{q*U1oM>?np4p zJc~AwGDL1ocg$jXzu;#?OrmSCJoi+MhbsY(P4`ii-1QKiZ9xp`u}0?A~8ivOH*v1Nt*L+6uMke#cfEAsOcA)z0Px6^X*ca%>{jZMS!L@Ev@(4wW* z!d-!=y;U&UB5zxeCNCBq^lSJNspEr#*{cc*3+y5(zj*6}JGGi$;x;cAEPX%hEV2!v< z#;eSSt`@!D1+dGKS+#W0g;KHXgJxJWT_Be_{nd;i`h0P=-Y$-rI=(kKISIM~=m~=N zMmae-fps8T_FNhASmdx+4Zm5_@6E4qJ!F> z_YU;u`N>I5P0h*K*=IMmoZQ?&R{Q40#>UQ0!%7Vx&Fz|rtK%11sWlH|vKk9uzt5K+a~sf>T*|Pj zWx+)rG;{Iw_5Ji|j_{3B!ge;(eL*y${#KPh53yKWr)_WcrD4(IT|g`?q0Y@1ws^Q)vFg~M?Zy|5nTLi zyl~4VcLoPtURH*w`ro~Z~nVlu;<_)k|BV~J8N6@ z6B^_<1Vc-aYp9cww>^9}%hifi#h#;Vu)K8caB)#fXE$RIJdmwJLibzme-{_dHa3T=PTj&nLcZ63 zCTC}7fB!bE)vDI2uGBbcKks6~MSlDCEf6i>C*WO4Nl63*1b|Xb8y%`Ev&=Sg@9?gS z^%kL^-z3k%u_0FZ)>x(vJ!pVO+mnThZ{3!*4Xmx z8_)w&Q&Xd(QQ>82oF8VxXbhA0U0lMUJZI%_$DRAnI3aI86i3XAGUesY?m24B53U zOD)^PVDG$`O_v{dQc$EA#^rIAt}9$MQFk&%&6zN%DeNL)Y(DIy_C z_YwVI%e(lzET)RfZbA}cQ8}wMj#9&9*1$?#5wMLwB@#!+k*Yo-K13+x@oROJmxl*5 zJ?1`ns{PmRT%T{5$J7ltSH36NdzZayo^2}AoQoERm>$bWFlLDnrrNor_{m#)T2(SI zULqf{D6_55R*z6yq+$(~OS}8~qyIgDWKml(RQ``M^+o^P%mv(^zpMkE8XSbfRy=eg zh8GCE1rIV;(1Vqg)&IVIbHTQGa`M9k;-*C0aU}xx`_v*t=R{0|OKgIM(WYHAOc@EZ zc~CxV>uPt|L5HAv=%arne}yHPR{GI_H+M>UW8Ty*8J%o-@jXO5J6Z@1fq+8NU%E{9F$g2 z7>^-%pZ?_w07C!2tDAjOK$48YbXbLk#&8awM--NcX4=<&|)!SWV z8*BK63HAd|Hp`dsL${~i5CmS(0xmo7FF&-Z-;$E{$eC`a>aMrBx>;Zg;Lsil1qDX> z)J2>n{ZYc*%Tz3DZgw{_+urE(;pF55)^^X8$Q>CMA?O(2fr}Wh6S#CBKmok2ZEWzE zJ%!HV_STU&7pHqC*FWgSV2dv%G4*LA7j=l)LvYd#T@fG3;ZZv3o$3e|w;tpNP|M!@U8?&tAt16^IvOOtDBYXCd%?s!JH zm8Lv<1zN@Nn3Be~5yZFN5=fCP$w8y@Yp;ySjUd3QY;l|=X&_0}VPbeSf$5eaZHS>{ z7@(apHHMOppFKRFL+yFm!DICFBphZ(6R#!FCU*Se*k#B*C~BINg;)^h?&XDKmz@av z?BnenJ-GezrwU-Nt%e^zfFz4=D+Ew9X&Ey}DbeLZnh+P~_jFjk<=BER)ZRx$62?=C z#t>~i_!Y_F4BfsiaeB{nC?hW~&wzDladB~d9qr@Z^D`;Kb9#C@z-gdPxwzc?{Wq4D zB5-wZr9mOAtgcET#(kDK&|^`XtyeC@ZS%+6nJ>{^>&J|DS3j#1zaei1Q!b><%}rxw zd_Xy8Ypt9@LTlhJFsO;UK7YcM&cH_>jN)GF@WR=cIXpbf=5+#22^=+pFd=GB8Q)wu zDVDtb!pF?id470TPx2NLd~Ca`(YIR3;~?Ga?hXL_|M~N0Pft%@-wq8%={maadbN6X zGlSQgFRKAQ&kyWohbkMPbPrf&k3dLnZ^LXk*w~0iHCmQ6t>TNmHs(x5s!F2ozi(v^ zgx`B`E1|bq;M=1}c!xDd9@rSQHCn6x=2)_J zaYD$3_c6T)u+$m^jZM4a)oz_)plVBX*A)q>5ofqM>yagRu{o@ne7~*$jB~ z6Ubd;AA~@MLRI!MsmizdV=%#~-%NnQoZEFMnLF(20&2PuSbXfoH@xC1|?=herF7$V5G6=F$rylcKChQ~LHRV?IqF#68Z| z0Bb3q0gC||O-M*cSok0KR$=d(1Mu0}>f!sroQgF$c}~L>Y~CDibTn4|ZBM>m%raZ2 z68&=G?O9WCF;)I__x*+sFxvh7{X>K|6FrfYTGcM3P7V%$Qvv$`mV3C|`Qfz5W9}R` z%c-j$714o1C+tt7K;=i-h?3_sna&t*nzh;G_jf3cL>!Zpl+@nQacXjM(50iX(KMD{ zP!O;*nB)LjUaB|F&&mQW>S_A*QB*YG#TRI~+v6o;zuSe;QF-#WBHBlIG<2m*dojyt z-;!jPs|Z?MZ+u1aCjmoSVcj8IU}*@7ijt9%o}8YBO#_k+LBIfPVbtMi8v6(^yzB2- zI}k;tO(>h#trPJs-?-eobnrw=%&(BX7`e8q0x{(pHU{__&j2| z@-`9H5;ZqL#^Zw1(FSC=bwZr<9jOjssqNJ_3Job~YG3HdPV3j3jq@ zzqT2~J76n=j&#YEn-um7BrmkEs@kX?*i{OF;m(wi09(5XG_Fzp-y04Oj{^e(pje#N zT7t>~LFd)g)j>+Xc67uRhjHKMxDL9FJx7y=`?g@YHbtOJcNJd3rjTJ-s=%NMF2B^o zJKEXx3j==7p6tW&y4dOk&cw=!F81&B^|d`ujJzpGgN8Epr}K*^D07wGGcy-3q%*0` zUbzKkRpl)yZ1;u{C-rIE>! zXf-%HI2hS;^_<$;+WIdn_%|o|PhDAg8YED~GbT}`?zGGy2*|Ty92W09`U{rK;w?w< zc^4M9cr?V_-Q5kl{oh)sfxD{cSY2KQ5w2XR8UW3IgM)+jn*rTm{i?AM+AdG#`&Zll z4V(D1agx#AJp)YzR3M|*i9oY$jgcoa7E7u0&&H(6+TBE*p~VUp0)=#942%-<9>O<1 zAQdwMqyavbmVb5-192!nRKkP(iD$_a>!{3y_~llt3^5~% z=+ZM!J+Y2tK{W-F9~>P8ql5da_!7Irmof@+#7^&9y2xPbaXf2__-?JmmWy7GxmDlmNJP0GX7J*s$V-Dis=x zS^|VSw5wSqXVQ*w=3*n=jpN<$tW}C`<#UI?Ci3vyz5G2_R#bHR{5c-XV&dX@Uwem$ z-bYan23nbA1HJ!xDf%*8-~IA57()PZ7RhEkY1Zx}QolFyeT0NaY4COMo?^R=^VDi0 z&NOn^o2{Sre>K|y(fh-3-4+0ZvPyYJTU%RudrZ#*$n`)x#z7#CSulL^XEOUgMtBw< z`Te^;0xZG-*w(A<^8c45$n9zw!J3Cf%y{0!rLQK#t)Q2Evqcog$$GXvH^<4vb@LxD zy}tadnBp7?yxjlu2Ol4QD*%9aZC#yNU1>QD!#%)@t4Cje6hKe`Rmi*r`nP%kAPiF) zvVzP*J@P1-IWC!I~ELqG*##jbghUw-pv3!Bny%mF82U_WO!V zBYiP{S$1#dF&FsY;c<^Z<{Q{!->5SX6CWQBWFoj{w)_3vU07P91Mf+jxze>l9ZVe? z-n$Vw4Jt$!OkK$=kIv(5muPU}1%mM$N&| z6w#ZF+lb^xu;yp}?~|1UOe)6^c?Ez7pjD<7(G;(|ugvXA%?&Dc@3+c$#T-)J3;ioW zg>lIoH3y9*wjt;BpG*KY34q?;^X>$Twifv(FW<-yJlt%&g#yz%5Vuw_MqRs^#$Ui3 zvavbu451+!R9pZJq{Wy9Kp5yHjIIA7`qkX=Jy0yrzAEUYs5?dEswY^q^T5M`OrYyw zI|gKKyu1kG^8ZdoxX~+EFFyyd>|c9%vM^>Lej?U4XZ3y4$;Za_b76s-j}K%H*I>XH z@UkBeJ^{2{Sh!s4_y24nu)thQlK(>HRB?#gh}m~I%y8c~q9Fe&QI|U#D*GwmV49FMTb=n+0*7K;K54Q164|W0d{|t?JX06LL>b zU}Dvw+0FRlJunZ*?yiw20vhk6U5pp?=JUJ3^T8k!k-GmxI*d6I$rErr$vX{l#j9QU zTCMh$7O|WEA`3cod*C)|`%c)ObS~j6bH(ifh zvXf-DXh6-DHfh-$otT`iL{6g*N(Fetn-#14^-doGSxKUg08zmQpMW6X_3!3;7M9%n z{7)Jc0!2OO(Y7RU@W{W|gPOm6w{vyy+>_oJZ!ion;ygTOt|m&1WZ zD7{^+(9&=e??{|6Eqd`vMbK;yF_DJX9>fU=d&}2)n>+ z5@z}taKjK*#e5m)H6ZCOsyjsRcNEuCkDVK^2{np``AWl}2)wt!;0!$>mlq=o(0j+H zeI?N9K@H&CANTVE{@pHt+zbT;1=tqU>`xg&A~=vHJmL?ziw2zB2o`m=Sf%ulNTIB% zXQ3H9)Y`yI0~!^`6%iC%-Q1L|5B(`^}2>5GML4YoqLveJnc3;kKj^&H0ZzgoJ_EqJ%HNGl0AR ze4Mvp*#Vy1diw#158Npp-bEi4XHU9n3ql)cE0Bb^CpGIifTq=9261gFgy#9~>guZj zD+U@`?;H$^%^jA4=6;Z`IGcn~@rA7PhZD$WXGVfES;o-UY^8GWlz}4vR(eYllu6J< zO*04+obfNC-2~Pb7t=@06N`e^4D|IS>8q23DBruv{+`K4%8p;tGB8;>al|NbMuimu zzyXqCJWzCv$Vy;4=`!$RV@65VUe!nKec> zWL|MwXe8F$3?Q7m{f?6I!QAQ>LR&pZOF23Jljmn=jy?Zvu!HIZOao?WAftkj{e;PU z3a@v)h<6X(d(hVhj|!8ciB$CM_qFXz}1{!zUxQ zseI5wet+Co#d2oeCRfI)qdn=E@)iV_QnDBaj zxC9RdOyf>YP7V&NeS8FU2r_*_qxig++9dd?STqejL1-DBJ=$V=H0xwWLnWBsHp%r^ zabyC#Y48%t;ySgyy>1c-gvX)5wdsM#y3eN~YWU8G zi?>y%(BItMZM3-TfF+NsD_6j{_V%br!h9{j2n-RL>#NS_)i3@1`!^vze)f>-S>q$> zSBv}eO)^5ljEszf^Yio5)8;z#n2$wZo?wo^cnU~%ZH;v7K2g@hEoLxe(l(@uH}Rvt z92?_&R^=t6Ys(mfG+-)LWS$}cHvU0z%ea5dx z>}UHjj)saF8y^ocB>>`}oEH}0evkaJ(erO$Wcz#w@+v@ECnuPR6fERP=2u*y=n>6a40CNZRj!yh_woOjfgQM`|#Z9{Ypv(!0H2df4=C) z0LK8T#kTnu7-23h;;&=>$|bzc8Q*hlCB?U|g;Qp~FRV#Qwkals-X#i~(Ug~oWT?U6 zE!cvRW&za)1Q(#H`G0KLeQY3ph&5p1pX~?lwlE>BVc{+6p?2lu<%x)hyxhzw=ZpCL znwh!0T{7-}8}Z{KwVo318~%ai$vVdkIA{emYBGQvE_R@&L34lr7YIaP$Uc4g1fyq4A`##=x-d z01b@ZFC1!)t-jUK$Vy|T71Z~|@gZDf(w|jURVrwZk`ouKs1&UbzM=UABpx^S0$2&a z4hIhHKigx#S{#6ydJjgdV233)_pOE@G^|Y9FO7N??>?6qS4XNpawo*S@cM94(_JG#3Qs7V8qtm1Ks` z+4v3Pv5gCDvwe?cTzN>jA>_4uY*B<9dscq5R7QX?`LYppeRXnfz2CBPbx|g_xphU- z7vT0!I@fbkSHSQ(yJ&wzMYT(03MVR2s|1>gogKKH8BimR?9Ly^rP)+*7i_svYrw_A zJ+XCT^zH+kUG8FHVgeNkNE$r36?^>k9uTYp_J3qRHskgyApbCnO=)a`1|F2H-|QQ4 zSS9|jAxB(kP=Mf9^zXu3`gwC;h7SAab7cIGvT_;I#*UZjwY9XiETLY46kCeysS!%E z;GwaM7c)a9B-N)1^j^R)40r^f5F()q7VtA9AODjz&dzLz!ChS<==*^?@i~^5u*+1^_;|i2PYG(H zJMA@m2Mit$M$9h8JJBXE+F5LZfAVcxBAq)ov z`CpTi$Z<s?7Z z;XGv20y{Db8ItXo;Z^8!;THGYw)sRvMK{;hfc%g!@b8y3S5K{>4T&P7+u733SuO#!WyYt-cDcaLYpkZppo+Q z)-Br+Q-dec=v!YAvi6iv;y8HkUYp6`x`YwE?CE{gECDt)6=wWG@xnns`kCSC7DM}D z_hK>(9tfjjByoC6$L@Tal^S3x;2C&hzzLuQzy#^@C_5kuM(XY$+=#sfeV5eA0s->=Xitne-+rA&^eS zDg--uec_0qGB-k#qOPA0$A!3Md(O4>xfl3UFlH%Ls|2r@y-|OC7#8jFz6EL@iGn7r zsgXqZILcs_$MqEh3>IGh-4729k?(;B7c5TrgNOxy`{}6z2lLrIjJ+uSry*>eZ`c-^ zYZVMwa#lc&Wb@|3jQZ7;G43*l zL10;5Q?rGM>nBJcRu%m8TLzK$B`yCW!Nm-Mt>8z%o?wFrEMUpXBFK@&MFBzu`V%yl zi<*Oe6jBH+E+T9y0igD7p%`M_xld>Mq52b1crAQX<;_)50KjL^Q(qSC^!Q(D9sfgl64@#3# zb@TG#=i&m3k-!Sl($U#9>v?$a%7lc~E!AmNcY?Xy^|UBhCI#E@Qr(mvG*t@Rt(3^f z$of};Rg)p5n1Q|Nl9jJtr~X(rDSGryhMzUaC0N&17sMOBO;3_kcgAp~Cv-P6;7E2I zYFh)_OA_Ol!3ZD}{4eKFPykN|5nUSlE!=afU&c&qHNuC%JjQl2q)%mYhkzS-&JP z=jY|g>`cUw@PbW4N3cxu{CEv!3*M`=m7!+ZyXP~aaB!svdyHNDU?Jl62#;}HW!Kna z$D2@0jr=0u5f;}0Rvc=H6;)Cr@Xz%l2#IR7R4wIHCCOD#VAYJy9@!e1sLc>5-1a?G zAj5St=!WK?@c8<`ZsO_rImony{GSQ4V$QxM{lTKK7g5J4sPQ~FJ%x+u*lPnGAT~6rfyrAid%-@Jr*(~yE zN!PQdI~$)UJ(vExY*IM!WjI6Oieuw8BLU0}P7vsLu&10_+r!0$`f; z?j5CU{KJ2#7FcToL)%6j(zkD=b8-800U?4sbLE>A_|A%cZ9ZqgXEAuoEMrL&o=oN~ z>8N66VnNZoo0?cl!w*D}_%4Pyp98?~v#l)}+Dgx&l56_5A{XM5Us0%@p_JD&IawuE z_$F)3Z?*=eOJ*7NKOOxb3H`< zo_qtNvlB4xGXcmo-#8r!JLuVTtyw20)UR zmB(Lg0nxYC9S~q|&m6x4k|uy?AUX90f5kRL@@p(-I6X@tN{}ESWl0emYVW#CH1-9} zv(SA0P9kbaXwUe6Nk2Fou#*Ee+MxKZ$=@K~r!vtZNMQ9;FW3TV_P#yR1V{*`A7B^o z#uzLoq(Ol5_>b2=eL8uLE#ZUDF4CPaROwQ!tT>f(l@`JMOi?uqjh~DV*2Jo_Q!6fF#rvG0M z)-Eh8w2@qpwm$#(@UB8m=kgJ8+~f1-zVR@3Adta=$H64fv20$6H>H9nNo=p|1WHQb z=Ded`h>e_IRZife@?E7L<93CVilA}AezJf)<36^5Q5N!JaQ$Gq@xJ@{3V@KPprE7| zmW}El4L2!&dcmc^a(MQ)>4s0K6HDH^eSx-PZ@WUN41vFT`ui7JE0H@DEfQYw<#Lz| zr1a_*@5snLR#3=%9-bQb=E{}nzK3m_v{JHfWr&yH9;cI6q2?eif#79IPk0&y5`sd< zbP`!RsP;f|Zf8DNnGcOJqttP-EKkM1oec8d?AV8X&dJF|l5c8gxHy<81~zAEO3BUv zpj!k$dQ!uCmUIoZQ=h*+|GGD(2n`!>UNG7;ph+F~8LbrXp5go+IZ4xM-rYUAlv|hyl1l4od7Uj23y=c^O1WUdQZNM zuqwSAI{O;jM+?DH)1&XUI5p0cq zL?u=QiUt^I@GOBtZv!Xu?c1EQ@Bz=Eo!M<6iKHpDpb|P#31fy&KaS@SzqlgWK#uN~ zo@`As*a`Y~P@Lerg=#PJun7!eMF9}D-R{SWATrzhx4sF65nBf2sXIlX2s7_eQ1J&j z#^>Y=1wN$AE8o0q=YgrgPPl!Fv19F|<+lU4S@lybZEYZ3#rG0z=#h>Uh96B> zNdTKm{O4yZI`xLefeK0~1Ityv7I?AU-+HkC!09)M1t=0CPV= z8tVmJ0|Ns+z2Gd3Xv&{LODTlBQ?Q|Ni1q)?w)&%F#ULQLvn|AOi84?QIGIXla1{tN zT5KK)a~voft7sX8e4n+jEv-p*mE@HevkDQcf^GN%@&hx(r%N^h2@lE!8RQSMEtiYR zB?D(2&P?HaB2C}F$H&I{f}K1tnmal?tXw)KgnV*#4qOZzu{etrERz4I3Rz83_-q1s z{y&z!GAygDYnLwR?rxBdhmdXo>5}e}PDQ%AK|<+9S^?S8sic&MN(+KWDj?z+yx-x6 zUf168#9C{PImTTR`gouQN9_FT7QO?+15{{njX-d=uCNqq!32tU=(O1RWri)aknKo! zRPt`>69rm!?h(e4Cv=xn&@2Ff7Iv8zb_+#<1bHz4AH-2^J6hn-E!LQq-@gr zEXazC+_a4bj1S$2o)$lUK9W#WsmJwVdhmfl3c>WFzxBOW^&m%xBVd5i8F|J;B!Gf4 z^&%sKolE?54B?y1C8=PDnvmh9Q%V{xOU*ic#^%e+r^lT`7y$l%*dx;btpN=bhW_R= z&;fuH6b31VkRxQAE?xUO2$t-W2vb<#gP_>|N7u125m8qo-BORyG|Jktza%Lwt&}5F z_7&@1 zc>*|FgEo?JrnCGn%KIm?sthmzfkA`W&IdpRSk+F`&r7vcD_^M^OxinU3MFcrY$c{# z_D*~*p_OSfs$b__g9Zg)1x~C;*y^FNg$fRc6cFQpU-e!j^>&8+liA6X2|n2h?EUi@ znntjEs(e*bBghq0!Jy(G#vVlBZEQGjKIbVRhRYXMOtk z&35<=n^ytTj>|EqcbA!gBM0dk#&^pMTXq(crOgR746ajHwlI9k*{@JWnS(3nJ3OD_ z9mz?aH|fsYr)n>>7UBiOQ6t3^+HUa8O_cx){Vq{D9^M5;C^T8YUgd;2RySnEM(USN zc`lxwlg5Vw-I~FQQ%of`V}YfgE`Vi#t9V-%pm&4;F^)BSN`MGN1R!Ah3;&bSuzwvp z|M$t+-t9!Ma$--zlClK0?xBK@X_3!qv6yw5qdl@8LYv=!ch;+{i#DZdNT(dUyVKGG z!i5j50+(uSv9OB)P!qLy4a9x#)pwq3I{AKm)Y?b;3wyhK4bk?US{HKAKm%m$OsB$0 z_6P+@ZA;q$?{iE3;yKaK%iMf}M8_E@hMoMtm88CdNG~~!6@kFcYlkPjiWrPWauWRR;liZ{`&x% zmyauxyhBalEQC&-bnou24>g-NZMj(b1A)U;g=PtMk~NcY&^=+^n}nGgUP5gb=9@V* zU7wT1)dsQbYv$TD>_NiewC>**b<1|NqqjIF5!$vj;GY1V183&paR`eTP;Fr1VELez z@>{)CT2=l*^N0XhQY6qQP?6DHzom{S4a+a}+t%sjuU`S})QZiNcHqmH32{hXFK*Ek z5?43Q{P&pAK@C+<`TAk40r-!>*Ve$pW0!Q1g`nzm9f`q6BzjwBnLK>V7Ur!<5~dcn z&?!ez+p<1FSgMEiBi=a#b~Pv0X?BZ895ieAhTJ?v#yDWh*es z`@Qu>ZlNV5=5R~lVrY0XvlJKZT&fdZi1UHm#UJ;`qmxP2Qf4fPjg{N+UKzpXquFKA z_T?>v-#!kfGn>oBJIW~SY5*yUW)tp}TYoz`BHY|Xps;xjs_J{xNj>7+?B;M8<3u?N zL(QYE=p746^2aDiR912Xjf1L+%FQp&f8-nl%qvZ}Gb<}l&{n^G4f{4l$7(CVTWi?_ zQ*+rG6($$;xK-x(rQAq{Z9*cC5!QRP$83sJ!D_}i^9d92K3%wIfCBUe9oqs<f$0w@l-o@MOj^z&z&67`&>*GP{PBd*qJaIc7LG@i zbbH>A$Bje2bTcR0LKxSQ_nmQvO#gX8TEKID_MGBB*4D9Wfo|mL+zl5~w5$uYww#GP zzSS|JvdHuEIF;tLZ(xPtO}am-N^5Mo(cMErZs}efPHQaWfYDil-TOl*dbOlzR7?*T z)48xLd8&OZy6&t+b|LW+Y!fA$W!UbYOKQl$4$ZX!e*m8EEs2io%zE*0VIigs^LFq8 zamuo2b1CW%n4D*d8x+|3YfygS5|ep*=pVrqvEBuMKGCD0YZ%mSMk zxkc5YS%-gUEdNUczxln!?ERxsNhU0eUP2;UMs0sf z)@lu)XFpbOsbXleP49{vj!E+vvF`P;|K~dZUQz5=AAGOojQ{ z$Ac-68EX}AQRwu5H-Uw&^p7xDWduK}Mxzp%fbRzf*U(7=zVKW&?CpR5r7(%TAJHu_ zk!YS4uC`UjC22G2uD5$;{9vTqtZZyVg^}~w9kh6;gni?12|$hj>2FV8A`r-`fA;hW zMfnmIB?C<_i&~S$<{qE7v}+^rqv1EgL;I?La+7`rsB zxmD~)q_#zHtc0G|TdmvU_uP?JxcKV)%`ju2(uV>!H;B}ss8Tzc*((JT!{nC}H8nNJY^6i7Fj~Jp+J*Y|3~gW(@7{AkzA;S+mLdVnEzB69aK4PsK}BVcEpO zgZt<^-M8V_GcreKC>D2KQuU^+B5T)0klKF#G{jed{AfTz+MCu+2JO+R&XrWp5IGZx z8o8c#DZ3gk&hi^!uaq5mLOE?Pk=nLk?Jpu&SbVy?c!m|%KEf1X0svg!jEAN|^sH}i zZ~{gTbTCXP6kUFNI5J&hm&tJJUFrn{r%WMq41Nkd-}Xy5esmA8u_--t{BVN3 zxB`v`@P~m7|JG&$PZWJJxBZoF^(pXLKYRbtlgVi?v7&0+^BCInFx=Wg-={SlBOE|; zzf;92O2Pihb z0%!Z>i=~By!!O|Jx8v51ZL}3kOmXwtm|<|m??An%XTvyrkVMG>s z3}u5LJtZYb#?gO@m%aG)`!|rxpFeALMR2#&f1b1#vH}$p7{Wl}aH~beBOm}HjHz4F z@P@I~Q}i1_A7}AW(l^U_IrHTO?7V&(w%H<$6}8e`B|NXk+pQ#v0TESQt9bpI;>$9i zCIEEZKFlE@@1-L#usI)KE0PJeeAulBzOdJjn8ca>V}*y`?-BlakQ0AH@-pNGK*L+a z#Wu~GOLJYtILBXKs&D$aK&2Y9Rn4T5m$Hu~qHCeeI6G%!tF&?^iBnb8j^GR@D8dLm z`T)!)H|M=KOW;4?o5~ru0!b?@RajKeTVn?NCYslH-#P!iL!IM6p4NhLw92@!$hjVx zjp6RjEk+9aJA{l#xR1R8Nbq%gJ7fol$a}F>sJvo{)BDws{UQCiHOq(yn-i<@J2?l? z`7O8}F(((2MG3I}Wt$<^_>WYEo7^B~#&ZzW2BEE~SwciLmwAINpQoYCROzGFf#%S} zn4&D7o}2xS^GZ4sTzrGY0e1R=pXojr5;--#Dd$A8jAlc6W^%Q{Wymb-_RM-cg!*6WFOBjUx5C+ne6g=9l$@}tJ+EpDy@0dQQyyQ$2*{lpHon{)@ z!##c{V5&7ZYU}6^x&lz=sLU(t`UM54q1U#i#Z)eSRNTViVW;L4AkRy3{iBE9!Sbyx z#F(z6Nrkop#ts-fax}n*0ZK2h5dvcmq7?`=V0G?8$5I8l)Asr<h+o!NqqC7yb%54#o!WnLB8L zi9e+u@a0yRuqFtnuwoLc31?yeTGc|9q-?*zwGXT;7{Z`yNZucQ&G#;xkhDF9D8j>H z3wzog1G9DmkqQeG1g~JF!7xVK{!mJ55&x*QvM}iktz=Q4w#GnW@XtN_jQvXz*39&u z;g8T*uvxD9S(@8tE+%k)Ru(<0Jr@ys7J5EMu0&=2rBC^lf=jt!SUIGYj;4gO0`)rc z;ln9l=9_+AN*X}q>t15{(#DLyR0UNL_78--Kgc>r!J&+7jw$cu;}a>&(qrnrnt{`z zrm(*=@fMVbXQe_sKA3jt_9?z!`^5mh_47Ns`TOTqY#aLX%RPg<@TzfR;7a37TN?5n zyzz?LS*aM;6wxv0zZ*Mo{NBqJ%Y4>ZMD1@#YR4x+6!=zFXep?j&i}`&TFb6_B(pmd)p$S|)!WH$j#Bxt`42Zpobk z!;ej+kJJd)-F*#pmV}=!7g*46o?>vsuXg+MU`77Vje_}!wa5ia_-J33^mqK}yIF3d zyo`5s!fFkcMz|EE_7;Tbqo`{&Z(TdgY7O8n3B+Yq(Xa2tpfz;31WqKm;^T#4j5qWO zVn_^(#he|p-Py*{^U!+TH>~&x=2VdH&(7*{CTmps0LcVv>-B5n`h|90@?W`i%rEbz z_YgP$;%JnNTlo)>dM5_uYCzo%=b=!icSjKnLe6*P*`{F2fxEA>LW0&0NhRDl3X?|w zCs__)sfZxzn=m4Hkr>UbA`6}C-?=>voj$khCg_7DW9pQpCKMuc`5r>Tn+7Y#s zJI`+Ad~pn+&>bv){Mcf)cZ7k7*<|rXOj;V3a)WWRT}q680ZBTq zztgrv$Bf|R)}6;z^7;#uOC%isaqUwdf##1oL9x?WJtnM)>RB#CaIqAcVh<%Nl)LTpw|iK&jHQ<4HGASibJ-8`jbJKve4!R=La zF;GyZ=>JFtg1r#+y3gVD^*+p^Q6zw>b!3?6_ogL_^lsxDEbJi_lYOd~5RX3)Z}>G2ZS zG213kqkAB5AIOx{({-|>^^j9PKnr@WiBk8*H{+5yOJr-7XlZE)^TBPLi<48FXbO&r zauJy#g8T!*XIwy2$L5qLq!0RpM} ztG92bmJ2yP8qQO@jCKqCqke-yRl|_>yoDmU&XD3`XU!noOc1R?P zOF`}ir8+aOKZL|Jj5=v`$c?5KCJU#MQBc1qp+!ha!gjv^y3@Wsq)ldc&Y=c17Xleb z<8eiJpcX4a*=}t56B$pdB1WO~%^RAyPO!ZI^af=gOg72J10>ezy3WmChU@8G@g*Yp z7Om(SVjP#{mf_H*;>u5S0BPJNwSRsEepFKB4znLnq;{{$jTGt04WsM2q8MR)tcl!t zMM6VCnw;g2t+FN1cx}SGaLp9k0v_{rxE1JW>36+YV`F2J1z}zVQ2;31XO02Kt@+#i z0K>if9;S&98`gh)&{*r;79wY$HUqF%&c5@w^BsE0RFzo-~v0OI)4;79PKCIX& z>$UeRyv!rr8hdIQ#fEsGI$(0_3vf-eZvSgxX?Y0TTvJojV=qnK{5W}Im1k=Ka&PK? zcvfKOAm?Y=sK~e8sBOPh&n+azzowx3PAQF#47i66*shP7x;;iNC+uZ&c;{;k9HISP zcBhO5b)Xh$c4GuB0qTnf7CbB%RvM1mb1#i$nCgeLWM2DIF%qDRp_e&$gM4{2MMt3H z&71nsN;xNAw=H|Q!FYVT@YhtP+~J5%eQ&gWnEiaMkvr1j0n&S@U+?lz#KpFbj&u^x z+IS80Ml*lmSD5o{cT1xzW$&&t=OVosFi)6_Cs$=#ftzz{hPaJa0YP$9av3MMPZ2UQ zD%JWeCdp;spWcNQ^;XY8h&-?lPI}N?LZJoe*=)HgrLwwuU1o8RvGADwIz3JA!X@1?+{pSanbXrE!JD0(OnUHs z{?{951i_)9&|N0~8wB8>l>wvDD}yz5(|)8mKXpPhUJ_GCeU zTBt;~HaA$!Km|O1POtVv(@7zJ!VD~UxM^%Jra?^%eUkt#aPQ%~gal6R*7G=4L@VWs0D3$>5cmpD7#4-%T zZ6>_T#%ajM(l)U_(UsaM@A`bZ_i0Onk1zR`j7#K$Ha;KXq0x%%#1 zfx}ocVPHJkG6r_i3VgPc;{WRn46CxOBJT4L2XaeU;|50}VWzX78Z;UO(<9MrWmoPM zy4Iw;mupnqwi(8*`W#Lv$J=E&ac9%~!5q^`>t#qN#1m{sH(B+9d`blqKboCaxY5Mu zYW9R&fyHZ(fK;Y}lgF}??2VD^lj*Y?CDq%YB4?*a?nshfqp~+d!oR$I4{-K6^yWHA z4o!Oo3(xOH7kbM}r1;LI9-nctsU=Bq+^R2N(F>|{=vZx-%z-dUt_oOppfo{m3P$@< z5rV5f@T`E7_g0+-Bj3r1(3Sz`-IyJ2L02|L((#Xh6BJeBZ?*#n2TxD%DQ&>p?gusp zz;f+G)&a?du@2;TU#-l|<+xzx1N~cg*&50S-`mM=QBAW>=wF~LuYUX}=!1o#F7DOk z`{1?mIBuRG#xz>j#y>mpw%}WDrwcWZ9MzfT{&P?rU7~fzx zh2{>l*E-aSAD25ad=#nOTPae#fAVw``>P|LRB=pn5>ICPW(bt7{Z(WHoi0eB#Kqw^ z!S4qBvd3yC1lc?WO(wKhu-$Bv&`U=XFXDdV)@I)^xXJ34t`j!SQQ7bsEV zXma@Bi3FLBnT5r0#yO7nk9R0WI@!_6nXdqw{-bZ0ftKmi>ht}sudWg?a|&?FAZ>$9 z0Xj6Vhu$~)ko5%?*qxmnFBL?3^fN7J#c%uRR2yG`Avw-__wFHvnbdL%Hm#hAazr!s zpDqn(52J5$6)+Mh>IbJ_27r@gOxqr z(li94zdeb`P@k?)*}rz5KStBLu;9!4uy+Rd$`KUnz#3acnnT&^L0Rh^WZDU^xXRHPgHjwmI>52elngOaLvjv$KDB`!va# zqa%Egg9)p8w3Ud$9_`D6r`~LLn(c=WKjQfXcL<_>Lu(+2aD!HAHUk={+dP}=Nzc$I zrr36AuPe4EN=$YgMTOV+6ftaw?~XNZkrqo>xG++j1Bd2LFGFC{05N%~65N>?7wlwT zFUx~fVZ<@C-1!aXP;XjholESA?GsAtU=cJFv2_{{n;Ca}^M=A*4^jj{l?QY(Xdk9u$bMZ}Q4m1ZC^Kt>mH`xfk32kDt1_%L#%%%;L%);* zb|iPhVQWxVN0?@DNcF9P33`SgH>4~_ZZ|TG+W`X`WEzv0#$ffH)AD6=ajXwO^qqkk?GXXt$1S`xdI0;-(r@e z-+-MD?k1KUP~9?NH?+^5JTf^U9m&Z=FPTwW${|%YRNa%4AAjnSJoJQa9Ld%hcF?<} zUYj6A&{+a~Y6=UY3xoRMwH1#C8W#>jdxcz}yzk`wiSJbk;*10@DIKSv5yu?vUR zH&FIK5(1!1dXC`GL#PX3p&*(jnhk8WbgmQDH7!bW&ZK`2d?qr5+%Z_JHa1KzrtKcp zjL}0}2?K+w3hp+5qlwH@X?@r}TL5u`drclA7%Y-zjkZT#jYd)u62X6dH9Gy^s@Cb- z;4Cod77mr>H>WYyY&D1@N8abP#xLQ$0b2bw1O>wBW~bnK0$_f-nQe}ydE+2lIaO3t z8lby;qa&Q3+&G_RrnJ8r-=2K8e773q*BObhW>LSrxeAB&^K!W%kmHoF^_n$q;6_1d zM5IDm7dXa<2y`A{B1c@vR@M91AAkyqU8glY(R}`3nTkSd_&4Vb?qK?7Qg2$GZ~B^r z7365-vkVDqz`w{w^TuQt$kK#jRqxNxIhNt{^PB~oP zGrwQB3H4NuHRk6VMgAw^!Py1K2M0U5R{=WZTeC(`poQIBeggv^EByd>fF(ag!^g)S zcLO5oO*AksNH8oe>*Y?^%_a76y^cPEyZZfmTxX;a683387ee6|`7L|GZ|-;LyRFmo z*GS6Bjt1X_g$h@o2x*r;bhC-|G2DSH!YXVvy(2U%JlsZsBD%A+= zRRRjHIGd4N`%XS?-lUI#VpIiv;;YG3s=@B*oP`OOY=XmM22_4;T7G{1O>=%Vby_lw zG^V>ze+C7HJ|cia8gV$34``kZ8cFcZ31qFx-gj!|V<77K5X8KvvBl?AA-|Sb?ffx= z>LMDpSs02ynPhz{xd4C~D>hROPay1_v-EmZJO1MLpFdTfQFc3myfM+d>Tz5I?x54M zVj$7|!;c#Iv#exk>MGaqwaZ#dWg-jL3s(dIlh20c${Ee!kp&&Z1;^v~Ii9+d8;P z7lMybk*x3C)U)=qDyJ%hXjJfzR>!gl9`y>cb0#egkGyOw(q6i_)(Z-a#Y7IM{l;|ZW36`Za>QRueo_AM1iEwZ z!EqRcTpy2uNzau>zf4a@iTFoaCK2y2`uwwuRCx!!)dUeVR^jL$&^^~1H$gW7J_86P zgXks^u>XPlx1D8Vwii@ozkC1v1^YapsXBf!;Ueq_EjRdg7g+_iy@}}^I^*IQ-hG_E zau%VM98wIlO^z^yPqU|68Qs3N6YM}40i74Yre|%2R@b30{FbhN^_ZP7mP!K zXc)t$h_K(cp7+N0!4Cz`ns>6Lh8GhF(CF=|bA`gcH-hpJ5!@C-sXPnf`Q2U4*qb#h zA;i6QR1{+pr!2!O`UvLZMF`%#jb4JF0+6tR&lehoDn6g}j630R&ryvb&l0+Nuqr{$tFCYd?7gpE#kz*9h({DAW@YM2HC`xgJ=z$M zWEmMm|A#l&Y`_g_M!gR;mkK@3P8l9|UrfUY6KREFY!n+xMtP9#L7QKBLwJf0=L9us z2xoenJJc+F*KRcTOC$2T-oTQ4FU+K)$#Mo%tJfWjM* zrx_zv{0eeoz{NJPoqIw+6QE;95DuNeo*b;RbM`$rv0 zQ-bWY;tZhR_|3Ti0f=L?w6gk_2l`boGt)-LA6vq_-4ps(@(}Efp3nf!KkUflNVPD= zIL7=O-aFtYm&&UBi#kJm>^md-a@%Ubx9|}UGoizXNG8tOd8XRZbrB`dGIW71Kwu2g zPvc_M%6`{iC9y@?XR$dJbflQ4m>l5$>o?&sI-1=;RuPn}GixlXP3vk|UJ#el1HWPE zfl(HIsapnSyg;WNI07LdRhiidhC|r%;&PN<&d0Am8zbxS;>UTozsl8@K9?JTsce2Q z)sEgUkEQ&X-I;m=vOFjMH-Uqk3-$;20Xs4Cb&1;%uh`S3M2t=Dp0U2?Mo99JWeA;> zZpt*Ln4lrYBEo2DPVyvRWp1V82*!E)hNh;b#>Qh2Ll$2Qb$3?x*f%cxkzz31ex|UH zHZF7B+}dIdIL%;e?K%O}{x+qcH;kcJI-l(}Asa-GF#bW91Jg}Y8 z>256TkkBlZ_-0B?LVp4aWnlkQ%b4L4T@n*FFu88juc`79UvX)~R!Jw?Hbr~mE7Fdt zjR>xz|Dky+Dpg9>)$X25q7gw_740GU@W6ZyT0RIZvzJx+(AOsi?l@-7F;6|`AU#R# z0&`b3-}lclvZ>SseY6_aJeqcuI@pi3sa}uaZwFtX;gx11!_rS2S{y1(vV!Y*u5+bAiM&aRk$VVf6LS%co+rQ z*Wf=;`b!5LS%XlD(}S;B0lyyRblzZGX>5WU|Ta8ZW0ccD_EzJJE(Q)}8GHFh`R zeyX0)uu-+kcjm@#^I+)2B zrZ&EMH*X!Mz3?$y(|us!_~CZ@)>3{EYnLK#PKcFYigrlrpP^pO;k3mN@W$ zwla#{7?(yyQnGGo- zO7cFXnm6#J%Lt~uNqCDe#gqG{8aVkU;Z3*HT9Uz|0=_=zO})axUR1v=L&nTk;Iq=Q zTs+oY+m$RlNALR7sq$~EvJwypfh2*{%@CP1mh75FxhH7+nuEY%1&ex#J$~{8f-y&o zt>>hYE!18?q~*1av8{#n(8IdJ$glr`mTMeOI$rk2OQK0;po6kmQaf2y;0WLX5Q+Z; zpHM;oJMki@tG+({{TXg9@GW4r>FSaom7o##Px|8&FluL~$E_drU3<^5W^>#+du75u zq`}`;GI&0&%=85=T6r!dDuWkC&k?+}Cj0A`FW+{Bu((UE#83ZL%E>tpIzzJ+8mW~d zF6toHD&w??sg16i0@*1VQMtF&w z{3F%t9zBS`)QXbDws|nkwO>~uJSBpm-`@zH2x#5^`|m$ze)%Zo32eJSUUyD77BYJF z9aEE8USHC1JZ{0nE7UzLJvT+NaFxd7plj|~LX|-!3SRmw$$a6|%6Kz*t;?5=R@u1g zb;%w(Nd~Q*X*<$qan!WU#E>7T!%Z2x4xAXc>fXRo1xFRj;CejL6im>RlaM@{k_Sf0 zCde_H&lcY>=8EP{L?i4baa5P3S3jz(V9>*Qkyga_?rTE_;DI1CXPS^g`sLb@$Suq! zoA0ok;g2kl?5yM({(X_s*V}u2Ta@zt%n3T*L$1V-{uko!Bw03+s4Y;JDi&g;dReo^ zo%eAAT!w6TXO0*OK#`3UR`Jz%3OjyvIKt2}e z{Wbs8F1UK3628KXL>j&|2!q}L)<{>t4{D#SeD;BzdxXmXN#LX#$_$#bpmj=HNdNn- zO7_y@#W$7onLRDYY$(m+@>2c8oNwM})NcSiQ)A-~IK=_-n1^_`q3FcKpnEAFaGw)J z;aDgpd217Vz3;JQb;;jXaj{s(S?KpXo{2f_AnsHfVcY!CH5L~FL%~D`4GLUM`}>P} zOj0$?i`Gaij`kcU2^0jZPjn`uJx*Rsc%PWSi6JH?y9Wno1lDVuC^D3>=<3v+?&Qiy z_zlWR$X9>hFbDW9kj*aVM`4jHZCq#Bk~7TPEsJDo~8q(lK{ocC_qoDVY(3KX6F=EC3LOT_d_JlhGj z^OG*UZR*ebwO9)2MAiZ>;73Z8@D!oGg=q{&L67By`Gc&RWlf+4CxiIx4W#(MGu*$8 zwOxXl*nmhqHh!t(h zxQD$%AhX#>CCGftEOxwWwYJLfzHK5cT_-pB=0@sw&-6F`xwMx_g4n;d=OmeCV{L+9 zBMAvfW~uXbS1O+k0vi7Y!Ui^GJj}COS`e+j>ZtbSN!wpE%v&5AgJ;Wx7XoA$NpG zY-(h}0@h^fAwDq&bLnuOBB`^^yf;Tm+CotDQd(xPASDjvDs#z_`oBX zUyJWnZ`KI-F#xT5YOb*ra15}_PF<8v&OHMg0b9FFf5Ezc(6Iw=7qMf`Ck}qe*I|EN z58ECCu1G12`K5&R_2NKT53DUobSUWF%v6X+!NI}6aYCNuAaIGiN*%JD+J^%Oi{*5D zN1+5ggX{wv{WeBz`ZCM|H(K0YZt^7fY(+0(6vXoX3!&aDyOMLJ<7cJ3zdJl3!O4x^ zd6At>Tc@RBX4n(tg=O*a7v#>{hC|RXh$rvf1>2xPxmRz^KSma`aof~vTxFf-+xOV1 zoJGf(<^SqiunQ2I!>Z$5hME8~y|am`Y~~6Hv|%7Hy#a*f_A~47F#ex$I!HKyPL_If%and2Z+4z zd0c~opPg={yiaD4729Oal~+!smmy9fjlR8g0_m?`85| zi)(9)$rzeV1JVeeZY^ym{ovu(K^qi>3si`VXxVYoic^G3iH_u+V@f`vWTCO~Zhq$C z3fu$G|4K-7!Kv32=ErKZx{Cj@^{3KRc+IlhlFDk#`8Lxe+R{81z`2SKH=7}GB=m`QX=;;(aTlIYQBJ6KKb8v5;Vzy#5i_c z8o?KAl$$W-X4dO)mh@nK`wjssKsZMFJH==oQ* zL{e*Ml>XAQUOm)x$@v)z(bsdVDQO87ogMkUC;2)%LvIbNPss7vGL)zyXt zSFA3@-(Wbjl`{d|(uiljs1nX8w95JK+ge&meS+q1Z&G(!hsHlLyLe78%c0YO zq_NdEqopyo+}iO9RskpsVGK0qV_`O{U&!}5-{70neyG?Tgl#!uV4#z^W=d4HqRgcs z_|iuoT?u592M55!-{#3SQ(QrF2}vDEhmM1EpBhe9NM^dV$YLsLx|91ktV;f*t|}ca z8V`BD7Yf?)Xy^c3lhL1-cy=m822P?Dy#59=HT=HxAE!r;8et8(yNeWzjM22*ZMZ1u zmg1+4Ptr9V7Hc0Th@s`(9G+5` z(j@W3Uxj7dVS~)fv7ePOQIAE!dzM6pzMzvLRQ;0b{x~JmUhTum?;vjlkNNwfzT|93 z>w;mMisd=>%U^-JSEiipd-!v8!dfWY+XeE{i)#;pdQtR)XZ~32Jko8Ci0b$PJw7C3 z;l4H+nf<}DU@AyxN@QC}fB$1Yr7sMvz(B#F0RxZF27$kyS%>J-S*>sTss%kG}3AYEc$j3VCw>N5S7<1l{U-DbH-|P1j?#fO4_VZLqN2mp4B?a?$e>IIcMFdzG|Kwl z336#pdcq`n>Syp^zG^Ff%A|GpmhFCe4ly8u*T3AwK7pzcrU`sJJSaV7190yBdNN(I zCoL5f6>RV@_~yM+n;78w|EHeZ5(J!0d;qiY#oxJlz#Y~8{$a|7+)AQzzW}#$rGs>U z5z5nT(20tQib_f*X8fUiF^UtcgpyHI)h~bkRhlc_#|S;wvZbh9%RDH=rYL0tn{j^t zJ3?v->sy)aJ!ozyQ(8gRl8bpMnEp$aN0*8%)}(3=-{V*-iszvwHNO0Iy4hAJD~rvT_R;q(-HCzg@M&8D%S?|KO(20lGqCox*z)hyzGnU{nP0U8hxy?u_wdW zeza7<7Hs=iwvYf@GLdNe4$BuVF7ALV3|k4?WyCoI)BOK{Qh>@pc?f3!ZBn9#kNDHr zylfW4up=`YlJ{k&)Ry$h5vdva zX9s>Vq$K?_Hjxdk+&SH0|8C$Lf-o<=0NhSpnIxJmD(A)izqEI?L+!Z;v9*sW#z=`+ zV(Hy&o+H;iU<@nMFjDMSc^?oGn=z%Us)>$kD_Cxmb7DvZRK@;X3z#dd}eAKGrDsc+)nec>M{CUwHYeqmiYe;F-SJU znGwd?+15sjcNA9Wtml)O;QDBtr4M!Dqda`ot8lvFF)XheTlm7rcj!31J1zJ0_Gz>+{lh$+gZve1EKF6DB@JfqG=}d9Rxhnz}DT` z$eNoW;1}9X@F5(@y}Gnn!m?=%OfbN^XUIvac6k%Lp7E}=#;s`u%c_h4`>@XK z(+WACMPDO{IdE&`OQMhkPdGY>{=RJ(J3?ue7YZ9^Ti*y`aj-+dKPlF%WJh^{st?q^ zxDVdPpjtskDBM6BfE^(0m?A8qT&cnB$OLF>$Y5oTj?kG)$Km&XP-ww+pdiZdOdyfj z;GZpVWNSP1&l1^^O~ALI4+{#qfXysFl<p!OkWXiDYU(>N@9e5;A}8G zr-QU^a}si}vcc7ru4xlJuGZnm+bGjbq#?;td}!<=&S*EBF3Q)R7AylJj)`lnK{uS1 z2l*GUL_qNi*9Kn@a!IHo6VD$*{4QXjKw>7k{6wQ`)XG+E2kBq)9Ie;@ z7ZSNq9jQ9}_{=?cQrkd)p8tOI{@CAFbaU%6pRyN16xTqRg&obw z9m2Oj)PGAE!FI^`b-gvEZQ1#riFdv@o5-spTdckgnr9XpqyEmvCj`JgGo z8Es8m^2KES3L0Zc7DVB{cySBC*=>+-@NtH*NGBldaJe%IpRxI!zewFS6=@Kov_8Ucd|as_QOkFs_8YfL7e5R3le330w^NU#gam|c zLLOUWRQ0VEkF<}Zg|n4D#Mtir-X2#KnEvR?EMStsa_Wns79@+yjLr_@`WB>1siHe1 zsH5UkA%2>sZuWN~Ew$Wth^l-; z_Id+uc;A)9SEh>Ah8ruE>D1^gSS19;=pZeYl)xW;nLvu z$ij53G-tqT*7uZDPu?vTCms_(9Nr0_VaJ2RpW3D5$;veQ)m-G%2OQkeWA7aOBEEkY zojlw}Hah??XFo{Iglq>BUa(BT>0yYWu|bHGV~mfvl&0+Z3v~>pV$d{cR7Tcui9BR( z2Ip)Qdr9U!apz2bgW4^$a|WKd93>OkVT(O>mjL<8^{0?$4f!kHuNbkwC_A@z245bS zaSC#B82Of4C_1U|cVmzS+J)tbXf@KB0*A*f)onA(D=G+C-Bb+9GW_E0>~M3V_k51b z2xVgS&fp^eEWIfwJk`=4^F!E!>W#e$uf^=haDSQoOjB^w;)1W9=IIme(mt(n7}?

DS7a`JfY{Q%{&H+}=W(aBaXIN7zmani)yzg|f?0Q!E81DZZ;y1!0YwgeBz)O&@z!8>UM}@%Ip|hY7o|W;V+vs~xI>6$@|5h-h6(_>u zR#PQ7#b!&Z9L$tE@vxHfyla7r)oYBxzC{2xFE{u0pt##}NS-3Uc=`)!4ON*wgs?)E z?C2`sM*y{zcwtt*bzSDobzu^rz2t9{R8BObq}MBO$X0df8ST!x&-vo~0juX>f!i-m zs>X46uA}aJau!KH0CBp+lvo8yc@5gxStXi`w@uc<-4TZjyW`#jIv;U=!!2&y_%|l8 z5hUh|X3-5m(qoMGU#bw!mhVuJg*D+fN5^TZ2l^tNK zi52ybauH5paIJ^E2}TD9Ve)R33dQ$27AZEVo5B8}qe7C&&-~0N>F2+Sfe%8#3*BFm zci!ZjaBid&>H|r4d9r<<6xWV$2iy}3H%FKvmCiBTZ|*0Ub=0zqXNb@=kHjFBpA6C< zT;8dre9b&jrPasMA=kVSo)6&71?8aGE3l)E>FLuw~aNy-Gc*6fn2cXv&o=^M~sOw<~}K! z*056DT>}LoioL3YQ7)IW*FFJK_p~!>Gbj-$#QT!27wK@f+s()!RjBJWz-yF4`558* z({~G{S;dF&i>tiuW20I@46^3Q&Sv$jq*OabQ<}=b+eDM`(&1V6|6tSW>Pk=)J<=OU zr!m%N$>g%8SGKtq-!RZ-?5aBd``oCf+u8W@t_Udc7BX zVh==Q7JC}DV8 zX2mldzVK&EQ2PK-yv;%~Hy>(-8SX>3RFb5Rx_N;1y+hL0*oyjqtewaf~QhkyP0}u0;asWhAS8 z#rkAthVM{J(?Hjw!n1BtafACRMM!U_B}s1JE;~OheEvKX_%WFBVB*PeW@^sHIW}n( zJpN&mVazy;^5uoXo{4_s>GN`-4BYa^=!V9?EP@&a0|)V!=q=`8IEBB68TmW1L!8;EWW;3Pu-%Qt4e6d)}_?Ix_q*X zMMC9Lt-Jh~QvO$e`~a#IcpjjBd4Maiq>l-#F57V3_o{FI69}$8%#u|P38^P}iVQS% z@5t4e-qRG7Mb0zwJeHs*+^BHe`0K2yUHw6te31p!?XI>LsN9Fbr{O^Zj0t8NXj$Y& zYi?4rw2+MtnR93I^bB@2cttfG3QYLPKYOkg@v#m_b5ebaWVw!&v80{C%X0Jg&&jSL zb;vZQVjulSHT#&pfwReLJ&fxA@paZwS!UncrzNEul4sMvsan50euIwV#fZ zO-ChPW%4XOV+a(gYs8s-C&D}XK-m9GOK?bDcj>uFq)OhfKF9_@*kWo5MCUyy%VCgs zM>GJ7M~0c?53Uhc;v*50_&ApCbxi#H@>E0J9u{J@YPlKlfqom(5Hf@3Fk%c;ND}#B z=vbmWhjtmDon`4|*s*j2GF`PI#MxXVNWPBZZL`=(f4D;2mvPb=cwxtzAoxvRdf;N^ zL%_Yb6K*L2f5%i*`dIJ1yLN@Pas&jPlZRqX`47^@$}2|#Yh+#D|ehg9}f7! z3KVZX*TpaTSF`+u!9Bt?f8qM-4>Y~+!dSF3Hh6=!f59HrF(U{}y5cAG*X3wi$!Bzo zucH%a~D`FjfU=LvS`e-kl9;E@9<7RK{_3=ZbK zj3c|V9~x$MEvC}hOTOx8C9%d^ky3o?_sNSw65X1s5b+iKR?O)1y5eaV1x{*gU-CptCsH9e)O2VT z;k@i$&R*2f5VZJ`ujs9QR$}nEG&N@HGJ>P_$rIfgc~|X37Q%8*rJyE-8n$AgjdnGI zYCP0pznte*=|@9BjSgaY^AYIf0X8y8T+(7VvzU&vc|0-RgV@Y}$D;&Y$q}ht@`&5? zI_-s<{s&fnSyk&)q|w0G3MQnW3~_XD$f+Xk3>=;RJZ|@@DOFNKV6@9>9RBdtdDb=M*RH3%MM>&)gjUuGEM`qxPB32!z*zd&#dP7Lq_jAuIT-Z-H5J()G;>s5* zFYBxuR<@A#qP2Z;pPYTw+Y8d^8oZ$-!F$d^lhGb+H5{W{UH2%>t zf7*Z8sr!UG<}=P-aEfgKaa*igOn~J-ueWZ;*%YW+#1UKcxAV2c{&>bN^SpbFcEx-8 z{GMrS(dLg5%eM)&CVz=J&lPzn_B&pfYfuL%Q-s*aw}%S>810iBm8)2a-b2y`OYWSF zKDJjr(;38hC(4dT^-l_JY4{uSiu}01dIERQ0G=+Z1)4rUH$}j%`B|Z1`8K_5zTM@! zIhsU_MqE-M76T0%Ig-+yU{)Kcj<9>S2>~hkW!LH@|I&(;x`WkX{G&2fO6t!DMS?W$ z^+sW`Oa4GKH;#M6zC6=CCf55j!q5`^$>XGrW-d)Y>Ugbzs}U#o{b!uNWh^NVu=2U3 z{Z#0@orXT*wM%;j)(*l1-hF(sgTcLoadNxOOEWu8zr2et zDj&nVn({hJUw1V5gGkPNw&D02rr2QAM_1qc&UxW^!+CY%{c;VvsR2kN?`|`HO;%sr zMmr?Xm2{=#VDQ5rM`%RY;9nVAeu@UGIkAi$WGiSm!*CAF7*fRV&K2Vh(z2&lrW+C~ zpnX9i~f9oJ*NX5f|8kE?QU zJ#yUDj_FA+>!Lc9*VC*V@uh1P*LK}5FbhBY9)%VxOmcITFT>V%+ z8E46$Zpc+Dq`-Flc>lCljCX{YtL_{BBancyR-n(?q%k@{XBVPyO$dTR4 zF%dQ{Z|nRY%nnkST#{PkQ0-Y_?xGCe8SpzMeR-ng_$3Qv!NT<)5huOf8QQO_8fBra z;2gR*7!$faynF2evtH1JhP0D{MsAX7xIVu^=}2f^f+P}cKdH&)0~-%0zbI}Qm-AqF zEJvk7835%Syh2b~I%=S29LW=)wW;i4#OKAZJjx7{H7IU6yCx?8tI(n?vA-U=h#~xu zGyRmi>;fkcDb&B)RUyueaJNnVsF#<{8gJ|Vad*-+bv?uH#0MqGzS3EmV@xGs8mXb7 zd^UHR=+Ic$7Ax7ZR!>M}lnX*ja-~qJ^!Anuou#{pBk}UD($`(szDflo>d9ptrM9rS zKh;i({%f??k=Em~mU>Fx&seM-p@XBF%d5)~AlQ@ra}T9h6S4<4OyT4#ijj_mj%LeG zoS%oj=k#Nug}G@UcNmbrC5$HE#pN+iBs=QOWLu;|-p0I)6%u>+c)kSja=_1yjtn-QROU*Tanf0r(Yy2>j$Q7mrb5)Gg=`4hP7BwS zpjwt*3Ga0tn^ulxw(&Ue4-Fa6)>>gBL)D<1H^j+Nr4wu-MA&kOrI}3XFDvBBGUG~W z`IYW38`Ycg3O&zg@48@|V9fuO`tU6dX$$s7)^cRMGG15T9?L$rt*8QTEC&-lSFH6} zNFAmkxlNeP!t)Bvo`>D!15Jz1-d>#xs<*f)C@(gC(XJdaTvHhnKeCzpq>FlZ8|!XA zf5q`LOA;qKH?I(l)#;NY3HG07g1L`9a!Rp{?|srtbo(d~-(MnSUiw#RZBJ@MFmn{! zINk`y&B7y)p&#RPRE@L!-iXdFVzTVh^%oQBzLsLHBTKV;rkgw!m_j=R3#RNHWvZ;% z)!AXKM=1j&3zt3CEPt+q^!OV-YcpQXUW%Dys-?c3C)1waN;vg-doO8EN7nea-OlkzrNkUwvFO%CVWH+o*d&#*c*o5iVtmnSgZ}koZyYe zxcEUpCTl3laZhIHr>Y)H-|GClpB?%9JGa(YD?_wWzAr@IJ}3_ze`0+iVSGtqdWp-E z+Q9p0JBc%EKOE(?jWxl)?9m^;OqJ6gwnlQ&&*G}SN}P@y@SeCxQr3*Q(k1+N?7Q?z z_@Oit_6BEbwI;>sz1Y?xAB6Q$n4|QPeX32Kmrf1om#m#soe|-cK>vs|ru;uNubT9} z1!nEsH_o(Oe(pr>o8jtlJYSjU)Sp~Kdro6=ndCG|eR4j)JM!?~C_-D|pX>kkA3wK$ zeP1`Uy>}3`X|l2dltL?-9#80Ba}7_di};VrAG40rR{f;mJ0VzIF0Xd5v8a`5Y3@s%RDm;S(mKvE&di)>s4f`3Z_qHVV*lYY{CH`(Ki4V&*X8(Q ze81HJt0RZjkm=T+MjVILZdA9)@;Ywg2AqG;R$CCR)K&CgS5>DkGFm)Nb8%o&+cdF% z&d=kCW4y^D=u+UbA&W^<(eH!fvid94cU69*q6?zs{Xg!{@~`hSNj<xVR5F7Dw&nohx!=pXLhzsovX_9}c)`=|;{Mggbt4W zA?h^o3_FMrIfu*`PkQ?Ey>DUNOw>vE{XI@L43B3 z(%9t)S8OuaK7Oe}BcqGb(ik;!FkFx1-y%*-t8mA6-F^r07WG-=2b1KFuoY)&3@w7f zmr(QDZ5T68$#jXsDzIe4Y$-Gtn%dTe8^;}ex>USv49aZGVlX{f7rdfc>Vs*}0%4+K59oz^XjxRS4l z8|IlAJL?=i3aYa6IpcjFH>9~5==|0xOj3h+Utqm&*qzF_?<}t8-F67 zpamy!Wr|^(bf8%9ta>cj^=??#y4xI!==dZPZ#fIyqV`{-;s;fIWKU+_QW9oz)m3B$ z&lWwlnBvQ%3CWrG*6XT>%|6b!8E@{9nM}$VPfn@2&wBf%j&Gu7q03R=#SzWakQ&2@ zdpoD|fRDCHnt9(pIPVHR3U*<3+wHD$4bnEe{c=OzFR~J66-~Jy zKqLnFg%!;usR`;GHYHYL3TeeujfiDJobel@5Eu)bOLrw_rsb_bBymneiPC#N48MoC zJ*2KA{0*-=@hf@eY}o23m*6T~oMb;E+R?Li>S?JZBcW(&RN|y~PiT>{&wRv}sMX{l-sPNa!qZRm3!9T%RvD7-kP!mC5K zF&zY(T&DtR<~=Fi7D#AT@1FZy(myIYPzwB0nyvNHM}65esi^@6Mb0V)o6_l@P1Wib z{buArZP8*80lh7p=;p1giq)q2ErOtjgzr*S!dSCKbygBA-?l|tM-{YUURqR^Fte-$ zKgEo!rQZlA^kXTeI`^#^SvfxmsFzI_x}Ei8z@4rh$YfgP_1Xx{v=en?mR!DfB^I1` zsQC|*dhbMg69xG?#y^WPENr!yXjU^Gx(wA~u!_-cn!_9WGX`zBN*pa%swk{1#^C&_D~Qgl1yjl>7>#(ySJ=CV*E5!egb$`Ge=ms4W7M6dUJd2=C%u33wf3Nfd7i}CyR2c5AdIaBNqKIh@{IX8H6!{ztq}Hmfq_MvID-(e+CV)=Rn6u{_SkbPf7eK90PAK};Pf2Hc0S5Ez>7KeL zEoS~bIlI@$p&~a-(}1CfUvj5e^E;)6@CW6)nE{BN^>_*tp4Mm*;Srwc;s#Sh0rIC3^o6+l*Aq}r><();#D67$Q%hTPPQ_5=0 z*Ejb@Ji_KLD9~3Z;_ysjI%_={gd3=MeU=dy=qAAAWE2eOzE?E zgzXbGO;@>l4qfK_Y+Yq4Ovoi1w#}ER*aW%y9%}xZ7UyJ+?;QOb@BY)Z$!V{8e=0(W{a7X=Dqjb zxk+d9)<31ycxYwKTF&|C=Jti9t^mO@UR1C&4nvote(` zLv~iHf${dcxcAX{uk-8GC!z^{yFcw#UiNVq!B};7E{MOEN%HBh7=r}!i*r;LG5Ryl zPaRWvY>Z-^GxEF3gNuS{rdw3?NWPeJ6b?lA6<`E9HI*`8?LtMNTSSnTtYzbw8K4$Y zqAix3e-)FFyF6W{ufmbPNzLA-_VFmVRH&mfD1QF&xw)LE7g^5dNc9kn9Ui2|``ojH zS{NLKXTHX956n6ftQNhaYTMOSd%w1MMa+{nNhK;)%v*JT$oaYZOD39$C;YZQpiKB! zn%{@eWGD;M|D#9=c8pJWAaQP;G5q+^30s7AC;{WOWxR%C0U9aFEY6c0{ST|!@gD>a zx?)^wWbUM@rgZ1AEzgC82rH}E8>fcUWt%Vc>m2G8)#sB$XW)IEN#qIpD+$IkXWtrAjMpFGJ$@GJTU(Njqk}=m6(!=HlSb^wBv@iivOvVT(y7g@Js5YU zV@K?a+(lU%=z<|l7h3!xqyD8x;w>_r-wKuqL~GYC$XEHhsRDKbQe7?-Tt|eQr!Q$n zD03{+%ol?m@2X&nC!Dx@b9sL?`KxWi-4{VGARgqL@Ua-@JPA$r-)- zt$@6)P8-CiC65nD#TLtVPVHt z?nKDcXW5VKBI0<78k{BNr9Yev;ZcVl5%b8saoc-X@Pb6%%$j?l);zX@K;d_WRh9;c zOIyzNiim+(pNU*N>G4O8E*ia3k-Ufq`9Mw;A5B@?i7@2~M}vEWvH#4@3gh!SBz`lN zAN(q5ZHTL(ab8w#R_ahQPNFLR?r_h*D!sMW%&Z?&iwVb8<)r~(R&~t0tLP1cjhLC4 zF>5FK<_6JBl37NJ*Hrg+|Nh8$09VI;r+R*FK#E|CfPtnb&EB=(9pmZQD>Gh`R=t3` z(W~|@+60-3o`&fs0BODBW{z>^6`M04rH5#`=R(TqznFbb_&fbT*xejO?^_pnDUJXh9_`7=rM>{9s zW!g{G*DZ%RlRhowdz(;bvnk(BA!N{q$W4XSGCza}WhVXm67ZWU7-_=Xh zCpP~@E4-0DUH?+mB9SOV`8K>hk`I?&`Al_4)B@xC>{plXR3Cu)JK5m&i@J-}RGPxB zg5I4y)4RC>S!J&KZ4U0>goeRNis(FE4@KEqAC~ivNeTGjb5nzMl>E;Yy*TO<6V5H4 zb3bMr;=wU2`;zG1Y(ntIj6?liWev5OF&hcW#H2~(ghqdWW}-eW;Ywn_i2A4J9d5at z!-6K-jS7jT_r53joiVeke)>l8B9MJ8{xvN8ZleqzK1o+?2ZEg=2~lk{aZk>f^}#9oa*||&QoNu) zz!us^-zxW4C)QYaT}3OtOB{9)IO$09@{9eh$xd^?MuKxox=rSu`FNfb50ZNDt2{^i z4vJpgZ1q;KJ90kU25FkTuu+N?G5SMMMW&SM{U;hMdh35bLbhIPVEZV=w}QO zx2HFKS+>R*sb%i?=4?hX2j|P>w$b;03CH2UjSiyeux#)rEs#BQjK?D3T#t<7!`PGS z<8E>4bwRKf_b>aRpPnT0mZ^|QArJe6i}TXtX1$n+X4+0{SGo_^2J9Xf90t>vGm3qy zp@pFYm-Ke@bybpD> zTxr2fBCuuV0cI3%%uu_4F&N+x@BRtBhF4vOTr%%OqZ@B{uz80karY&;KN9kfZBo)( zOgn9)M5UYxO`*u{+bWE?x}T+_T-pP6SOQG~iB9ZlOTLV9;b2PippMC68`qMT$M)7P z!N|?;)6+S?se;TOl(-d}5&+564c zgzG6Q0reA;a$Spt1GX>kvvCsseatND3a%jTMsJ{=-bC!_sweO!zQi)p6c|PKUAc6bo_<>~H2GLuFIUQ{1cvueKt;rddJ`DP*)R>G_~>k_XL$M^1fmJs zE>OHb=~^mDM5-@36+cv>49+O|eqVb@gXB=k%I$&nowyQAIktvLogfoqW6wnlf3tqu zYJXeJ0&EnPOE+q}aygBlI~YW09s$IAqgm@&_4Yf{55qK!35;qD@ovf0)zko*2Qq6I z&jhIxn)DD@*uwnM{CrDIjioV3fmcfq!;=M-sx~_;<66u^wKKlDGQ=n&OPXrJ=4&ip zqUzlEziA%vHf=#qYSP&lpQ=X(_tDgm8sHkU$+Lguu+^lBPwg|gEG3mkZ?bcCK6ryK zSr50?0N08guzt}1lDwJOSz{xki|x`%KwbF&mAQNH50P$vb0(L%v0S_~U64hweBsB5 z*3^83(E&q^EGF@mL=O&?uYDa-b8*Vsqihi$r|c&M|3+Nmn|xak{-%}cU;RKdvAT#Y zVi8xmS4Jh^?c#5^DFkR4m8@NG5mHVqqGjmxpb}eQd3kp?DxaEZ&O7*_OIMr76$#TV zCeKlduhkR7Doteiz@CFShYJ~M3QLxRe?u<>dI5sAY!vny=={43K(SS6R!v*U5S!=&do%H zLM2>GNcuD`vKE$x^`|KqCBU>=*{lP6#cTM3aG zg7%HQbcl;Q(IdUJ!V~hy_DN?}_ZK*F;*xYU1DhzyWLdVsUCN!Y--%gO4x*CD70L{| zsk%H65!|SHDrMg2oIzs+3gL?M3SNyHl zR~I*=1@~V-T@EyxhLvPs;B~S&43c`d@}oea3()wO_JN%tF$5E%tIuMhSgpJ^xkz4q zjh*Q2_b*-f&#vO@*l{rV$28l5)j0OEK2pO4{Z#BqxXKlWbLe{&gRYBs(W37~2J31i)tjD+b0-`DkramPGAxFx0pme0edA zK1+#a#$$1(A15Q+jVRvJec}m;>$4QpHtWJg`A+$(E6;xiU~-`FZEu&hv;$T%Bt2Bo zJ#dY=w#K}C4D&oN# z!L<;pXJDE;~M+ zcGVr+-&B}-l$opg<+^#6C+zRM@%AY3gV3#c=?*aKZstco1^|wXelRb_^jzmGphnR^w(}cx`L+g$b3ZaIq^9iI zs4i-ovqiahOsi5!sFZ5-$*!V?cpB$ej9v%(A0)#>68(sa?%}|W$BD*QuIX@FcWb~Q_ zmq!l$U9)$Hz^)K+!^E;FOT&QL=*;z)_}Y|SwuzlnkVL`Mj);gSY-6C_c=-DIf+8M- z@bCjcx&|u|W?DhLn9$eeY+zuJgKhtT!8p;r3tjESN7g7|q<7A;;ZoCTj~Pti-M}Eu z!sYsXzvKIUU`nvGy~qk18W+9+tU=J?z~B+wHNqqYi9Gxti|xJPQ96(3>UthIAbd3= z$TvnuGI-m9+sXT;S}bhxqy0@7*8Ga6MZD(Z zAy1o|`&Zz9u}{|rp%49^ z7KxMGy@M_LKL0b3t44TKDD*O;VqySx30@h1yai`!_}SsF1!VfCPjB$RRT+$c% zA$))nM?!(j4i+Ees7VO)JJcyf29FG|T(h6Qt0Py&G02DD0g(d$W?VOBJ{(Da1OmA* z4D^BANu5pqz9g-&tqJvBZ?6)lHp+703Bnl&clo^;;ZhznhnHZ({_~UXP>6*YOz^^jvchI*c+BFTpPg49@q)Mod>O^(_Etv=z7toU`zp2 zAs|;x0xTQM--6P{LRB&=^sOTk>vnbBAF)RMRjbvDp8_-D?(<4aody8&D%OS*{>J5b zZ@zg3K>d{yFe?lhAHe>r_3Z_z00xxt2o&*P=(Nb00s894|IMmgU+rImq$_mrEfbDe z{)6{-UL2F5V09a8#QdB+Nw?5-wYi9L$-Ey&-IN$>$D19$Od`xPmav^F5(5V|#G$QB zA?m|6!&h^2M&?V&tgj?NK*%lD)+`={U<`zEfFMdp zpbLX64v>EL@89Q4!hVUIVL1?AR9BFcJ=9jBy?v!0S8>GVO70v^%RpUDCH4+8N}1zM zokwXa`kQV<7<-ca-H{>WvoA2r4lbsj1|>T~!JiX6zQ%j)#ou<8f^5La$0?QLxt zz$l}U(NANl0F0izy1al6q0$x&yL;vvxvyid(_H6lE=hkI@w|s)hu#;?h;M7IAPsgk z3~ToPvVHm&EJ%Qa1CvyMy~8UBe5No!$Qu2s@%icM?(6u(Kg{Ty$_4aa2lbz8%s9;s zqp%o!BSz$K^_l??3CaCURO}F0P<}IXip|D+-T_{InxWTT$33 zecKC-$gQwXCiqtl)~BzK-bsS0t@S*uHGHKW$b%rNynz!`;6O)TA zf5s?Mvl&Af8aq5?|IS6DJ7X{K;$uY)y0qDxQokBj_t_Z4jMutCB&U_wgJCk2~f;kD4yy zj=vz4y@^euIvdEDM`F+#kI#MKXa#Zs5LIr}v4VoyY$S_5>Q6ea75HHI8KPx+Ru%xA zyd&`|IMg-SZ{?bEnoxwmm`zVI_$&Ri#6CvlaD%4f;SyLn0QvVo3m`YZX*s`P3ob5z zfdX9iK=A{v(t!SJR|FGesE)w986aT+F8IBuH1^yjXwW@lr(j3b>sYaHE){o)Ohnjkr?2~Y~w;Mee=8_ z<%HD@tQmuEm_izyog;z9Vv>?Exo|GGYID2-NfHc&14nw(8oPi#R*D6OO*>^)cHdcTQR%Ey6KL zCX}DJz#>GfEI)49l5Vt~hn$|%F!Z}9DlTHiD;^eV_A6^?sF%_QAo!2b0t>yWV4Zw0{RpLybH9z zQ>CQ^lnJKW9as#sw9UTfuHZS(BhrBt#NDnm7Q9xRr1nGFOo|=RnZ|+8tkAnsR6rC0 zX%fJbpe3Gb@_?Z&(abW~2HZq9KspA?mB2Jbbsb)rHFg=BuZ^v3z?LsaA5XTl zI32&^KBzx%e9l0qp$)RPPmi4V8+Vy_8482ope)gFX2 z$Pi#|xmq8Z9iW@FAwUC{qSn@H&^-J8-kk#W3Bz`Piiv?sadafrc*0lQk5jncLR83D z2a~JDWfX=RzS^3>13TG$+9R}DCY&7~QidSq3~-tD&EyhrJu>3Tp|v5a4A(=g(e*xI zryNC;H-OMGK`BrO~edD6v*h@z!@X}5cFvw>LPlr z3z<9a_et>jo2we7`DfRDyZ@$MFzRLA@y}HC$3a4&tKYxSy?CPOrflc&crb`Ilj5TL zb@jFMLy=vVpl395sasZt+)0SqYO;?JMlP)F=ycNlbOGPL;G1SWHf2G)+W+}#+m}t+ zjNv%_c*bLfAPa>T6UCDoMPmbbu5EfMiYt&wKZ@iNvk^yDZ)*556StUiYHBKI_$3CZ zDJi`U7Lkd#Ab)V-ffod5oT`93I`Q|2&zr#@lg({>1Q2IbPfyxL1wMG@; zq&SkBtV?ZX6pNPNnnR5C+aUrbQc>ZO0Z%M#6_C6PZr zgBUNF)e0(8umc3y^K*Bb>~~38)H)KfIs_&Snqd}<1K#**%w{DezgCCQ?gmH-3cma` zU7Pi9_gSAM5v>F5S9TI?_#`j_3Vj=2@FRhmc@lZf-|QoW;?m6b_hBVV%2Z$CxZ-;? z5}rPFcqo()2I{zC50*s4#li0mUNi(EK&JuYw!a^dknuA2<=*I5-5GW3LeCva=I@MmHBe6RyR~ ziav1e#*^pveH=VkO>aVaiIyPQkJ%KG4r%;vzrT;Ki$O#IU*H?yNRedjwslAAvuy5* z1~9V`#bm+^g!Quv`39)4do#@c)!nT?viq)||My3mG#Xh>qw@#c*smHj&N-^r?SzaQ z9iKCm<%J{$0IQNufrhM_;3*EeQ55S5Xm0Slj~m@+bc96=?Q3iR45#`Wc zosui6FDjF1VC%0}U8Vz)%x!sAV$Krf>JnF%!=CYBcp`xEr~qQsEja&-dEmL>PH-O7 zX>&ZqQ4gfg)G8)%hhLio71G4SpR>ai_$^aYTaAuJMl(=rK&1;r9O#b20E4(CT_~99 z!GtTcMtzS5?x)UwujkzpTxtvGxUHY4!~`x?yZaE(Ed{WiUqGe>Wz_yc>y7;*+&9k5 zaFRu;6IfJF0+|=SIV|y;?A^ElEO5mB1B5`oO8mitG$kg;q@Yj%uamg4)k%QOIoZ*L zZyFbJK4sa^TEfq4eXe3gx4vc1IK=p!Dy%=3(LxotTGMFK;h^sgpoHWai+uC`*j+Pt6W}Q$PevO!WR4>OIyT=JuP}&S}6nF22$^p0z92a5M z7fvCo7W8~N9m~OE$=8?Q1_=fXI}k6yD8x!21^yOK@s`$Bd~|#c#71;TJMY_g+;j@&x|YHV@`r{?Vp#o29T*?ilhwYz z=)}4mli#`cqs_XCI_);nhB6RSph*X+59o!pwfXNfN(I7=4n%P|1{Wx5L%qNUcz+*g zxeTNdhQUz=MU!7)|A`OB)_(|j8oYWS@IDFdbwQ||D}Z|H@< zjfTw@@k}$ga2~R5`2HZb0_&qd@te+fd$hs`UdPx=yFNnPpm!V$=_tihcPqNAu=FO} z(o$2w*cUL%jtec(#=_3X^%C?NfR2D}ARSW_KL|B}@&)?|lBzpzfe{U7XI`5((7FD1 z!ol)eb3KQqWN%3-0VVM%lYA1U0_9<(U}}drG9${J2fwzqlvxts@j~fy24x+D-JH>j zmbbg*K-Gkb6OQoP%!?%Q*|*#=)&1Uc?!8*Z9arFeN67u;sdO&gq9@DZIzbqDk* zV^ahTfvZUf5naanb4_4a2k{10a%{->=xAb}B`g6`(=2|LI3@ok9S+j`{hU-nb%hpH zu(&5NJu6-M@a7jVHtnL$H^8t&n*)eE;nta!Jw5g~F?7Z<>y3^aNvWBc3iED|SHUZQ z@7&(rextAzDFDR&s|CfO_slxlR^SJ3S33=@QwaKZ9==XjVxmKVtQ;&?yxiS?gPs=N zoz2rghA6COrLn$IY)x_xCy|uCTb5|kEm3f^6W*r~{ea-A7hFE{6i#b?vGD`^S_t@J zy3OHf!$Aqp6oiX>nV=)jQ+&HvfqD_b4pl*1yIf$jNC+`xa8)!E*@yNXc#Z%V0@8EOE?V4wZn;so#%rrl!MDb>)Y8;E zkkLmc-wF7Jt#A6{CiF3#bU^z9P7N5%2V)z^e2sbZDklIe5^IUXB75%y}>rA6_t zxr!zsNF%%9tb!E_8aOz>VRw}4?u<+sj=3BWFJSC5eEBvx;ozcSSsKF1_uHZFz}^W zd~&#==<3Rwj=3C)vk-pCZ_6%yMf}#Dt15yIOEw9eF%E;}))K~Y>GO+A`V#HRiFOyW z4HJ-GVFrT!48Vi+x1RFB=LS>f+exY{uzjH7Be7$ey|E&IoEF$azaVXnM^`r?P=2t= zbAb1QHbU6V!RiliJoLF3QqKSm1Mvb_2k@SuI{{|I$mJX-pS9m-hXDfsIuWoWwt^`_MNGzpXEBCCW9qNj%XURxwcvgBk+=~GUYgBmQPePw1bf)AyA;a+V^Q$#{1(6AAyW@>PV9srcfDxAToG@1& zMxIS5_nTze=jU531fM}k8rE{L++Pv85q2EZUUFkgBq4G0M5<8z?2jen-Ij|6yM%Puq1f1bTNFmqR&CDb24Mp zg+9{R0yM=y!vPNpc&M>=o-Qe;Hd@@eJscU9*K7R=u53Yx+XUI2K#DlrCxF2Q(1)N8 z2s;cOzU)k#7_*QM=6YwRZ1NFodrM2Sy)H`uaN%$Wn}N`0^DBzk_7!_Op;CI7ag?h> zRbLYPWx+B5UZnj5TfEGg$WDZoU0M*5Pv{xaEVO?4>-FEI z`ASJe1xO9T4w_=^ZP=I#zQ=g37`Bypt?0&%2Q6)u;$Z1|ef26wz34xT23zM-9I6TT z#UkYeiNPirbM<&RK&T*{h5_w?aWWr0mb#sd$3BL7}M-p8;)WRRjE6YYp| zF-i>Up^zq^0UhIidgW%YEt<|3D^MnB`NjHSna=Sdtf-$T41Ir6k^$CSLLZ1bA<{xr zpvNOXf_}z4Bqp#9r>3M2zdcd*qPN59Rvw)!iQRTEm;PY0R!j480oiwEyA0TcB`)MF#cKXc`+MBj-zdZUH5g zQ~Zzqm^|+g1x_vJA2f@h_f1!Q4BsuVRv}+91tlNTVzA}`<-HdUp_KKn&Iq>A`i)Lq z?cW9MH1^iJbg8n|c3Qju6v}dU}~-64pn z029UrGXj(P25k;F(*_3z;Rj+=jzCwb7|;v!Nl-^Z@3DWyw^oCpOPjX8u0ob%!E5p9 z(IkHl{@0}N0Fh{DP{6>)sxWv#L#>y`j;-1Z`y)IYi^dQ_0yK!gVs#JY2SG#Gka!`m75Y5zjJGNSTy-GHg(d}jK>!MfCE&?Ue{OQp%ha8agYFuPDSTeX0o`rR7i?P{4)IO1zH8gEsGWzqtIS&k@ogRvb85$dZxBdjQA9eDf!r!~QW!fB+7LW|Y zW=FjEZO^*c_It_p`EyxI?Cxgu#EtcJFoYvK1tUk{ai_-v;kO?yxaZST9sC`ZV%VX7 z*X3R{bIn>sW;eGTtF)r@?4uo6%<(A9JvKVeA^unN{&S0Xx|}$0jIX@ZH`OZ zA^qn|w)IiCOXp^GP+D(p76H3on)LM}nm}s=BYU7&4Pj-+1F}oAAVPeTzF%lp>i6G%m1RyO z{ERp#UZxyNNe__@W!bfN?sCGyg|`l;G0?%hz5gzChC)eMSa=KLe&7cVw}a9TA6W8V zl~q&-3kfA5n1hDk=yHyN{HaJlYT8gT>*j6g>w_n-fuSKv8lBzAE^ z@gxMC%lMDZpl}1|^S^Jcmns18s;{T>aTqlWJ7`1WYlr9sefj*yFiO-uD%*VtpWOGy z;+!hc?Jl!rjThLM{1Ii8@wlt_vkHObJB{`QF^V}a(s`??EmD$q8V{Twsj2<@w{ZOr zN@zVjastTFPN7=6xt!%A$T2KuN$7(XLhe7xjvA$FGz6GGfCU*IE;W1AI#06O(j*$E zfTpARdquUxFTHUS}{Gn4F~}3XE;7iuz+$M4VfI zM)~je=T?BC!u4N``om(YK(lbvtb9jC6Pz4WdZXXa+DlP|vKa2rAaU!!o2qB4#QX0vnw3Ek;g~3^ z)%|EyB1Y1N3c%zwHZ{Qv2lj74@KFM!=hPIIK^Vmo0yOBX!?m_5UV|C5(~O`Xhx8F} zzykkZ-~dhyffUsjFYe{4!zCiDR5;Zjgyq;0wV#IBtX}tY5bvCPA{3Q-b<5kuY(PXj zWdrkz2G**`Bgrh@Bm^AzIkXWv1U(Sy%+JFfmriQ6)e~6?G0Z8~WGj62ju<@;xb6DMLr z;lW(|0B=cfuVb>Gm~}Tgn?uU6=mU~n@RE_Et!)bQ8K|kj&kPdH&>2+oY|UcmR4}mB zH#SC$w0JkqFD&ePfgcVEk2E)15(4%xL{WH*5aBd2+ty84__!09v1w*hx>dm!V3uZ(YNHuY_q;h{!8 zNA^Nq<6*z0fo25Wc zGE6GK?9Am7zF(Ut;{r$80L<>3KD-RQ<`Wb|6Fe5LRA+-N-QstB1qBS$e9*i&2~Dt7 zSBz>4+yD;t$A#oyJ~>ry2D3qEjpqmF zi-@@u4R8AfM+-OA@IhjEC*@U3rb&uXO3Sx-62q6iw^KqSvw89KY5VaPxOHJNg?v3d zBSS;!%_RL1>I^5=;YU@LpL25(l5qG7kB^NB-M=47!>gXM;RUyr3XQXngJ-7l7X$z+L*0b?b7i4i{a}HxK zSUqhVo|93uMn}qtYeuo;5obKf7dM6R_1RZwRKZ4&DO~zU%inP}Rehy=CkAWci&zY5 z>9gT*vWVwyS;A-6xU|6nOt_z6(45(Zk0^0WO!(5j;NiUNYDjY@&I0HOP zKJTkIdjcH7 zD?nq!dT43=)H8h*{2;FOw%-=;X*vQRYeM%47_Un9uD{YbPh1h9>ye^rXBdjn0-Fs; zC7@!Ff=&Q-oXL^F0$GlnzY;H|Hra2NV{zU%C2+KXmJ(Da)^F0P68x`6F4Ry$nSPfO z-w7#WeWO~1fyZ%+=z_7@jJ#!^HK7k?slYjcM!;1LjzDN*Pft^gSVI{NZwdPTkciwg zWHx@#S_;!k9>I@(10e*^G$f#GFHSoKihF|-6%U8fo$tEM_sE&yX^Oi6`z3#%FVCiT)D|IWw!1sbNf z3&;`W)~b%=7?76$`+nO^ZRG)-CR2Tvc{Kp~oT=5yWO4{T%Nn&B;^jxY8jVp~ZvWRiAgA+ZYpeK~iV4Z}n}c+s3Ad$tU#n8U?d7Gd z+&=GDm&H81!0d(wO76!5ybs02<)rG=*#xa|*p1U4Cxu+;YgioO<)2jHuydXMk&>u&aUp8L&DY3Li;S~d8#8Ww~^(IVv0b1?b+3Pvw#7WNkl`HR;^KZ2qqta$Jx|* z{2v+`!1dA<&P8{3vi~FLD#M~&n=qXcOS5#Rw17%Ch_rwTl1fVm2uSCWl1fRpfFRN# z(jiKxN=k}!3i=J_+h1NMaM^v{XJ+o2v_`zRtHm=;PTPRyUac&N!jIfM)%|jBGTb-vEMQuLeb`)@134D0F0HHDL3g=S1KfxqeCm5fny9pheAD| zCIFfqcn=S>-+V+Nz<|*3TUFB>j5gBrK59~v{Ut83sOR&@G-&Jg^}#^boxNb-~psCt{r&O z!{S#_DTo{Fj;3~=Z-W{;VQ*@tv0fF^B=!)mivc;E$N%w@ z>RqIMF*j{?6yK#qD8qs_j6w?wXnSNRQo(QiO3KM9$qZWsma1lt4ZKj<;`!?vC@=c)Gi)_jqh+y^Yc4h=|7l)Vl{|R`iV_8pE{`pMTOt(Z<-eJWAq;< zW`pq5mAvF(`7!`~w?c)+D5JhZpK@^_wG@E(8*EGNNH}F!Cs$g0U(*m$z_2g|>-}8V zs&rW7SJot^l}&w4NxKf06GRYdfaif2tFjK7l93T~t}$rbNbxJ$o&q5TVtnZIfPUbE zUtgf*$s^s{CTeC zb8hks&rP4hXYTI)0Y-u{_~J@NEeazU6WDlpYB>sgcvR%8KK10pjCY%VbfI4oJy(|; zO%=oowidYw6!IUH};Mh8%%!5;Kdph*EFS{5)Spyri-K#1p$t#<(9bMA2(FnLuv=?V@r$EzKAl#LTC1Puoco zou4J8ID@D}LIMJU_RoA}vT=jNcoi?E4y44*o)zZJCJ3cDjE#{h00^?%AV<~l;w8>& zs7gXT%pXFP&~0UR*YZ!8?31U(y&$2?HS=m@h>IjBTw*kO%ioPMEQk@d6fddP`cZfx z9v{6DQlqSaHT?w^rOsb|pNBi+8Zj))pbaeTkIVd|D>=%Dh#~$6D8%|zSlxIv)Mo3b=u`o9n`cRUGF=y!j^2^{u$O5)a1H+l+=T+<*=$@eI0;LZK zO&|o$aa7PtFV~6BeGN&bZ$r@p~li@(tkSa zfx}vLFJt+#2ZsT8Wcc9_zlb@(*nI*V2n{)Hf_GePTGbe87qwD~otX2*T8xADa$ZhM z2=5P2G9adyMzE+pL;r-lAZ(zE$mPec;OUlAn=ErVpU&E&M(>0-!>CL9^4T=WZ_2avD&YE`-J?Y@|Q-Z2^(2zh=038s#t<+B|11tJr z&1{?Rsu`!CVf^s}&SpekJ(r>b^TPcY53hCmt*Ll$Utn1tY~yl-qQXZWw910(0#|5r!?Zv~ym-kvKOEJR+u8a@FtHZnB4 zS{FS2+**>wNFn7r{zGi{AES3nl6sYwTmux(8|zT==Zt~{M-jEfyr|qb<;G%H!@-B)Oil^XaMVs zOtWVUDfqLIK+^$KKFdQ<(v+tV#F;t_u;$zx;j8rr^K`#d#PEgc4*06$2;*iZ#SjH~ z$788pYPBlWcc@pVHPyc!#J`AcAy}|!GztGpz(A#a9e(^GnSlh4s6#CfF+{#+-4pg+H}eGWHC zU>Sf9kjb`rOrcTdqPcD;3W&3?FglNA%*=nJ?ImakLG9NHmr4Zvus~D4Y7DdFf1r$n>`4BgPqcEzV zVzE#LepX9R=g4+WN;SzCU`#S({Px;`+y?-oE3iaZ7=a~UYT$Eueq&ZiDCi3+8RKQn zPu15&f;G-Zt9@&loFO=P1~Oil&k-+sK^g@~)|r(q0<>1lk)Yce_NFL;*%{o7AZ7u) zFKZ2Y4f$D?GurAxpVl}$^4UaYZrG(7`i09rGj~Zq0Xt4f>N!@S{*3f5 zcA??)n4!WSK>lwHrKBLNO*RDy%by9R(nJ&EcIu2T(DgJr@ zG8DMxfF2`#0Ui(-QLgAvLPGd&?wgsZ>Sb->`gF+Q@0O&Bl|&AQ?fhvpfd&X`&r*bC zZd&XspxVrMpr!>yLb!N+kjH0?!(qq1uyq20a^(?_EK!D!MAjJ{J@fpg8 z3S@#`ZZf`vX6@g}zrXX7lc2ChGBT=U3_=D71tyyX`I}$yG%q`tkg|AoiuYBOY4OOr zBLJX@cd{jX*`j3|Yb!)uT~21+16i~q?tR74DYA3nv~2xH>S(skcx#>kkYo5mOJyQ_ak z0fCayJQ`gtVF4=p%e2)*0(06{6R2~6A(r#JW}gJGDcc;EmBLbFwLH2Ir=;`xBYk5R z>b_VxzjXWNp!J8LrkqLeG^b}~{@UDhE9Ao2X94L1@^_x!1|Uz+NWD>G2gp2O7k^@` zcKf*wY0B3%_%&e3=SNt2bmMq`KT-PlO%)wmM*+RVr}hFXCVb^Vywe=UAo9|89n=y$ zemiYMl=&|^z%>dt0I(lIl@uC1BO@bM(knwlh{Of#JZ8v>c~#CTC!8_#E^cqn-5BBB zG`1kr60PsYeqw?AsMTqemO#lu$!Uzg%ISJw@Pmcw0cV3|ti@z;nQ-~RAp`*RO4KX= znKJ3U&Vp8&yn*hcaj&X@#++ouci5-qvC1almD_sQc(73p^ww}FVeF=pc-meV0FN+t z58%5nXXZc?TLEwGYLOSn4B?0Nom_2?f&Ai+dGeez(j3`k3$C;%T%>aWAw63`^Aiu6 zjNKj7fh^-owp)RbO5BEjq21+mjJ;d6wzccKeu)@FmrpY0$8jL32*4D+=29)F!5;Ut zgSv!{p7G(al(WA-<59d$>H@n>^-H!CrE$EC#b<>u~#;hZvP&)S-J8Xg(%tO41ol^Adx?C{FMKs1dGrcty259S;!X=Xcq!P8enG zHKZ7~*0Npp|K`&1Na;Vv|eq7wn}nlp0w{|IFd_PzUGy#q;MaJe5~|wq#kXH zISBeC@C1UO85ADy=Mmx(V}4L={oBwE@PX>*qY*#oa&NcShiI9QZX>v{P0noZpO3gYV+&*9^MbwhCOyB~uGO%7ptU;w33|PTOm+Z}xg@d|kis9BspH<` zcX28#25b48cEzv;XKW%JqDiqcFQSBED;ZeP!o)~u_d`VbJxs;8mFo^b@K>goLW<>v2C)_%0Y5o2GL&)SWdVYPjALntgj^jMiLa zbn;y% zy<)ZoYPFaU`cAl@r9reS&%pUqMd3Dk{mviT74sN~WOKI!kQi3iT3<|T9Ra~;>@k^8 zB0RMq-j(WKPUxJ>*LNBr8}S*VMi|tBGXE}~tqcH^4kIq84eDWb?t}*cR0qXV-isna zzG%0AA^Fk#+!y=Kxu`sLav%H_4 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

!T)qj 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 AIl7O=|7h}BUt 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

~pp+9tONyznvINM-5ycP`luPJCFjx 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%0A}fC!CJg?)jlaA|p_u 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 z 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 j!cH4~Q0t5ld;*00000NkvXXu0mjf*2-0L literal 0 HcmV?d00001 diff --git a/docs/source/gans.rst b/docs/source/gans.rst index c76915c8bc..6d3a285fab 100644 --- a/docs/source/gans.rst +++ b/docs/source/gans.rst @@ -40,4 +40,30 @@ Loss curves: .. autoclass:: pl_bolts.models.gans.GAN - :noindex: \ No newline at end of file + :noindex: + +DCGAN +--------- +DCGAN implementation from the paper `Unsupervised Representation Learning with Deep Convolutional Generative +Adversarial Networks `_. The implementation is based on the version from +PyTorch's `examples `_. + +Implemented by: + + - `Christoph Clement `_ + +Example outputs: + + .. image:: _images/gans/dcgan_outputs.png + :width: 400 + :alt: DCGAN generated samples + +Loss curves: + + .. image:: _images/gans/dcgan_dloss.png + :width: 200 + :alt: DCGAN disc loss + + .. image:: _images/gans/dcgan_gloss.png + :width: 200 + :alt: DCGAN gen loss \ No newline at end of file From c1dcf70b87dfb6903e754bfa2c75508f1cdfbe40 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Wed, 16 Dec 2020 18:35:39 +0100 Subject: [PATCH 37/55] Update docs --- .pre-commit-config.yaml | 1 + pl_bolts/models/gans/dcgan/dcgan_module.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 15b0f8b175..9a129a04f2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,5 +5,6 @@ repos: - id: isort - repo: https://github.com/pre-commit/mirrors-mypy + rev: v0.790 hooks: - id: mypy diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 4e6400995c..77775690f2 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -48,12 +48,12 @@ def __init__( self.criterion = nn.BCELoss() - def _get_generator(self): + def _get_generator(self) -> nn.Module: generator = DCGANGenerator(self.hparams.latent_dim, self.hparams.feature_maps_gen, self.hparams.image_channels) generator.apply(self._weights_init) return generator - def _get_discriminator(self): + def _get_discriminator(self) -> nn.Module: discriminator = DCGANDiscriminator(self.hparams.feature_maps_disc, self.hparams.image_channels) discriminator.apply(self._weights_init) return discriminator From d6d1dca1ba73b55df50749b0129916c5891da368 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Wed, 16 Dec 2020 18:43:35 +0100 Subject: [PATCH 38/55] Update torchvision import --- pl_bolts/models/gans/dcgan/dcgan_module.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 77775690f2..af68c2965f 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -8,16 +8,14 @@ from pl_bolts.callbacks import LatentDimInterpolator, TensorboardGenerativeModelImageSampler from pl_bolts.models.gans.dcgan.components import DCGANDiscriminator, DCGANGenerator +from pl_bolts.utils import _TORCHVISION_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg -try: +if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib - from torchvision.datasets import CIFAR10, LSUN, MNIST -except ModuleNotFoundError: - warn_missing_pkg("torchvision") # pragma: no-cover - _TORCHVISION_AVAILABLE = False -else: - _TORCHVISION_AVAILABLE = True + from torchvision.datasets import CIFAR10, MNIST +else: # pragma: no-cover + warn_missing_pkg('torchvision') class DCGAN(pl.LightningModule): From f058a3f6335b950e60637168d48e86607b636d84 Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Thu, 17 Dec 2020 17:18:39 +0900 Subject: [PATCH 39/55] Import gym as optional package to build docs successfully (#458) * Import gym as optional package * Fix import * Apply isort --- pl_bolts/models/rl/common/gym_wrappers.py | 31 ++++++++++++++--------- pl_bolts/models/rl/dqn_model.py | 6 +++-- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/pl_bolts/models/rl/common/gym_wrappers.py b/pl_bolts/models/rl/common/gym_wrappers.py index 37f8ee5b50..cbf95bcbdc 100644 --- a/pl_bolts/models/rl/common/gym_wrappers.py +++ b/pl_bolts/models/rl/common/gym_wrappers.py @@ -4,21 +4,28 @@ """ import collections -import gym -import gym.spaces import numpy as np import torch -from pl_bolts.utils import _OPENCV_AVAILABLE +from pl_bolts.utils import _GYM_AVAILABLE, _OPENCV_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg +if _GYM_AVAILABLE: + import gym.spaces + from gym import ObservationWrapper, Wrapper + from gym import make as gym_make +else: # pragma: no-cover + warn_missing_pkg('gym') + Wrapper = object + ObservationWrapper = object + if _OPENCV_AVAILABLE: import cv2 else: warn_missing_pkg('cv2', pypi_name='opencv-python') # pragma: no-cover -class ToTensor(gym.Wrapper): +class ToTensor(Wrapper): """For environments where the user need to press FIRE for the game to start.""" def __init__(self, env=None): @@ -34,7 +41,7 @@ def reset(self): return torch.tensor(self.env.reset()) -class FireResetEnv(gym.Wrapper): +class FireResetEnv(Wrapper): """For environments where the user need to press FIRE for the game to start.""" def __init__(self, env=None): @@ -58,7 +65,7 @@ def reset(self): return obs -class MaxAndSkipEnv(gym.Wrapper): +class MaxAndSkipEnv(Wrapper): """Return only every `skip`-th frame""" def __init__(self, env=None, skip=4): @@ -88,7 +95,7 @@ def reset(self): return obs -class ProcessFrame84(gym.ObservationWrapper): +class ProcessFrame84(ObservationWrapper): """preprocessing images from env""" def __init__(self, env=None): @@ -121,7 +128,7 @@ def process(frame): return x_t.astype(np.uint8) -class ImageToPyTorch(gym.ObservationWrapper): +class ImageToPyTorch(ObservationWrapper): """converts image to pytorch format""" def __init__(self, env): @@ -142,7 +149,7 @@ def observation(observation): return np.moveaxis(observation, 2, 0) -class ScaledFloatFrame(gym.ObservationWrapper): +class ScaledFloatFrame(ObservationWrapper): """scales the pixels""" @staticmethod @@ -150,7 +157,7 @@ def observation(obs): return np.array(obs).astype(np.float32) / 255.0 -class BufferWrapper(gym.ObservationWrapper): +class BufferWrapper(ObservationWrapper): """"Wrapper for image stacking""" def __init__(self, env, n_steps, dtype=np.float32): @@ -176,7 +183,7 @@ def observation(self, observation): return self.buffer -class DataAugmentation(gym.ObservationWrapper): +class DataAugmentation(ObservationWrapper): """ Carries out basic data augmentation on the env observations - ToTensor @@ -197,7 +204,7 @@ def observation(self, obs): def make_environment(env_name): """Convert environment with wrappers""" - env = gym.make(env_name) + env = gym_make(env_name) env = MaxAndSkipEnv(env) env = FireResetEnv(env) env = ProcessFrame84(env) diff --git a/pl_bolts/models/rl/dqn_model.py b/pl_bolts/models/rl/dqn_model.py index 0635ead24c..6f5e958a36 100644 --- a/pl_bolts/models/rl/dqn_model.py +++ b/pl_bolts/models/rl/dqn_model.py @@ -18,15 +18,17 @@ from pl_bolts.datamodules.experience_source import Experience, ExperienceSourceDataset from pl_bolts.losses.rl import dqn_loss from pl_bolts.models.rl.common.agents import ValueAgent +from pl_bolts.models.rl.common.gym_wrappers import make_environment from pl_bolts.models.rl.common.memory import MultiStepBuffer from pl_bolts.models.rl.common.networks import CNN from pl_bolts.utils import _GYM_AVAILABLE from pl_bolts.utils.warnings import warn_missing_pkg if _GYM_AVAILABLE: - from pl_bolts.models.rl.common.gym_wrappers import gym, make_environment + from gym import Env else: warn_missing_pkg('gym') # pragma: no-cover + Env = object class DQN(pl.LightningModule): @@ -336,7 +338,7 @@ def test_dataloader(self) -> DataLoader: return self._dataloader() @staticmethod - def make_environment(env_name: str, seed: Optional[int] = None) -> gym.Env: + def make_environment(env_name: str, seed: Optional[int] = None) -> Env: """ Initialise gym environment From 141a7d3d9df01d4bea506b86d5e45b5b198dd5ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Laria?= Date: Tue, 1 Dec 2020 17:21:34 +0100 Subject: [PATCH 40/55] bugfix: batch_size parameter for DataModules remaining (#344) * bugfix: batch_size for DataModules remaining * Update sklearn datamodule tests * Fix default_transforms. Keep internal for every data module * fix typo on binary_mnist_datamodule thanks @akihironitta Co-authored-by: Akihiro Nitta Co-authored-by: Akihiro Nitta --- pl_bolts/datamodules/kitti_datamodule.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pl_bolts/datamodules/kitti_datamodule.py b/pl_bolts/datamodules/kitti_datamodule.py index 433e7fffed..526705693c 100644 --- a/pl_bolts/datamodules/kitti_datamodule.py +++ b/pl_bolts/datamodules/kitti_datamodule.py @@ -83,12 +83,6 @@ def __init__( self.pin_memory = pin_memory self.drop_last = drop_last - self.default_transforms = transforms.Compose([ - transforms.ToTensor(), - transforms.Normalize(mean=[0.35675976, 0.37380189, 0.3764753], - std=[0.32064945, 0.32098866, 0.32325324]) - ]) - # split into train, val, test kitti_dataset = KittiDataset(self.data_dir, transform=self._default_transforms()) From ce4db83262218a8548d89e8cfb1ca9bba916e19d Mon Sep 17 00:00:00 2001 From: Teddy Koker Date: Tue, 8 Dec 2020 16:49:54 -0500 Subject: [PATCH 41/55] Option to normalize latent interpolation images (#438) * add option to normalize latent interpolation images * linspace * update Co-authored-by: ananyahjha93 --- pl_bolts/callbacks/variational.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pl_bolts/callbacks/variational.py b/pl_bolts/callbacks/variational.py index 61aea5d86e..b65b15ac81 100644 --- a/pl_bolts/callbacks/variational.py +++ b/pl_bolts/callbacks/variational.py @@ -1,4 +1,5 @@ import math +import numpy as np import numpy as np import torch From ab89aa03fdcab22be0f0df5dcc0544f7134d0566 Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Wed, 16 Dec 2020 14:57:15 +0100 Subject: [PATCH 42/55] update min requirements - PL 1.1.1 (#448) * update min requirements * rc0 * imports * isort * flake8 * 1.1.1 * flake8 * docs --- pl_bolts/callbacks/variational.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pl_bolts/callbacks/variational.py b/pl_bolts/callbacks/variational.py index b65b15ac81..61aea5d86e 100644 --- a/pl_bolts/callbacks/variational.py +++ b/pl_bolts/callbacks/variational.py @@ -1,5 +1,4 @@ import math -import numpy as np import numpy as np import torch From 54a246c68a3fdad16d11284934216cb90609797b Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Fri, 18 Dec 2020 07:44:59 +0900 Subject: [PATCH 43/55] Apply suggestions from code review --- docs/source/gans.rst | 5 ++++- pl_bolts/models/gans/dcgan/components.py | 4 ++-- pl_bolts/models/gans/dcgan/dcgan_module.py | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/source/gans.rst b/docs/source/gans.rst index 6d3a285fab..d91c7b4048 100644 --- a/docs/source/gans.rst +++ b/docs/source/gans.rst @@ -66,4 +66,7 @@ Loss curves: .. image:: _images/gans/dcgan_gloss.png :width: 200 - :alt: DCGAN gen loss \ No newline at end of file + :alt: DCGAN gen loss + +.. autoclass:: pl_bolts.models.gans.DCGAN + :noindex: diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py index 83ae336631..4a73714a6b 100644 --- a/pl_bolts/models/gans/dcgan/components.py +++ b/pl_bolts/models/gans/dcgan/components.py @@ -4,7 +4,7 @@ class DCGANGenerator(nn.Module): - def __init__(self, latent_dim: int, feature_maps: int, image_channels: int): + def __init__(self, latent_dim: int, feature_maps: int, image_channels: int) -> None: """ Args: latent_dim: Dimension of the latent space @@ -49,7 +49,7 @@ def forward(self, noise: torch.Tensor) -> torch.Tensor: class DCGANDiscriminator(nn.Module): - def __init__(self, feature_maps: int, image_channels: int): + def __init__(self, feature_maps: int, image_channels: int) -> None: """ Args: feature_maps: Number of feature maps to use diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index af68c2965f..73ad9234f3 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -27,8 +27,8 @@ def __init__( image_channels: int = 1, latent_dim: int = 100, learning_rate: float = 0.0002, - **kwargs - ): + **kwargs: Any, + ) -> None: """ Args: beta1: Beta1 value for Adam optimizer From 843eac34bdc9f1ef20c2928cd8bdc1d06df806fd Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Fri, 18 Dec 2020 07:52:38 +0900 Subject: [PATCH 44/55] Apply suggestions from code review --- pl_bolts/models/gans/dcgan/dcgan_module.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 73ad9234f3..6e55edbab5 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -1,4 +1,5 @@ from argparse import ArgumentParser +from typing import Any import pytorch_lightning as pl import torch From e6420a6cc15e3479e70fd75c82d65d8ef7fe10b6 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Fri, 18 Dec 2020 08:52:05 +0100 Subject: [PATCH 45/55] Add docs --- pl_bolts/models/gans/dcgan/dcgan_module.py | 32 ++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 6e55edbab5..844867082d 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -20,6 +20,25 @@ class DCGAN(pl.LightningModule): + """ + DCGAN implementation. + + Example:: + + from pl_bolts.models.gan import DCGAN + + m = DCGAN() + Trainer(gpus=2).fit(m) + + Example CLI:: + + # mnist + python dcgan_module.py --gpus 1 + + # cifar10 + python dcgan_module.py --gpus 1 --dataset cifar10 --image_channels 3 + """ + def __init__( self, beta1: float = 0.5, @@ -74,6 +93,15 @@ def configure_optimizers(self): return [opt_disc, opt_gen], [] def forward(self, noise: torch.Tensor) -> torch.Tensor: + """ + Generates an image given input noise + + Example:: + + noise = torch.rand(batch_size, latent_dim) + gan = GAN.load_from_checkpoint(PATH) + img = gan(noise) + """ noise = noise.view(*noise.shape, 1, 1) return self.generator(noise) @@ -189,8 +217,8 @@ def cli_main(args=None): model = DCGAN(**vars(args)) callbacks = [ ModelCheckpoint(save_top_k=3, monitor="loss/gen_epoch"), - TensorboardGenerativeModelImageSampler(num_samples=100), - LatentDimInterpolator(interpolate_epoch_interval=1), + TensorboardGenerativeModelImageSampler(), + LatentDimInterpolator(interpolate_epoch_interval=5), ] trainer = pl.Trainer.from_argparse_args(args, callbacks=callbacks) trainer.fit(model, dataloader) From 6090b5ce9ff353b83ab6011e8d0b0d0a45ff6dfc Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Sun, 3 Jan 2021 11:39:01 +0100 Subject: [PATCH 46/55] Use LSUN instead of CIFAR10 --- pl_bolts/models/gans/dcgan/dcgan_module.py | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index 844867082d..a57b8557b5 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -14,9 +14,9 @@ if _TORCHVISION_AVAILABLE: from torchvision import transforms as transform_lib - from torchvision.datasets import CIFAR10, MNIST + from torchvision.datasets import LSUN, MNIST else: # pragma: no-cover - warn_missing_pkg('torchvision') + warn_missing_pkg("torchvision") class DCGAN(pl.LightningModule): @@ -169,7 +169,6 @@ def add_model_specific_args(parent_parser: ArgumentParser) -> ArgumentParser: parser.add_argument("--beta1", default=0.5, type=float) parser.add_argument("--feature_maps_gen", default=64, type=int) parser.add_argument("--feature_maps_disc", default=64, type=int) - parser.add_argument("--image_channels", default=1, type=int) parser.add_argument("--latent_dim", default=100, type=int) parser.add_argument("--learning_rate", default=0.0002, type=float) return parser @@ -179,23 +178,25 @@ def cli_main(args=None): pl.seed_everything(1234) parser = ArgumentParser() - parser.add_argument("--dataset", default="mnist", type=str, choices=["cifar10", "mnist"]) - parser.add_argument("--image_size", default=64, type=int) - parser.add_argument("--data_dir", default="./", type=str) parser.add_argument("--batch_size", default=64, type=int) - parser.add_argument("--num_workers", default=6, type=int) + parser.add_argument("--dataset", default="mnist", type=str, choices=["lsun", "mnist"]) + parser.add_argument("--data_dir", default="./", type=str) + parser.add_argument("--image_size", default=64, type=int) + parser.add_argument("--num_workers", default=8, type=int) script_args, _ = parser.parse_known_args(args) - if script_args.dataset == "cifar10": + if script_args.dataset == "lsun": transforms = transform_lib.Compose( [ transform_lib.Resize(script_args.image_size), + transform_lib.CenterCrop(script_args.image_size), transform_lib.ToTensor(), transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), ] ) - dataset = CIFAR10(root=script_args.data_dir, download=True, transform=transforms) + dataset = LSUN(root=script_args.data_dir, classes=["bedroom_train"], transform=transforms) + image_channels = 3 elif script_args.dataset == "mnist": transforms = transform_lib.Compose( [ @@ -205,16 +206,17 @@ def cli_main(args=None): ] ) dataset = MNIST(root=script_args.data_dir, download=True, transform=transforms) + image_channels = 1 dataloader = DataLoader( dataset, batch_size=script_args.batch_size, shuffle=True, num_workers=script_args.num_workers ) - parser = pl.Trainer.add_argparse_args(parser) parser = DCGAN.add_model_specific_args(parser) + parser = pl.Trainer.add_argparse_args(parser) args = parser.parse_args(args) - model = DCGAN(**vars(args)) + model = DCGAN(**vars(args), image_channels=image_channels) callbacks = [ ModelCheckpoint(save_top_k=3, monitor="loss/gen_epoch"), TensorboardGenerativeModelImageSampler(), From dc3b502fc7bd614a099505014c827c7a3a9c28ff Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Sun, 3 Jan 2021 12:14:23 +0100 Subject: [PATCH 47/55] Update TensorboardGenerativeModelImageSampler --- pl_bolts/callbacks/vision/image_generation.py | 10 ++++++---- pl_bolts/models/gans/dcgan/dcgan_module.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pl_bolts/callbacks/vision/image_generation.py b/pl_bolts/callbacks/vision/image_generation.py index ac71c0dfd0..c306774669 100644 --- a/pl_bolts/callbacks/vision/image_generation.py +++ b/pl_bolts/callbacks/vision/image_generation.py @@ -6,7 +6,7 @@ try: import torchvision except ModuleNotFoundError: - warn_missing_pkg('torchvision') # pragma: no-cover + warn_missing_pkg("torchvision") # pragma: no-cover class TensorboardGenerativeModelImageSampler(Callback): @@ -30,9 +30,11 @@ class TensorboardGenerativeModelImageSampler(Callback): trainer = Trainer(callbacks=[TensorboardGenerativeModelImageSampler()]) """ - def __init__(self, num_samples: int = 3): + def __init__(self, num_samples: int = 3, nrow: int = 1, normalize: bool = True): super().__init__() self.num_samples = num_samples + self.nrow = nrow + self.normalize = normalize def on_epoch_end(self, trainer, pl_module): dim = (self.num_samples, pl_module.hparams.latent_dim) @@ -48,6 +50,6 @@ def on_epoch_end(self, trainer, pl_module): img_dim = pl_module.img_dim images = images.view(self.num_samples, *img_dim) - grid = torchvision.utils.make_grid(images) - str_title = f'{pl_module.__class__.__name__}_images' + grid = torchvision.utils.make_grid(images, nrow=self.nrow, normalize=self.normalize) + str_title = f"{pl_module.__class__.__name__}_images" trainer.logger.experiment.add_image(str_title, grid, global_step=trainer.global_step) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index a57b8557b5..b1b57d4f8f 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -219,7 +219,7 @@ def cli_main(args=None): model = DCGAN(**vars(args), image_channels=image_channels) callbacks = [ ModelCheckpoint(save_top_k=3, monitor="loss/gen_epoch"), - TensorboardGenerativeModelImageSampler(), + TensorboardGenerativeModelImageSampler(num_samples=25, nrow=5), LatentDimInterpolator(interpolate_epoch_interval=5), ] trainer = pl.Trainer.from_argparse_args(args, callbacks=callbacks) From b61574be93bf701271b5476e42cb4984ed37b939 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Sun, 3 Jan 2021 18:37:02 +0100 Subject: [PATCH 48/55] Update docs with lsun --- docs/source/_images/gans/dcgan_lsun_dloss.png | Bin 0 -> 11761 bytes docs/source/_images/gans/dcgan_lsun_gloss.png | Bin 0 -> 14413 bytes .../_images/gans/dcgan_lsun_outputs.png | Bin 0 -> 202949 bytes ...{dcgan_dloss.png => dcgan_mnist_dloss.png} | Bin ...{dcgan_gloss.png => dcgan_mnist_gloss.png} | Bin ...an_outputs.png => dcgan_mnist_outputs.png} | Bin docs/source/gans.rst | 32 +++++++++++++----- 7 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 docs/source/_images/gans/dcgan_lsun_dloss.png create mode 100644 docs/source/_images/gans/dcgan_lsun_gloss.png create mode 100644 docs/source/_images/gans/dcgan_lsun_outputs.png rename docs/source/_images/gans/{dcgan_dloss.png => dcgan_mnist_dloss.png} (100%) rename docs/source/_images/gans/{dcgan_gloss.png => dcgan_mnist_gloss.png} (100%) rename docs/source/_images/gans/{dcgan_outputs.png => dcgan_mnist_outputs.png} (100%) diff --git a/docs/source/_images/gans/dcgan_lsun_dloss.png b/docs/source/_images/gans/dcgan_lsun_dloss.png new file mode 100644 index 0000000000000000000000000000000000000000..7288e1ec8d0b3c2846ffdf7088a288f472d2cd07 GIT binary patch literal 11761 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 Bd^!LC literal 0 HcmV?d00001 diff --git a/docs/source/_images/gans/dcgan_lsun_gloss.png b/docs/source/_images/gans/dcgan_lsun_gloss.png new file mode 100644 index 0000000000000000000000000000000000000000..4763535c5d35b37d91b3611885e54284f7254732 GIT binary patch literal 14413 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�I~=;bdf1VN)9blYb=}Z2 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%0AnN5oL%7x??>xR#Rvh6M3_l+!ZyNGc$k?Q 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 +#^|GC~AVK58cAW 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�D4(#{7u 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௽n}|UoP%>a3Km`O)AV9H9 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 LNkvXXu0mjfZ`_ -Example outputs: +Example MNIST outputs: - .. image:: _images/gans/dcgan_outputs.png + .. image:: _images/gans/dcgan_mnist_outputs.png :width: 400 - :alt: DCGAN generated samples + :alt: DCGAN generated MNIST samples -Loss curves: +Example LSUN bedroom outputs: + + .. image:: _images/gans/dcgan_lsun_outputs.png + :width: 400 + :alt: DCGAN generated LSUN bedroom samples + +MNIST Loss curves: + + .. image:: _images/gans/dcgan_mnist_dloss.png + :width: 200 + :alt: DCGAN MNIST disc loss + + .. image:: _images/gans/dcgan_mnist_gloss.png + :width: 200 + :alt: DCGAN MNIST gen loss + +LSUN Loss curves: - .. image:: _images/gans/dcgan_dloss.png + .. image:: _images/gans/dcgan_lsun_dloss.png :width: 200 - :alt: DCGAN disc loss + :alt: DCGAN LSUN disc loss - .. image:: _images/gans/dcgan_gloss.png + .. image:: _images/gans/dcgan_lsun_gloss.png :width: 200 - :alt: DCGAN gen loss + :alt: DCGAN LSUN gen loss .. autoclass:: pl_bolts.models.gans.DCGAN :noindex: From e3bd4954b68f9a7a435f393407ea06f814b56463 Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Sun, 3 Jan 2021 18:50:07 +0100 Subject: [PATCH 49/55] Update test --- tests/models/test_scripts.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/models/test_scripts.py b/tests/models/test_scripts.py index 9e6292bb8c..594c967e70 100644 --- a/tests/models/test_scripts.py +++ b/tests/models/test_scripts.py @@ -19,11 +19,8 @@ def test_cli_run_basic_gan(cli_args): cli_main() -@pytest.mark.parametrize('cli_args', [ - f'--dataset mnist --data_dir {DATASETS_PATH} --fast_dev_run --image_channels 1', - f'--dataset cifar10 --data_dir {DATASETS_PATH} --fast_dev_run --image_channels 3', -]) -def test_cli_run_dcgan_gan(cli_args): +@pytest.mark.parametrize('cli_args', [f'--dataset mnist --data_dir {DATASETS_PATH} --fast_dev_run']) +def test_cli_run_dcgan(cli_args): from pl_bolts.models.gans.dcgan.dcgan_module import cli_main with mock.patch("argparse._sys.argv", ["any.py"] + cli_args.strip().split()): From a9197aed1db0d72f38fac1a8cabe553c851527ae Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Sun, 3 Jan 2021 22:00:45 +0100 Subject: [PATCH 50/55] Revert TensorboardGenerativeModelImageSampler changes --- pl_bolts/callbacks/vision/image_generation.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pl_bolts/callbacks/vision/image_generation.py b/pl_bolts/callbacks/vision/image_generation.py index c306774669..3fac4d5902 100644 --- a/pl_bolts/callbacks/vision/image_generation.py +++ b/pl_bolts/callbacks/vision/image_generation.py @@ -30,11 +30,9 @@ class TensorboardGenerativeModelImageSampler(Callback): trainer = Trainer(callbacks=[TensorboardGenerativeModelImageSampler()]) """ - def __init__(self, num_samples: int = 3, nrow: int = 1, normalize: bool = True): + def __init__(self, num_samples: int = 3): super().__init__() self.num_samples = num_samples - self.nrow = nrow - self.normalize = normalize def on_epoch_end(self, trainer, pl_module): dim = (self.num_samples, pl_module.hparams.latent_dim) @@ -50,6 +48,6 @@ def on_epoch_end(self, trainer, pl_module): img_dim = pl_module.img_dim images = images.view(self.num_samples, *img_dim) - grid = torchvision.utils.make_grid(images, nrow=self.nrow, normalize=self.normalize) - str_title = f"{pl_module.__class__.__name__}_images" + grid = torchvision.utils.make_grid(images) + str_title = f'{pl_module.__class__.__name__}_images' trainer.logger.experiment.add_image(str_title, grid, global_step=trainer.global_step) From bd692a38ad1b37b8dc52131146b71b59ec21255a Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Mon, 4 Jan 2021 13:18:21 +0100 Subject: [PATCH 51/55] Remove ModelCheckpoint callback and nrow=5 arg --- pl_bolts/models/gans/dcgan/dcgan_module.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index b1b57d4f8f..d5ad98bb41 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -3,7 +3,6 @@ import pytorch_lightning as pl import torch -from pytorch_lightning.callbacks import ModelCheckpoint from torch import nn from torch.utils.data import DataLoader @@ -218,8 +217,7 @@ def cli_main(args=None): model = DCGAN(**vars(args), image_channels=image_channels) callbacks = [ - ModelCheckpoint(save_top_k=3, monitor="loss/gen_epoch"), - TensorboardGenerativeModelImageSampler(num_samples=25, nrow=5), + TensorboardGenerativeModelImageSampler(num_samples=5), LatentDimInterpolator(interpolate_epoch_interval=5), ] trainer = pl.Trainer.from_argparse_args(args, callbacks=callbacks) From cecb452b1058874649e41b83a6ae29c31e17f354 Mon Sep 17 00:00:00 2001 From: Akihiro Nitta Date: Thu, 7 Jan 2021 19:43:53 +0900 Subject: [PATCH 52/55] Apply suggestions from code review --- tests/models/test_scripts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/models/test_scripts.py b/tests/models/test_scripts.py index 594c967e70..46c3a22a58 100644 --- a/tests/models/test_scripts.py +++ b/tests/models/test_scripts.py @@ -19,7 +19,7 @@ def test_cli_run_basic_gan(cli_args): cli_main() -@pytest.mark.parametrize('cli_args', [f'--dataset mnist --data_dir {DATASETS_PATH} --fast_dev_run']) +@pytest.mark.parametrize('cli_args', [f'--dataset mnist --data_dir {DATASETS_PATH} --fast_dev_run 1']) def test_cli_run_dcgan(cli_args): from pl_bolts.models.gans.dcgan.dcgan_module import cli_main From 0a238c10ab3c5836dd017ec4d4e536fd69eda44d Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Fri, 8 Jan 2021 15:29:42 +0100 Subject: [PATCH 53/55] Fix test_dcgan --- tests/models/test_gans.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/models/test_gans.py b/tests/models/test_gans.py index aeb66f1134..4a855caa93 100644 --- a/tests/models/test_gans.py +++ b/tests/models/test_gans.py @@ -32,5 +32,4 @@ def test_dcgan(tmpdir, datadir, dm_cls): model = DCGAN(image_channels=dm.dims[0]) trainer = pl.Trainer(fast_dev_run=True, default_root_dir=tmpdir) trainer.fit(model, dm) - trainer.test(datamodule=dm) trainer.test(datamodule=dm, ckpt_path=None) From 01fea8a6b31570dfd459dcd2edba87964441ddab Mon Sep 17 00:00:00 2001 From: Christoph Clement Date: Sun, 17 Jan 2021 14:02:01 +0100 Subject: [PATCH 54/55] Apply yapf --- pl_bolts/models/gans/dcgan/components.py | 2 ++ pl_bolts/models/gans/dcgan/dcgan_module.py | 26 +++++++++------------- tests/models/test_gans.py | 3 ++- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/pl_bolts/models/gans/dcgan/components.py b/pl_bolts/models/gans/dcgan/components.py index 4a73714a6b..c2432f3580 100644 --- a/pl_bolts/models/gans/dcgan/components.py +++ b/pl_bolts/models/gans/dcgan/components.py @@ -4,6 +4,7 @@ class DCGANGenerator(nn.Module): + def __init__(self, latent_dim: int, feature_maps: int, image_channels: int) -> None: """ Args: @@ -49,6 +50,7 @@ def forward(self, noise: torch.Tensor) -> torch.Tensor: class DCGANDiscriminator(nn.Module): + def __init__(self, feature_maps: int, image_channels: int) -> None: """ Args: diff --git a/pl_bolts/models/gans/dcgan/dcgan_module.py b/pl_bolts/models/gans/dcgan/dcgan_module.py index d5ad98bb41..b99f7f4f99 100644 --- a/pl_bolts/models/gans/dcgan/dcgan_module.py +++ b/pl_bolts/models/gans/dcgan/dcgan_module.py @@ -186,24 +186,20 @@ def cli_main(args=None): script_args, _ = parser.parse_known_args(args) if script_args.dataset == "lsun": - transforms = transform_lib.Compose( - [ - transform_lib.Resize(script_args.image_size), - transform_lib.CenterCrop(script_args.image_size), - transform_lib.ToTensor(), - transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), - ] - ) + transforms = transform_lib.Compose([ + transform_lib.Resize(script_args.image_size), + transform_lib.CenterCrop(script_args.image_size), + transform_lib.ToTensor(), + transform_lib.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), + ]) dataset = LSUN(root=script_args.data_dir, classes=["bedroom_train"], transform=transforms) image_channels = 3 elif script_args.dataset == "mnist": - transforms = transform_lib.Compose( - [ - transform_lib.Resize(script_args.image_size), - transform_lib.ToTensor(), - transform_lib.Normalize((0.5,), (0.5,)), - ] - ) + transforms = transform_lib.Compose([ + transform_lib.Resize(script_args.image_size), + transform_lib.ToTensor(), + transform_lib.Normalize((0.5, ), (0.5, )), + ]) dataset = MNIST(root=script_args.data_dir, download=True, transform=transforms) image_channels = 1 diff --git a/tests/models/test_gans.py b/tests/models/test_gans.py index a908aba3a8..d54dbc728b 100644 --- a/tests/models/test_gans.py +++ b/tests/models/test_gans.py @@ -22,7 +22,8 @@ def test_gan(tmpdir, datadir, dm_cls): @pytest.mark.parametrize( - "dm_cls", [pytest.param(MNISTDataModule, id="mnist"), pytest.param(CIFAR10DataModule, id="cifar10")] + "dm_cls", [pytest.param(MNISTDataModule, id="mnist"), + pytest.param(CIFAR10DataModule, id="cifar10")] ) def test_dcgan(tmpdir, datadir, dm_cls): seed_everything() From e2f6f46615d253f2372905eb9d53e56d91eaaf33 Mon Sep 17 00:00:00 2001 From: Jirka Borovec Date: Mon, 18 Jan 2021 10:11:04 +0100 Subject: [PATCH 55/55] Apply suggestions from code review --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 991a777855..af5d8c14b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#348](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/348), [#323](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/323)) - Added data monitor callbacks `ModuleDataMonitor` and `TrainingDataMonitor` ([#285](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/285)) -- Added DCGAN ([#403](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/403)) +- Added DCGAN module ([#403](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/403)) - Added `VisionDataModule` as parent class for `BinaryMNISTDataModule`, `CIFAR10DataModule`, `FashionMNISTDataModule`, and `MNISTDataModule` ([#400](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/400)) - Added GIoU loss ([#347](https://github.com/PyTorchLightning/pytorch-lightning-bolts/pull/347))